]> arthur.barton.de Git - netatalk.git/blobdiff - etc/cnid_dbd/cnid_metad.c
fix a signed/unsigned, 16/32 bits mismatch. from Burkhard Schmidt, bs at cpfs.mpg.de.
[netatalk.git] / etc / cnid_dbd / cnid_metad.c
index c488ada0ddcfeca029953c8f15d2a060d7c013f5..d5c44d028d597305cc233532519e51386a11d6c0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: cnid_metad.c,v 1.1.4.11 2004-01-09 21:05:50 lenneis Exp $
+ * $Id: cnid_metad.c,v 1.1.4.15 2004-09-06 07:19:21 didg Exp $
  *
  * Copyright (C) Joerg Lenneis 2003
  * All Rights Reserved.  See COPYING.
@@ -132,11 +132,19 @@ static int send_cred(int socket, int fd)
    struct msghdr msgh; 
    struct iovec iov[1];
    struct cmsghdr *cmsgp = NULL;
-   char buf[CMSG_SPACE(sizeof fd)];
+   char *buf;
+   size_t size;
    int er=0;
 
+   size = CMSG_SPACE(sizeof fd);
+   buf = malloc(size);
+   if (!buf) {
+       LOG(log_error, logtype_cnid, "error in sendmsg: %s", strerror(errno));
+       return -1;
+   }
+
    memset(&msgh,0,sizeof (msgh));
-   memset(buf,0,sizeof (buf));
+   memset(buf,0, size);
 
    msgh.msg_name = NULL;
    msgh.msg_namelen = 0;
@@ -148,7 +156,7 @@ static int send_cred(int socket, int fd)
    iov[0].iov_len = sizeof(er);
 
    msgh.msg_control = buf;
-   msgh.msg_controllen = sizeof(buf);
+   msgh.msg_controllen = size;
 
    cmsgp = CMSG_FIRSTHDR(&msgh);
    cmsgp->cmsg_level = SOL_SOCKET;
@@ -163,8 +171,10 @@ static int send_cred(int socket, int fd)
    } while ( ret == -1 && errno == EINTR );
    if (ret == -1) {
        LOG(log_error, logtype_cnid, "error in sendmsg: %s", strerror(errno));
+       free(buf);
        return -1;
    }
+   free(buf);
    return 0;
 }
 
@@ -361,7 +371,7 @@ int main(int argc, char *argv[])
     int   status;
     char  *dbdpn = _PATH_CNID_DBD;
     char  *host = DEFAULTHOST;
-    int   port = DEFAULTPORT;
+    u_int16_t   port = DEFAULTPORT;
     struct db_param *dbp;
     int    i;
     int    cc;
@@ -370,6 +380,8 @@ int main(int argc, char *argv[])
     int    err = 0;
     int    debug = 0;
     int    ret;
+
+    set_processname("cnid_metad");
     
     while (( cc = getopt( argc, argv, "ds:p:h:u:g:")) != -1 ) {
         switch (cc) {