-: 0:Source:client_principal.c -: 0:Graph:/var/tsitkova/Sources/v10/trunk/src/lib/kadm5/clnt/client_principal.so.gcno -: 0:Data:/var/tsitkova/Sources/v10/trunk/src/lib/kadm5/clnt/client_principal.so.gcda -: 0:Runs:7 -: 0:Programs:1 -: 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 -: 9:#include -: 10:#include -: 11:#ifdef HAVE_MEMORY_H -: 12:#include -: 13:#endif -: 14:#include -: 15:#include -: 16:#include "client_internal.h" -: 17: -: 18:#ifdef DEBUG -: 19:#define eret() do { clnt_perror(handle->clnt, "null ret"); return KADM5_RPC_ERROR; } while (0) -: 20:#else -: 21:#define eret() do { return KADM5_RPC_ERROR; } while (0) -: 22:#endif -: 23: -: 24:kadm5_ret_t #####: 25:kadm5_create_principal(void *server_handle, -: 26: kadm5_principal_ent_t princ, long mask, -: 27: char *pw) -: 28:{ -: 29: generic_ret *r; -: 30: cprinc_arg arg; #####: 31: kadm5_server_handle_t handle = server_handle; -: 32: #####: 33: CHECK_HANDLE(server_handle); -: 34: #####: 35: memset(&arg, 0, sizeof(arg)); #####: 36: arg.mask = mask; #####: 37: arg.passwd = pw; #####: 38: arg.api_version = handle->api_version; -: 39: #####: 40: if(princ == NULL) #####: 41: return EINVAL; -: 42: #####: 43: memcpy(&arg.rec, princ, sizeof(kadm5_principal_ent_rec)); #####: 44: arg.rec.mod_name = NULL; -: 45: #####: 46: if(!(mask & KADM5_POLICY)) #####: 47: arg.rec.policy = NULL; #####: 48: if (! (mask & KADM5_KEY_DATA)) { #####: 49: arg.rec.n_key_data = 0; #####: 50: arg.rec.key_data = NULL; -: 51: } #####: 52: if (! (mask & KADM5_TL_DATA)) { #####: 53: arg.rec.n_tl_data = 0; #####: 54: arg.rec.tl_data = NULL; -: 55: } -: 56: #####: 57: r = create_principal_2(&arg, handle->clnt); -: 58: #####: 59: if(r == NULL) #####: 60: eret(); #####: 61: return r->code; -: 62:} -: 63: -: 64:kadm5_ret_t #####: 65:kadm5_create_principal_3(void *server_handle, -: 66: kadm5_principal_ent_t princ, long mask, -: 67: int n_ks_tuple, -: 68: krb5_key_salt_tuple *ks_tuple, -: 69: char *pw) -: 70:{ -: 71: generic_ret *r; -: 72: cprinc3_arg arg; #####: 73: kadm5_server_handle_t handle = server_handle; -: 74: #####: 75: CHECK_HANDLE(server_handle); -: 76: #####: 77: memset(&arg, 0, sizeof(arg)); #####: 78: arg.mask = mask; #####: 79: arg.passwd = pw; #####: 80: arg.api_version = handle->api_version; #####: 81: arg.n_ks_tuple = n_ks_tuple; #####: 82: arg.ks_tuple = ks_tuple; -: 83: #####: 84: if(princ == NULL) #####: 85: return EINVAL; -: 86: #####: 87: memcpy(&arg.rec, princ, sizeof(kadm5_principal_ent_rec)); #####: 88: arg.rec.mod_name = NULL; -: 89: #####: 90: if(!(mask & KADM5_POLICY)) #####: 91: arg.rec.policy = NULL; #####: 92: if (! (mask & KADM5_KEY_DATA)) { #####: 93: arg.rec.n_key_data = 0; #####: 94: arg.rec.key_data = NULL; -: 95: } #####: 96: if (! (mask & KADM5_TL_DATA)) { #####: 97: arg.rec.n_tl_data = 0; #####: 98: arg.rec.tl_data = NULL; -: 99: } -: 100: #####: 101: r = create_principal3_2(&arg, handle->clnt); -: 102: #####: 103: if(r == NULL) #####: 104: eret(); #####: 105: return r->code; -: 106:} -: 107: -: 108:kadm5_ret_t #####: 109:kadm5_delete_principal(void *server_handle, krb5_principal principal) -: 110:{ -: 111: dprinc_arg arg; -: 112: generic_ret *r; #####: 113: kadm5_server_handle_t handle = server_handle; -: 114: #####: 115: CHECK_HANDLE(server_handle); -: 116: #####: 117: if(principal == NULL) #####: 118: return EINVAL; #####: 119: arg.princ = principal; #####: 120: arg.api_version = handle->api_version; #####: 121: r = delete_principal_2(&arg, handle->clnt); #####: 122: if(r == NULL) #####: 123: eret(); #####: 124: return r->code; -: 125:} -: 126: -: 127:kadm5_ret_t #####: 128:kadm5_modify_principal(void *server_handle, -: 129: kadm5_principal_ent_t princ, long mask) -: 130:{ -: 131: mprinc_arg arg; -: 132: generic_ret *r; #####: 133: kadm5_server_handle_t handle = server_handle; -: 134: #####: 135: CHECK_HANDLE(server_handle); -: 136: #####: 137: memset(&arg, 0, sizeof(arg)); #####: 138: arg.mask = mask; #####: 139: arg.api_version = handle->api_version; #####: 140: if(princ == NULL) #####: 141: return EINVAL; #####: 142: memcpy(&arg.rec, princ, sizeof(kadm5_principal_ent_rec)); #####: 143: if(!(mask & KADM5_POLICY)) #####: 144: arg.rec.policy = NULL; #####: 145: if (! (mask & KADM5_KEY_DATA)) { #####: 146: arg.rec.n_key_data = 0; #####: 147: arg.rec.key_data = NULL; -: 148: } #####: 149: if (! (mask & KADM5_TL_DATA)) { #####: 150: arg.rec.n_tl_data = 0; #####: 151: arg.rec.tl_data = NULL; -: 152: } -: 153: #####: 154: arg.rec.mod_name = NULL; -: 155: #####: 156: r = modify_principal_2(&arg, handle->clnt); -: 157: #####: 158: if(r == NULL) #####: 159: eret(); #####: 160: return r->code; -: 161:} -: 162: -: 163:kadm5_ret_t #####: 164:kadm5_get_principal(void *server_handle, -: 165: krb5_principal princ, kadm5_principal_ent_t ent, -: 166: long mask) -: 167:{ -: 168: gprinc_arg arg; -: 169: gprinc_ret *r; #####: 170: kadm5_server_handle_t handle = server_handle; -: 171: #####: 172: CHECK_HANDLE(server_handle); -: 173: #####: 174: if(princ == NULL) #####: 175: return EINVAL; #####: 176: arg.princ = princ; #####: 177: arg.mask = mask; #####: 178: arg.api_version = handle->api_version; #####: 179: r = get_principal_2(&arg, handle->clnt); #####: 180: if(r == NULL) #####: 181: eret(); #####: 182: if (r->code == 0) #####: 183: memcpy(ent, &r->rec, sizeof(r->rec)); -: 184: #####: 185: return r->code; -: 186:} -: 187: -: 188:kadm5_ret_t #####: 189:kadm5_get_principals(void *server_handle, -: 190: char *exp, char ***princs, int *count) -: 191:{ -: 192: gprincs_arg arg; -: 193: gprincs_ret *r; #####: 194: kadm5_server_handle_t handle = server_handle; -: 195: #####: 196: CHECK_HANDLE(server_handle); -: 197: #####: 198: if(princs == NULL || count == NULL) #####: 199: return EINVAL; #####: 200: arg.exp = exp; #####: 201: arg.api_version = handle->api_version; #####: 202: r = get_princs_2(&arg, handle->clnt); #####: 203: if(r == NULL) #####: 204: eret(); #####: 205: if(r->code == 0) { #####: 206: *count = r->count; #####: 207: *princs = r->princs; -: 208: } else { #####: 209: *count = 0; #####: 210: *princs = NULL; -: 211: } -: 212: #####: 213: return r->code; -: 214:} -: 215: -: 216:kadm5_ret_t #####: 217:kadm5_rename_principal(void *server_handle, -: 218: krb5_principal source, krb5_principal dest) -: 219:{ -: 220: rprinc_arg arg; -: 221: generic_ret *r; #####: 222: kadm5_server_handle_t handle = server_handle; -: 223: #####: 224: CHECK_HANDLE(server_handle); -: 225: #####: 226: arg.src = source; #####: 227: arg.dest = dest; #####: 228: arg.api_version = handle->api_version; #####: 229: if (source == NULL || dest == NULL) #####: 230: return EINVAL; #####: 231: r = rename_principal_2(&arg, handle->clnt); #####: 232: if(r == NULL) #####: 233: eret(); #####: 234: return r->code; -: 235:} -: 236: -: 237:kadm5_ret_t #####: 238:kadm5_chpass_principal(void *server_handle, -: 239: krb5_principal princ, char *password) -: 240:{ -: 241: chpass_arg arg; -: 242: generic_ret *r; #####: 243: kadm5_server_handle_t handle = server_handle; -: 244: #####: 245: CHECK_HANDLE(server_handle); -: 246: #####: 247: arg.princ = princ; #####: 248: arg.pass = password; #####: 249: arg.api_version = handle->api_version; -: 250: #####: 251: if(princ == NULL) #####: 252: return EINVAL; #####: 253: r = chpass_principal_2(&arg, handle->clnt); #####: 254: if(r == NULL) #####: 255: eret(); #####: 256: return r->code; -: 257:} -: 258: -: 259:kadm5_ret_t #####: 260:kadm5_chpass_principal_3(void *server_handle, -: 261: krb5_principal princ, krb5_boolean keepold, -: 262: int n_ks_tuple, krb5_key_salt_tuple *ks_tuple, -: 263: char *password) -: 264:{ -: 265: chpass3_arg arg; -: 266: generic_ret *r; #####: 267: kadm5_server_handle_t handle = server_handle; -: 268: #####: 269: CHECK_HANDLE(server_handle); -: 270: #####: 271: arg.princ = princ; #####: 272: arg.pass = password; #####: 273: arg.api_version = handle->api_version; #####: 274: arg.keepold = keepold; #####: 275: arg.n_ks_tuple = n_ks_tuple; #####: 276: arg.ks_tuple = ks_tuple; -: 277: #####: 278: if(princ == NULL) #####: 279: return EINVAL; #####: 280: r = chpass_principal3_2(&arg, handle->clnt); #####: 281: if(r == NULL) #####: 282: eret(); #####: 283: return r->code; -: 284:} -: 285: -: 286:kadm5_ret_t #####: 287:kadm5_setv4key_principal(void *server_handle, -: 288: krb5_principal princ, -: 289: krb5_keyblock *keyblock) -: 290:{ -: 291: setv4key_arg arg; -: 292: generic_ret *r; #####: 293: kadm5_server_handle_t handle = server_handle; -: 294: #####: 295: CHECK_HANDLE(server_handle); -: 296: #####: 297: arg.princ = princ; #####: 298: arg.keyblock = keyblock; #####: 299: arg.api_version = handle->api_version; -: 300: #####: 301: if(princ == NULL || keyblock == NULL) #####: 302: return EINVAL; #####: 303: r = setv4key_principal_2(&arg, handle->clnt); #####: 304: if(r == NULL) #####: 305: eret(); #####: 306: return r->code; -: 307:} -: 308: -: 309:kadm5_ret_t #####: 310:kadm5_setkey_principal(void *server_handle, -: 311: krb5_principal princ, -: 312: krb5_keyblock *keyblocks, -: 313: int n_keys) -: 314:{ -: 315: setkey_arg arg; -: 316: generic_ret *r; #####: 317: kadm5_server_handle_t handle = server_handle; -: 318: #####: 319: CHECK_HANDLE(server_handle); -: 320: #####: 321: arg.princ = princ; #####: 322: arg.keyblocks = keyblocks; #####: 323: arg.n_keys = n_keys; #####: 324: arg.api_version = handle->api_version; -: 325: #####: 326: if(princ == NULL || keyblocks == NULL) #####: 327: return EINVAL; #####: 328: r = setkey_principal_2(&arg, handle->clnt); #####: 329: if(r == NULL) #####: 330: eret(); #####: 331: return r->code; -: 332:} -: 333: -: 334:kadm5_ret_t #####: 335:kadm5_setkey_principal_3(void *server_handle, -: 336: krb5_principal princ, -: 337: krb5_boolean keepold, int n_ks_tuple, -: 338: krb5_key_salt_tuple *ks_tuple, -: 339: krb5_keyblock *keyblocks, -: 340: int n_keys) -: 341:{ -: 342: setkey3_arg arg; -: 343: generic_ret *r; #####: 344: kadm5_server_handle_t handle = server_handle; -: 345: #####: 346: CHECK_HANDLE(server_handle); -: 347: #####: 348: arg.princ = princ; #####: 349: arg.keyblocks = keyblocks; #####: 350: arg.n_keys = n_keys; #####: 351: arg.api_version = handle->api_version; #####: 352: arg.keepold = keepold; #####: 353: arg.n_ks_tuple = n_ks_tuple; #####: 354: arg.ks_tuple = ks_tuple; -: 355: #####: 356: if(princ == NULL || keyblocks == NULL) #####: 357: return EINVAL; #####: 358: r = setkey_principal3_2(&arg, handle->clnt); #####: 359: if(r == NULL) #####: 360: eret(); #####: 361: return r->code; -: 362:} -: 363: -: 364:kadm5_ret_t #####: 365:kadm5_randkey_principal_3(void *server_handle, -: 366: krb5_principal princ, -: 367: krb5_boolean keepold, int n_ks_tuple, -: 368: krb5_key_salt_tuple *ks_tuple, -: 369: krb5_keyblock **key, int *n_keys) -: 370:{ -: 371: chrand3_arg arg; -: 372: chrand_ret *r; #####: 373: kadm5_server_handle_t handle = server_handle; -: 374: int i, ret; -: 375: #####: 376: CHECK_HANDLE(server_handle); -: 377: #####: 378: arg.princ = princ; #####: 379: arg.api_version = handle->api_version; #####: 380: arg.keepold = keepold; #####: 381: arg.n_ks_tuple = n_ks_tuple; #####: 382: arg.ks_tuple = ks_tuple; -: 383: #####: 384: if(princ == NULL) #####: 385: return EINVAL; #####: 386: r = chrand_principal3_2(&arg, handle->clnt); #####: 387: if(r == NULL) #####: 388: eret(); #####: 389: if (n_keys) #####: 390: *n_keys = r->n_keys; #####: 391: if (key) { #####: 392: if(r->n_keys) { #####: 393: *key = malloc(r->n_keys * sizeof(krb5_keyblock)); #####: 394: if (*key == NULL) #####: 395: return ENOMEM; #####: 396: for (i = 0; i < r->n_keys; i++) { #####: 397: ret = krb5_copy_keyblock_contents(handle->context, &r->keys[i], #####: 398: &(*key)[i]); #####: 399: if (ret) { #####: 400: free(*key); #####: 401: return ENOMEM; -: 402: } -: 403: } -: 404: } else #####: 405: *key = NULL; -: 406: } -: 407: #####: 408: return r->code; -: 409:} -: 410: -: 411:kadm5_ret_t #####: 412:kadm5_randkey_principal(void *server_handle, -: 413: krb5_principal princ, -: 414: krb5_keyblock **key, int *n_keys) -: 415:{ -: 416: chrand_arg arg; -: 417: chrand_ret *r; #####: 418: kadm5_server_handle_t handle = server_handle; -: 419: int i, ret; -: 420: #####: 421: CHECK_HANDLE(server_handle); -: 422: #####: 423: arg.princ = princ; #####: 424: arg.api_version = handle->api_version; -: 425: #####: 426: if(princ == NULL) #####: 427: return EINVAL; #####: 428: r = chrand_principal_2(&arg, handle->clnt); #####: 429: if(r == NULL) #####: 430: eret(); #####: 431: if (n_keys) #####: 432: *n_keys = r->n_keys; #####: 433: if (key) { #####: 434: if(r->n_keys) { #####: 435: *key = malloc(r->n_keys * sizeof(krb5_keyblock)); #####: 436: if (*key == NULL) #####: 437: return ENOMEM; #####: 438: for (i = 0; i < r->n_keys; i++) { #####: 439: ret = krb5_copy_keyblock_contents(handle->context, &r->keys[i], #####: 440: &(*key)[i]); #####: 441: if (ret) { #####: 442: free(*key); #####: 443: return ENOMEM; -: 444: } -: 445: } -: 446: } else #####: 447: *key = NULL; -: 448: } -: 449: #####: 450: return r->code; -: 451:} -: 452: -: 453:/* not supported on client side */ #####: 454:kadm5_ret_t kadm5_decrypt_key(void *server_handle, -: 455: kadm5_principal_ent_t entry, krb5_int32 -: 456: ktype, krb5_int32 stype, krb5_int32 -: 457: kvno, krb5_keyblock *keyblock, -: 458: krb5_keysalt *keysalt, int *kvnop) -: 459:{ #####: 460: return EINVAL; -: 461:} -: 462: -: 463:kadm5_ret_t #####: 464:kadm5_purgekeys(void *server_handle, -: 465: krb5_principal princ, -: 466: int keepkvno) -: 467:{ -: 468: purgekeys_arg arg; -: 469: generic_ret *r; #####: 470: kadm5_server_handle_t handle = server_handle; -: 471: #####: 472: CHECK_HANDLE(server_handle); -: 473: #####: 474: arg.princ = princ; #####: 475: arg.keepkvno = keepkvno; #####: 476: arg.api_version = handle->api_version; -: 477: #####: 478: if (princ == NULL) #####: 479: return EINVAL; #####: 480: r = purgekeys_2(&arg, handle->clnt); #####: 481: if(r == NULL) #####: 482: eret(); #####: 483: return r->code; -: 484:} -: 485: -: 486:kadm5_ret_t 2: 487:kadm5_get_strings(void *server_handle, krb5_principal principal, -: 488: krb5_string_attr **strings_out, int *count_out) -: 489:{ -: 490: gstrings_arg arg; -: 491: gstrings_ret *r; 2: 492: kadm5_server_handle_t handle = server_handle; -: 493: 2: 494: *strings_out = NULL; 2: 495: *count_out = 0; 2: 496: CHECK_HANDLE(server_handle); 2: 497: if (principal == NULL) #####: 498: return EINVAL; -: 499: 2: 500: arg.princ = principal; 2: 501: arg.api_version = handle->api_version; 2: 502: r = get_strings_2(&arg, handle->clnt); 2: 503: if (r == NULL) #####: 504: eret(); 2: 505: if (r->code == 0) { 2: 506: *strings_out = r->strings; 2: 507: *count_out = r->count; -: 508: } 2: 509: return r->code; -: 510:} -: 511: -: 512:kadm5_ret_t 4: 513:kadm5_set_string(void *server_handle, krb5_principal principal, -: 514: const char *key, const char *value) -: 515:{ -: 516: sstring_arg arg; -: 517: generic_ret *r; 4: 518: kadm5_server_handle_t handle = server_handle; -: 519: 4: 520: CHECK_HANDLE(server_handle); 4: 521: if (principal == NULL || key == NULL) #####: 522: return EINVAL; -: 523: 4: 524: arg.princ = principal; 4: 525: arg.key = (char *)key; 4: 526: arg.value = (char *)value; 4: 527: arg.api_version = handle->api_version; 4: 528: r = set_string_2(&arg, handle->clnt); 4: 529: if (r == NULL) #####: 530: eret(); 4: 531: return r->code; -: 532:}