You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@apache.org on 2001/02/12 07:45:17 UTC

cvs commit: apache-1.3/src/main http_main.c

wrowe       01/02/11 22:45:17

  Modified:    src      CHANGES
               src/main http_main.c
  Log:
    *) Win32/Netware: correct relative paths and eliminate trailing slash
       in the -d serverroot argument.  -d Serverroot may be relative to
       the path of the Apache.exe file.  [William Rowe]
  
    *) Win32; fix the ServerRoot as the path of the Apache.exe file.
       Eliminates the requirement of a 'backup' registry key to locate
       the server root.  [William Rowe]
  
    Also eliminates the cwd path (==ap_server_root) and cleans up a ton of
    cruft.  Cleans up any trailing slash from ap_server_root per the comment
    in httpd.conf-dist.
  
  Revision  Changes    Path
  1.1640    +8 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1639
  retrieving revision 1.1640
  diff -u -r1.1639 -r1.1640
  --- CHANGES	2001/02/08 00:53:10	1.1639
  +++ CHANGES	2001/02/12 06:45:08	1.1640
  @@ -1,5 +1,13 @@
   Changes with Apache 1.3.18
   
  +  *) Win32/Netware: correct relative paths and eliminate trailing slash
  +     in the -d serverroot argument.  -d Serverroot may be relative to 
  +     the path of the Apache.exe file.  [William Rowe]
  +
  +  *) Win32; fix the ServerRoot as the path of the Apache.exe file.
  +     Eliminates the requirement of a 'backup' registry key to locate
  +     the server root.  [William Rowe]
  +
     *) NetWare MOD_TLS fixes to disable nagles properly when making an SSL
        connection, and properly detect an SSL connection based on the port
        and work around the r->server->port 80 bug.  
  
  
  
  1.525     +48 -47    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.524
  retrieving revision 1.525
  diff -u -r1.524 -r1.525
  --- http_main.c	2001/02/01 13:07:26	1.524
  +++ http_main.c	2001/02/12 06:45:14	1.525
  @@ -6664,8 +6664,7 @@
       char *cp;
       char *s;
       int conf_specified = 0;
  -    char cwd[MAX_STRING_LEN];
  -
  +    
   #ifdef WIN32
       jmp_buf reparse_args;
       char *service_name = NULL;
  @@ -6708,32 +6707,40 @@
   
       common_init();
       ap_setup_prelinked_modules();
  -    
  +
  +    /* initialize ap_server_root to the directory of the executable, in case
  +     * the user chooses a relative path for the -d serverroot arg a bit later
  +     */
  +
   #ifdef NETWARE
       if(!*ap_server_root) {
           ap_cpystrn(ap_server_root, bslash2slash(remove_filename(argv[0])),
                      sizeof(ap_server_root));
       }
  +#endif
   
  -    /* NetWare doesn't have a concept of a current working directory so we
  -     * initialize cwd to the startup directory for the executible, in case
  -     * the user chooses a relative path for the -d serverroot arg a bit later
  -     */
  -    ap_cpystrn(cwd, ap_server_root, sizeof(cwd));
  -    if (cwd[strlen(cwd)-1] != '/')
  -	strcat (cwd, "/");
  -    chdir (cwd);
  -#else
  -    if(!GetCurrentDirectory(sizeof(cwd),cwd)) {
  -       ap_log_error(APLOG_MARK,APLOG_EMERG|APLOG_WIN32ERROR, NULL,
  -       "GetCurrentDirectory() failure");
  -       return -1;
  +#ifdef WIN32
  +    if(!*ap_server_root) {
  +        if (GetModuleFileName(NULL, ap_server_root, sizeof(ap_server_root))) {
  +            ap_cpystrn(ap_server_root,
  +                       ap_os_canonical_filename(pcommands, ap_server_root), 
  +                       sizeof(ap_server_root));
  +            if (ap_os_is_path_absolute(ap_server_root) 
  +                    && strchr(ap_server_root, '/'))
  +                *strrchr(ap_server_root, '/') = '\0';
  +            else 
  +                *ap_server_root = '\0';
  +        }
       }
  -
  -    ap_cpystrn(cwd, ap_os_canonical_filename(pcommands, cwd), sizeof(cwd));
  -    ap_cpystrn(ap_server_root, cwd, sizeof(ap_server_root));
   #endif
   
  +    /* Fallback position if argv[0] wasn't deciphered
  +     */
  +    if (!*ap_server_root)
  +        ap_cpystrn(ap_server_root, HTTPD_ROOT, sizeof(ap_server_root));
  +
  +    chdir (ap_server_root);
  +
   #ifdef WIN32
       /* If this is a service, we will need to fall back here and 
        * reparse the entire options list.
  @@ -6821,14 +6828,14 @@
   	case 'd':
               optarg = ap_os_canonical_filename(pcommands, optarg);
               if (!ap_os_is_path_absolute(optarg)) {
  -	        optarg = ap_pstrcat(pcommands, cwd, optarg, NULL);
  -                ap_getparents(optarg);
  +	        optarg = ap_pstrcat(pcommands, ap_server_root, "/", 
  +                                    optarg, NULL);
               }
  -            if (optarg[strlen(optarg)-1] != '/')
  -                optarg = ap_pstrcat(pcommands, optarg, "/", NULL);
  -            ap_cpystrn(ap_server_root,
  -                       optarg,
  -                       sizeof(ap_server_root));
  +            ap_cpystrn(ap_server_root, optarg, sizeof(ap_server_root));
  +            ap_getparents(ap_server_root);
  +            ap_no2slash(ap_server_root);
  +            if (ap_server_root[strlen(ap_server_root)-1] == '/')
  +                ap_server_root[strlen(ap_server_root)-1] = '\0';
   	    break;
   	case 'f':
               ap_cpystrn(ap_server_confname,
  @@ -6955,30 +6962,24 @@
       }
   #endif
   
  -    /* ServerConfFile is found in this order:
  -     * (1) -f or -n
  -     * (2) [-d]/SERVER_CONFIG_FILE
  -     * (3) ./SERVER_CONFIG_FILE
  -     * (4) [Registry: HKLM\Software\[product]\ServerRoot]/SERVER_CONFIG_FILE
  -     * (5) /HTTPD_ROOT/SERVER_CONFIG_FILE
  +    /* ServerRoot/ServerConfFile are found in this order:
  +     * (1) serverroot set to Apache.exe's path, or HTTPD_ROOT if unparsable
  +     * (2) arguments are grabbed for the -n named service, if given
  +     * (3) the -d argument is taken from the given command line
  +     * (4) the -d argument is taken from the service's default args
  +     * (5) the -f argument is taken from the given command line
  +     * (6) the -f argument is taken from the service's default args
  +     * (7) if -f is omitted, then initialized to SERVER_CONFIG_FILE
  +     * (8) if ap_server_confname is not absolute, then merge it to serverroot
        */
  -     
  -    if (!conf_specified) {
  +    
  +    if (!conf_specified)
           ap_cpystrn(ap_server_confname, SERVER_CONFIG_FILE, sizeof(ap_server_confname));
  -        if (access(ap_server_root_relative(pcommands, ap_server_confname), 0)) {
  -#ifdef WIN32
  -            ap_registry_get_server_root(pconf, ap_server_root, sizeof(ap_server_root));
  -#endif
  -            if (!*ap_server_root)
  -                ap_cpystrn(ap_server_root, HTTPD_ROOT, sizeof(ap_server_root));
  -            ap_cpystrn(ap_server_root, ap_os_canonical_filename(pcommands, ap_server_root),
  -                       sizeof(ap_server_root));
  -        }
  -    }
   
  -    ap_cpystrn(ap_server_confname,
  -               ap_server_root_relative(pcommands, ap_server_confname),
  -               sizeof(ap_server_confname));
  +    if (!ap_os_is_path_absolute(ap_server_confname))
  +        ap_cpystrn(ap_server_confname,
  +                   ap_server_root_relative(pcommands, ap_server_confname),
  +                   sizeof(ap_server_confname));
       ap_getparents(ap_server_confname);
       ap_no2slash(ap_server_confname);
       
  
  
  

Re: cvs commit: apache-1.3/src/main http_main.c

Posted by "William A. Rowe, Jr." <wr...@rowe-clan.net>.
> wrowe       01/02/11 22:45:17
> 
>   Modified:    src      CHANGES
>                src/main http_main.c
>   Log:
>     *) Win32/Netware: correct relative paths and eliminate trailing slash
>        in the -d serverroot argument.  -d Serverroot may be relative to
>        the path of the Apache.exe file.  [William Rowe]
>   
>     *) Win32; fix the ServerRoot as the path of the Apache.exe file.
>        Eliminates the requirement of a 'backup' registry key to locate
>        the server root.  [William Rowe]
>   
>     Also eliminates the cwd path (==ap_server_root) and cleans up a ton of
>     cruft.  Cleans up any trailing slash from ap_server_root per the comment
>     in httpd.conf-dist.


