You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by do...@hyperreal.org on 1998/01/11 21:25:07 UTC
cvs commit: apachen/src/main http_conf_globals.h http_config.c http_main.c util.c
dougm 98/01/11 12:25:07
Modified: . STATUS
src CHANGES
src/main http_conf_globals.h http_config.c http_main.c
util.c
Log:
added Doug's [PATCH] add -c and -C switches (take 3)
added Paul's WIN32: patch to allow for Doug's -c option
Submitted by: Doug MacEachern
Reviewed by: Ben, Paul, Martin
Revision Changes Path
1.74 +2 -8 apachen/STATUS
Index: STATUS
===================================================================
RCS file: /export/home/cvs/apachen/STATUS,v
retrieving revision 1.73
retrieving revision 1.74
diff -u -r1.73 -r1.74
--- STATUS 1998/01/11 18:30:08 1.73
+++ STATUS 1998/01/11 20:24:57 1.74
@@ -74,6 +74,8 @@
* Dean's [PATCH] make mod_include use ap_cpystrn
* WIN32: fix proxy caching
* WIN32: fix CGI scripts called w/o '=' in path info PR#1591
+ * Doug's [PATCH] add -c and -C switches (take 3)
+ * Paul's WIN32: patch to allow for Doug's -c option
Available Patches:
@@ -100,14 +102,6 @@
* Dean's [PATCH] yet another slow function
<Pi...@twinlark.arctic.org>
Status: Dean +1, Jim +1, Martin +1, Paul +1
-
- * Doug's [PATCH] add -c and -C switches (take 3)
- <34...@telebusiness.co.nz>
- Doug, Randy and Jim were +1 on original -MApache::httpd_conf
- patch, which was recinded in favor of this patch prompted by
- ideas from Ben and Dean. Marc, Ken and Jim were also in favor
- of this over -M
- Status: Doug +1, Martin +1, Ben +1, Paul +1
* Brian Havard's [Patch] OS/2 - fix up shut down
<19...@silk.apana.org.au>
1.562 +8 -0 apachen/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apachen/src/CHANGES,v
retrieving revision 1.561
retrieving revision 1.562
diff -u -r1.561 -r1.562
--- CHANGES 1998/01/10 05:46:32 1.561
+++ CHANGES 1998/01/11 20:24:58 1.562
@@ -1,5 +1,13 @@
Changes with Apache 1.3b4
+ *) new -C and -c command line arguments
+ usage:
+ -C "directive" : process directive before reading config files
+ -c "directive" : process directive after reading config files
+ example:
+ httpd -C "PerlModule Apache::httpd_conf"
+ [Doug MacEachern]
+
*) WIN32: Fix the execution of CGIs that are scripts and called
with path info that does not have an '=' in.
(eg. http://server/cgi-bin/printenv?foobar) PR#1591
1.22 +4 -0 apachen/src/main/http_conf_globals.h
Index: http_conf_globals.h
===================================================================
RCS file: /export/home/cvs/apachen/src/main/http_conf_globals.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- http_conf_globals.h 1998/01/07 16:46:02 1.21
+++ http_conf_globals.h 1998/01/11 20:25:01 1.22
@@ -88,6 +88,10 @@
extern char server_root[MAX_STRING_LEN];
extern char server_confname[MAX_STRING_LEN];
+/* for -C and -c switches */
+extern array_header *server_pre_read_config;
+extern array_header *server_post_read_config;
+
/* We want this to have the least chance of being corrupted if there
* is some memory corruption, so we allocate it statically.
*/
1.92 +47 -0 apachen/src/main/http_config.c
Index: http_config.c
===================================================================
RCS file: /export/home/cvs/apachen/src/main/http_config.c,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -r1.91 -r1.92
--- http_config.c 1998/01/07 16:46:03 1.91
+++ http_config.c 1998/01/11 20:25:03 1.92
@@ -900,6 +900,42 @@
return make_full_path(p, server_root, file);
}
+void process_command_config(server_rec *s, array_header *arr, pool *p, pool *ptemp)
+{
+ const char *errmsg;
+ cmd_parms parms;
+ int i;
+ char **lines = (char **)arr->elts;
+
+ parms = default_parms;
+ parms.pool = p;
+ parms.temp_pool = ptemp;
+ parms.server = s;
+ parms.override = (RSRC_CONF | OR_ALL) & ~(OR_AUTHCFG | OR_LIMIT);
+ parms.config_file = pcfg_openfile(p, NULL);
+
+ for (i = 0; i < arr->nelts; ++i) {
+ char *line = lines[i];
+
+#ifdef MOD_PERL
+ if(!(strncmp(line, "PerlModule ", 11))) {
+ const char *perl_cmd_module(cmd_parms *parms, void *dummy, char *arg);
+ line += 11;
+ (void)perl_cmd_module(&parms, s->lookup_defaults, line);
+ continue;
+ }
+#endif
+
+ errmsg = handle_command(&parms, s->lookup_defaults, line);
+
+ if (errmsg) {
+ fprintf(stderr, "Syntax error in command: `%s'\n", lines[i]);
+ fprintf(stderr, "%s\n", errmsg);
+ exit(1);
+ }
+ }
+}
+
void process_resource_config(server_rec *s, char *fname, pool *p, pool *ptemp)
{
const char *errmsg;
@@ -914,6 +950,13 @@
return;
}
+ /* don't require conf/httpd.conf if we have a -C or -c switch */
+ if((server_pre_read_config->nelts || server_post_read_config->nelts) &&
+ !(strcmp(fname, server_root_relative(p, SERVER_CONFIG_FILE)))) {
+ if (stat(fname, &finfo) == -1)
+ return;
+ }
+
/* GCC's initialization extensions are soooo nice here... */
parms = default_parms;
@@ -1193,9 +1236,13 @@
/* All server-wide config files now have the SAME syntax... */
+ process_command_config(s, server_pre_read_config, p, ptemp);
+
process_resource_config(s, confname, p, ptemp);
process_resource_config(s, s->srm_confname, p, ptemp);
process_resource_config(s, s->access_confname, p, ptemp);
+
+ process_command_config(s, server_post_read_config, p, ptemp);
fixup_virtual_hosts(p, s);
default_listeners(p, s);
1.265 +24 -5 apachen/src/main/http_main.c
Index: http_main.c
===================================================================
RCS file: /export/home/cvs/apachen/src/main/http_main.c,v
retrieving revision 1.264
retrieving revision 1.265
diff -u -r1.264 -r1.265
--- http_main.c 1998/01/11 16:51:32 1.264
+++ http_main.c 1998/01/11 20:25:04 1.265
@@ -231,6 +231,9 @@
char server_confname[MAX_STRING_LEN];
char coredump_dir[MAX_STRING_LEN];
+array_header *server_pre_read_config;
+array_header *server_post_read_config;
+
/* *Non*-shared http_main globals... */
server_rec *server_conf;
@@ -278,6 +281,7 @@
static pool *pconf; /* Pool for config stuff */
static pool *ptrans; /* Pool for per-transaction stuff */
static pool *pchild; /* Pool for httpd child stuff */
+static pool *pcommands; /* Pool for -C and -c switches */
int APACHE_TLS my_pid; /* it seems silly to call getpid all the time */
#ifndef MULTITHREAD
@@ -743,9 +747,11 @@
void usage(char *bin)
{
- fprintf(stderr, "Usage: %s [-d directory] [-f file] [-v] [-h] [-l]\n", bin);
+ fprintf(stderr, "Usage: %s [-d directory] [-f file] [-C \"directive\"] [-c \"directive\"] [-v] [-h] [-l]\n", bin);
fprintf(stderr, "-d directory : specify an alternate initial ServerRoot\n");
fprintf(stderr, "-f file : specify an alternate ServerConfigFile\n");
+ fprintf(stderr, "-C \"directive\" : process directive before reading config files\n");
+ fprintf(stderr, "-c \"directive\" : process directive after reading config files\n");
fprintf(stderr, "-v : show version number\n");
fprintf(stderr, "-V : show compile settings\n");
fprintf(stderr, "-h : list directives\n");
@@ -3606,14 +3612,27 @@
pconf = permanent_pool;
ptrans = make_sub_pool(pconf);
+ pcommands = make_sub_pool(NULL);
+ server_pre_read_config = make_array(pcommands, 1, sizeof(char *));
+ server_post_read_config = make_array(pcommands, 1, sizeof(char *));
+
server_argv0 = argv[0];
ap_cpystrn(server_root, HTTPD_ROOT, sizeof(server_root));
ap_cpystrn(server_confname, SERVER_CONFIG_FILE, sizeof(server_confname));
setup_prelinked_modules();
- while ((c = getopt(argc, argv, "Xd:f:vVhlZ:")) != -1) {
+ while ((c = getopt(argc, argv, "C:c:Xd:f:vVhlZ:")) != -1) {
+ char **new;
switch (c) {
+ case 'c':
+ new = (char **)push_array(server_post_read_config);
+ *new = pstrdup(pcommands, optarg);
+ break;
+ case 'C':
+ new = (char **)push_array(server_pre_read_config);
+ *new = pstrdup(pcommands, optarg);
+ break;
case 'd':
ap_cpystrn(server_root, optarg, sizeof(server_root));
break;
@@ -4456,7 +4475,7 @@
ap_assert(*ev);
pass_argv[0] = argv[0];
- pass_argv[1] = "-c";
+ pass_argv[1] = "-Z";
pass_argv[2] = buf;
for (i = 1; i < argc; i++) {
pass_argv[i + 2] = argv[i];
@@ -4731,10 +4750,10 @@
setup_prelinked_modules();
- while ((c = getopt(argc, argv, "Xd:f:vVhlc:ius")) != -1) {
+ while ((c = getopt(argc, argv, "Xd:f:vVhlZ:ius")) != -1) {
switch (c) {
#ifdef WIN32
- case 'c':
+ case 'Z':
exit_event = open_event(optarg);
APD2("child: opened process event %s", optarg);
cp = strchr(optarg, '_');
1.83 +10 -4 apachen/src/main/util.c
Index: util.c
===================================================================
RCS file: /export/home/cvs/apachen/src/main/util.c,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -r1.82 -r1.83
--- util.c 1998/01/07 16:46:21 1.82
+++ util.c 1998/01/11 20:25:05 1.83
@@ -672,14 +672,20 @@
API_EXPORT(configfile_t *) pcfg_openfile(pool *p, const char *name)
{
configfile_t *new_cfg;
- FILE *file = fopen(name, "r");
+ FILE *file;
#ifdef DEBUG
- aplog_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, NULL, "Opening config file %s (%s)", name, file == NULL ? strerror(errno) : "successful");
+ aplog_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, NULL,
+ "Opening config file %s (%s)",
+ name ? name : "NULL",
+ (name && (file == NULL)) ? strerror(errno) : "successful");
#endif
- if (file == NULL)
- return NULL;
+ if (name != NULL) {
+ file = fopen(name, "r");
+ if (file == NULL)
+ return NULL;
+ }
new_cfg = palloc(p, sizeof (*new_cfg));
new_cfg->param = file;