aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--nis/nis_call.c7
-rw-r--r--nis/ypclnt.c20
3 files changed, 25 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 586e87527c..711db65dea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+1998-03-06 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * nis/nis_call.c (__do_niscall): Safe and reset errno.
+
+ * nis/ypclnt.c (__yp_bind): Safe and reset errno.
+
1998-03-01 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* sysdeps/generic/getresuid.c (__getresuid): Use ISO C
diff --git a/nis/nis_call.c b/nis/nis_call.c
index 196f6b36f1..8e0aca20ce 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 9b936457a5..924a6293f1 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;
}