From 758b9d7efe599e3de3472593b6f8f03cfc29ea92 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 18 May 2006 14:52:08 +0000 Subject: * 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 * nis/nis_call.c (rec_dirsearch): Little optimization: pull nis_free_directory forward to avoid duplication. --- nis/nis_call.c | 62 +++++++++++++++++++++++++++------------------------------- 1 file changed, 29 insertions(+), 33 deletions(-) (limited to 'nis/nis_call.c') 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; -- cgit v1.2.3