coar 99/06/22 08:33:20
Modified: src Configuration.tmpl src/main http_core.c src/modules/standard mod_vhost_alias.c Log: Jim beat me to the server_rec and ap_mmn fixes, so what's left here is just some cleanup from the new module addition; be consistent and stylish. Oh, and fix the location in the Configuration.tmpl file. Revision Changes Path 1.117 +1 -1 apache-1.3/src/Configuration.tmpl Index: Configuration.tmpl =================================================================== RCS file: /home/cvs/apache-1.3/src/Configuration.tmpl,v retrieving revision 1.116 retrieving revision 1.117 diff -u -r1.116 -r1.117 --- Configuration.tmpl 1999/06/22 00:51:27 1.116 +++ Configuration.tmpl 1999/06/22 15:33:10 1.117 @@ -219,7 +219,7 @@ ## based on the host header or local IP address of the request. ## See "../htdocs/manual/vhosts/mass.html". -# AddModule modules/extra/mod_vhost_alias.o +# AddModule modules/standard/mod_vhost_alias.o ## ## Config manipulation modules 1.266 +10 -7 apache-1.3/src/main/http_core.c Index: http_core.c =================================================================== RCS file: /home/cvs/apache-1.3/src/main/http_core.c,v retrieving revision 1.265 retrieving revision 1.266 diff -u -r1.265 -r1.266 --- http_core.c 1999/06/22 00:51:30 1.265 +++ http_core.c 1999/06/22 15:33:14 1.266 @@ -696,11 +696,14 @@ struct in_addr *iaddr; struct hostent *hptr; int old_stat; - old_stat = ap_update_child_status(conn->child_num, SERVER_BUSY_DNS, r); + old_stat = ap_update_child_status(conn->child_num, + SERVER_BUSY_DNS, r); iaddr = &(conn->local_addr.sin_addr); - hptr = gethostbyaddr((char *)iaddr, sizeof(struct in_addr), AF_INET); + hptr = gethostbyaddr((char *)iaddr, sizeof(struct in_addr), + AF_INET); if (hptr != NULL) { - conn->local_host = ap_pstrdup(conn->pool, (void *)hptr->h_name); + conn->local_host = ap_pstrdup(conn->pool, + (void *)hptr->h_name); ap_str_tolower(conn->local_host); } else { @@ -724,7 +727,7 @@ port = r->server->port ? r->server->port : ap_default_port(r); if (d->use_canonical_name == USE_CANONICAL_NAME_OFF - || d->use_canonical_name == USE_CANONICAL_NAME_DNS) { + || d->use_canonical_name == USE_CANONICAL_NAME_DNS) { return r->hostname ? ntohs(r->connection->local_addr.sin_port) : port; } @@ -2144,13 +2147,13 @@ return err; } - if (!strcasecmp(arg, "on")) { + if (strcasecmp(arg, "on") == 0) { d->use_canonical_name = USE_CANONICAL_NAME_ON; } - else if (!strcasecmp(arg, "off")) { + else if (strcasecmp(arg, "off") == 0) { d->use_canonical_name = USE_CANONICAL_NAME_OFF; } - else if (!strcasecmp(arg, "dns")) { + else if (strcasecmp(arg, "dns") == 0) { d->use_canonical_name = USE_CANONICAL_NAME_DNS; } else { 1.2 +116 -75 apache-1.3/src/modules/standard/mod_vhost_alias.c Index: mod_vhost_alias.c =================================================================== RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_vhost_alias.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- mod_vhost_alias.c 1999/06/22 00:51:38 1.1 +++ mod_vhost_alias.c 1999/06/22 15:33:17 1.2 @@ -82,26 +82,30 @@ module MODULE_VAR_EXPORT vhost_alias_module; -/* basic configuration things */ +/* + * basic configuration things + * we abbreviate "mod_vhost_alias" to "mva" for shorter names + */ typedef enum { VHOST_ALIAS_UNSET, VHOST_ALIAS_NONE, VHOST_ALIAS_NAME, VHOST_ALIAS_IP -} vhost_alias_mode; +} mva_mode_e; -typedef struct vhost_alias_server_conf { +/* + * Per-server module config record. + */ +typedef struct mva_sconf_t { char *doc_root; char *cgi_root; - vhost_alias_mode doc_root_mode; - vhost_alias_mode cgi_root_mode; -} vhost_alias_server_conf; - + mva_mode_e doc_root_mode; + mva_mode_e cgi_root_mode; +} mva_sconf_t; -static void *vhost_alias_create_config(pool *p, server_rec *s) +static void *mva_create_server_config(pool *p, server_rec *s) { - vhost_alias_server_conf *conf = - (vhost_alias_server_conf *) - ap_pcalloc(p, sizeof(vhost_alias_server_conf)); + mva_sconf_t *conf; + conf = (mva_sconf_t *) ap_pcalloc(p, sizeof(mva_sconf_t)); conf->doc_root = NULL; conf->cgi_root = NULL; conf->doc_root_mode = VHOST_ALIAS_UNSET; @@ -109,13 +113,13 @@ return conf; } -static void *vhost_alias_merge_config(pool *p, void *parentv, void *childv) +static void *mva_merge_server_config(pool *p, void *parentv, void *childv) { - vhost_alias_server_conf *parent = (vhost_alias_server_conf *)parentv; - vhost_alias_server_conf *child = (vhost_alias_server_conf *)childv; - vhost_alias_server_conf *conf = - (vhost_alias_server_conf *) ap_pcalloc(p, sizeof(*conf)); + mva_sconf_t *parent = (mva_sconf_t *) parentv; + mva_sconf_t *child = (mva_sconf_t *) childv; + mva_sconf_t *conf; + conf = (mva_sconf_t *) ap_pcalloc(p, sizeof(*conf)); if (child->doc_root_mode == VHOST_ALIAS_UNSET) { conf->doc_root_mode = parent->doc_root_mode; conf->doc_root = parent->doc_root; @@ -138,48 +142,51 @@ /* * These are just here to tell us what vhost_alias_set should do. + * We don't put anything into them; we just use the cell addresses. */ -static int - vhost_alias_set_doc_root_ip, +static int vhost_alias_set_doc_root_ip, vhost_alias_set_cgi_root_ip, vhost_alias_set_doc_root_name, vhost_alias_set_cgi_root_name; static const char *vhost_alias_set(cmd_parms *cmd, void *dummy, char *map) { - vhost_alias_server_conf *conf = - (vhost_alias_server_conf *) - ap_get_module_config(cmd->server->module_config, &vhost_alias_module); - vhost_alias_mode mode, *pmode; + mva_sconf_t *conf; + mva_mode_e mode, *pmode; char **pmap; char *p; + conf = (mva_sconf_t *) ap_get_module_config(cmd->server->module_config, + &vhost_alias_module); /* there ought to be a better way of doing this */ if (&vhost_alias_set_doc_root_ip == cmd->info) { mode = VHOST_ALIAS_IP; pmap = &conf->doc_root; pmode = &conf->doc_root_mode; - } else - if (&vhost_alias_set_cgi_root_ip == cmd->info) { + } + else if (&vhost_alias_set_cgi_root_ip == cmd->info) { mode = VHOST_ALIAS_IP; pmap = &conf->cgi_root; pmode = &conf->cgi_root_mode; - } else - if (&vhost_alias_set_doc_root_name == cmd->info) { + } + else if (&vhost_alias_set_doc_root_name == cmd->info) { mode = VHOST_ALIAS_NAME; pmap = &conf->doc_root; pmode = &conf->doc_root_mode; - } else - if (&vhost_alias_set_cgi_root_name == cmd->info) { + } + else if (&vhost_alias_set_cgi_root_name == cmd->info) { mode = VHOST_ALIAS_NAME; pmap = &conf->cgi_root; pmode = &conf->cgi_root_mode; - } else + } + else { return "INTERNAL ERROR: unknown command info"; + } if (*map != '/') { - if (strcasecmp(map, "none")) + if (strcasecmp(map, "none")) { return "format string must start with '/' or be 'none'"; + } *pmap = NULL; *pmode = VHOST_ALIAS_NONE; return NULL; @@ -188,46 +195,56 @@ /* sanity check */ p = map; while (*p != '\0') { - if (*p++ != '%') + if (*p++ != '%') { continue; + } /* we just found a '%' */ if (*p == 'p' || *p == '%') { ++p; continue; } /* optional dash */ - if (*p == '-') + if (*p == '-') { ++p; + } /* digit N */ - if (ap_isdigit(*p)) + if (ap_isdigit(*p)) { ++p; - else + } + else { return "syntax error in format string"; + } /* optional plus */ - if (*p == '+') + if (*p == '+') { ++p; + } /* do we end here? */ - if (*p != '.') + if (*p != '.') { continue; + } ++p; /* optional dash */ - if (*p == '-') + if (*p == '-') { ++p; + } /* digit M */ - if (ap_isdigit(*p)) + if (ap_isdigit(*p)) { ++p; - else + } + else { return "syntax error in format string"; + } /* optional plus */ - if (*p == '+') + if (*p == '+') { ++p; + } } *pmap = map; *pmode = mode; return NULL; } -static const command_rec vhost_alias_commands[] = +static const command_rec mva_commands[] = { {"VirtualScriptAlias", vhost_alias_set, &vhost_alias_set_cgi_root_name, RSRC_CONF, TAKE1, "how to create a ScriptAlias based on the host"}, @@ -251,10 +268,12 @@ /* XXX: what if size > HUGE_STRING_LEN? */ if (*pdest + size > buf + HUGE_STRING_LEN) { **pdest = '\0'; - if (r->filename) + if (r->filename) { r->filename = ap_pstrcat(r->pool, r->filename, buf, NULL); - else + } + else { r->filename = ap_pstrdup(r->pool, buf); + } *pdest = buf; } } @@ -277,9 +296,11 @@ ndots = 0; dots[ndots++] = name-1; /* slightly naughty */ - for (p = name; *p; ++p) - if (*p == '.' && ndots < MAXDOTS) + for (p = name; *p; ++p){ + if (*p == '.' && ndots < MAXDOTS) { dots[ndots++] = p; + } + } dots[ndots] = p; r->filename = NULL; @@ -321,9 +342,13 @@ if (*map == '+') ++map, Np = 1; if (*map == '.') { ++map; - if (*map == '-') ++map, Md = 1; + if (*map == '-') { + ++map, Md = 1; + } M = *map++ - '0'; - if (*map == '+') ++map, Mp = 1; + if (*map == '+') { + ++map, Mp = 1; + } } /* note that N and M are one-based indices, not zero-based */ start = dots[0]+1; /* ptr to the first character */ @@ -332,13 +357,17 @@ if (N > ndots) { start = "_"; end = start+1; - } else if (!Nd) { + } + else if (!Nd) { start = dots[N-1]+1; - if (!Np) + if (!Np) { end = dots[N]; - } else { - if (!Np) + } + } + else { + if (!Np) { start = dots[ndots-N]+1; + } end = dots[ndots-N+1]; } } @@ -346,39 +375,47 @@ if (M > end - start) { start = "_"; end = start+1; - } else if (!Md) { + } + else if (!Md) { start = start+M-1; - if (!Mp) + if (!Mp) { end = start+1; - } else { - if (!Mp) + } + } + else { + if (!Mp) { start = end-M; + } end = end-M+1; } } vhost_alias_checkspace(r, buf, &dest, end - start); - for (p = start; p < end; ++p) + for (p = start; p < end; ++p) { *dest++ = ap_tolower(*p); + } } *dest = '\0'; /* no double slashes */ - if (last == '/') + if (last == '/') { ++uri; - if (r->filename) + } + if (r->filename) { r->filename = ap_pstrcat(r->pool, r->filename, buf, uri, NULL); - else + } + else { r->filename = ap_pstrcat(r->pool, buf, uri, NULL); + } } -static int vhost_alias_translate(request_rec *r) +static int mva_translate(request_rec *r) { - vhost_alias_server_conf *conf = - (vhost_alias_server_conf *) - ap_get_module_config(r->server->module_config, &vhost_alias_module); + mva_sconf_t *conf; const char *name, *map, *uri; - vhost_alias_mode mode; + mva_mode_e mode; int cgi; + conf = (mva_sconf_t *) ap_get_module_config(r->server->module_config, + &vhost_alias_module); if (!strncmp(r->uri, "/cgi-bin/", 9)) { mode = conf->cgi_root_mode; map = conf->cgi_root; @@ -388,21 +425,26 @@ * call if the mode is wrong */ cgi = 1; - } else if (r->uri[0] == '/') { + } + else if (r->uri[0] == '/') { mode = conf->doc_root_mode; map = conf->doc_root; uri = r->uri; cgi = 0; - } else + } + else { return DECLINED; + } - if (mode == VHOST_ALIAS_NAME) + if (mode == VHOST_ALIAS_NAME) { name = ap_get_server_name(r); - else - if (mode == VHOST_ALIAS_IP) + } + else if (mode == VHOST_ALIAS_IP) { name = r->connection->local_ip; - else + } + else { return DECLINED; + } vhost_alias_interpolate(r, name, map, uri); @@ -422,11 +464,11 @@ NULL, /* initializer */ NULL, /* dir config creater */ NULL, /* dir merger --- default is to override */ - vhost_alias_create_config, /* server config */ - vhost_alias_merge_config, /* merge server configs */ - vhost_alias_commands, /* command table */ + mva_create_server_config, /* server config */ + mva_merge_server_config, /* merge server configs */ + mva_commands, /* command table */ NULL, /* handlers */ - vhost_alias_translate, /* filename translation */ + mva_translate, /* filename translation */ NULL, /* check_user_id */ NULL, /* check auth */ NULL, /* check access */ @@ -438,4 +480,3 @@ NULL, /* child_exit */ NULL /* post read-request */ }; -