You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by bn...@apache.org on 2003/09/18 20:54:27 UTC

cvs commit: apache-1.3/src CHANGES

bnicholes    2003/09/18 11:54:27

  Modified:    src/main rfc1413.c
               src      CHANGES
  Log:
  Enabled the RFC1413 ident functionality for Win32 and NetWare.  Also introduced
  a thread-safe socket timeout alternative that can be adapted for other non-winsock
  platforms
  
  Revision  Changes    Path
  1.44      +47 -6     apache-1.3/src/main/rfc1413.c
  
  Index: rfc1413.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/rfc1413.c,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- rfc1413.c	16 Sep 2003 23:26:18 -0000	1.43
  +++ rfc1413.c	18 Sep 2003 18:54:26 -0000	1.44
  @@ -99,6 +99,38 @@
   
   int ap_rfc1413_timeout = RFC1413_TIMEOUT;	/* Global so it can be changed */
   
  +#if (defined (NETWARE) || defined (WIN32))
  +#define write(a,b,c) send(a,b,c,0)
  +#define read(a,b,c) recv(a,b,c,0)
  +#endif
  +
  +#ifdef MULTITHREAD
  +#define RFC_USER_STATIC 
  +
  +static int setsocktimeout (int sock, int timeout)
  +{
  +#if (defined (NETWARE) || defined (WIN32))
  +    u_long msec = 0;
  +
  +    /* Make sure that we are in blocking mode */
  +    if (ioctlsocket(sock, FIONBIO, &msec) == SOCKET_ERROR) {
  +        return h_errno;
  +    }
  +
  +    /* Win32 timeouts are in msec, represented as int */
  +    msec = timeout * 1000;
  +    setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, 
  +               (char *) &msec, sizeof(msec));
  +    setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, 
  +               (char *) &msec, sizeof(msec));
  +#else
  +    //XXX Needs to be implemented for non-winsock platforms
  +#endif
  +    return 0;
  +}
  +#else /* MULTITHREAD */
  +
  +#define RFC_USER_STATIC static
   static JMP_BUF timebuf;
   
   /* ident_timeout - handle timeouts */
  @@ -106,6 +138,7 @@
   {
       ap_longjmp(timebuf, sig);
   }
  +#endif
   
   /* bind_connect - bind both ends of a socket */
   /* Ambarish fix this. Very broken */
  @@ -237,22 +270,28 @@
   /* rfc1413 - return remote user name, given socket structures */
   API_EXPORT(char *) ap_rfc1413(conn_rec *conn, server_rec *srv)
   {
  -    static char user[RFC1413_USERLEN + 1];	/* XXX */
  -    static char *result;
  -    static int sock;
  +    RFC_USER_STATIC char user[RFC1413_USERLEN + 1];	/* XXX */
  +    RFC_USER_STATIC char *result;
  +    RFC_USER_STATIC int sock;
   
       result = FROM_UNKNOWN;
   
       sock = ap_psocket_ex(conn->pool, AF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
       if (sock < 0) {
  -	ap_log_error(APLOG_MARK, APLOG_CRIT, srv,
  -		    "socket: rfc1413: error creating socket");
  -	conn->remote_logname = result;
  +    	ap_log_error(APLOG_MARK, APLOG_CRIT, srv,
  +    		    "socket: rfc1413: error creating socket");
  +    	conn->remote_logname = result;
       }
   
       /*
        * Set up a timer so we won't get stuck while waiting for the server.
        */
  +#ifdef MULTITHREAD
  +    if (setsocktimeout(sock, ap_rfc1413_timeout) == 0) {
  +        if (get_rfc1413(sock, &conn->local_addr, &conn->remote_addr, user, srv) >= 0)
  +            result = ap_pstrdup (conn->pool, user);
  +    }
  +#else
       if (ap_setjmp(timebuf) == 0) {
   	ap_set_callback_and_alarm(ident_timeout, ap_rfc1413_timeout);
   
  @@ -260,8 +299,10 @@
   	    result = user;
       }
       ap_set_callback_and_alarm(NULL, 0);
  +#endif
       ap_pclosesocket(conn->pool, sock);
       conn->remote_logname = result;
   
       return conn->remote_logname;
   }
  +
  
  
  
  1.1905    +6 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1904
  retrieving revision 1.1905
  diff -u -r1.1904 -r1.1905
  --- CHANGES	2 Sep 2003 18:17:04 -0000	1.1904
  +++ CHANGES	18 Sep 2003 18:54:26 -0000	1.1905
  @@ -1,5 +1,11 @@
   Changes with Apache 1.3.29
   
  +  *) Enabled RFC1413 ident functionality for both Win32 and
  +     NetWare platforms.  This also included an alternate thread safe
  +     implementation of the socket timout functionality when querying
  +     the identd daemon.
  +     [Brad Nicholes, William Rowe]
  +     
     *) Prevent creation of subprocess Zombies when using CGI wrappers
        such as suExec and cgiwrap. PR 21737. [Numerous]
   
  
  
  

