diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | nis/nss_compat/compat-initgroups.c | 12 | ||||
-rw-r--r-- | sysdeps/posix/getaddrinfo.c | 43 |
3 files changed, 33 insertions, 26 deletions
diff --git a/ChangeLog b/ChangeLog index e61eaa9444..02b52c3d07 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2004-08-19 Ulrich Drepper <drepper@redhat.com> + * sysdeps/posix/getaddrinfo.c (gaih_inet): Don't use + getcanonname_r function if AI_CANONNAME flag is not set in + request. + * nis/nss_compat/compat-initgroups.c (getgrent_next_nss): Initialize mysize with limits only if latter is >= 0. Use mysize in malloc call. diff --git a/nis/nss_compat/compat-initgroups.c b/nis/nss_compat/compat-initgroups.c index cea561ddc4..100febc672 100644 --- a/nis/nss_compat/compat-initgroups.c +++ b/nis/nss_compat/compat-initgroups.c @@ -243,9 +243,9 @@ getgrent_next_nss (ent_t *ent, char *buffer, size_t buflen, const char *user, { long int mystart = 0; long int mysize = limit <= 0 ? *size : limit; - gid_t *mygroupsp = malloc (mysize * sizeof (gid_t)); + gid_t *mygroups = malloc (mysize * sizeof (gid_t)); - if (mygroupsp == NULL) + if (mygroups == NULL) return NSS_STATUS_TRYAGAIN; /* For every gid in the list we get from the NSS module, @@ -255,7 +255,7 @@ getgrent_next_nss (ent_t *ent, char *buffer, size_t buflen, const char *user, getgrent_r through the whole group database. But for large group databases this is faster, since the user can only be in a limited number of groups. */ - if (nss_initgroups_dyn (user, group, &mystart, &mysize, &mygroupsp, + if (nss_initgroups_dyn (user, group, &mystart, &mysize, &mygroups, limit, errnop) == NSS_STATUS_SUCCESS) { /* A temporary buffer. We use the normal buffer, until we find @@ -267,7 +267,7 @@ getgrent_next_nss (ent_t *ent, char *buffer, size_t buflen, const char *user, for (i = 0; i < mystart; i++) { - while ((status = nss_getgrgid_r (mygroupsp[i], &grpbuf, tmpbuf, + while ((status = nss_getgrgid_r (mygroups[i], &grpbuf, tmpbuf, tmplen, errnop)) == NSS_STATUS_TRYAGAIN && *errnop == ERANGE) @@ -285,12 +285,12 @@ getgrent_next_nss (ent_t *ent, char *buffer, size_t buflen, const char *user, limit, &grpbuf); } - free (mygroupsp); + free (mygroups); return NSS_STATUS_NOTFOUND; } - free (mygroupsp); + free (mygroups); } /* If we come here, the NSS module does not support initgroups_dyn diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index 2d89b4ad5f..132fdcc620 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -644,27 +644,30 @@ gaih_inet (const char *name, const struct gaih_service *service, if (inet6_status == NSS_STATUS_SUCCESS || status == NSS_STATUS_SUCCESS) { - /* If we need the canonical name, get it from the same - service as the result. */ - nss_getcanonname_r cfct; - int herrno; - - cfct = __nss_lookup_function (nip, "getcanonname_r"); - if (cfct != NULL) + if ((req->ai_flags & AI_CANONNAME) != 0) { - const size_t max_fqdn_len = 256; - char *buf = alloca (max_fqdn_len); - char *s; - - if (DL_CALL_FCT (cfct, (h->h_name ?: name, buf, - max_fqdn_len, &s, &rc, - &herrno)) - == NSS_STATUS_SUCCESS) - canon = s; - else - /* Set to name now to avoid using - gethostbyaddr. */ - canon = name; + /* If we need the canonical name, get it + from the same service as the result. */ + nss_getcanonname_r cfct; + int herrno; + + cfct = __nss_lookup_function (nip, "getcanonname_r"); + if (cfct != NULL) + { + const size_t max_fqdn_len = 256; + char *buf = alloca (max_fqdn_len); + char *s; + + if (DL_CALL_FCT (cfct, (h->h_name ?: name, buf, + max_fqdn_len, &s, &rc, + &herrno)) + == NSS_STATUS_SUCCESS) + canon = s; + else + /* Set to name now to avoid using + gethostbyaddr. */ + canon = name; + } } break; |