1 /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ 2 /* 3 * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved 4 * 5 * $Header$ 6 */ 7 8 #include <gssrpc/rpc.h> 9 #include <kadm5/admin.h> 10 #include <kadm5/kadm_rpc.h> 11 #include "client_internal.h" 12 #include <stdlib.h> 13 #include <string.h> 14 #include <errno.h> 15 16 kadm5_ret_t 17 kadm5_create_policy(void *server_handle, 18 kadm5_policy_ent_t policy, long mask) 19 { 20 cpol_arg arg; 21 generic_ret r = { 0, 0 }; 22 kadm5_server_handle_t handle = server_handle; 23 24 CHECK_HANDLE(server_handle); 25 26 if(policy == (kadm5_policy_ent_t) NULL) 27 return EINVAL; 28 29 arg.mask = mask; 30 arg.api_version = handle->api_version; 31 memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec)); 32 if (create_policy_2(&arg, &r, handle->clnt)) 33 return KADM5_RPC_ERROR; 34 return r.code; 35 } 36 37 kadm5_ret_t 38 kadm5_delete_policy(void *server_handle, char *name) 39 { 40 dpol_arg arg; 41 generic_ret r = { 0, 0 }; 42 kadm5_server_handle_t handle = server_handle; 43 44 CHECK_HANDLE(server_handle); 45 46 if(name == NULL) 47 return EINVAL; 48 49 arg.name = name; 50 arg.api_version = handle->api_version; 51 52 if (delete_policy_2(&arg, &r, handle->clnt)) 53 return KADM5_RPC_ERROR; 54 return r.code; 55 } 56 57 kadm5_ret_t 58 kadm5_modify_policy(void *server_handle, 59 kadm5_policy_ent_t policy, long mask) 60 { 61 mpol_arg arg; 62 generic_ret r = { 0, 0 }; 63 kadm5_server_handle_t handle = server_handle; 64 65 CHECK_HANDLE(server_handle); 66 67 if(policy == (kadm5_policy_ent_t) NULL) 68 return EINVAL; 69 70 arg.mask = mask; 71 arg.api_version = handle->api_version; 72 73 memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec)); 74 if (modify_policy_2(&arg, &r, handle->clnt)) 75 return KADM5_RPC_ERROR; 76 return r.code; 77 } 78 79 kadm5_ret_t 80 kadm5_get_policy(void *server_handle, char *name, kadm5_policy_ent_t ent) 81 { 82 gpol_arg arg; 83 gpol_ret r; 84 kadm5_server_handle_t handle = server_handle; 85 86 memset(ent, 0, sizeof(*ent)); 87 88 CHECK_HANDLE(server_handle); 89 90 arg.name = name; 91 arg.api_version = handle->api_version; 92 93 if(name == NULL) 94 return EINVAL; 95 96 memset(&r, 0, sizeof(gpol_ret)); 97 if (get_policy_2(&arg, &r, handle->clnt)) 98 return KADM5_RPC_ERROR; 99 if (r.code == 0) 100 memcpy(ent, &r.rec, sizeof(r.rec)); 101 return r.code; 102 } 103 104 kadm5_ret_t 105 kadm5_get_policies(void *server_handle, 106 char *exp, char ***pols, int *count) 107 { 108 gpols_arg arg; 109 gpols_ret r; 110 kadm5_server_handle_t handle = server_handle; 111 112 CHECK_HANDLE(server_handle); 113 114 if(pols == NULL || count == NULL) 115 return EINVAL; 116 arg.exp = exp; 117 arg.api_version = handle->api_version; 118 memset(&r, 0, sizeof(gpols_ret)); 119 if (get_pols_2(&arg, &r, handle->clnt)) 120 return KADM5_RPC_ERROR; 121 if (r.code == 0) { 122 *count = r.count; 123 *pols = r.pols; 124 } else { 125 *count = 0; 126 *pols = NULL; 127 } 128 129 return r.code; 130 } 131