You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2002/12/12 17:09:53 UTC

cvs commit: apache-1.3/src/os/netware mod_log_nw.c

jim         2002/12/12 08:09:52

  Modified:    src      CHANGES
               src/include ap_alloc.h ap_mmn.h
               src/main alloc.c http_main.c rfc1413.c
               src/modules/proxy proxy_connect.c proxy_ftp.c proxy_http.c
               src/modules/standard mod_log_agent.c mod_log_config.c
                        mod_log_referer.c mod_rewrite.c
               src/os/netware mod_log_nw.c
  Log:
  Where the OS allows, we now proactively use the various _ex and
  magic cleanups to close fds (lock files, log files and sockets)
  to prevent them from leaking into 3rd party modules that don't
  call ap_cleanup_for_exec() before forking off subprocesses.
  
  Expect some possible fine-tuning.
  
  Revision  Changes    Path
  1.1867    +9 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1866
  retrieving revision 1.1867
  diff -u -r1.1866 -r1.1867
  --- CHANGES	9 Dec 2002 20:21:00 -0000	1.1866
  +++ CHANGES	12 Dec 2002 16:09:49 -0000	1.1867
  @@ -1,5 +1,14 @@
   Changes with Apache 1.3.28
   
  +  *) Certain 3rd party modules would bypass the Apache API and not
  +     invoke ap_cleanup_for_exec() before creating sub-processes.
  +     To such a child process, Apache's file descriptors (lock
  +     fd's, log files, sockets) were accessible, allowing them
  +     direct access to Apache log file etc.  Where the OS allows,
  +     we now add proactive close functions to prevent these file
  +     descriptors from leaking to the child processes.
  +     [Jim Jagielski, Martin Kraemer]
  +
     *) Prevent obscenely large values of precision in ap_vformatter
        from clobbering a buffer. [Sander Striker, Jim Jagielski]
   
  
  
  
  1.81      +3 -0      apache-1.3/src/include/ap_alloc.h
  
  Index: ap_alloc.h
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/include/ap_alloc.h,v
  retrieving revision 1.80
  retrieving revision 1.81
  diff -u -r1.80 -r1.81
  --- ap_alloc.h	8 Dec 2002 19:09:55 -0000	1.80
  +++ ap_alloc.h	12 Dec 2002 16:09:50 -0000	1.81
  @@ -337,6 +337,8 @@
   API_EXPORT(FILE *) ap_pfopen(struct pool *, const char *name, const char *fmode);
   API_EXPORT(FILE *) ap_pfdopen(struct pool *, int fd, const char *fmode);
   API_EXPORT(int) ap_popenf(struct pool *, const char *name, int flg, int mode);
  +API_EXPORT(int) ap_popenf_ex(struct pool *, const char *name, int flg,
  +                             int mode, int domagic);
   
   API_EXPORT(void) ap_note_cleanups_for_file(pool *, FILE *);
   API_EXPORT(void) ap_note_cleanups_for_file_ex(pool *, FILE *, int);
  @@ -351,6 +353,7 @@
   API_EXPORT(void) ap_note_cleanups_for_socket_ex(pool *, int, int);
   API_EXPORT(void) ap_kill_cleanups_for_socket(pool *p, int sock);
   API_EXPORT(int) ap_psocket(pool *p, int, int, int);
  +API_EXPORT(int) ap_psocket_ex(pool *p, int, int, int, int);
   API_EXPORT(int) ap_pclosesocket(pool *a, int sock);
   
   API_EXPORT(regex_t *) ap_pregcomp(pool *p, const char *pattern, int cflags);
  
  
  
  1.62      +3 -2      apache-1.3/src/include/ap_mmn.h
  
  Index: ap_mmn.h
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/include/ap_mmn.h,v
  retrieving revision 1.61
  retrieving revision 1.62
  diff -u -r1.61 -r1.62
  --- ap_mmn.h	8 Dec 2002 19:09:55 -0000	1.61
  +++ ap_mmn.h	12 Dec 2002 16:09:50 -0000	1.62
  @@ -239,8 +239,9 @@
    * 19990320.13          - add ap_strtol()
    * 19990320.14          - add ap_register_cleanup_ex(),
    *                        ap_note_cleanups_for_fd_ex(),
  - *                        ap_note_cleanups_for_socket_ex() and
  - *                        ap_note_cleanups_for_file_ex()
  + *                        ap_note_cleanups_for_socket_ex(),
  + *                        ap_note_cleanups_for_file_ex(),
  + *                        ap_popenf_ex() and ap_psocket_ex().
    */
   
   #define MODULE_MAGIC_COOKIE 0x41503133UL /* "AP13" */
  
  
  
  1.135     +29 -12    apache-1.3/src/main/alloc.c
  
  Index: alloc.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/alloc.c,v
  retrieving revision 1.134
  retrieving revision 1.135
  diff -u -r1.134 -r1.135
  --- alloc.c	11 Dec 2002 12:24:27 -0000	1.134
  +++ alloc.c	12 Dec 2002 16:09:50 -0000	1.135
  @@ -1687,14 +1687,19 @@
   				      void (*child_cleanup) (void *),
   				      int (*magic_cleanup) (void *))
   {
  -    struct cleanup *c = (struct cleanup *) ap_palloc(p, sizeof(struct cleanup));
  -    c->data = data;
  -    c->plain_cleanup = plain_cleanup;
  -    c->child_cleanup = child_cleanup;
  -    c->next = p->cleanups;
  -    p->cleanups = c;
  -    if(magic_cleanup) {
  -	if(!magic_cleanup(data)) 
  +    struct cleanup *c;
  +    if (p) {
  +	c = (struct cleanup *) ap_palloc(p, sizeof(struct cleanup));
  +	c->data = data;
  +	c->plain_cleanup = plain_cleanup;
  +	c->child_cleanup = child_cleanup;
  +	c->next = p->cleanups;
  +	p->cleanups = c;
  +    }
  +    /* attempt to do magic even if not passed a pool. Allows us
  +     * to perform the magic, therefore, "whenever" we want/need */
  +    if (magic_cleanup) {
  +	if (!magic_cleanup(data)) 
   	   ap_log_error(APLOG_MARK, APLOG_WARNING, NULL,
   		 "exec() may not be safe");
       }
  @@ -1827,7 +1832,8 @@
       ap_kill_cleanup(p, (void *) (long) fd, fd_cleanup);
   }
   
  -API_EXPORT(int) ap_popenf(pool *a, const char *name, int flg, int mode)
  +API_EXPORT(int) ap_popenf_ex(pool *a, const char *name, int flg, int mode,
  +                             int domagic)
   {
       int fd;
       int save_errno;
  @@ -1837,13 +1843,18 @@
       save_errno = errno;
       if (fd >= 0) {
   	fd = ap_slack(fd, AP_SLACK_HIGH);
  -	ap_note_cleanups_for_fd(a, fd);
  +	ap_note_cleanups_for_fd_ex(a, fd, domagic);
       }
       ap_unblock_alarms();
       errno = save_errno;
       return fd;
   }
   
  +API_EXPORT(int) ap_popenf(pool *a, const char *name, int flg, int mode)
  +{
  +    return ap_popenf_ex(a, name, flg, mode, 0);
  +}
  +
   API_EXPORT(int) ap_pclosef(pool *a, int fd)
   {
       int res;
  @@ -2047,7 +2058,8 @@
       ap_kill_cleanup(p, (void *) (long) sock, socket_cleanup);
   }
   
  -API_EXPORT(int) ap_psocket(pool *p, int domain, int type, int protocol)
  +API_EXPORT(int) ap_psocket_ex(pool *p, int domain, int type, int protocol,
  +                              int domagic)
   {
       int fd;
   
  @@ -2059,9 +2071,14 @@
   	errno = save_errno;
   	return -1;
       }
  -    ap_note_cleanups_for_socket(p, fd);
  +    ap_note_cleanups_for_socket_ex(p, fd, domagic);
       ap_unblock_alarms();
       return fd;
  +}
  +
  +API_EXPORT(int) ap_psocket(pool *p, int domain, int type, int protocol)
  +{
  +    return ap_psocket_ex(p, domain, type, protocol, 0);
   }
   
   API_EXPORT(int) ap_pclosesocket(pool *a, int sock)
  
  
  
  1.597     +14 -14    apache-1.3/src/main/http_main.c
  
  Index: http_main.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/http_main.c,v
  retrieving revision 1.596
  retrieving revision 1.597
  diff -u -r1.596 -r1.597
  --- http_main.c	25 Oct 2002 21:12:23 -0000	1.596
  +++ http_main.c	12 Dec 2002 16:09:50 -0000	1.597
  @@ -876,7 +876,7 @@
       unlock_it.l_pid = 0;		/* pid not actually interesting */
   
       expand_lock_fname(p);
  -    lock_fd = ap_popenf(p, ap_lock_fname, O_CREAT | O_WRONLY | O_EXCL, 0644);
  +    lock_fd = ap_popenf_ex(p, ap_lock_fname, O_CREAT | O_WRONLY | O_EXCL, 0644, 1);
       if (lock_fd == -1) {
   	perror("open");
   	fprintf(stderr, "Cannot open lock file: %s\n", ap_lock_fname);
  @@ -943,7 +943,7 @@
   static void accept_mutex_child_init_flock(pool *p)
   {
   
  -    flock_fd = ap_popenf(p, ap_lock_fname, O_WRONLY, 0600);
  +    flock_fd = ap_popenf_ex(p, ap_lock_fname, O_WRONLY, 0600, 1);
       if (flock_fd == -1) {
   	ap_log_error(APLOG_MARK, APLOG_EMERG, server_conf,
   		    "Child cannot open lock file: %s", ap_lock_fname);
  @@ -959,7 +959,7 @@
   {
       expand_lock_fname(p);
       unlink(ap_lock_fname);
  -    flock_fd = ap_popenf(p, ap_lock_fname, O_CREAT | O_WRONLY | O_EXCL, 0600);
  +    flock_fd = ap_popenf_ex(p, ap_lock_fname, O_CREAT | O_WRONLY | O_EXCL, 0600, 1);
       if (flock_fd == -1) {
   	ap_log_error(APLOG_MARK, APLOG_EMERG, server_conf,
   		    "Parent cannot open lock file: %s", ap_lock_fname);
  @@ -2457,7 +2457,7 @@
   #ifdef TPF
       ap_scoreboard_fname = ap_server_root_relative(p, ap_scoreboard_fname);
   #endif /* TPF */
  -    scoreboard_fd = ap_popenf(p, ap_scoreboard_fname, O_CREAT | O_BINARY | O_RDWR, 0666);
  +    scoreboard_fd = ap_popenf_ex(p, ap_scoreboard_fname, O_CREAT | O_BINARY | O_RDWR, 0666, 1);
       if (scoreboard_fd == -1) {
   	perror(ap_scoreboard_fname);
   	fprintf(stderr, "Cannot open scoreboard file:\n");
  @@ -2483,7 +2483,7 @@
       ap_scoreboard_image = &_scoreboard_image;
       ap_scoreboard_fname = ap_server_root_relative(p, ap_scoreboard_fname);
   
  -    scoreboard_fd = ap_popenf(p, ap_scoreboard_fname, O_CREAT | O_BINARY | O_RDWR, 0644);
  +    scoreboard_fd = ap_popenf_ex(p, ap_scoreboard_fname, O_CREAT | O_BINARY | O_RDWR, 0644, 1);
       if (scoreboard_fd == -1) {
   	perror(ap_scoreboard_fname);
   	fprintf(stderr, "Cannot open scoreboard file:\n");
  @@ -3655,7 +3655,7 @@
       s = ap_slack(s, AP_SLACK_HIGH);
   #endif
   
  -    ap_note_cleanups_for_socket(p, s);	/* arrange to close on exec or restart */
  +    ap_note_cleanups_for_socket_ex(p, s, 1);	/* arrange to close on exec or restart */
   #ifdef TPF
       os_note_additional_cleanups(p, s);
   #endif /* TPF */
  @@ -3796,7 +3796,7 @@
   #ifdef WORKAROUND_SOLARIS_BUG
       s = ap_slack(s, AP_SLACK_HIGH);
   
  -    ap_note_cleanups_for_socket(p, s);	/* arrange to close on exec or restart */
  +    ap_note_cleanups_for_socket_ex(p, s, 1);	/* arrange to close on exec or restart */
   #endif
       ap_unblock_alarms();
   
  @@ -3903,7 +3903,7 @@
   	    fd = make_sock(p, &lr->local_addr);
   	}
   	else {
  -	    ap_note_cleanups_for_socket(p, fd);
  +	    ap_note_cleanups_for_socket_ex(p, fd, 1);
   	}
   	/* if we get here, (fd >= 0) && (fd < FD_SETSIZE) */
   	FD_SET(fd, &listenfds);
  @@ -4517,7 +4517,7 @@
   	 */
   	signal(SIGUSR1, SIG_IGN);
   
  -	ap_note_cleanups_for_socket(ptrans, csd);
  +	ap_note_cleanups_for_socket_ex(ptrans, csd, 1);
   
   	/* protect various fd_sets */
   #ifdef CHECK_FD_SETSIZE
  @@ -4565,7 +4565,7 @@
   			"dup: couldn't duplicate csd");
   	    dupped_csd = csd;	/* Oh well... */
   	}
  -	ap_note_cleanups_for_socket(ptrans, dupped_csd);
  +	ap_note_cleanups_for_socket_ex(ptrans, dupped_csd, 1);
   
   	/* protect various fd_sets */
   #ifdef CHECK_FD_SETSIZE
  @@ -5092,7 +5092,7 @@
   #ifdef SCOREBOARD_FILE
   	else {
   	    ap_scoreboard_fname = ap_server_root_relative(pconf, ap_scoreboard_fname);
  -	    ap_note_cleanups_for_fd(pconf, scoreboard_fd);
  +	    ap_note_cleanups_for_fd_ex(pconf, scoreboard_fd, 1); /* close on exec */
   	}
   #endif
   
  @@ -5892,7 +5892,7 @@
   
   	requests_this_child++;
   
  -	ap_note_cleanups_for_socket(ptrans, csd);
  +	ap_note_cleanups_for_socket_ex(ptrans, csd, 1);
   
   	/*
   	 * We now have a connection, so set it up with the appropriate
  @@ -5924,7 +5924,7 @@
   			"dup: couldn't duplicate csd");
   	    dupped_csd = csd;	/* Oh well... */
   	}
  -	ap_note_cleanups_for_socket(ptrans, dupped_csd);
  +	ap_note_cleanups_for_socket_ex(ptrans, dupped_csd, 1);
   #endif
   	ap_bpushfd(conn_io, csd, dupped_csd);
   
  @@ -6140,7 +6140,7 @@
               if (fd > listenmaxfd)
                   listenmaxfd = fd;
           }
  -        ap_note_cleanups_for_socket(p, fd);
  +        ap_note_cleanups_for_socket_ex(p, fd, 1);
           lr->fd = fd;
           if (lr->next == NULL) {
               /* turn the list into a ring */
  
  
  
  1.40      +1 -1      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.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- rfc1413.c	13 Mar 2002 21:05:31 -0000	1.39
  +++ rfc1413.c	12 Dec 2002 16:09:51 -0000	1.40
  @@ -243,7 +243,7 @@
   
       result = FROM_UNKNOWN;
   
  -    sock = ap_psocket(conn->pool, AF_INET, SOCK_STREAM, IPPROTO_TCP);
  +    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");
  
  
  
  1.50      +1 -1      apache-1.3/src/modules/proxy/proxy_connect.c
  
  Index: proxy_connect.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_connect.c,v
  retrieving revision 1.49
  retrieving revision 1.50
  diff -u -r1.49 -r1.50
  --- proxy_connect.c	25 Mar 2002 09:21:58 -0000	1.49
  +++ proxy_connect.c	12 Dec 2002 16:09:51 -0000	1.50
  @@ -182,7 +182,7 @@
           return ap_proxyerror(r,
               proxyhost ? HTTP_BAD_GATEWAY : HTTP_INTERNAL_SERVER_ERROR, err);
   
  -    sock = ap_psocket(r->pool, PF_INET, SOCK_STREAM, IPPROTO_TCP);
  +    sock = ap_psocket_ex(r->pool, PF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
       if (sock == -1) {
           ap_log_rerror(APLOG_MARK, APLOG_ERR, r, "proxy: error creating socket");
           return HTTP_INTERNAL_SERVER_ERROR;
  
  
  
  1.99      +3 -3      apache-1.3/src/modules/proxy/proxy_ftp.c
  
  Index: proxy_ftp.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_ftp.c,v
  retrieving revision 1.98
  retrieving revision 1.99
  diff -u -r1.98 -r1.99
  --- proxy_ftp.c	7 Apr 2002 18:57:36 -0000	1.98
  +++ proxy_ftp.c	12 Dec 2002 16:09:51 -0000	1.99
  @@ -665,7 +665,7 @@
       if (err != NULL)
           return ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, err);
   
  -    sock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
  +    sock = ap_psocket_ex(p, PF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
       if (sock == -1) {
           ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
                         "proxy: error creating socket");
  @@ -944,7 +944,7 @@
       }
   
   /* try to set up PASV data connection first */
  -    dsock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
  +    dsock = ap_psocket_ex(p, PF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
       if (dsock == -1) {
           return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                                   ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
  @@ -1032,7 +1032,7 @@
                                       "proxy: error getting socket address"));
           }
   
  -        dsock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
  +        dsock = ap_psocket_ex(p, PF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
           if (dsock == -1) {
               return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
                                   ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
  
  
  
  1.102     +1 -1      apache-1.3/src/modules/proxy/proxy_http.c
  
  Index: proxy_http.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_http.c,v
  retrieving revision 1.101
  retrieving revision 1.102
  diff -u -r1.101 -r1.102
  --- proxy_http.c	3 Sep 2002 07:12:46 -0000	1.101
  +++ proxy_http.c	12 Dec 2002 16:09:51 -0000	1.102
  @@ -241,7 +241,7 @@
        * we have worked out who exactly we are going to connect to, now make
        * that connection...
        */
  -    sock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
  +    sock = ap_psocket_ex(p, PF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
       if (sock == -1) {
           ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
                         "proxy: error creating socket");
  
  
  
  1.37      +2 -1      apache-1.3/src/modules/standard/mod_log_agent.c
  
  Index: mod_log_agent.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_log_agent.c,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- mod_log_agent.c	13 Mar 2002 21:05:33 -0000	1.36
  +++ mod_log_agent.c	12 Dec 2002 16:09:52 -0000	1.37
  @@ -125,7 +125,8 @@
           cls->agent_fd = ap_piped_log_write_fd(pl);
       }
       else if (*cls->fname != '\0') {
  -        if ((cls->agent_fd = ap_popenf(p, fname, xfer_flags, xfer_mode)) < 0) {
  +        if ((cls->agent_fd = ap_popenf_ex(p, fname, xfer_flags, xfer_mode, 1))
  +             < 0) {
               ap_log_error(APLOG_MARK, APLOG_ERR, s,
                            "could not open agent log file %s.", fname);
               exit(1);
  
  
  
  1.89      +2 -1      apache-1.3/src/modules/standard/mod_log_config.c
  
  Index: mod_log_config.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_log_config.c,v
  retrieving revision 1.88
  retrieving revision 1.89
  diff -u -r1.88 -r1.89
  --- mod_log_config.c	21 May 2002 13:03:56 -0000	1.88
  +++ mod_log_config.c	12 Dec 2002 16:09:52 -0000	1.89
  @@ -1069,7 +1069,8 @@
       }
       else {
           char *fname = ap_server_root_relative(p, cls->fname);
  -        if ((cls->log_fd = ap_popenf(p, fname, xfer_flags, xfer_mode)) < 0) {
  +        if ((cls->log_fd = ap_popenf_ex(p, fname, xfer_flags, xfer_mode, 1))
  +             < 0) {
               ap_log_error(APLOG_MARK, APLOG_ERR, s,
                            "could not open transfer log file %s.", fname);
               exit(1);
  
  
  
  1.40      +2 -1      apache-1.3/src/modules/standard/mod_log_referer.c
  
  Index: mod_log_referer.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_log_referer.c,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- mod_log_referer.c	13 Mar 2002 21:05:33 -0000	1.39
  +++ mod_log_referer.c	12 Dec 2002 16:09:52 -0000	1.40
  @@ -142,7 +142,8 @@
           cls->referer_fd = ap_piped_log_write_fd(pl);
       }
       else if (*cls->fname != '\0') {
  -        if ((cls->referer_fd = ap_popenf(p, fname, xfer_flags, xfer_mode)) < 0) {
  +        if ((cls->referer_fd = ap_popenf_ex(p, fname, xfer_flags, xfer_mode, 1))
  +             < 0) {
   	    ap_log_error(APLOG_MARK, APLOG_ERR, s,
   			 "could not open referer log file %s.", fname);        
   	    exit(1);
  
  
  
  1.179     +6 -6      apache-1.3/src/modules/standard/mod_rewrite.c
  
  Index: mod_rewrite.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_rewrite.c,v
  retrieving revision 1.178
  retrieving revision 1.179
  diff -u -r1.178 -r1.179
  --- mod_rewrite.c	8 Jul 2002 17:18:32 -0000	1.178
  +++ mod_rewrite.c	12 Dec 2002 16:09:52 -0000	1.179
  @@ -3105,8 +3105,8 @@
           conf->rewritelogfp = ap_piped_log_write_fd(pl);
       }
       else if (*conf->rewritelogfile != '\0') {
  -        if ((conf->rewritelogfp = ap_popenf(p, fname, rewritelog_flags,
  -                                            rewritelog_mode)) < 0) {
  +        if ((conf->rewritelogfp = ap_popenf_ex(p, fname, rewritelog_flags,
  +                                            rewritelog_mode, 1)) < 0) {
               ap_log_error(APLOG_MARK, APLOG_ERR, s, 
   
                            "mod_rewrite: could not open RewriteLog "
  @@ -3253,8 +3253,8 @@
   
       /* create the lockfile */
       unlink(lockname);
  -    if ((lockfd = ap_popenf(p, lockname, O_WRONLY|O_CREAT,
  -                                         REWRITELOCK_MODE)) < 0) {
  +    if ((lockfd = ap_popenf_ex(p, lockname, O_WRONLY|O_CREAT,
  +                                         REWRITELOCK_MODE, 1)) < 0) {
           ap_log_error(APLOG_MARK, APLOG_ERR, s,
                        "mod_rewrite: Parent could not create RewriteLock "
                        "file %s", lockname);
  @@ -3281,8 +3281,8 @@
       }
   
       /* open the lockfile (once per child) to get a unique fd */
  -    if ((lockfd = ap_popenf(p, lockname, O_WRONLY,
  -                                         REWRITELOCK_MODE)) < 0) {
  +    if ((lockfd = ap_popenf_ex(p, lockname, O_WRONLY,
  +                                         REWRITELOCK_MODE, 1)) < 0) {
           ap_log_error(APLOG_MARK, APLOG_ERR, s,
                        "mod_rewrite: Child could not open RewriteLock "
                        "file %s", lockname);
  
  
  
  1.4       +1 -1      apache-1.3/src/os/netware/mod_log_nw.c
  
  Index: mod_log_nw.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/os/netware/mod_log_nw.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- mod_log_nw.c	2 Apr 2002 16:51:01 -0000	1.3
  +++ mod_log_nw.c	12 Dec 2002 16:09:52 -0000	1.4
  @@ -1161,7 +1161,7 @@
                   fname = ap_server_root_relative(p, cls->fname);
           }
               
  -        if ((cls->log_fd = ap_popenf(p, fname, xfer_flags, xfer_mode)) < 0) {
  +        if ((cls->log_fd = ap_popenf_ex(p, fname, xfer_flags, xfer_mode, 1)) < 0) {
               ap_log_error(APLOG_MARK, APLOG_ERR, s,
                            "could not open transfer log file %s.", fname);
               exit(1);