1 /* 2 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 7 /* 8 * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 9 * 10 * Openvision retains the copyright to derivative works of 11 * this source code. Do *NOT* create a derivative of this 12 * source code before consulting with your legal department. 13 * Do *NOT* integrate *ANY* of this source code into another 14 * product before consulting with your legal department. 15 * 16 * For further information, read the top-level Openvision 17 * copyright which is contained in the top-level MIT Kerberos 18 * copyright. 19 * 20 * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 21 * 22 */ 23 24 25 /* 26 * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved 27 * 28 * $Header$ 29 */ 30 31 #if !defined(lint) && !defined(__CODECENTER__) 32 static char *rcsid = "$Header$"; 33 #endif 34 35 #include <rpc/rpc.h> /* SUNWresync121 XXX */ 36 #include <kadm5/admin.h> 37 #include <kadm5/kadm_rpc.h> 38 #include "client_internal.h" 39 #include <stdlib.h> 40 #include <string.h> 41 #include <errno.h> 42 43 kadm5_ret_t 44 kadm5_create_policy(void *server_handle, 45 kadm5_policy_ent_t policy, long mask) 46 { 47 cpol_arg arg; 48 generic_ret *r; 49 kadm5_server_handle_t handle = server_handle; 50 51 CHECK_HANDLE(server_handle); 52 53 if(policy == (kadm5_policy_ent_t) NULL) 54 return EINVAL; 55 56 arg.mask = mask; 57 arg.api_version = handle->api_version; 58 memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec)); 59 r = create_policy_2(&arg, handle->clnt); 60 if(r == NULL) 61 return KADM5_RPC_ERROR; 62 63 return r->code; 64 } 65 66 kadm5_ret_t 67 kadm5_delete_policy(void *server_handle, char *name) 68 { 69 dpol_arg arg; 70 generic_ret *r; 71 kadm5_server_handle_t handle = server_handle; 72 73 CHECK_HANDLE(server_handle); 74 75 if(name == NULL) 76 return EINVAL; 77 78 arg.name = name; 79 arg.api_version = handle->api_version; 80 81 r = delete_policy_2(&arg, handle->clnt); 82 if(r == NULL) 83 return KADM5_RPC_ERROR; 84 85 return r->code; 86 } 87 88 kadm5_ret_t 89 kadm5_modify_policy(void *server_handle, 90 kadm5_policy_ent_t policy, long mask) 91 { 92 mpol_arg arg; 93 generic_ret *r; 94 kadm5_server_handle_t handle = server_handle; 95 96 CHECK_HANDLE(server_handle); 97 98 if(policy == (kadm5_policy_ent_t) NULL) 99 return EINVAL; 100 101 arg.mask = mask; 102 arg.api_version = handle->api_version; 103 104 memcpy(&arg.rec, policy, sizeof(kadm5_policy_ent_rec)); 105 r = modify_policy_2(&arg, handle->clnt); 106 if(r == NULL) 107 return KADM5_RPC_ERROR; 108 109 return r->code; 110 } 111 112 kadm5_ret_t 113 kadm5_get_policy(void *server_handle, char *name, kadm5_policy_ent_t ent) 114 { 115 gpol_arg arg; 116 gpol_ret *r; 117 kadm5_server_handle_t handle = server_handle; 118 119 CHECK_HANDLE(server_handle); 120 121 arg.name = name; 122 arg.api_version = handle->api_version; 123 124 if(name == NULL) 125 return EINVAL; 126 127 r = get_policy_2(&arg, handle->clnt); 128 if(r == NULL) 129 return KADM5_RPC_ERROR; 130 if (handle->api_version == KADM5_API_VERSION_1) { 131 kadm5_policy_ent_t *entp; 132 133 entp = (kadm5_policy_ent_t *) ent; 134 if(r->code == 0) { 135 if (!(*entp = (kadm5_policy_ent_t) 136 malloc(sizeof(kadm5_policy_ent_rec)))) 137 return ENOMEM; 138 memcpy(*entp, &r->rec, sizeof(**entp)); 139 } else { 140 *entp = NULL; 141 } 142 } else { 143 if (r->code == 0) 144 memcpy(ent, &r->rec, sizeof(r->rec)); 145 } 146 147 return r->code; 148 } 149 150 kadm5_ret_t 151 kadm5_get_policies(void *server_handle, 152 char *exp, char ***pols, int *count) 153 { 154 gpols_arg arg; 155 gpols_ret *r; 156 kadm5_server_handle_t handle = server_handle; 157 158 CHECK_HANDLE(server_handle); 159 160 if(pols == NULL || count == NULL) 161 return EINVAL; 162 arg.exp = exp; 163 arg.api_version = handle->api_version; 164 r = get_pols_2(&arg, handle->clnt); 165 if(r == NULL) 166 return KADM5_RPC_ERROR; 167 if(r->code == 0) { 168 *count = r->count; 169 *pols = r->pols; 170 } else { 171 *count = 0; 172 *pols = NULL; 173 } 174 175 return r->code; 176 } 177