diff options
Diffstat (limited to 'nis')
-rw-r--r-- | nis/nis_table.c | 13 | ||||
-rw-r--r-- | nis/nss_nis/nis-grp.c | 3 | ||||
-rw-r--r-- | nis/nss_nis/nis-pwd.c | 3 |
3 files changed, 13 insertions, 6 deletions
diff --git a/nis/nis_table.c b/nis/nis_table.c index f56b499f60..1a7bf094f0 100644 --- a/nis/nis_table.c +++ b/nis/nis_table.c @@ -129,7 +129,7 @@ __create_ib_request (const_nis_name name, unsigned int flags) static const struct timeval RPCTIMEOUT = {10, 0}; static char * -__get_tablepath (char *name, dir_binding *bptr) +get_tablepath (char *name, dir_binding *bptr) { enum clnt_stat result; nis_result res; @@ -152,7 +152,12 @@ __get_tablepath (char *name, dir_binding *bptr) else cptr = ""; - return strdup (cptr); + char *str = strdup (cptr); + + if (result == RPC_SUCCESS) + xdr_free ((xdrproc_t) _xdr_nis_result, (char *) &res); + + return str; } nis_result * @@ -335,7 +340,7 @@ nis_list (const_nis_name name, unsigned int flags, { if (tablepath == NULL) { - tablepath = __get_tablepath (ibreq->ibr_name, &bptr); + tablepath = get_tablepath (ibreq->ibr_name, &bptr); tableptr = tablepath; } if (tableptr == NULL) @@ -400,7 +405,7 @@ nis_list (const_nis_name name, unsigned int flags, { if (tablepath == NULL) { - tablepath = __get_tablepath (ibreq->ibr_name, &bptr); + tablepath = get_tablepath (ibreq->ibr_name, &bptr); tableptr = tablepath; } if (tableptr == NULL) diff --git a/nis/nss_nis/nis-grp.c b/nis/nss_nis/nis-grp.c index ce642c484f..6e36cf828f 100644 --- a/nis/nss_nis/nis-grp.c +++ b/nis/nss_nis/nis-grp.c @@ -220,7 +220,8 @@ internal_nis_getgrent_r (struct group *grp, char *buffer, size_t buflen, errnop); if (__builtin_expect (parse_res == -1, 0)) { - free (outkey); + if (!batch_read) + free (outkey); *errnop = ERANGE; return NSS_STATUS_TRYAGAIN; } diff --git a/nis/nss_nis/nis-pwd.c b/nis/nss_nis/nis-pwd.c index 7972118c84..1b5206ad6d 100644 --- a/nis/nss_nis/nis-pwd.c +++ b/nis/nss_nis/nis-pwd.c @@ -333,7 +333,8 @@ internal_nis_getpwent_r (struct passwd *pwd, char *buffer, size_t buflen, errnop); if (__builtin_expect (parse_res == -1, 0)) { - free (outkey); + if (!batch_read) + free (outkey); *errnop = ERANGE; return NSS_STATUS_TRYAGAIN; } |