You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@apache.org on 2009/05/31 10:51:09 UTC

svn commit: r780385 - in /httpd/mod_ftp/trunk/modules/ftp: ftp_data_connection.c ftp_lowportd.c

Author: wrowe
Date: Sun May 31 08:51:08 2009
New Revision: 780385

URL: http://svn.apache.org/viewvc?rev=780385&view=rev
Log:
Compiles on Solaris.  With luck, this even works.

Modified:
    httpd/mod_ftp/trunk/modules/ftp/ftp_data_connection.c
    httpd/mod_ftp/trunk/modules/ftp/ftp_lowportd.c

Modified: httpd/mod_ftp/trunk/modules/ftp/ftp_data_connection.c
URL: http://svn.apache.org/viewvc/httpd/mod_ftp/trunk/modules/ftp/ftp_data_connection.c?rev=780385&r1=780384&r2=780385&view=diff
==============================================================================
--- httpd/mod_ftp/trunk/modules/ftp/ftp_data_connection.c (original)
+++ httpd/mod_ftp/trunk/modules/ftp/ftp_data_connection.c Sun May 31 08:51:08 2009
@@ -175,7 +175,7 @@
         fc->passive_created = -1;
     }
 
-#ifdef HAVE_NETINET_IP_H
+#ifdef HAVE_SOL_IP_H
     sopt = IPTOS_THROUGHPUT;
     if (((apr_os_sock_get(&sd, fc->datasock)) == APR_SUCCESS) &&
 #ifdef HAVE_SOL_IP

Modified: httpd/mod_ftp/trunk/modules/ftp/ftp_lowportd.c
URL: http://svn.apache.org/viewvc/httpd/mod_ftp/trunk/modules/ftp/ftp_lowportd.c?rev=780385&r1=780384&r2=780385&view=diff
==============================================================================
--- httpd/mod_ftp/trunk/modules/ftp/ftp_lowportd.c (original)
+++ httpd/mod_ftp/trunk/modules/ftp/ftp_lowportd.c Sun May 31 08:51:08 2009
@@ -191,16 +191,24 @@
     apr_status_t stat;
     int sd = -1;
     struct msghdr msg = {0};
+    int one;
+    struct iovec iov = {(void*)&one, sizeof(one)};
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
     struct cmsghdr *cmsg;
     union {
         struct cmsghdr align;
         char ccmsg[CMSG_SPACE(sizeof(*sockinfo.os_sock))];
     } msgbuf;
-    int one;
-    struct iovec iov = {&one, sizeof(one)};
 
     msg.msg_control = msgbuf.ccmsg;
     msg.msg_controllen = sizeof(msgbuf.ccmsg);
+#else
+    int fd = -1;
+
+    msg.msg_accrightslen = sizeof(fd);
+    msg.msg_accrights = (caddr_t)&fd;
+    sockinfo.os_sock = &fd;
+#endif
     msg.msg_iov = &iov;
     msg.msg_iovlen = 1;
 
@@ -239,16 +247,21 @@
             return stat;
         }
 
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
     cmsg = CMSG_FIRSTHDR(&msg);
-    if (!cmsg || cmsg->cmsg_level != SOL_SOCKET 
-              || cmsg->cmsg_type != SCM_RIGHTS) {
+    if (cmsg && CMSG_LEN == sizeof(int) && cmsg->cmsg_level == SOL_SOCKET
+                                        && cmsg->cmsg_type == SCM_RIGHTS)
+        sockinfo.os_sock = (int *)CMSG_DATA(cmsg);
+    else
+#else
+    if (msg.msg_accrightslen != sizeof(fd))
+#endif
+    {
         ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_EINVAL, r,
                       "ftp low numbered port request; unexpected response");
         close(sd);
         return APR_EINVAL;
     }
-
-    sockinfo.os_sock = (int *)CMSG_DATA(cmsg);
     sockinfo.family = sa->sa.sin.sin_family;
     sockinfo.type = SOCK_STREAM;
 #if APR_MAJOR_VERSION > 0
@@ -354,12 +367,14 @@
         int fd;
         int one = 1;
         struct msghdr msg = {0};
+        struct iovec iov = {(void*)&one, sizeof(one)};
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
         struct cmsghdr *cmsg;
         union {
             struct cmsghdr align;
             char ccmsg[CMSG_SPACE(sizeof(fd))];
         } msgbuf;
-        struct iovec iov = {&one, sizeof(one)};
+#endif
 
         apr_pool_clear(ptrans);
 
@@ -433,17 +448,24 @@
             continue;
         }
 
-        msg.msg_control = msgbuf.ccmsg;
-        msg.msg_controllen = sizeof(msgbuf.ccmsg);
         msg.msg_iov = &iov;
         msg.msg_iovlen = 1;
 
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+        msg.msg_control = msgbuf.ccmsg;
+        msg.msg_controllen = sizeof(msgbuf.ccmsg);
+
+
         cmsg = CMSG_FIRSTHDR(&msg);
         cmsg->cmsg_level = SOL_SOCKET;
         cmsg->cmsg_type = SCM_RIGHTS;
         cmsg->cmsg_len = CMSG_LEN(sizeof(fd));
         *(int*)CMSG_DATA(cmsg) = fd;
         msg.msg_controllen = cmsg->cmsg_len;
+#else
+        msg.msg_accrightslen = sizeof(fd);
+        msg.msg_accrights = (caddr_t)&fd;
+#endif
 
         while (sendmsg(sd2, &msg, 0) == -1)
             if (errno != EINTR) {