]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - nis/ypclnt.c
* nis/nss_nis/nis-hosts.c (_nss_nis_gethostbyname4_r): Fix memory
[thirdparty/glibc.git] / nis / ypclnt.c
index ae04ee9212293b7b12f40345f40da0dd4e0ceb3f..aaf4eb6e5945dc7bfb5e8719f52b383f477fae72 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-2001, 2002, 2003, 2004, 2005, 2006
+/* Copyright (C) 1996-2001, 2002, 2003, 2004, 2005, 2006, 2008
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
@@ -28,6 +28,7 @@
 #include <rpcsvc/yp.h>
 #include <rpcsvc/ypclnt.h>
 #include <rpcsvc/ypupd.h>
+#include <sys/socket.h>
 #include <sys/uio.h>
 #include <bits/libc-lock.h>
 
@@ -69,14 +70,24 @@ yp_bind_client_create (const char *domain, dom_binding *ysd,
   ysd->dom_domain[YPMAXDOMAIN] = '\0';
 
   ysd->dom_socket = RPC_ANYSOCK;
-  ysd->dom_client = clntudp_create (&ysd->dom_server_addr, YPPROG, YPVERS,
-                                   UDPTIMEOUT, &ysd->dom_socket);
+#ifdef SOCK_CLOEXEC
+# define xflags SOCK_CLOEXEC
+#else
+# define xflags 0
+#endif
+  ysd->dom_client = __libc_clntudp_bufcreate (&ysd->dom_server_addr, YPPROG,
+                                             YPVERS, UDPTIMEOUT,
+                                             &ysd->dom_socket,
+                                             UDPMSGSIZE, UDPMSGSIZE,
+                                             xflags);
 
   if (ysd->dom_client != NULL)
     {
+#ifndef SOCK_CLOEXEC
       /* If the program exits, close the socket */
       if (fcntl (ysd->dom_socket, F_SETFD, FD_CLOEXEC) == -1)
        perror ("fcntl: F_SETFD");
+#endif
     }
 }
 
@@ -634,7 +645,7 @@ yp_order (const char *indomain, const char *inmap, unsigned int *outorder)
                         (caddr_t) &req, (xdrproc_t) xdr_ypresp_order,
                         (caddr_t) &resp);
 
-  if (result == YPERR_SUCCESS)
+  if (result != YPERR_SUCCESS)
     return result;
 
   *outorder = resp.ordernum;