nis_misc_proc.c (7c478bd9) | nis_misc_proc.c (61961e0f) |
---|---|
1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * --- 5 unchanged lines hidden (view full) --- 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ | 1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * --- 5 unchanged lines hidden (view full) --- 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ |
22 |
|
22/* | 23/* |
23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. | 24 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. |
24 * Use is subject to license terms. 25 */ 26 27#pragma ident "%Z%%M% %I% %E% SMI" 28 29/* 30 * This contains miscellaneous functions moved from commands to the library. 31 */ --- 49 unchanged lines hidden (view full) --- 81 pname); 82 return; 83 } 84 85 old = (struct creditem *)nis_find_item(netname, &credtbl); 86 if (old != NULL) 87 return; 88 | 25 * Use is subject to license terms. 26 */ 27 28#pragma ident "%Z%%M% %I% %E% SMI" 29 30/* 31 * This contains miscellaneous functions moved from commands to the library. 32 */ --- 49 unchanged lines hidden (view full) --- 82 pname); 83 return; 84 } 85 86 old = (struct creditem *)nis_find_item(netname, &credtbl); 87 if (old != NULL) 88 return; 89 |
89 foo = (struct creditem *)calloc(1, sizeof (struct creditem)); | 90 foo = calloc(1, sizeof (struct creditem)); |
90 if (foo == NULL) 91 return; 92 93 foo->item.name = strdup(netname); 94 if (foo->item.name == NULL) { 95 free(foo); 96 return; 97 } --- 50 unchanged lines hidden (view full) --- 148 (void) strcpy(name, nobody); /* default is "nobody" */ 149 if (flavor == AUTH_NONE) { 150 if (verbose) { 151 syslog(LOG_INFO, 152 "__nis_auth2princ: flavor = NONE: returning '%s'", nobody); 153 } 154 return; 155 } else if (flavor == AUTH_SYS) { /* XXX ifdef this for 4.1 */ | 91 if (foo == NULL) 92 return; 93 94 foo->item.name = strdup(netname); 95 if (foo->item.name == NULL) { 96 free(foo); 97 return; 98 } --- 50 unchanged lines hidden (view full) --- 149 (void) strcpy(name, nobody); /* default is "nobody" */ 150 if (flavor == AUTH_NONE) { 151 if (verbose) { 152 syslog(LOG_INFO, 153 "__nis_auth2princ: flavor = NONE: returning '%s'", nobody); 154 } 155 return; 156 } else if (flavor == AUTH_SYS) { /* XXX ifdef this for 4.1 */ |
157 /* LINTED pointer cast */ |
|
156 au = (struct authsys_parms *)(auth); 157 rmtdomain = nis_domain_of(au->aup_machname); 158 if (au->aup_uid == 0) { | 158 au = (struct authsys_parms *)(auth); 159 rmtdomain = nis_domain_of(au->aup_machname); 160 if (au->aup_uid == 0) { |
159 (void) sprintf(name, "%s", au->aup_machname); 160 if (! rmtdomain) | 161 (void) snprintf(name, MAX_MACHINE_NAME, 162 "%s", au->aup_machname); 163 if (!rmtdomain) |
161 (void) strcat(name, __nis_rpc_domain()); 162 if (name[strlen(name) - 1] != '.') 163 (void) strcat(name, "."); 164 if (verbose) { 165 syslog(LOG_INFO, 166 "__nis_auth2princ: flavor = SYS: returning '%s'", name); 167 } 168 return; 169 } 170 (void) snprintf(srch, 171 sizeof (srch) - 1, 172 "[auth_name=\"%d\", auth_type=LOCAL], cred.org_dir.%s", 173 (int)au->aup_uid, (*rmtdomain == '.') ? 174 (char *)nis_local_directory() : rmtdomain); 175 if (srch[strlen(srch) - 1] != '.') { 176 (void) strcat(srch, "."); 177 } 178 } else if (flavor == AUTH_DES) { | 164 (void) strcat(name, __nis_rpc_domain()); 165 if (name[strlen(name) - 1] != '.') 166 (void) strcat(name, "."); 167 if (verbose) { 168 syslog(LOG_INFO, 169 "__nis_auth2princ: flavor = SYS: returning '%s'", name); 170 } 171 return; 172 } 173 (void) snprintf(srch, 174 sizeof (srch) - 1, 175 "[auth_name=\"%d\", auth_type=LOCAL], cred.org_dir.%s", 176 (int)au->aup_uid, (*rmtdomain == '.') ? 177 (char *)nis_local_directory() : rmtdomain); 178 if (srch[strlen(srch) - 1] != '.') { 179 (void) strcat(srch, "."); 180 } 181 } else if (flavor == AUTH_DES) { |
182 /* LINTED pointer cast */ |
|
179 ad = (struct authdes_cred *)(auth); 180 if (refresh) 181 (void) delete_cred_item(ad->adc_fullname.name); 182 else 183 if (find_cred_item(ad->adc_fullname.name, name)) { 184 if (verbose) 185 syslog(LOG_INFO, 186 "__nis_auth2princ: flavor = DES: returning from cache '%s'", --- 108 unchanged lines hidden (view full) --- 295 296static int 297gss_OID_load() 298{ 299 void *dh; 300 gss_OID *OIDptr; 301 int stat = 0; 302 | 183 ad = (struct authdes_cred *)(auth); 184 if (refresh) 185 (void) delete_cred_item(ad->adc_fullname.name); 186 else 187 if (find_cred_item(ad->adc_fullname.name, name)) { 188 if (verbose) 189 syslog(LOG_INFO, 190 "__nis_auth2princ: flavor = DES: returning from cache '%s'", --- 108 unchanged lines hidden (view full) --- 299 300static int 301gss_OID_load() 302{ 303 void *dh; 304 gss_OID *OIDptr; 305 int stat = 0; 306 |
303 mutex_lock(&gss_load_lock); | 307 (void) mutex_lock(&gss_load_lock); |
304 if (GSS_EXPORT_NAME) { | 308 if (GSS_EXPORT_NAME) { |
305 mutex_unlock(&gss_load_lock); | 309 (void) mutex_unlock(&gss_load_lock); |
306 return (0); 307 } 308 309 /* if LIBGSS is not loaded return an error */ 310 if ((dh = dlopen(LIBGSS, RTLD_NOLOAD)) == NULL) { | 310 return (0); 311 } 312 313 /* if LIBGSS is not loaded return an error */ 314 if ((dh = dlopen(LIBGSS, RTLD_NOLOAD)) == NULL) { |
311 mutex_unlock(&gss_load_lock); | 315 (void) mutex_unlock(&gss_load_lock); |
312 return (0); 313 } 314 315 OIDptr = (gss_OID *)dlsym(dh, "GSS_C_NT_EXPORT_NAME"); 316 if (OIDptr) 317 GSS_EXPORT_NAME = *OIDptr; 318 else 319 goto Done; --- 27 unchanged lines hidden (view full) --- 347 if ((dh = dlopen(MECHDH, RTLD_LAZY)) != NULL) { 348 349 OIDptr = (gss_OID *)dlsym(dh, "__DH_GSS_C_NT_NETNAME"); 350 if (OIDptr) 351 DH_NETNAME = *OIDptr; 352 } 353 354Done: | 316 return (0); 317 } 318 319 OIDptr = (gss_OID *)dlsym(dh, "GSS_C_NT_EXPORT_NAME"); 320 if (OIDptr) 321 GSS_EXPORT_NAME = *OIDptr; 322 else 323 goto Done; --- 27 unchanged lines hidden (view full) --- 351 if ((dh = dlopen(MECHDH, RTLD_LAZY)) != NULL) { 352 353 OIDptr = (gss_OID *)dlsym(dh, "__DH_GSS_C_NT_NETNAME"); 354 if (OIDptr) 355 DH_NETNAME = *OIDptr; 356 } 357 358Done: |
355 mutex_unlock(&gss_load_lock); | 359 (void) mutex_unlock(&gss_load_lock); |
356 357 if (stat == 0) 358 GSS_EXPORT_NAME = 0; 359 360 return (stat); 361} 362 363 --- 49 unchanged lines hidden (view full) --- 413 (void) (*g_release_name)(&minor, &name); 414 415 if (major == GSS_S_COMPLETE) { 416 /* 417 * Check if we've got a netname. If we do we copy it 418 * and make sure that its null terminated. 419 */ 420 if (OID_IS_EQUAL(DH_NETNAME, name_type)) { | 360 361 if (stat == 0) 362 GSS_EXPORT_NAME = 0; 363 364 return (stat); 365} 366 367 --- 49 unchanged lines hidden (view full) --- 417 (void) (*g_release_name)(&minor, &name); 418 419 if (major == GSS_S_COMPLETE) { 420 /* 421 * Check if we've got a netname. If we do we copy it 422 * and make sure that its null terminated. 423 */ 424 if (OID_IS_EQUAL(DH_NETNAME, name_type)) { |
421 strncpy(netname, | 425 (void) strncpy(netname, |
422 (char *)display_name.value, 423 MAXNETNAMELEN); 424 netname[MAXNETNAMELEN] = '\0'; 425 stat = 0; 426 } 427 /* 428 * If there are other display formats that can 429 * be converted to netnames easily, insert here. --- 97 unchanged lines hidden (view full) --- 527 if (flavor == AUTH_NONE) { 528 if (verbose) { 529 syslog(LOG_INFO, 530 "__nis_auth2princ_rpcgss: flavor = NONE: returning '%s'", 531 nobody); 532 } 533 return; 534 } else if (flavor == AUTH_SYS) { /* XXX ifdef this for 4.1 */ | 426 (char *)display_name.value, 427 MAXNETNAMELEN); 428 netname[MAXNETNAMELEN] = '\0'; 429 stat = 0; 430 } 431 /* 432 * If there are other display formats that can 433 * be converted to netnames easily, insert here. --- 97 unchanged lines hidden (view full) --- 531 if (flavor == AUTH_NONE) { 532 if (verbose) { 533 syslog(LOG_INFO, 534 "__nis_auth2princ_rpcgss: flavor = NONE: returning '%s'", 535 nobody); 536 } 537 return; 538 } else if (flavor == AUTH_SYS) { /* XXX ifdef this for 4.1 */ |
539 /* LINTED pointer cast */ |
|
535 au = (struct authsys_parms *)(auth); 536 rmtdomain = nis_domain_of(au->aup_machname); 537 if (au->aup_uid == 0) { | 540 au = (struct authsys_parms *)(auth); 541 rmtdomain = nis_domain_of(au->aup_machname); 542 if (au->aup_uid == 0) { |
538 (void) sprintf(name, "%s", au->aup_machname); 539 if (! rmtdomain) | 543 (void) snprintf(name, MAX_MACHINE_NAME, 544 "%s", au->aup_machname); 545 if (!rmtdomain) |
540 (void) strcat(name, __nis_rpc_domain()); 541 if (name[strlen(name) - 1] != '.') 542 (void) strcat(name, "."); 543 if (verbose) { 544 syslog(LOG_INFO, 545 "__nis_auth2princ_rpcgss: flavor = SYS: returning '%s'", name); 546 } 547 return; 548 } 549 (void) snprintf(srch, 550 sizeof (srch) - 1, 551 "[auth_name=\"%ld\", auth_type=LOCAL], cred.org_dir.%s", 552 au->aup_uid, (*rmtdomain == '.') ? 553 (char *)nis_local_directory() : rmtdomain); 554 if (srch[strlen(srch) - 1] != '.') { 555 (void) strcat(srch, "."); 556 } 557 } else if (flavor == AUTH_DES) { | 546 (void) strcat(name, __nis_rpc_domain()); 547 if (name[strlen(name) - 1] != '.') 548 (void) strcat(name, "."); 549 if (verbose) { 550 syslog(LOG_INFO, 551 "__nis_auth2princ_rpcgss: flavor = SYS: returning '%s'", name); 552 } 553 return; 554 } 555 (void) snprintf(srch, 556 sizeof (srch) - 1, 557 "[auth_name=\"%ld\", auth_type=LOCAL], cred.org_dir.%s", 558 au->aup_uid, (*rmtdomain == '.') ? 559 (char *)nis_local_directory() : rmtdomain); 560 if (srch[strlen(srch) - 1] != '.') { 561 (void) strcat(srch, "."); 562 } 563 } else if (flavor == AUTH_DES) { |
564 /* LINTED pointer cast */ |
|
558 ad = (struct authdes_cred *)(auth); 559 if (refresh) 560 (void) delete_cred_item(ad->adc_fullname.name); 561 else 562 if (find_cred_item(ad->adc_fullname.name, name)) { 563 if (verbose) 564 syslog(LOG_INFO, 565 "__nis_auth2princ_rpcgss: flavor = DES: returning from cache '%s'", --- 21 unchanged lines hidden (view full) --- 587 nobody); 588 } 589 return; 590 } 591 } else if (flavor == RPCSEC_GSS) { 592 rpc_gss_rawcred_t *rcred; 593 void *cookie; 594 | 565 ad = (struct authdes_cred *)(auth); 566 if (refresh) 567 (void) delete_cred_item(ad->adc_fullname.name); 568 else 569 if (find_cred_item(ad->adc_fullname.name, name)) { 570 if (verbose) 571 syslog(LOG_INFO, 572 "__nis_auth2princ_rpcgss: flavor = DES: returning from cache '%s'", --- 21 unchanged lines hidden (view full) --- 594 nobody); 595 } 596 return; 597 } 598 } else if (flavor == RPCSEC_GSS) { 599 rpc_gss_rawcred_t *rcred; 600 void *cookie; 601 |
595 if (! rpc_gss_getcred(req, &rcred, NULL, &cookie)) { | 602 if (!rpc_gss_getcred(req, &rcred, NULL, &cookie)) { |
596 if (verbose) { 597 syslog(LOG_WARNING, 598 "__nis_auth2princ_rpcgss: GSS getcred failure: returning '%s'", 599 nobody); 600 } 601 return; 602 } 603 --- 16 unchanged lines hidden (view full) --- 620 return; 621 } 622 623 rmtdomain = strchr(netname, '@'); 624 if (rmtdomain) { 625 char alias[MECH_MAXALIASNAME+1] = { 0 }; 626 627 rmtdomain++; | 603 if (verbose) { 604 syslog(LOG_WARNING, 605 "__nis_auth2princ_rpcgss: GSS getcred failure: returning '%s'", 606 nobody); 607 } 608 return; 609 } 610 --- 16 unchanged lines hidden (view full) --- 627 return; 628 } 629 630 rmtdomain = strchr(netname, '@'); 631 if (rmtdomain) { 632 char alias[MECH_MAXALIASNAME+1] = { 0 }; 633 634 rmtdomain++; |
628 if (! __nis_mechname2alias(rcred->mechanism, alias, | 635 if (!__nis_mechname2alias(rcred->mechanism, alias, |
629 sizeof (alias))) { 630 syslog(LOG_ERR, 631 "__nis_auth2princ_rpcgss: mechname '%s' not found: returning 'nobody'", 632 rcred->mechanism); 633 return; 634 } 635 636 if (alias[0] != '\0') { --- 108 unchanged lines hidden (view full) --- 745 if (domain == NULL) { 746 syslog(LOG_ERR, "__nis_ismaster(): null domain"); 747 return (FALSE); 748 } 749 /* strlen(".org_dir") + null + "." = 10 */ 750 if ((strlen(domain) + 10) > (size_t)NIS_MAXNAMELEN) 751 return (FALSE); 752 | 636 sizeof (alias))) { 637 syslog(LOG_ERR, 638 "__nis_auth2princ_rpcgss: mechname '%s' not found: returning 'nobody'", 639 rcred->mechanism); 640 return; 641 } 642 643 if (alias[0] != '\0') { --- 108 unchanged lines hidden (view full) --- 752 if (domain == NULL) { 753 syslog(LOG_ERR, "__nis_ismaster(): null domain"); 754 return (FALSE); 755 } 756 /* strlen(".org_dir") + null + "." = 10 */ 757 if ((strlen(domain) + 10) > (size_t)NIS_MAXNAMELEN) 758 return (FALSE); 759 |
753 (void) sprintf(buf, "org_dir.%s", domain); | 760 (void) snprintf(buf, sizeof (buf), "org_dir.%s", domain); |
754 if (buf[strlen(buf) - 1] != '.') 755 (void) strcat(buf, "."); 756 757 srvs = nis_getservlist(buf); 758 if (srvs == NULL) { 759 /* can't find any of the servers that serve this domain */ 760 /* something is very wrong ! */ 761 syslog(LOG_ERR, --- 32 unchanged lines hidden (view full) --- 794 return (FALSE); 795 796 /* strlen(".org_dir.") + null + "." = 11 */ 797 if ((strlen(table) + strlen(domain) + 11) > 798 (size_t)NIS_MAXNAMELEN) { 799 syslog(LOG_ERR, "__nis_isadmin: buffer too small"); 800 return (FALSE); 801 } | 761 if (buf[strlen(buf) - 1] != '.') 762 (void) strcat(buf, "."); 763 764 srvs = nis_getservlist(buf); 765 if (srvs == NULL) { 766 /* can't find any of the servers that serve this domain */ 767 /* something is very wrong ! */ 768 syslog(LOG_ERR, --- 32 unchanged lines hidden (view full) --- 801 return (FALSE); 802 803 /* strlen(".org_dir.") + null + "." = 11 */ 804 if ((strlen(table) + strlen(domain) + 11) > 805 (size_t)NIS_MAXNAMELEN) { 806 syslog(LOG_ERR, "__nis_isadmin: buffer too small"); 807 return (FALSE); 808 } |
802 (void) sprintf(buf, "%s.org_dir.%s", table, domain); | 809 (void) snprintf(buf, sizeof (buf), "%s.org_dir.%s", table, domain); |
803 if (buf[strlen(buf) - 1] != '.') 804 (void) strcat(buf, "."); 805 806 /* get the table object */ 807 res = nis_lookup(buf, FOLLOW_LINKS); 808 if (res->status != NIS_SUCCESS) { 809 syslog(LOG_ERR, 810 "__nis_isadmin: could not lookup '%s' table", --- 149 unchanged lines hidden (view full) --- 960 if (!loopback && (strcmp(nc->nc_protofmly, NC_LOOPBACK) == 0)) 961 continue; 962 if (netdir_getbyname(nc, &hs, &addrlist)) 963 continue; 964 for (i = 0; i < addrlist->n_cnt; i++, num_ep++) { 965 if (num_ep == addr_size) { 966 addr_size += INC_SIZE; 967 oldaddr = addr; | 810 if (buf[strlen(buf) - 1] != '.') 811 (void) strcat(buf, "."); 812 813 /* get the table object */ 814 res = nis_lookup(buf, FOLLOW_LINKS); 815 if (res->status != NIS_SUCCESS) { 816 syslog(LOG_ERR, 817 "__nis_isadmin: could not lookup '%s' table", --- 149 unchanged lines hidden (view full) --- 967 if (!loopback && (strcmp(nc->nc_protofmly, NC_LOOPBACK) == 0)) 968 continue; 969 if (netdir_getbyname(nc, &hs, &addrlist)) 970 continue; 971 for (i = 0; i < addrlist->n_cnt; i++, num_ep++) { 972 if (num_ep == addr_size) { 973 addr_size += INC_SIZE; 974 oldaddr = addr; |
968 addr = (endpoint *)realloc((void *)addr, | 975 addr = realloc(addr, |
969 addr_size * sizeof (endpoint)); 970 if (addr == NULL) { 971 if (errcode) 972 *errcode = NIS_NOMEMORY; 973 (void) endnetconfig(nch); 974 nis_free_endpoints(oldaddr, num_ep); 975 netdir_free((char *)addrlist, ND_ADDRLIST); 976 return (NULL); --- 10 unchanged lines hidden (view full) --- 987 return (NULL); 988 } 989 __nis_netconfig2ep(nc, &(addr[num_ep])); 990 } 991 netdir_free((char *)addrlist, ND_ADDRLIST); 992 } 993 (void) endnetconfig(nch); 994 | 976 addr_size * sizeof (endpoint)); 977 if (addr == NULL) { 978 if (errcode) 979 *errcode = NIS_NOMEMORY; 980 (void) endnetconfig(nch); 981 nis_free_endpoints(oldaddr, num_ep); 982 netdir_free((char *)addrlist, ND_ADDRLIST); 983 return (NULL); --- 10 unchanged lines hidden (view full) --- 994 return (NULL); 995 } 996 __nis_netconfig2ep(nc, &(addr[num_ep])); 997 } 998 netdir_free((char *)addrlist, ND_ADDRLIST); 999 } 1000 (void) endnetconfig(nch); 1001 |
995 if ((hostinfo = (nis_server *)calloc(1, sizeof (nis_server))) == NULL) { | 1002 if ((hostinfo = calloc(1, sizeof (nis_server))) == NULL) { |
996 nis_free_endpoints(addr, num_ep); 997 if (errcode) 998 *errcode = NIS_NOMEMORY; 999 return (NULL); 1000 } 1001 1002 hostinfo->ep.ep_len = num_ep; 1003 hostinfo->ep.ep_val = addr; --- 24 unchanged lines hidden (view full) --- 1028 extdhkey_t *curentry, *oldkeylist; 1029 keylen_t keylen = mechlist[i]->keylen; 1030 algtype_t algtype = mechlist[i]->algtype; 1031 1032 binlen = (keylen + 7) / 8; 1033 binpadlen = ((binlen + 3) / 4) * 4; 1034 hexkeylen = binlen * 2 + 1; 1035 | 1003 nis_free_endpoints(addr, num_ep); 1004 if (errcode) 1005 *errcode = NIS_NOMEMORY; 1006 return (NULL); 1007 } 1008 1009 hostinfo->ep.ep_len = num_ep; 1010 hostinfo->ep.ep_val = addr; --- 24 unchanged lines hidden (view full) --- 1035 extdhkey_t *curentry, *oldkeylist; 1036 keylen_t keylen = mechlist[i]->keylen; 1037 algtype_t algtype = mechlist[i]->algtype; 1038 1039 binlen = (keylen + 7) / 8; 1040 binpadlen = ((binlen + 3) / 4) * 4; 1041 hexkeylen = binlen * 2 + 1; 1042 |
1036 if (!(hexkey = (char *)malloc(hexkeylen))) { | 1043 if (!(hexkey = malloc(hexkeylen))) { |
1037 __nis_release_mechanisms(mechlist); 1038 __free_nis_server(hostinfo); 1039 free(keylist); 1040 if (errcode) 1041 *errcode = NIS_NOMEMORY; 1042 return (NULL); 1043 } 1044 --- 8 unchanged lines hidden (view full) --- 1053 else 1054 gotothers = TRUE; 1055 } 1056 1057 keyoffset = keylistsize; 1058 keylistsize += sizeof (ushort_t) * 2 + 1059 binpadlen; 1060 oldkeylist = keylist; | 1044 __nis_release_mechanisms(mechlist); 1045 __free_nis_server(hostinfo); 1046 free(keylist); 1047 if (errcode) 1048 *errcode = NIS_NOMEMORY; 1049 return (NULL); 1050 } 1051 --- 8 unchanged lines hidden (view full) --- 1060 else 1061 gotothers = TRUE; 1062 } 1063 1064 keyoffset = keylistsize; 1065 keylistsize += sizeof (ushort_t) * 2 + 1066 binpadlen; 1067 oldkeylist = keylist; |
1061 if (!(keylist = 1062 (extdhkey_t *)realloc(keylist, | 1068 if (!(keylist = realloc(keylist, |
1063 keylistsize))) { 1064 free(oldkeylist); 1065 free(hexkey); 1066 __nis_release_mechanisms(mechlist); 1067 __free_nis_server(hostinfo); 1068 if (errcode) 1069 *errcode = NIS_NOMEMORY; 1070 return (NULL); 1071 } 1072 1073 entryoffset = (char *)keylist + keyoffset; | 1069 keylistsize))) { 1070 free(oldkeylist); 1071 free(hexkey); 1072 __nis_release_mechanisms(mechlist); 1073 __free_nis_server(hostinfo); 1074 if (errcode) 1075 *errcode = NIS_NOMEMORY; 1076 return (NULL); 1077 } 1078 1079 entryoffset = (char *)keylist + keyoffset; |
1080 /* LINTED pointer cast */ |
|
1074 curentry = (extdhkey_t *)entryoffset; 1075 1076 curentry->keylen = htons(keylen); 1077 curentry->algtype = htons(algtype); 1078 hex2bin(binlen, hexkey, (char *)curentry->key); 1079 1080 free(hexkey); 1081 } --- 43 unchanged lines hidden (view full) --- 1125/* 1126 * Extract a public key given a key length and alg. type from a packed 1127 * netobj containing extended Diffie-Hellman keys. 1128 */ 1129char * 1130__nis_dhext_extract_pkey(netobj *no, keylen_t keylen, algtype_t algtype) 1131{ 1132 char *hexkey; | 1081 curentry = (extdhkey_t *)entryoffset; 1082 1083 curentry->keylen = htons(keylen); 1084 curentry->algtype = htons(algtype); 1085 hex2bin(binlen, hexkey, (char *)curentry->key); 1086 1087 free(hexkey); 1088 } --- 43 unchanged lines hidden (view full) --- 1132/* 1133 * Extract a public key given a key length and alg. type from a packed 1134 * netobj containing extended Diffie-Hellman keys. 1135 */ 1136char * 1137__nis_dhext_extract_pkey(netobj *no, keylen_t keylen, algtype_t algtype) 1138{ 1139 char *hexkey; |
1140 /* LINTED pointer cast */ |
|
1133 extdhkey_t *keyent = (extdhkey_t *)no->n_bytes; 1134 | 1141 extdhkey_t *keyent = (extdhkey_t *)no->n_bytes; 1142 |
1143 /* LINTED pointer cast */ |
|
1135 while (keyent < (extdhkey_t *)(no->n_bytes + no->n_len)) { 1136 char *keyoffset; 1137 size_t binlen = (ntohs(keyent->keylen) + 7) / 8; 1138 size_t binpadlen = ((binlen + 3) / 4) * 4; 1139 size_t hexkeylen = binlen * 2 + 1; 1140 1141 if (keylen == ntohs(keyent->keylen) && 1142 algtype == ntohs(keyent->algtype)) { 1143 | 1144 while (keyent < (extdhkey_t *)(no->n_bytes + no->n_len)) { 1145 char *keyoffset; 1146 size_t binlen = (ntohs(keyent->keylen) + 7) / 8; 1147 size_t binpadlen = ((binlen + 3) / 4) * 4; 1148 size_t hexkeylen = binlen * 2 + 1; 1149 1150 if (keylen == ntohs(keyent->keylen) && 1151 algtype == ntohs(keyent->algtype)) { 1152 |
1144 if (!(hexkey = (char *)malloc(hexkeylen))) | 1153 if (!(hexkey = malloc(hexkeylen))) |
1145 return (NULL); 1146 1147 (void) bin2hex(binlen, keyent->key, hexkey); 1148 return (hexkey); 1149 } 1150 keyoffset = (char *)keyent + (sizeof (ushort_t) * 2) + 1151 binpadlen; | 1154 return (NULL); 1155 1156 (void) bin2hex(binlen, keyent->key, hexkey); 1157 return (hexkey); 1158 } 1159 keyoffset = (char *)keyent + (sizeof (ushort_t) * 2) + 1160 binpadlen; |
1161 /* LINTED pointer cast */ |
|
1152 keyent = (extdhkey_t *)keyoffset; 1153 } 1154 return (NULL); 1155} 1156 1157 1158/* 1159 * Returns a list of key lengths and alg. types for a given nis_server 1160 * structure. 1161 */ 1162int 1163__nis_dhext_extract_keyinfo(nis_server *ns, extdhkey_t **retdat) 1164{ 1165 extdhkey_t *keyinfolist = NULL, *tmplist = NULL; 1166 int count = 0; | 1162 keyent = (extdhkey_t *)keyoffset; 1163 } 1164 return (NULL); 1165} 1166 1167 1168/* 1169 * Returns a list of key lengths and alg. types for a given nis_server 1170 * structure. 1171 */ 1172int 1173__nis_dhext_extract_keyinfo(nis_server *ns, extdhkey_t **retdat) 1174{ 1175 extdhkey_t *keyinfolist = NULL, *tmplist = NULL; 1176 int count = 0; |
1177 /* LINTED pointer cast */ |
|
1167 extdhkey_t *keyent = (extdhkey_t *)ns->pkey.n_bytes; 1168 1169 switch (ns->key_type) { 1170 case NIS_PK_DH: | 1178 extdhkey_t *keyent = (extdhkey_t *)ns->pkey.n_bytes; 1179 1180 switch (ns->key_type) { 1181 case NIS_PK_DH: |
1171 if (!(keyinfolist = (extdhkey_t *)malloc(sizeof (extdhkey_t)))) | 1182 if (!(keyinfolist = malloc(sizeof (extdhkey_t)))) |
1172 return (0); 1173 keyinfolist[0].keylen = 192; 1174 keyinfolist[0].algtype = 0; 1175 1176 *retdat = keyinfolist; 1177 return (1); 1178 1179 case NIS_PK_DHEXT: | 1183 return (0); 1184 keyinfolist[0].keylen = 192; 1185 keyinfolist[0].algtype = 0; 1186 1187 *retdat = keyinfolist; 1188 return (1); 1189 1190 case NIS_PK_DHEXT: |
1191 /* LINTED pointer cast */ |
|
1180 while (keyent < (extdhkey_t *)(ns->pkey.n_bytes + 1181 ns->pkey.n_len)) { 1182 size_t binlen = (keyent->keylen + 7) / 8; 1183 size_t binpadlen = ((binlen + 3) / 4) * 4; 1184 char *keyoffset; 1185 1186 tmplist = keyinfolist; 1187 | 1192 while (keyent < (extdhkey_t *)(ns->pkey.n_bytes + 1193 ns->pkey.n_len)) { 1194 size_t binlen = (keyent->keylen + 7) / 8; 1195 size_t binpadlen = ((binlen + 3) / 4) * 4; 1196 char *keyoffset; 1197 1198 tmplist = keyinfolist; 1199 |
1188 if (!(keyinfolist = 1189 (extdhkey_t *)realloc(keyinfolist, | 1200 if (!(keyinfolist = realloc(keyinfolist, |
1190 (count + 1) * 1191 sizeof (extdhkey_t)))) { 1192 free(tmplist); 1193 return (0); 1194 } 1195 keyinfolist[count].keylen = ntohs(keyent->keylen); 1196 keyinfolist[count].algtype = ntohs(keyent->algtype); 1197 1198 keyoffset = (char *)keyent + (sizeof (ushort_t) * 2) + 1199 binpadlen; | 1201 (count + 1) * 1202 sizeof (extdhkey_t)))) { 1203 free(tmplist); 1204 return (0); 1205 } 1206 keyinfolist[count].keylen = ntohs(keyent->keylen); 1207 keyinfolist[count].algtype = ntohs(keyent->algtype); 1208 1209 keyoffset = (char *)keyent + (sizeof (ushort_t) * 2) + 1210 binpadlen; |
1211 /* LINTED pointer cast */ |
|
1200 keyent = (extdhkey_t *)keyoffset; 1201 count++; 1202 } 1203 *retdat = keyinfolist; 1204 return (count); 1205 1206 default: 1207 return (0); 1208 } 1209} | 1212 keyent = (extdhkey_t *)keyoffset; 1213 count++; 1214 } 1215 *retdat = keyinfolist; 1216 return (count); 1217 1218 default: 1219 return (0); 1220 } 1221} |