dgaudet 97/07/20 11:18:59
Modified: src Tag: APACHE_1_2_X http_main.c
Log:
PR#832: Fix Solaris -HUP problem introduced in 1.2.1.
Reviewed by: Roy Fielding, (and it's been in 1.3 for a few weeks)
Revision Changes Path
No revision
No revision
1.149.2.5 +33 -20 apache/src/http_main.c
Index: http_main.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_main.c,v
retrieving revision 1.149.2.4
retrieving revision 1.149.2.5
diff -C3 -r1.149.2.4 -r1.149.2.5
*** http_main.c 1997/06/29 18:08:37 1.149.2.4
--- http_main.c 1997/07/20 18:18:56 1.149.2.5
***************
*** 1971,1976 ****
--- 1971,2002 ----
return 0;
}
+
+ static void sock_bind (int s, const struct sockaddr_in *server)
+ {
+ #ifdef MPE
+ /* MPE requires CAP=PM and GETPRIVMODE to bind to ports less than 1024 */
+ if (ntohs(server->sin_port) < 1024) GETPRIVMODE();
+ #endif
+ if(bind(s, (struct sockaddr *)server,sizeof(struct sockaddr_in)) == -1)
+ {
+ perror("bind");
+ #ifdef MPE
+ if (ntohs(server->sin_port) < 1024) GETUSERMODE();
+ #endif
+ if (server->sin_addr.s_addr != htonl(INADDR_ANY))
+ fprintf(stderr,"httpd: could not bind to address %s port %d\n",
+ inet_ntoa(server->sin_addr), ntohs(server->sin_port));
+ else
+ fprintf(stderr,"httpd: could not bind to port %d\n",
+ ntohs(server->sin_port));
+ exit(1);
+ }
+ #ifdef MPE
+ if (ntohs(server->sin_port) < 1024) GETUSERMODE();
+ #endif
+ }
+
static int make_sock(pool *pconf, const struct sockaddr_in *server)
{
int s;
***************
*** 1982,1987 ****
--- 2008,2017 ----
exit(1);
}
+ #ifdef SOLARIS2
+ sock_bind (s, server);
+ #endif
+
s = ap_slack(s, AP_SLACK_HIGH);
note_cleanups_for_fd(pconf, s); /* arrange to close on exec or restart
*/
***************
*** 2031,2057 ****
}
}
! #ifdef MPE
! /* MPE requires CAP=PM and GETPRIVMODE to bind to ports less than 1024 */
! if (ntohs(server->sin_port) < 1024) GETPRIVMODE();
! #endif
! if(bind(s, (struct sockaddr *)server,sizeof(struct sockaddr_in)) == -1)
! {
! perror("bind");
! #ifdef MPE
! if (ntohs(server->sin_port) < 1024) GETUSERMODE();
! #endif
! if (server->sin_addr.s_addr != htonl(INADDR_ANY))
! fprintf(stderr,"httpd: could not bind to address %s port %d\n",
! inet_ntoa(server->sin_addr), ntohs(server->sin_port));
! else
! fprintf(stderr,"httpd: could not bind to port %d\n",
! ntohs(server->sin_port));
! exit(1);
! }
! #ifdef MPE
! if (ntohs(server->sin_port) < 1024) GETUSERMODE();
#endif
listen(s, 512);
return s;
}
--- 2061,2070 ----
}
}
! #ifndef SOLARIS2
! sock_bind (s, server);
#endif
+
listen(s, 512);
return s;
}