about summary refs log tree commit diff
path: root/nis/ypclnt.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2008-07-25 17:06:50 +0000
committerUlrich Drepper <drepper@redhat.com>2008-07-25 17:06:50 +0000
commit8ccf22f93431a2f8c77de708cd3b15325c8fe0f4 (patch)
treeea971b1800c807ebd69b29a80b01f06a9c71b34f /nis/ypclnt.c
parent3ff2c948beaad303e376e1ad778d1cd8693a3099 (diff)
downloadglibc-8ccf22f93431a2f8c77de708cd3b15325c8fe0f4.tar.gz
glibc-8ccf22f93431a2f8c77de708cd3b15325c8fe0f4.tar.xz
glibc-8ccf22f93431a2f8c77de708cd3b15325c8fe0f4.zip
* include/rpc/clnt.h: Declare __libc_clntudp_bufcreate and
	__libc_clntudp_bufcreate_internal.
	* include/sys/socket.h: Declare __have_sock_cloexec.
	* socket/Makefile (aux): Add have_sock_cloexec.
	* socket/have_sock_cloexec.c: New file.
	* sunrpc/clnt_udp.h (clntudp_bufcreate): Now a wrapper around
	__libc_clntudp_bufcreate.
	(__libc_clntudp_bufcreate): Former implementation of clntudp_bufcreate
	which takes an additional parameter.  Create socket with non-blocking
	mode and close-on-exec flag set, if wanted.
	* sunrpc/Versions: Export __libc_clntudp_bufcreate@GLIBC_PRIVATE.
	* nis/ypclnt.c (yp_bind_client_create): Use __libc_clntpudp_bufcreate
	instead of clntudp_create.  The socket has already the close-on-exec
	flag set if SOCK_CLOEXEC is defined.
Diffstat (limited to 'nis/ypclnt.c')
-rw-r--r--nis/ypclnt.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/nis/ypclnt.c b/nis/ypclnt.c
index 7d0091bd26..aaf4eb6e59 100644
--- a/nis/ypclnt.c
+++ b/nis/ypclnt.c
@@ -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
     }
 }