diff options
author | Ulrich Drepper <drepper@redhat.com> | 2006-05-18 14:52:08 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2006-05-18 14:52:08 +0000 |
commit | 758b9d7efe599e3de3472593b6f8f03cfc29ea92 (patch) | |
tree | 2e7d4cf5fe8c0d5431c3951a55b2e5445b72261d /nis/nis_call.c | |
parent | 5f1724bf0306309e7da4ebf7fcc19c03fdbf1142 (diff) | |
download | glibc-758b9d7efe599e3de3472593b6f8f03cfc29ea92.tar glibc-758b9d7efe599e3de3472593b6f8f03cfc29ea92.tar.gz glibc-758b9d7efe599e3de3472593b6f8f03cfc29ea92.tar.bz2 glibc-758b9d7efe599e3de3472593b6f8f03cfc29ea92.zip |
* nis/nss_compat/compat-pwd.c (internal_setpwent): If nss_set*ent
returned NSS_STATUS_UNAVAIL, still return NSS_STATUS_SUCCESS.
* nis/nss_compat/compat-spwd.c (internal_setspent): Likewise.
* nis/nss_compat/compat-grp.c (internal_setgrent): Likewise.
* nis/nss_compat/compat-initgroups.c (nss_setgrent, nss_endgrent):
Removed.
(init_nss_interface): Remove initialization of these variables.
2006-05-18 Ulrich Drepper <drepper@redhat.com>
* nis/nis_call.c (rec_dirsearch): Little optimization: pull
nis_free_directory forward to avoid duplication.
Diffstat (limited to 'nis/nis_call.c')
-rw-r--r-- | nis/nis_call.c | 62 |
1 files changed, 29 insertions, 33 deletions
diff --git a/nis/nis_call.c b/nis/nis_call.c index 8298dc304f..753ef77997 100644 --- a/nis/nis_call.c +++ b/nis/nis_call.c @@ -370,6 +370,7 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status) fd_res = __nis_finddirectory (dir, ndomain); if (fd_res == NULL) { + nis_free_directory (dir); *status = NIS_NOMEMORY; return NULL; } @@ -380,31 +381,25 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status) __free_fdresult (fd_res); return dir; } + nis_free_directory (dir); obj = calloc (1, sizeof (directory_obj)); + if (obj == NULL) + { + __free_fdresult (fd_res); + *status = NIS_NOMEMORY; + return NULL; + } xdrmem_create (&xdrs, fd_res->dir_data.dir_data_val, fd_res->dir_data.dir_data_len, XDR_DECODE); _xdr_directory_obj (&xdrs, obj); xdr_destroy (&xdrs); __free_fdresult (fd_res); - if (obj != NULL) - { - /* We have found a NIS+ server serving ndomain, now - let us search for "name" */ - nis_free_directory (dir); - dir = rec_dirsearch (name, obj, status); - if (dir != obj) - /* This also covers the case dir == NULL. */ - nis_free_directory (obj); - return dir; - } - else - { - /* Ups, very bad. Are we already the root server ? */ - nis_free_directory (dir); - return NULL; - } + + /* We have found a NIS+ server serving ndomain, now + let us search for "name" */ + return rec_dirsearch (name, obj, status); } - break; + break; case LOWER_NAME: { directory_obj *obj; @@ -444,6 +439,7 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status) fd_res = __nis_finddirectory (dir, leaf); if (fd_res == NULL) { + nis_free_directory (dir); *status = NIS_NOMEMORY; return NULL; } @@ -454,21 +450,24 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status) __free_fdresult (fd_res); return dir; } - obj = calloc(1, sizeof(directory_obj)); - xdrmem_create(&xdrs, fd_res->dir_data.dir_data_val, - fd_res->dir_data.dir_data_len, XDR_DECODE); - _xdr_directory_obj(&xdrs, obj); - xdr_destroy(&xdrs); - __free_fdresult (fd_res); - if (obj != NULL) + nis_free_directory (dir); + obj = calloc (1, sizeof(directory_obj)); + if (obj == NULL) { - /* We have found a NIS+ server serving ndomain, now - let us search for "name" */ - nis_free_directory (dir); - return rec_dirsearch (name, obj, status); + __free_fdresult (fd_res); + *status = NIS_NOMEMORY; + return NULL; } + xdrmem_create (&xdrs, fd_res->dir_data.dir_data_val, + fd_res->dir_data.dir_data_len, XDR_DECODE); + _xdr_directory_obj (&xdrs, obj); + xdr_destroy (&xdrs); + __free_fdresult (fd_res); + /* We have found a NIS+ server serving ndomain, now + let us search for "name" */ + return rec_dirsearch (name, obj, status); } - break; + break; case BAD_NAME: nis_free_directory (dir); *status = NIS_BADNAME; @@ -547,9 +546,6 @@ __nisfind_server (const_nis_name name, directory_obj **dir) obj = rec_dirsearch (name, *dir, &status); if (obj == NULL) result = status; - - if (*dir != obj) - nis_free_directory (*dir); } *dir = obj; |