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; }