diff options
Diffstat (limited to 'nis')
-rw-r--r-- | nis/nis_call.c | 7 | ||||
-rw-r--r-- | nis/ypclnt.c | 20 |
2 files changed, 19 insertions, 8 deletions
diff --git a/nis/nis_call.c b/nis/nis_call.c index 196f6b3..8e0aca2 100644 --- a/nis/nis_call.c +++ b/nis/nis_call.c @@ -17,6 +17,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <errno.h> #include <fcntl.h> #include <string.h> #include <rpc/rpc.h> @@ -559,6 +560,7 @@ __do_niscall (const_nis_name name, u_long prog, xdrproc_t xargs, nis_server *server; u_int server_len; cache2_info cinfo = {-1, -1, -1}; + int saved_errno = errno; if (name == NULL) return NIS_BADNAME; @@ -572,7 +574,10 @@ __do_niscall (const_nis_name name, u_long prog, xdrproc_t xargs, nis_error status; dir = readColdStartFile (); if (dir == NULL) /* No /var/nis/NIS_COLD_START->no NIS+ installed */ - return NIS_UNAVAIL; + { + __set_errno (saved_errno); + return NIS_UNAVAIL; + } dir = rec_dirsearch (name, dir, flags, &status); if (dir == NULL) diff --git a/nis/ypclnt.c b/nis/ypclnt.c index 9b93645..924a629 100644 --- a/nis/ypclnt.c +++ b/nis/ypclnt.c @@ -104,6 +104,7 @@ __yp_bind (const char *domain, dom_binding **ypdb) struct iovec vec[2]; u_short port; int fd; + int saved_errno = errno; sprintf (path, "%s/%s.%ld", BINDINGDIR, domain, YPBINDVERS); fd = open (path, O_RDONLY); @@ -132,17 +133,20 @@ __yp_bind (const char *domain, dom_binding **ypdb) } close (fd); } + __set_errno (saved_errno); } #endif /* USE_BINDINGDIR */ if (ysd->dom_vers == -1) - { - if(ysd->dom_client) - { - clnt_destroy(ysd->dom_client); - ysd->dom_client = NULL; - ysd->dom_socket = -1; - } + { + int saved_errno = errno; + + if(ysd->dom_client) + { + clnt_destroy(ysd->dom_client); + ysd->dom_client = NULL; + ysd->dom_socket = -1; + } memset (&clnt_saddr, '\0', sizeof clnt_saddr); clnt_saddr.sin_family = AF_INET; clnt_saddr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); @@ -153,6 +157,7 @@ __yp_bind (const char *domain, dom_binding **ypdb) { if (is_new) free (ysd); + __set_errno (saved_errno); return YPERR_YPBIND; } /* @@ -165,6 +170,7 @@ __yp_bind (const char *domain, dom_binding **ypdb) clnt_destroy (client); if (is_new) free (ysd); + __set_errno (saved_errno); return YPERR_YPBIND; } |