getpwent.c (d915a14ef094c8dfc1a5aee70e135abfec01d0f1) getpwent.c (34e9190d82ac021bae00937cc1a663920aa19309)
1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2003 Networks Associates Technology, Inc.
5 * All rights reserved.
6 *
7 * This software was developed for the FreeBSD Project by
8 * Jacques A. Vidrine, Safeport Network Services, and Network

--- 82 unchanged lines hidden (view full) ---

91 { NSSRC_COMPAT, NS_SUCCESS },
92 { NULL, 0 }
93};
94
95int __pw_match_entry(const char *, size_t, enum nss_lookup_type,
96 const char *, uid_t);
97int __pw_parse_entry(char *, size_t, struct passwd *, int, int *errnop);
98
1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2003 Networks Associates Technology, Inc.
5 * All rights reserved.
6 *
7 * This software was developed for the FreeBSD Project by
8 * Jacques A. Vidrine, Safeport Network Services, and Network

--- 82 unchanged lines hidden (view full) ---

91 { NSSRC_COMPAT, NS_SUCCESS },
92 { NULL, 0 }
93};
94
95int __pw_match_entry(const char *, size_t, enum nss_lookup_type,
96 const char *, uid_t);
97int __pw_parse_entry(char *, size_t, struct passwd *, int, int *errnop);
98
99static void pwd_init(struct passwd *);
100
101union key {
102 const char *name;
103 uid_t uid;
104};
105
106static struct passwd *getpw(int (*fn)(union key, struct passwd *, char *,
107 size_t, struct passwd **), union key);
108static int wrap_getpwnam_r(union key, struct passwd *, char *,

--- 413 unchanged lines hidden (view full) ---

522 { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_all },
523#ifdef NS_CACHING
524 NS_CACHE_CB(&cache_info)
525#endif
526 { NULL, NULL, NULL }
527 };
528 int rv, ret_errno;
529
99union key {
100 const char *name;
101 uid_t uid;
102};
103
104static struct passwd *getpw(int (*fn)(union key, struct passwd *, char *,
105 size_t, struct passwd **), union key);
106static int wrap_getpwnam_r(union key, struct passwd *, char *,

--- 413 unchanged lines hidden (view full) ---

520 { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_all },
521#ifdef NS_CACHING
522 NS_CACHE_CB(&cache_info)
523#endif
524 { NULL, NULL, NULL }
525 };
526 int rv, ret_errno;
527
530 pwd_init(pwd);
528 __pw_initpwd(pwd);
531 ret_errno = 0;
532 *result = NULL;
533 rv = _nsdispatch(result, dtab, NSDB_PASSWD, "getpwent_r", defaultsrc,
534 pwd, buffer, bufsize, &ret_errno);
535 if (rv == NS_SUCCESS)
536 return (0);
537 else
538 return (ret_errno);

--- 22 unchanged lines hidden (view full) ---

561 { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_name },
562#ifdef NS_CACHING
563 NS_CACHE_CB(&cache_info)
564#endif
565 { NULL, NULL, NULL }
566 };
567 int rv, ret_errno;
568
529 ret_errno = 0;
530 *result = NULL;
531 rv = _nsdispatch(result, dtab, NSDB_PASSWD, "getpwent_r", defaultsrc,
532 pwd, buffer, bufsize, &ret_errno);
533 if (rv == NS_SUCCESS)
534 return (0);
535 else
536 return (ret_errno);

--- 22 unchanged lines hidden (view full) ---

559 { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_name },
560#ifdef NS_CACHING
561 NS_CACHE_CB(&cache_info)
562#endif
563 { NULL, NULL, NULL }
564 };
565 int rv, ret_errno;
566
569 pwd_init(pwd);
567 __pw_initpwd(pwd);
570 ret_errno = 0;
571 *result = NULL;
572 rv = _nsdispatch(result, dtab, NSDB_PASSWD, "getpwnam_r", defaultsrc,
573 name, pwd, buffer, bufsize, &ret_errno);
574 if (rv == NS_SUCCESS)
575 return (0);
576 else
577 return (ret_errno);

--- 22 unchanged lines hidden (view full) ---

