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}