aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--nis/nss_compat/compat-initgroups.c12
-rw-r--r--sysdeps/posix/getaddrinfo.c43
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;