1 /* 2 * Copyright 2002 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 * $Id: kadm_rpc_svc.c,v 1.16 2000/02/19 02:05:52 tlyu Exp $ 30 * 31 */ 32 33 #if !defined(lint) && !defined(__CODECENTER__) 34 static char *rcsid = "$Header: /cvs/krbdev/krb5/src/kadmin/server/kadm_rpc_svc.c,v 1.16 2000/02/19 02:05:52 tlyu Exp $"; 35 #endif 36 37 #include <stdio.h> 38 #include <rpc/rpc.h> /* SUNWresync 121 XXX */ 39 #include <syslog.h> 40 #include <memory.h> 41 #include <rpc/rpcsec_gss.h> 42 #include <kadm5/kadm_rpc.h> 43 #include <krb5.h> 44 #include <kadm5/admin.h> 45 #include <libintl.h> 46 47 /* 48 * Function: kadm_1 49 * 50 * Purpose: RPC proccessing procedure. 51 * originally generated from rpcgen 52 * 53 * Arguments: 54 * rqstp (input) rpc request structure 55 * transp (input) rpc transport structure 56 * (input/output) 57 * <return value> 58 * 59 * Requires: 60 * Effects: 61 * Modifies: 62 */ 63 64 void 65 kadm_1(rqstp, transp) 66 struct svc_req *rqstp; 67 register SVCXPRT *transp; 68 { 69 union { 70 cprinc_arg create_principal_1_arg; 71 dprinc_arg delete_principal_1_arg; 72 mprinc_arg modify_principal_1_arg; 73 rprinc_arg rename_principal_1_arg; 74 gprinc_arg get_principal_1_arg; 75 chpass_arg chpass_principal_1_arg; 76 chrand_arg chrand_principal_1_arg; 77 cpol_arg create_policy_1_arg; 78 dpol_arg delete_policy_1_arg; 79 mpol_arg modify_policy_1_arg; 80 gpol_arg get_policy_1_arg; 81 setkey_arg setkey_principal_1_arg; 82 setv4key_arg setv4key_principal_1_arg; 83 cprinc3_arg create_principal3_1_arg; 84 chpass3_arg chpass_principal3_1_arg; 85 chrand3_arg chrand_principal3_1_arg; 86 setkey3_arg setkey_principal3_1_arg; 87 } argument; 88 char *result; 89 90 bool_t (*xdr_argument)(), (*xdr_result)(); 91 char *(*local)(); 92 93 if (rqstp->rq_cred.oa_flavor != RPCSEC_GSS) { 94 krb5_klog_syslog(LOG_ERR, 95 gettext("Authentication attempt failed: invalid " 96 "RPC authentication flavor %d"), 97 rqstp->rq_cred.oa_flavor); 98 svcerr_weakauth(transp); 99 return; 100 } 101 102 switch (rqstp->rq_proc) { 103 case NULLPROC: 104 (void) svc_sendreply(transp, xdr_void, (char *)NULL); 105 return; 106 107 case CREATE_PRINCIPAL: 108 xdr_argument = xdr_cprinc_arg; 109 xdr_result = xdr_generic_ret; 110 local = (char *(*)()) create_principal_1; 111 break; 112 113 case DELETE_PRINCIPAL: 114 xdr_argument = xdr_dprinc_arg; 115 xdr_result = xdr_generic_ret; 116 local = (char *(*)()) delete_principal_1; 117 break; 118 119 case MODIFY_PRINCIPAL: 120 xdr_argument = xdr_mprinc_arg; 121 xdr_result = xdr_generic_ret; 122 local = (char *(*)()) modify_principal_1; 123 break; 124 125 case RENAME_PRINCIPAL: 126 xdr_argument = xdr_rprinc_arg; 127 xdr_result = xdr_generic_ret; 128 local = (char *(*)()) rename_principal_1; 129 break; 130 131 case GET_PRINCIPAL: 132 xdr_argument = xdr_gprinc_arg; 133 xdr_result = xdr_gprinc_ret; 134 local = (char *(*)()) get_principal_1; 135 break; 136 137 case GET_PRINCS: 138 xdr_argument = xdr_gprincs_arg; 139 xdr_result = xdr_gprincs_ret; 140 local = (char *(*)()) get_princs_1; 141 break; 142 143 case CHPASS_PRINCIPAL: 144 xdr_argument = xdr_chpass_arg; 145 xdr_result = xdr_generic_ret; 146 local = (char *(*)()) chpass_principal_1; 147 break; 148 149 #ifdef SUNWOFF 150 case SETV4KEY_PRINCIPAL: 151 xdr_argument = xdr_setv4key_arg; 152 xdr_result = xdr_generic_ret; 153 local = (char *(*)()) setv4key_principal_1; 154 break; 155 #endif 156 157 case SETKEY_PRINCIPAL: 158 xdr_argument = xdr_setkey_arg; 159 xdr_result = xdr_generic_ret; 160 local = (char *(*)()) setkey_principal_1; 161 break; 162 163 case CHRAND_PRINCIPAL: 164 xdr_argument = xdr_chrand_arg; 165 xdr_result = xdr_chrand_ret; 166 local = (char *(*)()) chrand_principal_1; 167 break; 168 169 case CREATE_POLICY: 170 xdr_argument = xdr_cpol_arg; 171 xdr_result = xdr_generic_ret; 172 local = (char *(*)()) create_policy_1; 173 break; 174 175 case DELETE_POLICY: 176 xdr_argument = xdr_dpol_arg; 177 xdr_result = xdr_generic_ret; 178 local = (char *(*)()) delete_policy_1; 179 break; 180 181 case MODIFY_POLICY: 182 xdr_argument = xdr_mpol_arg; 183 xdr_result = xdr_generic_ret; 184 local = (char *(*)()) modify_policy_1; 185 break; 186 187 case GET_POLICY: 188 xdr_argument = xdr_gpol_arg; 189 xdr_result = xdr_gpol_ret; 190 local = (char *(*)()) get_policy_1; 191 break; 192 193 case GET_POLS: 194 xdr_argument = xdr_gpols_arg; 195 xdr_result = xdr_gpols_ret; 196 local = (char *(*)()) get_pols_1; 197 break; 198 199 case GET_PRIVS: 200 xdr_argument = xdr_u_int; 201 xdr_result = xdr_getprivs_ret; 202 local = (char *(*)()) get_privs_1; 203 break; 204 205 case INIT: 206 xdr_argument = xdr_u_int; 207 xdr_result = xdr_generic_ret; 208 local = (char *(*)()) init_1; 209 break; 210 211 case CREATE_PRINCIPAL3: 212 xdr_argument = xdr_cprinc3_arg; 213 xdr_result = xdr_generic_ret; 214 local = (char *(*)()) create_principal3_1; 215 break; 216 217 case CHPASS_PRINCIPAL3: 218 xdr_argument = xdr_chpass3_arg; 219 xdr_result = xdr_generic_ret; 220 local = (char *(*)()) chpass_principal3_1; 221 break; 222 223 case CHRAND_PRINCIPAL3: 224 xdr_argument = xdr_chrand3_arg; 225 xdr_result = xdr_chrand_ret; 226 local = (char *(*)()) chrand_principal3_1; 227 break; 228 229 case SETKEY_PRINCIPAL3: 230 xdr_argument = xdr_setkey3_arg; 231 xdr_result = xdr_generic_ret; 232 local = (char *(*)()) setkey_principal3_1; 233 break; 234 235 default: 236 krb5_klog_syslog(LOG_ERR, 237 gettext("Invalid KADM5 procedure number: %d"), 238 rqstp->rq_proc); 239 svcerr_noproc(transp); 240 return; 241 } 242 memset((char *)&argument, 0, sizeof(argument)); 243 if (!svc_getargs(transp, xdr_argument, (char *) &argument)) { 244 svcerr_decode(transp); 245 return; 246 } 247 result = (*local)(&argument, rqstp); 248 if (result != NULL && 249 !svc_sendreply(transp, xdr_result, (char *) result)) { 250 krb5_klog_syslog(LOG_ERR, 251 gettext("WARNING! Unable to send function results, " 252 "continuing.")); 253 svcerr_systemerr(transp); 254 } 255 if (!svc_freeargs(transp, xdr_argument, (char *) &argument)) { 256 krb5_klog_syslog(LOG_ERR, 257 gettext("WARNING! Unable to free arguments, " 258 "continuing.")); 259 } 260 } 261