600 { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_id },
601#ifdef NS_CACHING
602 NS_CACHE_CB(&cache_info)
603#endif
604 { NULL, NULL, NULL }
605 };
606 int rv, ret_errno;
607
568 ret_errno = 0;
569 *result = NULL;
570 rv = _nsdispatch(result, dtab, NSDB_PASSWD, "getpwnam_r", defaultsrc,
571 name, pwd, buffer, bufsize, &ret_errno);
572 if (rv == NS_SUCCESS)
573 return (0);
574 else
575 return (ret_errno);

--- 22 unchanged lines hidden (view full) ---

598 { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_id },
599#ifdef NS_CACHING
600 NS_CACHE_CB(&cache_info)
601#endif
602 { NULL, NULL, NULL }
603 };
604 int rv, ret_errno;
605
608 pwd_init(pwd);
606 __pw_initpwd(pwd);
609 ret_errno = 0;
610 *result = NULL;
611 rv = _nsdispatch(result, dtab, NSDB_PASSWD, "getpwuid_r", defaultsrc,
612 uid, pwd, buffer, bufsize, &ret_errno);
613 if (rv == NS_SUCCESS)
614 return (0);
615 else
616 return (ret_errno);
617}
618
619
607 ret_errno = 0;
608 *result = NULL;
609 rv = _nsdispatch(result, dtab, NSDB_PASSWD, "getpwuid_r", defaultsrc,
610 uid, pwd, buffer, bufsize, &ret_errno);
611 if (rv == NS_SUCCESS)
612 return (0);
613 else
614 return (ret_errno);
615}
616
617
620static void
621pwd_init(struct passwd *pwd)
622{
623 static char nul[] = "";
624
625 memset(pwd, 0, sizeof(*pwd));
626 pwd->pw_uid = (uid_t)-1; /* Considered least likely to lead to */
627 pwd->pw_gid = (gid_t)-1; /* a security issue. */
628 pwd->pw_name = nul;
629 pwd->pw_passwd = nul;
630 pwd->pw_class = nul;
631 pwd->pw_gecos = nul;
632 pwd->pw_dir = nul;
633 pwd->pw_shell = nul;
634}
635
636
637static struct passwd pwd;
638static char *pwd_storage;
639static size_t pwd_storage_size;
640
641
642static struct passwd *
643getpw(int (*fn)(union key, struct passwd *, char *, size_t, struct passwd **),
644 union key key)

--- 964 unchanged lines hidden (view full) ---

1609 { NULL, NULL, NULL }
1610 };
1611 void *discard;
1612 int e, i, rv;
1613
1614 for (i = 0; i < (int)(nitems(dtab) - 1); i++)
1615 dtab[i].mdata = (void *)lookup_how;
1616more:
618static struct passwd pwd;
619static char *pwd_storage;
620static size_t pwd_storage_size;
621
622
623static struct passwd *
624getpw(int (*fn)(union key, struct passwd *, char *, size_t, struct passwd **),
625 union key key)

--- 964 unchanged lines hidden (view full) ---

1590 { NULL, NULL, NULL }
1591 };
1592 void *discard;
1593 int e, i, rv;
1594
1595 for (i = 0; i < (int)(nitems(dtab) - 1); i++)
1596 dtab[i].mdata = (void *)lookup_how;
1597more:
1617 pwd_init(pwd);
1598 __pw_initpwd(pwd);
1618 switch (lookup_how) {
1619 case nss_lt_all:
1620 rv = _nsdispatch(&discard, dtab, NSDB_PASSWD_COMPAT,
1621 "getpwent_r", compatsrc, pwd, buffer, bufsize,
1622 errnop);
1623 break;
1624 case nss_lt_id:
1625 rv = _nsdispatch(&discard, dtab, NSDB_PASSWD_COMPAT,

--- 387 unchanged lines hidden ---
1599 switch (lookup_how) {
1600 case nss_lt_all:
1601 rv = _nsdispatch(&discard, dtab, NSDB_PASSWD_COMPAT,
1602 "getpwent_r", compatsrc, pwd, buffer, bufsize,
1603 errnop);
1604 break;
1605 case nss_lt_id:
1606 rv = _nsdispatch(&discard, dtab, NSDB_PASSWD_COMPAT,

--- 387 unchanged lines hidden ---