(internal_setspent): Set FD_CLOEXEC for stream on input file.
[kopensolaris-gnu/glibc.git] / nis / ypclnt.c
index b128ad6..7c9efec 100644 (file)
@@ -20,7 +20,9 @@
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
-#include <libc-lock.h>
+#include <bits/libc-lock.h>
+#include <rpc/rpc.h>
+#include <rpcsvc/nis.h>
 #include <rpcsvc/yp.h>
 #include <rpcsvc/ypclnt.h>
 #include <rpcsvc/ypupd.h>
@@ -38,7 +40,7 @@ typedef struct dom_binding dom_binding;
 
 static struct timeval TIMEOUT = {25, 0};
 static int const MAXTRIES = 5;
-static char __ypdomainname[MAXHOSTNAMELEN + 1] = "\0";
+static char __ypdomainname[NIS_MAXNAMELEN + 1] = "\0";
 __libc_lock_define_initialized (static, ypbindlist_lock)
 static dom_binding *__ypbindlist = NULL;
 
@@ -123,17 +125,20 @@ __yp_bind (const char *domain, dom_binding ** ypdb)
             }
 
           if (clnt_call (client, YPBINDPROC_DOMAIN,
-                         (xdrproc_t) xdr_domainname, &domain,
+                         (xdrproc_t) xdr_domainname, (caddr_t) &domain,
                          (xdrproc_t) xdr_ypbind_resp,
-                         &ypbr, TIMEOUT) != RPC_SUCCESS)
+                         (caddr_t) &ypbr, TIMEOUT) != RPC_SUCCESS)
             {
               clnt_destroy (client);
+             close (clnt_sock);
               if (is_new)
                 free (ysd);
               return YPERR_YPBIND;
             }
 
           clnt_destroy (client);
+         close (clnt_sock);
+
           if (ypbr.ypbind_status != YPBIND_SUCC_VAL)
             {
               switch (ypbr.ypbind_resp_u.ypbind_error)
@@ -172,7 +177,10 @@ __yp_bind (const char *domain, dom_binding ** ypdb)
         }
 
       if (ysd->dom_client)
-        clnt_destroy (ysd->dom_client);
+       {
+         clnt_destroy (ysd->dom_client);
+         close (ysd->dom_socket);
+       }
       ysd->dom_socket = RPC_ANYSOCK;
       ysd->dom_client = clntudp_create (&ysd->dom_server_addr, YPPROG, YPVERS,
                                         TIMEOUT, &ysd->dom_socket);
@@ -304,7 +312,7 @@ yp_get_default_domain (char **outdomain)
 
   if (__ypdomainname[0] == '\0')
     {
-      if (getdomainname (__ypdomainname, MAXHOSTNAMELEN))
+      if (getdomainname (__ypdomainname, NIS_MAXNAMELEN))
        result = YPERR_NODOM;
       else
        *outdomain = __ypdomainname;
@@ -526,7 +534,8 @@ yp_order (const char *indomain, const char *inmap, unsigned int *outorder)
 }
 
 static void *ypall_data;
-static int (*ypall_foreach) ();
+static int (*ypall_foreach) __P ((int status, char *key, int keylen,
+                                 char *val, int vallen, char *data));
 
 static bool_t
 __xdr_ypresp_all (XDR * xdrs, u_long * objp)
@@ -628,21 +637,20 @@ yp_all (const char *indomain, const char *inmap,
       ypall_foreach = incallback->foreach;
       ypall_data = (void *) incallback->data;
 
-      result = clnt_call (clnt, YPPROC_ALL, (xdrproc_t) xdr_ypreq_nokey, &req,
-                         (xdrproc_t) __xdr_ypresp_all, &status, TIMEOUT);
+      result = clnt_call (clnt, YPPROC_ALL, (xdrproc_t) xdr_ypreq_nokey,
+                         (caddr_t) &req, (xdrproc_t) __xdr_ypresp_all,
+                         (caddr_t) &status, TIMEOUT);
 
+      clnt_destroy (clnt);
+      close (clnt_sock);
       if (result != RPC_SUCCESS)
        {
          clnt_perror (ydb->dom_client, "yp_all: clnt_call");
-         clnt_destroy (clnt);
          __yp_unbind (ydb);
          result = YPERR_RPC;
        }
       else
-       {
-         clnt_destroy (clnt);
-         result = YPERR_SUCCESS;
-       }
+       result = YPERR_SUCCESS;
 
       __libc_lock_unlock (ypbindlist_lock);
 
@@ -779,7 +787,7 @@ int
 yp_update (char *domain, char *map, unsigned ypop,
           char *key, int keylen, char *data, int datalen)
 {
-#if 0
+#if defined (HAVE_SECURE_RPC)
   union
     {
       ypupdate_args update_args;
@@ -845,8 +853,8 @@ yp_update (char *domain, char *map, unsigned ypop,
     clnt->cl_auth = authunix_create_default ();
 
 again:
-  r = clnt_call (clnt, ypop, xdr_argument, &args,
-                (xdrproc_t) xdr_u_int, &res, TIMEOUT);
+  r = clnt_call (clnt, ypop, xdr_argument, (caddr_t) &args,
+                (xdrproc_t) xdr_u_int, (caddr_t) &res, TIMEOUT);
 
   if (r == RPC_AUTHERROR)
     {