Path: blob/main/crypto/krb5/src/lib/kadm5/clnt/clnt_policy.c
39566 views
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */1/*2* Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved3*4* $Header$5*/67#include <gssrpc/rpc.h>8#include <kadm5/admin.h>9#include <kadm5/kadm_rpc.h>10#include "client_internal.h"11#include <stdlib.h>12#include <string.h>13#include <errno.h>1415kadm5_ret_t16kadm5_create_policy(void *server_handle,17kadm5_policy_ent_t policy, long mask)18{19cpol_arg arg;20generic_ret r = { 0, 0 };21kadm5_server_handle_t handle = server_handle;2223CHECK_HANDLE(server_handle);2425if(policy == (kadm5_policy_ent_t) NULL)26return EINVAL;2728arg.mask = mask;29arg.api_version = handle->api_version;30memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec));31if (create_policy_2(&arg, &r, handle->clnt))32return KADM5_RPC_ERROR;33return r.code;34}3536kadm5_ret_t37kadm5_delete_policy(void *server_handle, char *name)38{39dpol_arg arg;40generic_ret r = { 0, 0 };41kadm5_server_handle_t handle = server_handle;4243CHECK_HANDLE(server_handle);4445if(name == NULL)46return EINVAL;4748arg.name = name;49arg.api_version = handle->api_version;5051if (delete_policy_2(&arg, &r, handle->clnt))52return KADM5_RPC_ERROR;53return r.code;54}5556kadm5_ret_t57kadm5_modify_policy(void *server_handle,58kadm5_policy_ent_t policy, long mask)59{60mpol_arg arg;61generic_ret r = { 0, 0 };62kadm5_server_handle_t handle = server_handle;6364CHECK_HANDLE(server_handle);6566if(policy == (kadm5_policy_ent_t) NULL)67return EINVAL;6869arg.mask = mask;70arg.api_version = handle->api_version;7172memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec));73if (modify_policy_2(&arg, &r, handle->clnt))74return KADM5_RPC_ERROR;75return r.code;76}7778kadm5_ret_t79kadm5_get_policy(void *server_handle, char *name, kadm5_policy_ent_t ent)80{81gpol_arg arg;82gpol_ret r;83kadm5_server_handle_t handle = server_handle;8485memset(ent, 0, sizeof(*ent));8687CHECK_HANDLE(server_handle);8889arg.name = name;90arg.api_version = handle->api_version;9192if(name == NULL)93return EINVAL;9495memset(&r, 0, sizeof(gpol_ret));96if (get_policy_2(&arg, &r, handle->clnt))97return KADM5_RPC_ERROR;98if (r.code == 0)99memcpy(ent, &r.rec, sizeof(r.rec));100return r.code;101}102103kadm5_ret_t104kadm5_get_policies(void *server_handle,105char *exp, char ***pols, int *count)106{107gpols_arg arg;108gpols_ret r;109kadm5_server_handle_t handle = server_handle;110111CHECK_HANDLE(server_handle);112113if(pols == NULL || count == NULL)114return EINVAL;115arg.exp = exp;116arg.api_version = handle->api_version;117memset(&r, 0, sizeof(gpols_ret));118if (get_pols_2(&arg, &r, handle->clnt))119return KADM5_RPC_ERROR;120if (r.code == 0) {121*count = r.count;122*pols = r.pols;123} else {124*count = 0;125*pols = NULL;126}127128return r.code;129}130131132