This code strikes me (the unbiased observer :-?) as far more legible and robust...

However, Brad, please assure that this doesn't wonk on Netware, _please_!


Re: cvs commit: apache-1.3/src/main http_main.c

Posted by Martin Kraemer <Ma...@Fujitsu-Siemens.com>.
On Mon, Feb 12, 2001 at 12:57:40AM -0600, William A. Rowe, Jr. wrote:
> +    /* ServerRoot is never '/' terminated */
> +    if (ap_server_root[strlen(ap_server_root)-1] == '/')
> +        ap_server_root[strlen(ap_server_root)-1] = '\0';

Committed, thanks! I added a loop (if someone is stupid enough to say
  "ServerRoot /foo/bar///"

   Martin
-- 
<Ma...@Fujitsu-Siemens.com>    |       Fujitsu Siemens
       <ma...@apache.org>              |   81730  Munich,  Germany

Re: cvs commit: apache-1.3/src/main http_main.c

Posted by "William A. Rowe, Jr." <wr...@rowe-clan.net>.
> wrowe       01/02/11 22:45:17
> 
>     *) Win32/Netware: correct relative paths and eliminate trailing slash
>        in the -d serverroot argument.

This didn't touch unix, which could use the same patch, as well as this very general patch
which I will leave to some other interested, unnamed party to apply as you see fit:

Index: main/http_core.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/main/http_core.c,v
retrieving revision 1.293
diff -u -r1.293 http_core.c
--- main/http_core.c 2001/01/15 17:04:57 1.293
+++ main/http_core.c 2001/02/12 06:56:25
@@ -2081,6 +2081,9 @@
     }
     ap_cpystrn(ap_server_root, arg,
         sizeof(ap_server_root));
+    /* ServerRoot is never '/' terminated */
+    if (ap_server_root[strlen(ap_server_root)-1] == '/')
+        ap_server_root[strlen(ap_server_root)-1] = '\0';
     return NULL;
 }