ben 99/09/18 04:48:17
Modified: src/lib/apr/include apr_network_io.h src/lib/apr/network_io/unix sockets.c src/main listen.c Log: Make ap_getipaddr threadsafe. Revision Changes Path 1.6 +1 -1 apache-2.0/src/lib/apr/include/apr_network_io.h Index: apr_network_io.h =================================================================== RCS file: /export/home/cvs/apache-2.0/src/lib/apr/include/apr_network_io.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- apr_network_io.h 1999/09/14 13:37:21 1.5 +++ apr_network_io.h 1999/09/18 11:48:14 1.6 @@ -126,7 +126,7 @@ ap_status_t ap_setport(ap_socket_t *, ap_uint32_t); ap_status_t ap_setipaddr(ap_socket_t *, const char *); ap_status_t ap_getport(ap_socket_t *, ap_uint32_t *); -ap_status_t ap_getipaddr(ap_socket_t *, char **); +ap_status_t ap_getipaddr(char *buf, ap_ssize_t len, const ap_socket_t *sock); ap_status_t ap_setup_poll(ap_context_t *, ap_int32_t, ap_pollfd_t **); ap_status_t ap_poll(ap_pollfd_t *, ap_int32_t *, ap_int32_t); 1.8 +7 -5 apache-2.0/src/lib/apr/network_io/unix/sockets.c Index: sockets.c =================================================================== RCS file: /export/home/cvs/apache-2.0/src/lib/apr/network_io/unix/sockets.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- sockets.c 1999/09/14 13:37:24 1.7 +++ sockets.c 1999/09/18 11:48:16 1.8 @@ -196,15 +196,17 @@ } /* ***APRDOC******************************************************** - * ap_status_t ap_getipaddr(ap_socket_t *, char **addr) + * ap_status_t ap_getipaddr(char *addr, int len, const ap_socket_t *) * Return the IP address associated with an apr socket. - * arg 1) The socket to use - * arg 2) The IP address associated with the socket. + * arg 1) A buffer for the IP address associated with the socket. + * arg 2) The total length of the buffer (including terminating NUL) + * arg 3) The socket to use */ -ap_status_t ap_getipaddr(struct socket_t *sock, char **addr) +ap_status_t ap_getipaddr(char *addr, ap_ssize_t len, + const struct socket_t *sock) { char *temp = inet_ntoa(sock->addr->sin_addr); - *addr=temp; + ap_cpystrn(addr,temp,len-1); return APR_SUCCESS; } 1.8 +2 -2 apache-2.0/src/main/listen.c Index: listen.c =================================================================== RCS file: /export/home/cvs/apache-2.0/src/main/listen.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- listen.c 1999/09/08 14:15:43 1.7 +++ listen.c 1999/09/18 11:48:17 1.8 @@ -153,13 +153,13 @@ { ap_listen_rec **walk; ap_listen_rec *new; - char *oldaddr; + char oldaddr[17]; unsigned int oldport; /* see if we've got an old listener for this address:port */ for (walk = &old_listeners; *walk; walk = &(*walk)->next) { ap_getport((*walk)->sd, &oldport); - ap_getipaddr((*walk)->sd, &oldaddr); + ap_getipaddr(oldaddr,sizeof oldaddr,(*walk)->sd); if (!strcmp(oldaddr, addr) && port == oldport) { /* re-use existing record */ new = *walk;