You are viewing a plain text version of this content. The canonical link for it is here.
Posted to win32-msi-cvs@httpd.apache.org by wr...@apache.org on 2003/07/18 21:25:49 UTC

cvs commit: httpd-win32-msi/src real_features.c

wrowe       2003/07/18 12:25:48

  Modified:    src      real_features.c
  Log:
    Undo rev 1.8 (never released with any Apache msi distro.)  The patch
    fixed rbb's observed bug, but also applied some changes I was making
    to integrate listen.c for pre-testing the validity of ports.  That code
    was not yet complete.  Reapplying the intended patch for q->name in
    a moment.
  
  Revision  Changes    Path
  1.9       +11 -137   httpd-win32-msi/src/real_features.c
  
  Index: real_features.c
  ===================================================================
  RCS file: /home/cvs/httpd-win32-msi/src/real_features.c,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- real_features.c	20 May 2003 20:17:40 -0000	1.8
  +++ real_features.c	18 Jul 2003 19:25:48 -0000	1.9
  @@ -109,7 +109,7 @@
   	    char *str2 = inet_ntoa(*((struct in_addr *) p->h_addr_list[x]));
   	    struct hostent *q = gethostbyaddr(p->h_addr_list[x], p->h_length, p->h_addrtype);
               if (q->h_name && strchr(q->h_name, '.') 
  -                          && strlen(q->h_name) <= MAXHOSTNAMELEN)
  +                          && strlen(p->h_name) <= MAXHOSTNAMELEN)
                   strcpy(hostname, q->h_name);
   	    for (y = 0; q->h_aliases && !*hostname && q->h_aliases[y]; ++y) {
                   if (strchr(q->h_aliases[y], '.')
  @@ -131,30 +131,21 @@
       return ERROR_SUCCESS;
   }
   
  -typedef int (isfn)(int);
  -
  -int issafe(int ch) {
  -  return isprint(ch) && !strchr(" |*()[]:;<>?$%&#'`\"", ch);
  -}
  -
  -int issafelisten(int ch) {
  -  return isprint(ch) && !strchr(" |*();<>?$%&#'`\"", ch);
  -}
   
   /* Return the first unrecognized character and truncate the
    * string after the last good character. 
    */
  -static char test_bad_ch(char *str, isfn* goodch)
  +static char test_bad_ch(char *str)
   {
       while (*str) {
  -        if (!(goodch)(*str)) {
  +        if (!isprint(*str) || strchr(" |*()[]:;<>?$%&#'`\"", *str)) {
               char ch = *str;
               while (*str) {
                   if (!isprint(*str))
                       *str = '?';
                   ++str;
               }
  -            return isprint(ch) ? ch : '?';
  +            return ch;
           }
           ++str;
       }
  @@ -189,104 +180,6 @@
                   "fill in the " fld " entry, and you can then proceed " \
                   "with installation.") 
   
  -#define BADLISTEN(fld, badch) \
  -    badch ? ("The " fld " entry cannot contain anything but digits\n\n" \
  -                "are all reserved and could cause problems for installation " \
  -                "or for the installed server.  Please click OK, correct " \
  -                "the " fld " entry, and then proceed with installation.") \
  -          : ("The " fld " entry cannot be left blank.  Please click OK, " \
  -                "fill in the " fld " entry, and you can then proceed " \
  -                "with installation.") 
  -
  -/* Stubs, to work with listen.c */
  -#include "apr_errno.h"
  -#include "apr_strings.h"
  -#include "httpd.h"
  -#include "ap_config.h"
  -#include "ap_listen.h"
  -void __stdcall ap_log_assert(const char *szExp, const char *szFile, int nLine) 
  -{
  -    DebugBreak();
  -}
  -const char* __stdcall ap_check_cmd_context(cmd_parms *cmd, unsigned forbidden) 
  -{
  -    return NULL;
  -}
  -
  -static char *ap_log_perror_res;
  -
  -#define ERRBUF_LEN 1024
  -
  -void __cdecl ap_log_perror(const char *file, int line, int level, 
  -                           apr_status_t status, apr_pool_t *pool, 
  -                           const char *fmt, ...)
  -{
  -    char *msg = apr_palloc(pool, ERRBUF_LEN);
  -    va_list ap;
  -    va_start(ap, fmt);
  -
  -    apr_strerror(status, msg, ERRBUF_LEN);
  -    ap_log_perror_res = apr_pstrcat(pool, "(", msg, ") ",
  -                                    apr_pvsprintf(pool, fmt, ap), 
  -                                    NULL);
  -    va_end(ap);
  -}
  -
  -#define LISTEN_ERROR    "The Server Listener must be an unused tcp/ip " \
  -                        "port, or full ipaddress:port.  The given port " \
  -                        "could not be used, perhaps because of firewall, " \
  -                        "antivirus or vpn socket filtering, or perhaps " \
  -                        "because other software such as IIS is already " \
  -                        "running on this port.  The exact error was: " \
  -
  -char *test_listener(char *str)
  -{
  -    char *msg;
  -    cmd_parms *cmd;
  -    apr_pool_t *pool;
  -    apr_status_t rv;
  -    int n = ERRBUF_LEN;
  -
  -    rv = apr_initialize();
  -    if (rv) {
  -        msg = malloc(ERRBUF_LEN);
  -        strcpy (msg, LISTEN_ERROR);
  -        n = strlen(msg);
  -        return apr_strerror(rv, msg + n, ERRBUF_LEN - n);
  -    }
  -    rv = apr_pool_create(&pool, NULL);
  -    if (rv) {
  -        apr_terminate();
  -        msg = malloc(ERRBUF_LEN);
  -        strcpy (msg, LISTEN_ERROR);
  -        n = strlen(msg);
  -        return apr_strerror(rv, msg + n, ERRBUF_LEN - n);
  -    }
  -    
  -    cmd = apr_pcalloc(pool, sizeof(cmd_parms));
  -    cmd->pool = pool;
  -    cmd->server = apr_pcalloc(pool, sizeof(server_rec));
  -    cmd->server->process = apr_pcalloc(pool, sizeof(process_rec));
  -    cmd->server->process->pool = pool;
  -
  -    ap_listen_pre_config();
  -    if ((msg = (char*)ap_set_listener(cmd, NULL, str)) != NULL)
  -        msg = ap_log_perror_res;
  -    else {
  -        if (!ap_setup_listeners(cmd->server) && !msg) {
  -            msg = "Internal Fatal Error: Failed to recover listeners.";
  -        }
  -    }
  -
  -    if (msg)
  -        msg = apr_pstrcat(pool, LISTEN_ERROR, msg, NULL);
  -    
  -    apr_pool_destroy(pool);
  -    apr_terminate();
  -    return msg;
  -}
  -
  -
   UINT __declspec(dllexport) __stdcall ValidateServerName(MSIHANDLE hInstall) 
   {
       char dstr[MAXHOSTNAMELEN + 1];
  @@ -299,10 +192,12 @@
        */
       *str = '\0';  len = sizeof(str) - 1;
       MsiGetPropertyA(hInstall, "SERVERDOMAIN", str, &len);
  -    ch[0] = test_bad_ch(pch = trim_white_space(dstr, str), issafe);
  +    ch[0] = test_bad_ch(pch = trim_white_space(dstr, str));
       if (strcmp(dstr, str))
           MsiSetPropertyA(hInstall, "SERVERDOMAIN", dstr);
       if (ch[0] || !strlen(dstr)) {
  +        if (ch[0] && !isprint(ch[0]))
  +            ch[0] = '?';
           MsiSetPropertyA(hInstall, "INVALIDFIELD", "Domain Name");
           MsiSetPropertyA(hInstall, "INVALIDMESSAGE", 
                           BADFIELD("Domain Name", ch[0]));
  @@ -313,7 +208,7 @@
        */
       *str = '\0';  len = sizeof(str) - 1;
       MsiGetPropertyA(hInstall, "SERVERNAME",   str, &len);
  -    ch[0] = test_bad_ch(pch = trim_white_space(dstr, str), issafe);
  +    ch[0] = test_bad_ch(pch = trim_white_space(dstr, str));
       if (strcmp(dstr, str))
           MsiSetPropertyA(hInstall, "SERVERNAME", dstr);
       if (ch[0] || !strlen(dstr)) {
  @@ -329,10 +224,12 @@
        */
       *str = '\0';  len = sizeof(str) - 1;
       MsiGetPropertyA(hInstall, "SERVERADMIN",  str, &len);
  -    ch[0] = test_bad_ch(pch = trim_white_space(dstr, str), issafe);
  +    ch[0] = test_bad_ch(pch = trim_white_space(dstr, str));
       if (strcmp(dstr, str))
           MsiSetPropertyA(hInstall, "SERVERADMIN", dstr);
       if (ch[0] || !strlen(dstr)) {
  +        if (ch[0] && !isprint(ch[0]))
  +            ch[0] = '?';
           MsiSetPropertyA(hInstall, "INVALIDFIELD", "Administrator's Email Address");
           MsiSetPropertyA(hInstall, "INVALIDMESSAGE", 
                           BADFIELD("Administrator's Email Address", ch[0]));
  @@ -349,29 +246,6 @@
                           "correct the Administrator's Email Address entry, "
                           "including a single '@' symbol between the "
                           "mail account and mail server names,");
  -        return ERROR_SUCCESS;
  -    }
  -
  -    /* Validate the Port is not blank, is numeric
  -     */
  -    *str = '\0';  len = sizeof(str) - 1;
  -    MsiGetPropertyA(hInstall, "SERVERPORT",  str, &len);
  -    ch[0] = test_bad_ch(pch = trim_white_space(dstr, str), isdigit);
  -    if (strcmp(dstr, str))
  -        MsiSetPropertyA(hInstall, "SERVERPORT", dstr);
  -    if (ch[0] || !strlen(dstr)) {
  -        MsiSetPropertyA(hInstall, "INVALIDFIELD", "Server Port");
  -        MsiSetPropertyA(hInstall, "INVALIDMESSAGE", 
  -                        BADLISTEN("Server Port", ch[0]));
  -        return ERROR_SUCCESS;
  -    }
  -    /* Validate that the Port creates a valid listener
  -     */
  -    pch = test_listener(dstr);
  -    if (pch) {
  -        MsiSetPropertyA(hInstall, "INVALIDFIELD", "Server Port");
  -        MsiSetPropertyA(hInstall, "INVALIDMESSAGE", pch);
  -        free (pch);
           return ERROR_SUCCESS;
       }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: win32-msi-cvs-unsubscribe@httpd.apache.org
For additional commands, e-mail: win32-msi-cvs-help@httpd.apache.org