]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 30 Jan 1998 13:22:30 +0000 (13:22 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 30 Jan 1998 13:22:30 +0000 (13:22 +0000)
1998-01-30 22:12  Ulrich Drepper  <drepper@cygnus.com>

* sysdeps/unix/sysv/linux/Makefile [$(subdir)==nis]: Define
CFLAGS-ypclnt.c to -DUSE_BINDINGDIR=1.

1998-01-30  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>

* nis/ypclnt.c: Try at first to use the binding file from ypbind
before using RPC.

ChangeLog
nis/ypclnt.c
sysdeps/unix/sysv/linux/Makefile

index 23081a9e38a6806ace254d52a71ecc19c7affb32..b99c3a82d75de7c3fa34142a91c73a2f555d7237 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+1998-01-30 22:12  Ulrich Drepper  <drepper@cygnus.com>
+
+       * sysdeps/unix/sysv/linux/Makefile [$(subdir)==nis]: Define
+       CFLAGS-ypclnt.c to -DUSE_BINDINGDIR=1.
+
+1998-01-30  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de>
+
+       * nis/ypclnt.c: Try at first to use the binding file from ypbind
+       before using RPC.
+
 1998-01-28  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
 
        * manual/memory.texi (Heap Consistency Checking): mcheck is
index c661ee32629cd1652e861bd8313a941f41ec29db..a20d4926aa9dfdc177a57c7bf63639a9eba383bf 100644 (file)
 #include <rpcsvc/yp.h>
 #include <rpcsvc/ypclnt.h>
 #include <rpcsvc/ypupd.h>
+#include <sys/uio.h>
 #include <bits/libc-lock.h>
 
+/* This should only be defined on systems with a BSD compatible ypbind */
+#ifndef BINDINGDIR
+# define BINDINGDIR "/var/yp/binding"
+#endif
+
 struct dom_binding
   {
     struct dom_binding *dom_pnext;
@@ -91,6 +97,44 @@ __yp_bind (const char *domain, dom_binding **ypdb)
           return YPERR_YPBIND;
         }
 
+#if USE_BINDINGDIR
+      if (ysd->dom_vers < 1)
+       {
+         char path[sizeof (BINDINGDIR) - 1 + strlen (domain) + 10];
+         struct iovec vec[2];
+         u_short port;
+         int fd;
+
+         sprintf (path, "%s/%s.%ld", BINDINGDIR, domain, YPBINDVERS);
+         fd = open (path, O_RDONLY);
+         if (fd >= 0)
+           {
+             /* We have a binding file and could save a RPC call */
+             vec[0].iov_base = &port;
+             vec[0].iov_len = sizeof (port);
+             vec[1].iov_base = &ypbr;
+             vec[1].iov_len = sizeof (ypbr);
+
+             if (readv (fd, vec, 2) == vec[0].iov_len + vec[1].iov_len)
+               {
+                 memset (&ysd->dom_server_addr, '\0',
+                         sizeof ysd->dom_server_addr);
+                 ysd->dom_server_addr.sin_family = AF_INET;
+                 memcpy (&ysd->dom_server_addr.sin_port,
+                         ypbr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_port,
+                         sizeof (ysd->dom_server_addr.sin_port));
+                 memcpy (&ysd->dom_server_addr.sin_addr.s_addr,
+                         ypbr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_addr,
+                         sizeof (ysd->dom_server_addr.sin_addr.s_addr));
+                 ysd->dom_vers = YPVERS;
+                 strncpy (ysd->dom_domain, domain, YPMAXDOMAIN);
+                 ysd->dom_domain[YPMAXDOMAIN] = '\0';
+               }
+             close (fd);
+           }
+       }
+#endif /* USE_BINDINGDIR */
+
       if (ysd->dom_vers == -1)
         {
           if(ysd->dom_client)
@@ -116,12 +160,12 @@ __yp_bind (const char *domain, dom_binding **ypdb)
           ** If not, it's possible someone has registered a bogus
           ** ypbind with the portmapper and is trying to trick us.
           */
-          if (ntohs(clnt_saddr.sin_port) >= IPPORT_RESERVED)
+          if (ntohs (clnt_saddr.sin_port) >= IPPORT_RESERVED)
             {
-              clnt_destroy(client);
+              clnt_destroy (client);
               if (is_new)
-                free(ysd);
-              return(YPERR_YPBIND);
+                free (ysd);
+              return YPERR_YPBIND;
             }
 
           if (clnt_call (client, YPBINDPROC_DOMAIN,
index a71ee439a0b90ac19c75d0a4e5c41385bde487e6..0dece5642a375c43aefb309c36be632a74bd89fd 100644 (file)
@@ -125,4 +125,8 @@ ifeq ($(subdir),dirent)
 sysdep_routines += getdents64
 endif
 
+ifeq ($(subdir),nis)
+CFLAGS-ypclnt.c = -DUSE_BINDINGDIR=1
+endif
+
 common-generated += bits/stdio_lim.h bits/stdio_lim.d