Define as __pwrite and make pwrite weak alias.
[kopensolaris-gnu/glibc.git] / nis / ypclnt.c
index 8e24ca4..c8db8a8 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
 
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
-#include <libc-lock.h>
+#include <bits/libc-lock.h>
+#include <rpc/auth.h>
+#include <rpc/rpc.h>
+#include <rpcsvc/nis.h>
 #include <rpcsvc/yp.h>
 #include <rpcsvc/ypclnt.h>
 #include <rpcsvc/ypupd.h>
@@ -38,11 +41,10 @@ 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;
 
-extern void xdr_free (xdrproc_t proc, char *objp);
 
 static int
 __yp_bind (const char *domain, dom_binding ** ypdb)
@@ -124,17 +126,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)
@@ -168,11 +173,15 @@ __yp_bind (const char *domain, dom_binding ** ypdb)
                   ypbr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_addr,
                   sizeof (ysd->dom_server_addr.sin_addr.s_addr));
           ysd->dom_vers = YPVERS;
-          strcpy (ysd->dom_domain, domain);
+          strncpy (ysd->dom_domain, domain, YPMAXDOMAIN);
+         ysd->dom_domain[YPMAXDOMAIN] = '\0';
         }
 
       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 +313,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;
@@ -349,9 +358,9 @@ yp_match (const char *indomain, const char *inmap, const char *inkey,
       inkey == NULL || inkey[0] == '\0' || inkeylen <= 0)
     return YPERR_BADARGS;
 
-  req.domain = indomain;
-  req.map = inmap;
-  req.key.keydat_val = inkey;
+  req.domain = (char *) indomain;
+  req.map = (char *) inmap;
+  req.key.keydat_val = (char *) inkey;
   req.key.keydat_len = inkeylen;
 
   *outval = NULL;
@@ -389,8 +398,8 @@ yp_first (const char *indomain, const char *inmap, char **outkey,
       inmap == NULL || inmap[0] == '\0')
     return YPERR_BADARGS;
 
-  req.domain = indomain;
-  req.map = inmap;
+  req.domain = (char *) indomain;
+  req.map = (char *) inmap;
 
   *outkey = *outval = NULL;
   *outkeylen = *outvallen = 0;
@@ -433,9 +442,9 @@ yp_next (const char *indomain, const char *inmap, const char *inkey,
       inkeylen <= 0 || inkey == NULL || inkey[0] == '\0')
     return YPERR_BADARGS;
 
-  req.domain = indomain;
-  req.map = inmap;
-  req.key.keydat_val = inkey;
+  req.domain = (char *) indomain;
+  req.map = (char *) inmap;
+  req.key.keydat_val = (char *) inkey;
   req.key.keydat_len = inkeylen;
 
   *outkey = *outval = NULL;
@@ -476,8 +485,8 @@ yp_master (const char *indomain, const char *inmap, char **outname)
       inmap == NULL || inmap[0] == '\0')
     return YPERR_BADARGS;
 
-  req.domain = indomain;
-  req.map = inmap;
+  req.domain = (char *) indomain;
+  req.map = (char *) inmap;
 
   memset (&resp, '\0', sizeof (ypresp_master));
 
@@ -506,8 +515,8 @@ yp_order (const char *indomain, const char *inmap, unsigned int *outorder)
       inmap == NULL || inmap == '\0')
     return YPERR_BADARGS;
 
-  req.domain = indomain;
-  req.map = inmap;
+  req.domain = (char *) indomain;
+  req.map = (char *) inmap;
 
   memset (&resp, '\0', sizeof (resp));
 
@@ -526,7 +535,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)
@@ -618,31 +628,30 @@ yp_all (const char *indomain, const char *inmap,
       clnt = clnttcp_create (&clnt_sin, YPPROG, YPVERS, &clnt_sock, 0, 0);
       if (clnt == NULL)
        {
-         puts ("yp_all: clnttcp_create failed");
+         puts (_("yp_all: clnttcp_create failed"));
          __libc_lock_unlock (ypbindlist_lock);
          return YPERR_PMAP;
        }
-      req.domain = indomain;
-      req.map = inmap;
+      req.domain = (char *) indomain;
+      req.map = (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 +788,6 @@ int
 yp_update (char *domain, char *map, unsigned ypop,
           char *key, int keylen, char *data, int datalen)
 {
-#if 0
   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)
     {
@@ -864,7 +872,4 @@ again:
       return YPERR_RPC;
     }
   return res;
-#else
-  return YPERR_YPERR;
-#endif
 }