Re: cvs commit: apache-1.3/src CHANGES

Posted by Brian Havard <br...@kheldar.apana.org.au>.
On Thu, 18 Sep 2003 14:49:33 -0500, William A. Rowe, Jr. wrote:

>At 02:28 PM 9/18/2003, Jeff Trawick wrote:
>>bnicholes@apache.org wrote:
>>
>>>  Index: rfc1413.c
>>>  ===================================================================
>>>  +    /* Win32 timeouts are in msec, represented as int */
>>>  +    msec = timeout * 1000;
>>>  +    setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,   +               (char *) &msec, sizeof(msec));
>>>  +    setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO,   +               (char *) &msec, sizeof(msec));
>>>  +#else
>>>  +    //XXX Needs to be implemented for non-winsock platforms
>>
>>watch your language
>
>:~P  
>
>Question is - who else has threaded, non-winsock httpd-1.3 implementations?
>Does OS2?  I thought we had one other threaded unixish exception, but a very
>quick grep for MULITTHREAD within src/os didn't reveal anything.

1.3 is not multi-threaded on OS/2.

-- 
 ______________________________________________________________________________
 |  Brian Havard                 |  "He is not the messiah!                   |
 |  brianh@kheldar.apana.org.au  |  He's a very naughty boy!" - Life of Brian |
 ------------------------------------------------------------------------------


Re: cvs commit: apache-1.3/src CHANGES

Posted by "William A. Rowe, Jr." <wr...@rowe-clan.net>.
At 02:28 PM 9/18/2003, Jeff Trawick wrote:
>bnicholes@apache.org wrote:
>
>>  Index: rfc1413.c
>>  ===================================================================
>>  +    /* Win32 timeouts are in msec, represented as int */
>>  +    msec = timeout * 1000;
>>  +    setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,   +               (char *) &msec, sizeof(msec));
>>  +    setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO,   +               (char *) &msec, sizeof(msec));
>>  +#else
>>  +    //XXX Needs to be implemented for non-winsock platforms
>
>watch your language

:~P  

Question is - who else has threaded, non-winsock httpd-1.3 implementations?
Does OS2?  I thought we had one other threaded unixish exception, but a very
quick grep for MULITTHREAD within src/os didn't reveal anything.

Bill




Re: cvs commit: apache-1.3/src CHANGES

Posted by Jeff Trawick <tr...@attglobal.net>.
bnicholes@apache.org wrote:

>   Index: rfc1413.c
>   ===================================================================
>   +    /* Win32 timeouts are in msec, represented as int */
>   +    msec = timeout * 1000;
>   +    setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, 
>   +               (char *) &msec, sizeof(msec));
>   +    setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, 
>   +               (char *) &msec, sizeof(msec));
>   +#else
>   +    //XXX Needs to be implemented for non-winsock platforms

watch your language