@@ -213,17 +213,26 @@ static int unique_id_global_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *pt
213213 return HTTP_INTERNAL_SERVER_ERROR ;
214214 }
215215
216- /* XXX theoretically there are boxes out there which want to use
217- * mod_unique_id but which have no IPv4 address... send in a patch :)
218- */
219- if (( rv = apr_sockaddr_info_get ( & sockaddr , str , AF_INET , 0 , 0 , p )) != APR_SUCCESS ) {
216+ if (( rv = apr_sockaddr_info_get ( & sockaddr , str , AF_INET , 0 , 0 , p )) == APR_SUCCESS ) {
217+ global_in_addr = sockaddr -> sa . sin . sin_addr . s_addr ;
218+ }
219+ else {
220220 ap_log_error (APLOG_MARK , APLOG_ALERT , rv , main_server ,
221221 "mod_unique_id: unable to find IPv4 address of \"%s\"" , str );
222+ #if APR_HAVE_IPV6
223+ if ((rv = apr_sockaddr_info_get (& sockaddr , str , AF_INET6 , 0 , 0 , p )) == APR_SUCCESS ) {
224+ memcpy (& global_in_addr ,
225+ sockaddr -> ipaddr_ptr + sockaddr -> ipaddr_len - sizeof (global_in_addr ),
226+ sizeof (global_in_addr ));
227+ ap_log_error (APLOG_MARK , APLOG_ALERT , rv , main_server ,
228+ "mod_unique_id: using low-order bits of IPv6 address "
229+ "as if they were unique" );
230+ }
231+ else
232+ #endif
222233 return HTTP_INTERNAL_SERVER_ERROR ;
223234 }
224235
225- global_in_addr = sockaddr -> sa .sin .sin_addr .s_addr ;
226-
227236 apr_sockaddr_ip_get (& ipaddrstr , sockaddr );
228237 ap_log_error (APLOG_MARK , APLOG_NOERRNO |APLOG_INFO , 0 , main_server ,
229238 "mod_unique_id: using ip addr %s" ,
0 commit comments