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