dgaudet 97/09/18 01:12:25
Modified: src INDENT src/modules/standard mod_autoindex.c mod_cern_meta.c mod_cgi.c mod_digest.c Log: indent Revision Changes Path 1.29 +5 -5 apachen/src/INDENT Index: INDENT =================================================================== RCS file: /export/home/cvs/apachen/src/INDENT,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- INDENT 1997/09/18 07:59:12 1.28 +++ INDENT 1997/09/18 08:12:20 1.29 @@ -65,10 +65,10 @@ mod_auth_anon.c DONE by Dean mod_auth_db.c DONE by Dean mod_auth_dbm.c DONE by Dean - mod_autoindex.c RESERVED by Dean - mod_cern_meta.c RESERVED by Dean - mod_cgi.c RESERVED by Dean - mod_digest.c RESERVED by Dean + mod_autoindex.c DONE by Dean + mod_cern_meta.c DONE by Dean + mod_cgi.c DONE by Dean + mod_digest.c DONE by Dean mod_dir.c mod_dld.c mod_env.c @@ -88,7 +88,7 @@ mod_rewrite.h mod_setenvif.c DONE by Ken mod_speling.c DONE by Brian - mod_status.c + mod_status.c RESERVED by Dean mod_unique_id.c DONE by Brian mod_userdir.c DONE by Brian mod_usertrack.c DONE by Brian 1.48 +542 -517 apachen/src/modules/standard/mod_autoindex.c Index: mod_autoindex.c =================================================================== RCS file: /export/home/cvs/apachen/src/modules/standard/mod_autoindex.c,v retrieving revision 1.47 retrieving revision 1.48 diff -u -r1.47 -r1.48 --- mod_autoindex.c 1997/08/31 22:47:49 1.47 +++ mod_autoindex.c 1997/09/18 08:12:22 1.48 @@ -80,7 +80,7 @@ #define FRONT_MATTER 1 #define END_MATTER 0 -#define FANCY_INDEXING 1 /* Indexing options */ +#define FANCY_INDEXING 1 /* Indexing options */ #define ICONS_ARE_LINKS 2 #define SCAN_HTML_TITLES 4 #define SUPPRESS_LAST_MOD 8 @@ -117,10 +117,10 @@ char *default_icon; int icon_width; int icon_height; - + array_header *icon_list, *alt_list, *desc_list, *ign_list; array_header *hdr_list, *rdme_list, *opts_list; - + } autoindex_config_rec; static char c_by_encoding, c_by_type, c_by_path; @@ -137,234 +137,238 @@ static void emit_preamble(request_rec *r, char *title) { rvputs - ( - r, - "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n", - "<HTML>\n <HEAD>\n <TITLE>Index of ", - title, - "</TITLE>\n </HEAD>\n <BODY>\n", - NULL - ); + ( + r, + "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n", + "<HTML>\n <HEAD>\n <TITLE>Index of ", + title, + "</TITLE>\n </HEAD>\n <BODY>\n", + NULL + ); } static void push_item(array_header *arr, char *type, char *to, char *path, - char *data) + char *data) { - struct item *p = (struct item *)push_array(arr); + struct item *p = (struct item *) push_array(arr); + + if (!to) + to = ""; + if (!path) + path = ""; - if (!to) to = ""; - if (!path) path = ""; - p->type = type; - p->data = data ? pstrdup(arr->pool, data): NULL; + p->data = data ? pstrdup(arr->pool, data) : NULL; p->apply_path = pstrcat(arr->pool, path, "*", NULL); - + if ((type == BY_PATH) && (!is_matchexp(to))) - p->apply_to = pstrcat (arr->pool, "*", to, NULL); + p->apply_to = pstrcat(arr->pool, "*", to, NULL); else if (to) - p->apply_to = pstrdup (arr->pool, to); + p->apply_to = pstrdup(arr->pool, to); else - p->apply_to = NULL; + p->apply_to = NULL; } static const char *add_alt(cmd_parms *cmd, void *d, char *alt, char *to) { if (cmd->info == BY_PATH) - if (!strcmp(to, "**DIRECTORY**")) - to = "^^DIRECTORY^^"; + if (!strcmp(to, "**DIRECTORY**")) + to = "^^DIRECTORY^^"; - push_item(((autoindex_config_rec *)d)->alt_list, cmd->info, to, cmd->path, alt); + push_item(((autoindex_config_rec *) d)->alt_list, cmd->info, to, cmd->path, alt); return NULL; } static const char *add_icon(cmd_parms *cmd, void *d, char *icon, char *to) { - char *iconbak = pstrdup (cmd->pool, icon); + char *iconbak = pstrdup(cmd->pool, icon); if (icon[0] == '(') { - char *alt = getword_nc (cmd->pool, &iconbak, ','); - iconbak[strlen(iconbak) - 1] = '\0'; /* Lose closing paren */ - add_alt(cmd, d, &alt[1], to); - } - if (cmd->info == BY_PATH) - if (!strcmp(to, "**DIRECTORY**")) - to = "^^DIRECTORY^^"; + char *alt = getword_nc(cmd->pool, &iconbak, ','); + iconbak[strlen(iconbak) - 1] = '\0'; /* Lose closing paren */ + add_alt(cmd, d, &alt[1], to); + } + if (cmd->info == BY_PATH) + if (!strcmp(to, "**DIRECTORY**")) + to = "^^DIRECTORY^^"; - push_item(((autoindex_config_rec *)d)->icon_list, cmd->info, to, cmd->path, - iconbak); + push_item(((autoindex_config_rec *) d)->icon_list, cmd->info, to, cmd->path, + iconbak); return NULL; } static const char *add_desc(cmd_parms *cmd, void *d, char *desc, char *to) { push_item - ( - ((autoindex_config_rec *) d)->desc_list, - cmd->info, - to, - cmd->path, - desc - ); + ( + ((autoindex_config_rec *) d)->desc_list, + cmd->info, + to, + cmd->path, + desc + ); return NULL; } static const char *add_ignore(cmd_parms *cmd, void *d, char *ext) { - push_item(((autoindex_config_rec *)d)->ign_list, 0, ext, cmd->path, NULL); + push_item(((autoindex_config_rec *) d)->ign_list, 0, ext, cmd->path, NULL); return NULL; } static const char *add_header(cmd_parms *cmd, void *d, char *name) { - if (strchr (name, '/')) { - return "HeaderName cannot contain a /"; + if (strchr(name, '/')) { + return "HeaderName cannot contain a /"; } - push_item(((autoindex_config_rec *)d)->hdr_list, 0, NULL, cmd->path, name); + push_item(((autoindex_config_rec *) d)->hdr_list, 0, NULL, cmd->path, name); return NULL; } static const char *add_readme(cmd_parms *cmd, void *d, char *name) { - if (strchr (name, '/')) { - return "ReadmeName cannot contain a /"; + if (strchr(name, '/')) { + return "ReadmeName cannot contain a /"; } - push_item(((autoindex_config_rec *)d)->rdme_list, 0, NULL, cmd->path, name); + push_item(((autoindex_config_rec *) d)->rdme_list, 0, NULL, cmd->path, name); return NULL; } static const char *add_opts_int(cmd_parms *cmd, void *d, int opts) { - push_item(((autoindex_config_rec *)d)->opts_list, (char*)(long)opts, NULL, - cmd->path, NULL); + push_item(((autoindex_config_rec *) d)->opts_list, (char *) (long) opts, NULL, + cmd->path, NULL); return NULL; } -static const char *fancy_indexing (cmd_parms *cmd, void *d, int arg) +static const char *fancy_indexing(cmd_parms *cmd, void *d, int arg) { - return add_opts_int (cmd, d, arg? FANCY_INDEXING : 0); + return add_opts_int(cmd, d, arg ? FANCY_INDEXING : 0); } -static const char *add_opts(cmd_parms *cmd, void *d, const char *optstr) { +static const char *add_opts(cmd_parms *cmd, void *d, const char *optstr) +{ char *w; int opts = 0; autoindex_config_rec *d_cfg = (autoindex_config_rec *) d; while (optstr[0]) { - w = getword_conf(cmd->pool, &optstr); - if (!strcasecmp(w, "FancyIndexing")) - opts |= FANCY_INDEXING; - else if (!strcasecmp(w, "IconsAreLinks")) - opts |= ICONS_ARE_LINKS; - else if (!strcasecmp(w, "ScanHTMLTitles")) - opts |= SCAN_HTML_TITLES; - else if (!strcasecmp(w, "SuppressLastModified")) - opts |= SUPPRESS_LAST_MOD; - else if (!strcasecmp(w, "SuppressSize")) - opts |= SUPPRESS_SIZE; - else if (!strcasecmp(w, "SuppressDescription")) - opts |= SUPPRESS_DESC; - else if (!strcasecmp(w,"SuppressHTMLPreamble")) - opts |= SUPPRESS_PREAMBLE; - else if (!strcasecmp(w, "None")) - opts = 0; - else if (! strncasecmp (w, "IconWidth", 9)) { - if (strchr (w, '=') != NULL) { - const char *x = pstrdup (cmd->pool, w); - char *val; - val = getword (cmd->pool, &x, '='); - val = getword (cmd->pool, &x, '='); - d_cfg->icon_width = atoi(val); - } - else { - d_cfg->icon_width = DEFAULT_ICON_WIDTH; - } - } - else if (! strncasecmp (w, "IconHeight", 10)) { - if (strchr (w, '=') != NULL) { - const char *x = pstrdup (cmd->pool, w); - char *val; - val = getword (cmd->pool, &x, '='); - val = getword (cmd->pool, &x, '='); - d_cfg->icon_height = atoi(val); - } - else { - d_cfg->icon_height = DEFAULT_ICON_HEIGHT; - } - } - else - return "Invalid directory indexing option"; + w = getword_conf(cmd->pool, &optstr); + if (!strcasecmp(w, "FancyIndexing")) + opts |= FANCY_INDEXING; + else if (!strcasecmp(w, "IconsAreLinks")) + opts |= ICONS_ARE_LINKS; + else if (!strcasecmp(w, "ScanHTMLTitles")) + opts |= SCAN_HTML_TITLES; + else if (!strcasecmp(w, "SuppressLastModified")) + opts |= SUPPRESS_LAST_MOD; + else if (!strcasecmp(w, "SuppressSize")) + opts |= SUPPRESS_SIZE; + else if (!strcasecmp(w, "SuppressDescription")) + opts |= SUPPRESS_DESC; + else if (!strcasecmp(w, "SuppressHTMLPreamble")) + opts |= SUPPRESS_PREAMBLE; + else if (!strcasecmp(w, "None")) + opts = 0; + else if (!strncasecmp(w, "IconWidth", 9)) { + if (strchr(w, '=') != NULL) { + const char *x = pstrdup(cmd->pool, w); + char *val; + val = getword(cmd->pool, &x, '='); + val = getword(cmd->pool, &x, '='); + d_cfg->icon_width = atoi(val); + } + else { + d_cfg->icon_width = DEFAULT_ICON_WIDTH; + } + } + else if (!strncasecmp(w, "IconHeight", 10)) { + if (strchr(w, '=') != NULL) { + const char *x = pstrdup(cmd->pool, w); + char *val; + val = getword(cmd->pool, &x, '='); + val = getword(cmd->pool, &x, '='); + d_cfg->icon_height = atoi(val); + } + else { + d_cfg->icon_height = DEFAULT_ICON_HEIGHT; + } + } + else + return "Invalid directory indexing option"; } return add_opts_int(cmd, d, opts); } #define DIR_CMD_PERMS OR_INDEXES -static command_rec autoindex_cmds[] = { -{ "AddIcon", add_icon, BY_PATH, DIR_CMD_PERMS, ITERATE2, - "an icon URL followed by one or more filenames" }, -{ "AddIconByType", add_icon, BY_TYPE, DIR_CMD_PERMS, ITERATE2, - "an icon URL followed by one or more MIME types" }, -{ "AddIconByEncoding", add_icon, BY_ENCODING, DIR_CMD_PERMS, ITERATE2, - "an icon URL followed by one or more content encodings" }, -{ "AddAlt", add_alt, BY_PATH, DIR_CMD_PERMS, ITERATE2, - "alternate descriptive text followed by one or more filenames" }, -{ "AddAltByType", add_alt, BY_TYPE, DIR_CMD_PERMS, ITERATE2, - "alternate descriptive text followed by one or more MIME types" }, -{ "AddAltByEncoding", add_alt, BY_ENCODING, DIR_CMD_PERMS, ITERATE2, - "alternate descriptive text followed by one or more content encodings" }, -{ "IndexOptions", add_opts, NULL, DIR_CMD_PERMS, RAW_ARGS, - "one or more index options" }, -{ "IndexIgnore", add_ignore, NULL, DIR_CMD_PERMS, ITERATE, - "one or more file extensions" }, -{ "AddDescription", add_desc, BY_PATH, DIR_CMD_PERMS, ITERATE2, - "Descriptive text followed by one or more filenames" }, -{ "HeaderName", add_header, NULL, DIR_CMD_PERMS, TAKE1, "a filename" }, -{ "ReadmeName", add_readme, NULL, DIR_CMD_PERMS, TAKE1, "a filename" }, -{ "FancyIndexing", fancy_indexing, NULL, DIR_CMD_PERMS, FLAG, - "Limited to 'on' or 'off' (superseded by IndexOptions FancyIndexing)" }, -{ "DefaultIcon", set_string_slot, - (void*)XtOffsetOf(autoindex_config_rec, default_icon), - DIR_CMD_PERMS, TAKE1, "an icon URL"}, -{ NULL } +static command_rec autoindex_cmds[] = +{ + {"AddIcon", add_icon, BY_PATH, DIR_CMD_PERMS, ITERATE2, + "an icon URL followed by one or more filenames"}, + {"AddIconByType", add_icon, BY_TYPE, DIR_CMD_PERMS, ITERATE2, + "an icon URL followed by one or more MIME types"}, + {"AddIconByEncoding", add_icon, BY_ENCODING, DIR_CMD_PERMS, ITERATE2, + "an icon URL followed by one or more content encodings"}, + {"AddAlt", add_alt, BY_PATH, DIR_CMD_PERMS, ITERATE2, + "alternate descriptive text followed by one or more filenames"}, + {"AddAltByType", add_alt, BY_TYPE, DIR_CMD_PERMS, ITERATE2, + "alternate descriptive text followed by one or more MIME types"}, + {"AddAltByEncoding", add_alt, BY_ENCODING, DIR_CMD_PERMS, ITERATE2, + "alternate descriptive text followed by one or more content encodings"}, + {"IndexOptions", add_opts, NULL, DIR_CMD_PERMS, RAW_ARGS, + "one or more index options"}, + {"IndexIgnore", add_ignore, NULL, DIR_CMD_PERMS, ITERATE, + "one or more file extensions"}, + {"AddDescription", add_desc, BY_PATH, DIR_CMD_PERMS, ITERATE2, + "Descriptive text followed by one or more filenames"}, + {"HeaderName", add_header, NULL, DIR_CMD_PERMS, TAKE1, "a filename"}, + {"ReadmeName", add_readme, NULL, DIR_CMD_PERMS, TAKE1, "a filename"}, + {"FancyIndexing", fancy_indexing, NULL, DIR_CMD_PERMS, FLAG, + "Limited to 'on' or 'off' (superseded by IndexOptions FancyIndexing)"}, + {"DefaultIcon", set_string_slot, + (void *) XtOffsetOf(autoindex_config_rec, default_icon), + DIR_CMD_PERMS, TAKE1, "an icon URL"}, + {NULL} }; -static void *create_autoindex_config (pool *p, char *dummy) +static void *create_autoindex_config(pool *p, char *dummy) { autoindex_config_rec *new = - (autoindex_config_rec *) pcalloc (p, sizeof(autoindex_config_rec)); + (autoindex_config_rec *) pcalloc(p, sizeof(autoindex_config_rec)); new->icon_width = 0; new->icon_height = 0; - new->icon_list = make_array (p, 4, sizeof (struct item)); - new->alt_list = make_array (p, 4, sizeof (struct item)); - new->desc_list = make_array (p, 4, sizeof (struct item)); - new->ign_list = make_array (p, 4, sizeof (struct item)); - new->hdr_list = make_array (p, 4, sizeof (struct item)); - new->rdme_list = make_array (p, 4, sizeof (struct item)); - new->opts_list = make_array (p, 4, sizeof (struct item)); - - return (void *)new; -} - -static void *merge_autoindex_configs (pool *p, void *basev, void *addv) -{ - autoindex_config_rec *new = (autoindex_config_rec*)pcalloc (p, sizeof(autoindex_config_rec)); - autoindex_config_rec *base = (autoindex_config_rec *)basev; - autoindex_config_rec *add = (autoindex_config_rec *)addv; + new->icon_list = make_array(p, 4, sizeof(struct item)); + new->alt_list = make_array(p, 4, sizeof(struct item)); + new->desc_list = make_array(p, 4, sizeof(struct item)); + new->ign_list = make_array(p, 4, sizeof(struct item)); + new->hdr_list = make_array(p, 4, sizeof(struct item)); + new->rdme_list = make_array(p, 4, sizeof(struct item)); + new->opts_list = make_array(p, 4, sizeof(struct item)); + + return (void *) new; +} + +static void *merge_autoindex_configs(pool *p, void *basev, void *addv) +{ + autoindex_config_rec *new = (autoindex_config_rec *) pcalloc(p, sizeof(autoindex_config_rec)); + autoindex_config_rec *base = (autoindex_config_rec *) basev; + autoindex_config_rec *add = (autoindex_config_rec *) addv; - new->default_icon = add->default_icon?add->default_icon:base->default_icon; + new->default_icon = add->default_icon ? add->default_icon:base->default_icon; new->icon_height = add->icon_height ? add->icon_height : base->icon_height; new->icon_width = add->icon_width ? add->icon_width : base->icon_width; - new->alt_list = append_arrays (p, add->alt_list, base->alt_list); - new->ign_list = append_arrays (p, add->ign_list, base->ign_list); - new->hdr_list = append_arrays (p, add->hdr_list, base->hdr_list); - new->desc_list = append_arrays (p, add->desc_list, base->desc_list); - new->icon_list = append_arrays (p, add->icon_list, base->icon_list); - new->rdme_list = append_arrays (p, add->rdme_list, base->rdme_list); - new->opts_list = append_arrays (p, add->opts_list, base->opts_list); - + new->alt_list = append_arrays(p, add->alt_list, base->alt_list); + new->ign_list = append_arrays(p, add->ign_list, base->ign_list); + new->hdr_list = append_arrays(p, add->hdr_list, base->hdr_list); + new->desc_list = append_arrays(p, add->desc_list, base->desc_list); + new->icon_list = append_arrays(p, add->icon_list, base->icon_list); + new->rdme_list = append_arrays(p, add->rdme_list, base->rdme_list); + new->opts_list = append_arrays(p, add->opts_list, base->opts_list); + return new; } @@ -389,38 +393,41 @@ char key; }; -static char *find_item(request_rec *r, array_header *list, int path_only) { +static char *find_item(request_rec *r, array_header *list, int path_only) +{ char *content_type = r->content_type; char *content_encoding = r->content_encoding; char *path = r->filename; - struct item *items = (struct item *)list->elts; + struct item *items = (struct item *) list->elts; int i; for (i = 0; i < list->nelts; ++i) { - struct item *p = &items[i]; - - /* Special cased for ^^DIRECTORY^^ and ^^BLANKICON^^ */ - if ((path[0] == '^') || (!strcmp_match(path, p->apply_path))) { - if (!*(p->apply_to)) - return p->data; - else if (p->type == BY_PATH || path[0] == '^') { - if (!strcmp_match(path, p->apply_to)) - return p->data; - } else if (!path_only) { - if (!content_encoding) { - if (p->type == BY_TYPE) { - if (content_type && !strcmp_match(content_type, p->apply_to)) - return p->data; - } - } else { - if (p->type == BY_ENCODING) { - if (!strcmp_match(content_encoding, p->apply_to)) - return p->data; - } - } - } - } + struct item *p = &items[i]; + + /* Special cased for ^^DIRECTORY^^ and ^^BLANKICON^^ */ + if ((path[0] == '^') || (!strcmp_match(path, p->apply_path))) { + if (!*(p->apply_to)) + return p->data; + else if (p->type == BY_PATH || path[0] == '^') { + if (!strcmp_match(path, p->apply_to)) + return p->data; + } + else if (!path_only) { + if (!content_encoding) { + if (p->type == BY_TYPE) { + if (content_type && !strcmp_match(content_type, p->apply_to)) + return p->data; + } + } + else { + if (p->type == BY_ENCODING) { + if (!strcmp_match(content_encoding, p->apply_to)) + return p->data; + } + } + } + } } return NULL; } @@ -431,7 +438,7 @@ #define find_header(d,p) find_item(p,d->hdr_list,0) #define find_readme(d,p) find_item(p,d->rdme_list,0) -static char *find_default_icon (autoindex_config_rec *d, char *bogus_name) +static char *find_default_icon(autoindex_config_rec * d, char *bogus_name) { request_rec r; @@ -439,51 +446,53 @@ * of ugliness. Note that the fields initialized are precisely * those that find_item looks at... */ - + r.filename = bogus_name; r.content_type = r.content_encoding = NULL; - return find_item (&r, d->icon_list, 1); + return find_item(&r, d->icon_list, 1); } -static int ignore_entry(autoindex_config_rec *d, char *path) { +static int ignore_entry(autoindex_config_rec * d, char *path) +{ array_header *list = d->ign_list; - struct item *items = (struct item *)list->elts; + struct item *items = (struct item *) list->elts; char *tt; int i; if ((tt = strrchr(path, '/')) == NULL) - tt = path; + tt = path; else { - tt++; + tt++; } for (i = 0; i < list->nelts; ++i) { - struct item *p = &items[i]; - char *ap; + struct item *p = &items[i]; + char *ap; - if ((ap = strrchr(p->apply_to, '/')) == NULL) - ap = p->apply_to; - else - ap++; + if ((ap = strrchr(p->apply_to, '/')) == NULL) + ap = p->apply_to; + else + ap++; - if (!strcmp_match(path, p->apply_path) && !strcmp_match(tt, ap)) - return 1; + if (!strcmp_match(path, p->apply_path) && !strcmp_match(tt, ap)) + return 1; } return 0; } -static int find_opts(autoindex_config_rec *d, request_rec *r) { +static int find_opts(autoindex_config_rec * d, request_rec *r) +{ char *path = r->filename; array_header *list = d->opts_list; - struct item *items = (struct item *)list->elts; + struct item *items = (struct item *) list->elts; int i; for (i = 0; i < list->nelts; ++i) { - struct item *p = &items[i]; - - if (!strcmp_match(path, p->apply_path)) - return (int)(long)p->type; + struct item *p = &items[i]; + + if (!strcmp_match(path, p->apply_path)) + return (int) (long) p->type; } return 0; } @@ -498,7 +507,7 @@ * find it. */ static int insert_readme(char *name, char *readme_fname, char *title, int hrule, - int whichend, request_rec *r) + int whichend, request_rec *r) { char *fn; FILE *f; @@ -506,129 +515,138 @@ int plaintext = 0; request_rec *rr; autoindex_config_rec *cfg = - (autoindex_config_rec *) get_module_config - ( - r->per_dir_config, - &autoindex_module - ); + (autoindex_config_rec *) get_module_config + ( + r->per_dir_config, + &autoindex_module + ); int autoindex_opts = find_opts(cfg, r); /* XXX: this is a load of crap, it needs to do a full sub_req_lookup_uri */ fn = make_full_path(r->pool, name, readme_fname); fn = pstrcat(r->pool, fn, ".html", NULL); if (stat(fn, &finfo) == -1) { - /* A brief fake multiviews search for README.html */ - fn[strlen(fn)-5] = '\0'; - if (stat(fn, &finfo) == -1) - return 0; - plaintext = 1; - if (hrule) rputs("<HR>\n", r); - rputs("<PRE>\n", r); + /* A brief fake multiviews search for README.html */ + fn[strlen(fn) - 5] = '\0'; + if (stat(fn, &finfo) == -1) + return 0; + plaintext = 1; + if (hrule) + rputs("<HR>\n", r); + rputs("<PRE>\n", r); } - else if (hrule) rputs("<HR>\n", r); + else if (hrule) + rputs("<HR>\n", r); /* XXX: when the above is rewritten properly, this necessary security * check will be redundant. -djg */ - rr = sub_req_lookup_file (fn, r); + rr = sub_req_lookup_file(fn, r); if (rr->status != HTTP_OK) { - destroy_sub_req (rr); - return 0; + destroy_sub_req(rr); + return 0; } - destroy_sub_req (rr); + destroy_sub_req(rr); if (!(f = pfopen(r->pool, fn, "r"))) - return 0; + return 0; if ( - (whichend == FRONT_MATTER) && - (! (autoindex_opts & SUPPRESS_PREAMBLE)) - ) { - emit_preamble (r, title); + (whichend == FRONT_MATTER) && + (!(autoindex_opts & SUPPRESS_PREAMBLE)) + ) { + emit_preamble(r, title); } if (!plaintext) { - send_fd(f, r); + send_fd(f, r); } else { - char buf[IOBUFSIZE+1]; - int i, n, c, ch; - while (!feof(f)) - { - do n = fread(buf, sizeof(char), IOBUFSIZE, f); - while (n == -1 && ferror(f) && errno == EINTR); - if (n == -1 || n == 0) break; - buf[n] = '\0'; - c = 0; - while (c < n) { - for (i = c; i < n; i++) - if (buf[i] == '<' || buf[i] == '>' || buf[i] == '&') break; - ch = buf[i]; - buf[i] = '\0'; - rputs(&buf[c], r); - if (ch == '<') rputs("<", r); - else if (ch == '>') rputs(">", r); - else if (ch == '&') rputs("&", r); - c = i + 1; - } - } + char buf[IOBUFSIZE + 1]; + int i, n, c, ch; + while (!feof(f)) { + do + n = fread(buf, sizeof(char), IOBUFSIZE, f); + while (n == -1 && ferror(f) && errno == EINTR); + if (n == -1 || n == 0) + break; + buf[n] = '\0'; + c = 0; + while (c < n) { + for (i = c; i < n; i++) + if (buf[i] == '<' || buf[i] == '>' || buf[i] == '&') + break; + ch = buf[i]; + buf[i] = '\0'; + rputs(&buf[c], r); + if (ch == '<') + rputs("<", r); + else if (ch == '>') + rputs(">", r); + else if (ch == '&') + rputs("&", r); + c = i + 1; + } + } } pfclose(r->pool, f); if (plaintext) - rputs("</PRE>\n", r); + rputs("</PRE>\n", r); return 1; } -static char *find_title(request_rec *r) { +static char *find_title(request_rec *r) +{ char titlebuf[MAX_STRING_LEN], *find = "<TITLE>"; FILE *thefile = NULL; int x, y, n, p; if (r->status != HTTP_OK) { - return NULL; + return NULL; } if (r->content_type - && (!strcmp(r->content_type,"text/html") - || !strcmp(r->content_type,INCLUDES_MAGIC_TYPE)) - && !r->content_encoding) - { - if (!(thefile = pfopen(r->pool, r->filename, "r"))) - return NULL; - n = fread(titlebuf, sizeof(char), MAX_STRING_LEN - 1, thefile); - titlebuf[n] = '\0'; - for (x = 0, p = 0; titlebuf[x]; x++) { - if (toupper(titlebuf[x]) == find[p]) { - if (!find[++p]) { - if ((p = ind(&titlebuf[++x], '<')) != -1) - titlebuf[x+p] = '\0'; - /* Scan for line breaks for Tanmoy's secretary */ - for (y = x; titlebuf[y]; y++) - if ((titlebuf[y] == CR) || (titlebuf[y] == LF)) - if (y==x) + && (!strcmp(r->content_type, "text/html") + || !strcmp(r->content_type, INCLUDES_MAGIC_TYPE)) + && !r->content_encoding) { + if (!(thefile = pfopen(r->pool, r->filename, "r"))) + return NULL; + n = fread(titlebuf, sizeof(char), MAX_STRING_LEN - 1, thefile); + titlebuf[n] = '\0'; + for (x = 0, p = 0; titlebuf[x]; x++) { + if (toupper(titlebuf[x]) == find[p]) { + if (!find[++p]) { + if ((p = ind(&titlebuf[++x], '<')) != -1) + titlebuf[x + p] = '\0'; + /* Scan for line breaks for Tanmoy's secretary */ + for (y = x; titlebuf[y]; y++) + if ((titlebuf[y] == CR) || (titlebuf[y] == LF)) + if (y == x) x++; else titlebuf[y] = ' '; - pfclose (r->pool, thefile); - return pstrdup(r->pool, &titlebuf[x]); - } - } else p = 0; - } - pfclose(r->pool, thefile); + pfclose(r->pool, thefile); + return pstrdup(r->pool, &titlebuf[x]); + } + } + else + p = 0; + } + pfclose(r->pool, thefile); } return NULL; } static struct ent *make_autoindex_entry(char *name, int autoindex_opts, - autoindex_config_rec *d, + autoindex_config_rec * d, request_rec *r, char keyid, char direction) { struct ent *p; if ((name[0] == '.') && (!name[1])) - return(NULL); + return (NULL); - if (ignore_entry(d, make_full_path (r->pool, r->filename, name))) - return(NULL); + if (ignore_entry(d, make_full_path(r->pool, r->filename, name))) + return (NULL); - p = (struct ent *)pcalloc(r->pool, sizeof(struct ent)); - p->name = pstrdup (r->pool, name); + p = (struct ent *) pcalloc(r->pool, sizeof(struct ent)); + p->name = pstrdup(r->pool, name); p->size = 0; p->icon = NULL; p->alt = NULL; @@ -638,69 +656,72 @@ p->ascending = (toupper(direction) == D_ASCENDING); if (autoindex_opts & FANCY_INDEXING) { - request_rec *rr = sub_req_lookup_file (name, r); - - if (rr->finfo.st_mode != 0) { - p->lm = rr->finfo.st_mtime; - if (S_ISDIR(rr->finfo.st_mode)) { - if (!(p->icon = find_icon(d, rr, 1))) - p->icon = find_default_icon(d, "^^DIRECTORY^^"); - if (!(p->alt = find_alt(d, rr, 1))) - p->alt = "DIR"; - p->size = 0; - p->name = pstrcat (r->pool, name, "/", NULL); - } - else { - p->icon = find_icon(d, rr, 0); - p->alt = find_alt(d, rr, 0); - p->size = rr->finfo.st_size; - } - } - - p->desc = find_desc(d, rr); - - if ((!p->desc) && (autoindex_opts & SCAN_HTML_TITLES)) - p->desc = pstrdup (r->pool, find_title(rr)); + request_rec *rr = sub_req_lookup_file(name, r); + + if (rr->finfo.st_mode != 0) { + p->lm = rr->finfo.st_mtime; + if (S_ISDIR(rr->finfo.st_mode)) { + if (!(p->icon = find_icon(d, rr, 1))) + p->icon = find_default_icon(d, "^^DIRECTORY^^"); + if (!(p->alt = find_alt(d, rr, 1))) + p->alt = "DIR"; + p->size = 0; + p->name = pstrcat(r->pool, name, "/", NULL); + } + else { + p->icon = find_icon(d, rr, 0); + p->alt = find_alt(d, rr, 0); + p->size = rr->finfo.st_size; + } + } + + p->desc = find_desc(d, rr); - destroy_sub_req (rr); + if ((!p->desc) && (autoindex_opts & SCAN_HTML_TITLES)) + p->desc = pstrdup(r->pool, find_title(rr)); + + destroy_sub_req(rr); } if (keyid == K_SIZE) { - p->size_cmp = palloc (r->pool, 14); - ap_snprintf (p->size_cmp, 14, "%013d", p->size); + p->size_cmp = palloc(r->pool, 14); + ap_snprintf(p->size_cmp, 14, "%013d", p->size); } if (keyid == K_LAST_MOD) { struct tm *ts = localtime(&p->lm); - p->lm_cmp = palloc (r->pool, 15); - strftime (p->lm_cmp, 15, "%Y%m%d%H%M%S", ts); + p->lm_cmp = palloc(r->pool, 15); + strftime(p->lm_cmp, 15, "%Y%m%d%H%M%S", ts); } - return(p); + return (p); } -static char *terminate_description(autoindex_config_rec *d, char *desc, - int autoindex_opts) +static char *terminate_description(autoindex_config_rec * d, char *desc, + int autoindex_opts) { int maxsize = 23; register int x; - - if (autoindex_opts & SUPPRESS_LAST_MOD) maxsize += 17; - if (autoindex_opts & SUPPRESS_SIZE) maxsize += 7; + + if (autoindex_opts & SUPPRESS_LAST_MOD) + maxsize += 17; + if (autoindex_opts & SUPPRESS_SIZE) + maxsize += 7; for (x = 0; desc[x] && maxsize; x++) { - if (desc[x] == '<') { - while (desc[x] != '>') { - if (!desc[x]) { - maxsize = 0; - break; - } - ++x; - } - } - else --maxsize; + if (desc[x] == '<') { + while (desc[x] != '>') { + if (!desc[x]) { + maxsize = 0; + break; + } + ++x; + } + } + else + --maxsize; } if (!maxsize) { - desc[x-1] = '>'; /* Grump. */ - desc[x] = '\0'; /* Double Grump! */ + desc[x - 1] = '>'; /* Grump. */ + desc[x] = '\0'; /* Double Grump! */ } return desc; } @@ -722,145 +743,147 @@ qvalue[4] = '\0'; reverse = ((curkey == fname) && (curdirection == D_ASCENDING)); qvalue[3] = reverse ? D_DESCENDING : D_ASCENDING; - rvputs (r, "<A HREF=\"", qvalue, "\">", anchor, "</A>", NULL); + rvputs(r, "<A HREF=\"", qvalue, "\">", anchor, "</A>", NULL); } static void output_directories(struct ent **ar, int n, - autoindex_config_rec *d, request_rec *r, - int autoindex_opts, char keyid, char direction) + autoindex_config_rec * d, request_rec *r, + int autoindex_opts, char keyid, char direction) { int x, len; char *name = r->uri; char *tp; - pool *scratch = make_sub_pool (r->pool); - - if (name[0] == '\0') name = "/"; + pool *scratch = make_sub_pool(r->pool); + + if (name[0] == '\0') + name = "/"; if (autoindex_opts & FANCY_INDEXING) { - rputs("<PRE>", r); - if ((tp = find_default_icon(d, "^^BLANKICON^^"))) { - rvputs(r, "<IMG SRC=\"", escape_html(scratch, tp), - "\" ALT=\" \"", NULL); - if (d->icon_width && d->icon_height) { - rprintf - ( - r, - " HEIGHT=\"%d\" WIDTH=\"%d\"", - d->icon_height, - d->icon_width - ); - } - rputs ("> ", r); - } + rputs("<PRE>", r); + if ((tp = find_default_icon(d, "^^BLANKICON^^"))) { + rvputs(r, "<IMG SRC=\"", escape_html(scratch, tp), + "\" ALT=\" \"", NULL); + if (d->icon_width && d->icon_height) { + rprintf + ( + r, + " HEIGHT=\"%d\" WIDTH=\"%d\"", + d->icon_height, + d->icon_width + ); + } + rputs("> ", r); + } emit_link(r, "Name", K_NAME, keyid, direction); - rputs (" ", r); - if (!(autoindex_opts & SUPPRESS_LAST_MOD)) { + rputs(" ", r); + if (!(autoindex_opts & SUPPRESS_LAST_MOD)) { emit_link(r, "Last modified", K_LAST_MOD, keyid, direction); - rputs(" ", r); + rputs(" ", r); } - if (!(autoindex_opts & SUPPRESS_SIZE)) { + if (!(autoindex_opts & SUPPRESS_SIZE)) { emit_link(r, "Size", K_SIZE, keyid, direction); - rputs(" ", r); + rputs(" ", r); } - if (!(autoindex_opts & SUPPRESS_DESC)) { + if (!(autoindex_opts & SUPPRESS_DESC)) { emit_link(r, "Description", K_DESC, keyid, direction); } - rputs("\n<HR>\n", r); + rputs("\n<HR>\n", r); } else { - rputs("<UL>", r); + rputs("<UL>", r); } - for (x = 0; x<n; x++) { - char *anchor = NULL, *t = NULL, *t2 = NULL; - - clear_pool (scratch); - - if ((!strcmp(ar[x]->name, "../")) || (!strcmp(ar[x]->name, ".."))) { - t = make_full_path (scratch, name, "../"); - getparents(t); - if (t[0] == '\0') t = "/"; - anchor = pstrcat (scratch, "<A HREF=\"", - escape_html(scratch, os_escape_path(scratch, t, 0)), - "\">", NULL); - t2 = "Parent Directory</A> "; - } - else { - t = ar[x]->name; - len = strlen(t); - if (len > 23) { - t2 = pstrdup(scratch, t); - t2[21] = '.'; - t2[22] = '.'; - t2[23] = '\0'; - t2 = escape_html(scratch, t2); - t2 = pstrcat(scratch, t2, "</A>", NULL); - } else - { - char buff[24] = " "; - t2 = escape_html(scratch, t); - buff[23-len] = '\0'; - t2 = pstrcat(scratch, t2, "</A>", buff, NULL); - } - anchor = pstrcat (scratch, "<A HREF=\"", - escape_html(scratch, os_escape_path(scratch, t, 0)), - "\">", NULL); - } - - if (autoindex_opts & FANCY_INDEXING) { - if (autoindex_opts & ICONS_ARE_LINKS) - rputs(anchor, r); - if ((ar[x]->icon) || d->default_icon) { - rvputs(r, "<IMG SRC=\"", - escape_html(scratch, ar[x]->icon ? - ar[x]->icon : d->default_icon), - "\" ALT=\"[", (ar[x]->alt ? ar[x]->alt : " "), - "]\"", NULL); - if (d->icon_width && d->icon_height) { - rprintf - ( - r, - " HEIGHT=\"%d\" WIDTH=\"%d\"", - d->icon_height, - d->icon_width - ); - } - rputs (">", r); - } - if (autoindex_opts & ICONS_ARE_LINKS) - rputs("</A>", r); - - rvputs(r, " ", anchor, t2, NULL); - if (!(autoindex_opts & SUPPRESS_LAST_MOD)) { - if (ar[x]->lm != -1) { - char time_str[MAX_STRING_LEN]; - struct tm *ts = localtime(&ar[x]->lm); - strftime(time_str, MAX_STRING_LEN, "%d-%b-%y %H:%M ", ts); - rputs(time_str, r); - } - else { - rputs(" ", r); - } - } - if (!(autoindex_opts & SUPPRESS_SIZE)) { - send_size(ar[x]->size, r); - rputs(" ", r); - } - if (!(autoindex_opts & SUPPRESS_DESC)) { - if (ar[x]->desc) { - rputs(terminate_description(d, ar[x]->desc, autoindex_opts), r); - } - } - } - else - rvputs(r, "<LI> ", anchor, " ", t2, NULL); - rputc('\n', r); + for (x = 0; x < n; x++) { + char *anchor = NULL, *t = NULL, *t2 = NULL; + + clear_pool(scratch); + + if ((!strcmp(ar[x]->name, "../")) || (!strcmp(ar[x]->name, ".."))) { + t = make_full_path(scratch, name, "../"); + getparents(t); + if (t[0] == '\0') + t = "/"; + anchor = pstrcat(scratch, "<A HREF=\"", + escape_html(scratch, os_escape_path(scratch, t, 0)), + "\">", NULL); + t2 = "Parent Directory</A> "; + } + else { + t = ar[x]->name; + len = strlen(t); + if (len > 23) { + t2 = pstrdup(scratch, t); + t2[21] = '.'; + t2[22] = '.'; + t2[23] = '\0'; + t2 = escape_html(scratch, t2); + t2 = pstrcat(scratch, t2, "</A>", NULL); + } + else { + char buff[24] = " "; + t2 = escape_html(scratch, t); + buff[23 - len] = '\0'; + t2 = pstrcat(scratch, t2, "</A>", buff, NULL); + } + anchor = pstrcat(scratch, "<A HREF=\"", + escape_html(scratch, os_escape_path(scratch, t, 0)), + "\">", NULL); + } + + if (autoindex_opts & FANCY_INDEXING) { + if (autoindex_opts & ICONS_ARE_LINKS) + rputs(anchor, r); + if ((ar[x]->icon) || d->default_icon) { + rvputs(r, "<IMG SRC=\"", + escape_html(scratch, ar[x]->icon ? + ar[x]->icon : d->default_icon), + "\" ALT=\"[", (ar[x]->alt ? ar[x]->alt : " "), + "]\"", NULL); + if (d->icon_width && d->icon_height) { + rprintf + ( + r, + " HEIGHT=\"%d\" WIDTH=\"%d\"", + d->icon_height, + d->icon_width + ); + } + rputs(">", r); + } + if (autoindex_opts & ICONS_ARE_LINKS) + rputs("</A>", r); + + rvputs(r, " ", anchor, t2, NULL); + if (!(autoindex_opts & SUPPRESS_LAST_MOD)) { + if (ar[x]->lm != -1) { + char time_str[MAX_STRING_LEN]; + struct tm *ts = localtime(&ar[x]->lm); + strftime(time_str, MAX_STRING_LEN, "%d-%b-%y %H:%M ", ts); + rputs(time_str, r); + } + else { + rputs(" ", r); + } + } + if (!(autoindex_opts & SUPPRESS_SIZE)) { + send_size(ar[x]->size, r); + rputs(" ", r); + } + if (!(autoindex_opts & SUPPRESS_DESC)) { + if (ar[x]->desc) { + rputs(terminate_description(d, ar[x]->desc, autoindex_opts), r); + } + } + } + else + rvputs(r, "<LI> ", anchor, " ", t2, NULL); + rputc('\n', r); } if (autoindex_opts & FANCY_INDEXING) { - rputs("</PRE>", r); + rputs("</PRE>", r); } else { - rputs("</UL>", r); + rputs("</UL>", r); } } @@ -877,20 +900,20 @@ */ switch ((*e1)->key) { case K_LAST_MOD: - s1 = (*e1)->lm_cmp; + s1 = (*e1)->lm_cmp; s2 = (*e2)->lm_cmp; break; case K_SIZE: - s1 = (*e1)->size_cmp; + s1 = (*e1)->size_cmp; s2 = (*e2)->size_cmp; break; case K_DESC: - s1 = (*e1)->desc; + s1 = (*e1)->desc; s2 = (*e2)->desc; break; case K_NAME: - default: - s1 = (*e1)->name; + default: + s1 = (*e1)->name; s2 = (*e2)->name; break; } @@ -942,13 +965,13 @@ return result; } - -static int index_directory(request_rec *r, autoindex_config_rec *autoindex_conf) + +static int index_directory(request_rec *r, autoindex_config_rec * autoindex_conf) { char *title_name = escape_html(r->pool, r->uri); char *title_endp; char *name = r->filename; - + DIR *d; struct DIR_TYPE *dstruct; int num_ent = 0, x; @@ -961,34 +984,33 @@ char direction; if (!(d = popendir(r->pool, name))) { - aplog_error(APLOG_MARK, APLOG_ERR, r->server, + aplog_error(APLOG_MARK, APLOG_ERR, r->server, "Can't open directory for index: %s", r->filename); - return HTTP_FORBIDDEN; + return HTTP_FORBIDDEN; } r->content_type = "text/html"; - + send_http_header(r); if (r->header_only) { - pclosedir (r->pool, d); - return 0; + pclosedir(r->pool, d); + return 0; } hard_timeout("send directory", r); /* Spew HTML preamble */ - + title_endp = title_name + strlen(title_name) - 1; while (title_endp > title_name && *title_endp == '/') - *title_endp-- = '\0'; - - if ( - (! (tmp = find_header(autoindex_conf, r))) || - (! (insert_readme(name, tmp, title_name, NO_HRULE, FRONT_MATTER, r))) - ) { - emit_preamble (r, title_name); - rvputs(r, "<H1>Index of ", title_name, "</H1>\n", NULL); + *title_endp-- = '\0'; + + if ((!(tmp = find_header(autoindex_conf, r))) + || (!(insert_readme(name, tmp, title_name, NO_HRULE, FRONT_MATTER, r))) + ) { + emit_preamble(r, title_name); + rvputs(r, "<H1>Index of ", title_name, "</H1>\n", NULL); } /* @@ -1006,7 +1028,7 @@ } else { keyid = *qstring; - getword (r->pool, &qstring, '='); + getword(r->pool, &qstring, '='); if (qstring != '\0') { direction = *qstring; } @@ -1021,28 +1043,28 @@ */ head = NULL; while ((dstruct = readdir(d))) { - p = make_autoindex_entry(dstruct->d_name, autoindex_opts, + p = make_autoindex_entry(dstruct->d_name, autoindex_opts, autoindex_conf, r, keyid, direction); if (p != NULL) { - p->next = head; - head = p; - num_ent++; - } + p->next = head; + head = p; + num_ent++; + } } if (num_ent > 0) { - ar = (struct ent **) palloc(r->pool, num_ent*sizeof(struct ent *)); - p = head; - x = 0; - while (p) { - ar[x++] = p; - p = p->next; - } - + ar = (struct ent **) palloc(r->pool, num_ent * sizeof(struct ent *)); + p = head; + x = 0; + while (p) { + ar[x++] = p; + p = p->next; + } + #ifdef ULTRIX_BRAIN_DEATH - qsort((void *)ar, num_ent, sizeof(struct ent *), (int (*))dsortf); + qsort((void *) ar, num_ent, sizeof(struct ent *), (int (*)) dsortf); #else - qsort((void *)ar, num_ent, sizeof(struct ent *), - (int (*)(const void *, const void *))dsortf); + qsort((void *) ar, num_ent, sizeof(struct ent *), + (int (*)(const void *, const void *)) dsortf); #endif } output_directories(ar, num_ent, autoindex_conf, r, autoindex_opts, keyid, @@ -1050,13 +1072,13 @@ pclosedir(r->pool, d); if (autoindex_opts & FANCY_INDEXING) { - if ((tmp = find_readme(autoindex_conf, r))) - insert_readme(name, tmp, "", HRULE, END_MATTER, r); + if ((tmp = find_readme(autoindex_conf, r))) + insert_readme(name, tmp, "", HRULE, END_MATTER, r); else { rputs("</UL>", r); } } - rputs ("</BODY></HTML>\n", r); + rputs("</BODY></HTML>\n", r); kill_timeout(r); return 0; @@ -1064,59 +1086,62 @@ /* The formal handler... */ -static int handle_autoindex (request_rec *r) +static int handle_autoindex(request_rec *r) { autoindex_config_rec *d = - (autoindex_config_rec *)get_module_config(r->per_dir_config, - &autoindex_module); - int allow_opts = allow_options (r); + (autoindex_config_rec *) get_module_config(r->per_dir_config, + &autoindex_module); + int allow_opts = allow_options(r); + + if (r->method_number != M_GET) + return NOT_IMPLEMENTED; - if (r->method_number != M_GET) return NOT_IMPLEMENTED; - /* OK, nothing easy. Trot out the heavy artillery... */ if (allow_opts & OPT_INDEXES) { - /* KLUDGE --- make the sub_req lookups happen in the right directory. - * Fixing this in the sub_req_lookup functions themselves is difficult, - * and would probably break virtual includes... - */ - - if (r->filename[strlen (r->filename) - 1] != '/') { - r->filename = pstrcat (r->pool, r->filename, "/", NULL); - } - return index_directory (r, d); + /* KLUDGE --- make the sub_req lookups happen in the right directory. + * Fixing this in the sub_req_lookup functions themselves is difficult, + * and would probably break virtual includes... + */ + + if (r->filename[strlen(r->filename) - 1] != '/') { + r->filename = pstrcat(r->pool, r->filename, "/", NULL); + } + return index_directory(r, d); } - else { - aplog_error(APLOG_MARK, APLOG_ERR, r->server, + else { + aplog_error(APLOG_MARK, APLOG_ERR, r->server, "Directory index forbidden by rule: %s", r->filename); - return HTTP_FORBIDDEN; + return HTTP_FORBIDDEN; } } -static handler_rec autoindex_handlers[] = { -{ DIR_MAGIC_TYPE, handle_autoindex }, -{ NULL } +static handler_rec autoindex_handlers[] = +{ + {DIR_MAGIC_TYPE, handle_autoindex}, + {NULL} }; -module MODULE_VAR_EXPORT autoindex_module = { - STANDARD_MODULE_STUFF, - NULL, /* initializer */ - create_autoindex_config, /* dir config creater */ - merge_autoindex_configs, /* dir merger --- default is to override */ - NULL, /* server config */ - NULL, /* merge server config */ - autoindex_cmds, /* command table */ - autoindex_handlers, /* handlers */ - NULL, /* filename translation */ - NULL, /* check_user_id */ - NULL, /* check auth */ - NULL, /* check access */ - NULL, /* type_checker */ - NULL, /* fixups */ - NULL, /* logger */ - NULL, /* header parser */ - NULL, /* child_init */ - NULL, /* child_exit */ - NULL /* post read-request */ +module MODULE_VAR_EXPORT autoindex_module = +{ + STANDARD_MODULE_STUFF, + NULL, /* initializer */ + create_autoindex_config, /* dir config creater */ + merge_autoindex_configs, /* dir merger --- default is to override */ + NULL, /* server config */ + NULL, /* merge server config */ + autoindex_cmds, /* command table */ + autoindex_handlers, /* handlers */ + NULL, /* filename translation */ + NULL, /* check_user_id */ + NULL, /* check auth */ + NULL, /* check access */ + NULL, /* type_checker */ + NULL, /* fixups */ + NULL, /* logger */ + NULL, /* header parser */ + NULL, /* child_init */ + NULL, /* child_exit */ + NULL /* post read-request */ }; 1.20 +89 -84 apachen/src/modules/standard/mod_cern_meta.c Index: mod_cern_meta.c =================================================================== RCS file: /export/home/cvs/apachen/src/modules/standard/mod_cern_meta.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- mod_cern_meta.c 1997/08/31 22:53:12 1.19 +++ mod_cern_meta.c 1997/09/18 08:12:22 1.20 @@ -165,10 +165,10 @@ char *metafiles; } cern_meta_dir_config; -void *create_cern_meta_dir_config (pool *p, char *dummy) +void *create_cern_meta_dir_config(pool *p, char *dummy) { cern_meta_dir_config *new = - (cern_meta_dir_config *)palloc(p, sizeof(cern_meta_dir_config)); + (cern_meta_dir_config *) palloc(p, sizeof(cern_meta_dir_config)); new->metadir = NULL; new->metasuffix = NULL; @@ -177,47 +177,48 @@ return new; } -void *merge_cern_meta_dir_configs (pool *p, void *basev, void *addv) +void *merge_cern_meta_dir_configs(pool *p, void *basev, void *addv) { - cern_meta_dir_config *base = (cern_meta_dir_config *)basev; - cern_meta_dir_config *add = (cern_meta_dir_config *)addv; + cern_meta_dir_config *base = (cern_meta_dir_config *) basev; + cern_meta_dir_config *add = (cern_meta_dir_config *) addv; cern_meta_dir_config *new = - (cern_meta_dir_config *)palloc(p, sizeof(cern_meta_dir_config)); - + (cern_meta_dir_config *) palloc(p, sizeof(cern_meta_dir_config)); + new->metadir = add->metadir ? add->metadir : base->metadir; new->metasuffix = add->metasuffix ? add->metasuffix : base->metasuffix; new->metafiles = add->metafiles; return new; -} +} -const char *set_metadir (cmd_parms *parms, cern_meta_dir_config *dconf, char *arg) -{ +const char *set_metadir(cmd_parms *parms, cern_meta_dir_config * dconf, char *arg) +{ dconf->metadir = arg; return NULL; } -const char *set_metasuffix (cmd_parms *parms, cern_meta_dir_config *dconf, char *arg) -{ +const char *set_metasuffix(cmd_parms *parms, cern_meta_dir_config * dconf, char *arg) +{ dconf->metasuffix = arg; return NULL; } - -const char *set_metafiles (cmd_parms *parms, cern_meta_dir_config *dconf, char *arg) + +const char *set_metafiles(cmd_parms *parms, cern_meta_dir_config * dconf, char *arg) { dconf->metafiles = arg; return NULL; } -command_rec cern_meta_cmds[] = { -{ "MetaFiles", set_metafiles, NULL, DIR_CMD_PERMS, FLAG, NULL}, -{ "MetaDir", set_metadir, NULL, DIR_CMD_PERMS, TAKE1, - "the name of the directory containing meta files"}, -{ "MetaSuffix", set_metasuffix, NULL, DIR_CMD_PERMS, TAKE1, - "the filename suffix for meta files"}, -{ NULL } -}; +command_rec cern_meta_cmds[] = +{ + {"MetaFiles", set_metafiles, NULL, DIR_CMD_PERMS, FLAG, NULL}, + {"MetaDir", set_metadir, NULL, DIR_CMD_PERMS, TAKE1, + "the name of the directory containing meta files"}, + {"MetaSuffix", set_metasuffix, NULL, DIR_CMD_PERMS, TAKE1, + "the filename suffix for meta files"}, + {NULL} +}; int scan_meta_file(request_rec *r, FILE *f) { @@ -225,67 +226,70 @@ char *l; int p; - while( fgets(w, MAX_STRING_LEN-1, f) != NULL ) { + while (fgets(w, MAX_STRING_LEN - 1, f) != NULL) { /* Delete terminal (CR?)LF */ - + p = strlen(w); - if (p > 0 && w[p-1] == '\n') - { - if (p > 1 && w[p-2] == '\015') w[p-2] = '\0'; - else w[p-1] = '\0'; + if (p > 0 && w[p - 1] == '\n') { + if (p > 1 && w[p - 2] == '\015') + w[p - 2] = '\0'; + else + w[p - 1] = '\0'; } - if (w[0] == '\0') { + if (w[0] == '\0') { return OK; } - + /* if we see a bogus header don't ignore it. Shout and scream */ - - if (!(l = strchr(w,':'))) { + + if (!(l = strchr(w, ':'))) { aplog_error(APLOG_MARK, APLOG_ERR, r->server, "malformed header in meta file: %s", r->filename); return SERVER_ERROR; - } + } + + *l++ = '\0'; + while (*l && isspace(*l)) + ++l; - *l++ = '\0'; - while (*l && isspace (*l)) ++l; - - if (!strcasecmp(w,"Content-type")) { + if (!strcasecmp(w, "Content-type")) { /* Nuke trailing whitespace */ - + char *endp = l + strlen(l) - 1; - while (endp > l && isspace(*endp)) *endp-- = '\0'; - + while (endp > l && isspace(*endp)) + *endp-- = '\0'; + r->content_type = pstrdup(r->pool, l); } - else if (!strcasecmp(w,"Status")) { - sscanf(l, "%d", &r->status); - r->status_line = pstrdup(r->pool, l); - } - else { + else if (!strcasecmp(w, "Status")) { + sscanf(l, "%d", &r->status); + r->status_line = pstrdup(r->pool, l); + } + else { table_set(r->headers_out, w, l); - } + } } return OK; } -int add_cern_meta_data (request_rec *r) +int add_cern_meta_data(request_rec *r) { char *metafilename; char *last_slash; char *real_file; char *scrap_book; - FILE *f; - cern_meta_dir_config *dconf ; + FILE *f; + cern_meta_dir_config *dconf; int rv; request_rec *rr; - dconf = get_module_config(r->per_dir_config, &cern_meta_module); + dconf = get_module_config(r->per_dir_config, &cern_meta_module); if (!dconf->metafiles) { - return DECLINED; + return DECLINED; }; /* if ./.web/$1.meta exists then output 'asis' */ @@ -300,11 +304,11 @@ }; /* what directory is this file in? */ - scrap_book = pstrdup( r->pool, r->filename ); + scrap_book = pstrdup(r->pool, r->filename); /* skip leading slash, recovered in later processing */ scrap_book++; - last_slash = strrchr( scrap_book, '/' ); - if ( last_slash != NULL ) { + last_slash = strrchr(scrap_book, '/'); + if (last_slash != NULL) { /* skip over last slash */ real_file = last_slash; real_file++; @@ -312,17 +316,17 @@ } else { /* no last slash, buh?! */ - aplog_error(APLOG_MARK, APLOG_ERR, r->server, + aplog_error(APLOG_MARK, APLOG_ERR, r->server, "internal error in mod_cern_meta", r->filename); /* should really barf, but hey, let's be friends... */ return DECLINED; }; - metafilename = pstrcat(r->pool, "/", scrap_book, "/", - dconf->metadir ? dconf->metadir : DEFAULT_METADIR, - "/", real_file, - dconf->metasuffix ? dconf->metasuffix : DEFAULT_METASUFFIX, - NULL); + metafilename = pstrcat(r->pool, "/", scrap_book, "/", + dconf->metadir ? dconf->metadir : DEFAULT_METADIR, + "/", real_file, + dconf->metasuffix ? dconf->metasuffix : DEFAULT_METASUFFIX, + NULL); /* XXX: it sucks to require this subrequest to complete, because this * means people must leave their meta files accessible to the world. @@ -341,36 +345,37 @@ if (errno == ENOENT) { return DECLINED; } - aplog_error(APLOG_MARK, APLOG_ERR, r->server, - "meta file permissions deny server access: %s", metafilename); - return FORBIDDEN; + aplog_error(APLOG_MARK, APLOG_ERR, r->server, + "meta file permissions deny server access: %s", metafilename); + return FORBIDDEN; }; /* read the headers in */ rv = scan_meta_file(r, f); - pfclose( r->pool, f ); + pfclose(r->pool, f); return rv; } -module MODULE_VAR_EXPORT cern_meta_module = { - STANDARD_MODULE_STUFF, - NULL, /* initializer */ - create_cern_meta_dir_config, /* dir config creater */ - merge_cern_meta_dir_configs, /* dir merger --- default is to override */ - NULL, /* server config */ - NULL, /* merge server configs */ - cern_meta_cmds, /* command table */ - NULL, /* handlers */ - NULL, /* filename translation */ - NULL, /* check_user_id */ - NULL, /* check auth */ - NULL, /* check access */ - NULL, /* type_checker */ - add_cern_meta_data, /* fixups */ - NULL, /* logger */ - NULL, /* header parser */ - NULL, /* child_init */ - NULL, /* child_exit */ - NULL /* post read-request */ +module MODULE_VAR_EXPORT cern_meta_module = +{ + STANDARD_MODULE_STUFF, + NULL, /* initializer */ + create_cern_meta_dir_config, /* dir config creater */ + merge_cern_meta_dir_configs, /* dir merger --- default is to override */ + NULL, /* server config */ + NULL, /* merge server configs */ + cern_meta_cmds, /* command table */ + NULL, /* handlers */ + NULL, /* filename translation */ + NULL, /* check_user_id */ + NULL, /* check auth */ + NULL, /* check access */ + NULL, /* type_checker */ + add_cern_meta_data, /* fixups */ + NULL, /* logger */ + NULL, /* header parser */ + NULL, /* child_init */ + NULL, /* child_exit */ + NULL /* post read-request */ }; 1.56 +196 -186 apachen/src/modules/standard/mod_cgi.c Index: mod_cgi.c =================================================================== RCS file: /export/home/cvs/apachen/src/modules/standard/mod_cgi.c,v retrieving revision 1.55 retrieving revision 1.56 diff -u -r1.55 -r1.56 --- mod_cgi.c 1997/08/31 22:59:08 1.55 +++ mod_cgi.c 1997/09/18 08:12:23 1.56 @@ -81,10 +81,10 @@ * leaves a note for us. */ -static int is_scriptaliased (request_rec *r) +static int is_scriptaliased(request_rec *r) { - char *t = table_get (r->notes, "alias-forced-type"); - return t && (!strcmp (t, "cgi-script")); + char *t = table_get(r->notes, "alias-forced-type"); + return t && (!strcmp(t, "cgi-script")); } /* Configuration stuff */ @@ -98,10 +98,10 @@ int bufbytes; } cgi_server_conf; -static void *create_cgi_config (pool *p, server_rec *s) +static void *create_cgi_config(pool *p, server_rec *s) { - cgi_server_conf *c = - (cgi_server_conf *)pcalloc (p, sizeof(cgi_server_conf)); + cgi_server_conf *c = + (cgi_server_conf *) pcalloc(p, sizeof(cgi_server_conf)); c->logname = NULL; c->logbytes = DEFAULT_LOGBYTES; @@ -110,53 +110,56 @@ return c; } -static void *merge_cgi_config (pool *p, void *basev, void *overridesv) +static void *merge_cgi_config(pool *p, void *basev, void *overridesv) { - cgi_server_conf *base = (cgi_server_conf *)basev, - *overrides = (cgi_server_conf *)overridesv; + cgi_server_conf *base = (cgi_server_conf *) basev, *overrides = (cgi_server_conf *) overridesv; return overrides->logname ? overrides : base; } -static const char *set_scriptlog (cmd_parms *cmd, void *dummy, char *arg) { +static const char *set_scriptlog(cmd_parms *cmd, void *dummy, char *arg) +{ server_rec *s = cmd->server; - cgi_server_conf *conf = - (cgi_server_conf *)get_module_config(s->module_config, &cgi_module); + cgi_server_conf *conf = + (cgi_server_conf *) get_module_config(s->module_config, &cgi_module); conf->logname = arg; return NULL; } -static const char *set_scriptlog_length (cmd_parms *cmd, void *dummy, char *arg) { +static const char *set_scriptlog_length(cmd_parms *cmd, void *dummy, char *arg) +{ server_rec *s = cmd->server; - cgi_server_conf *conf = - (cgi_server_conf *)get_module_config(s->module_config, &cgi_module); + cgi_server_conf *conf = + (cgi_server_conf *) get_module_config(s->module_config, &cgi_module); - conf->logbytes = atol (arg); + conf->logbytes = atol(arg); return NULL; } -static const char *set_scriptlog_buffer (cmd_parms *cmd, void *dummy, char *arg) { +static const char *set_scriptlog_buffer(cmd_parms *cmd, void *dummy, char *arg) +{ server_rec *s = cmd->server; - cgi_server_conf *conf = - (cgi_server_conf *)get_module_config(s->module_config, &cgi_module); + cgi_server_conf *conf = + (cgi_server_conf *) get_module_config(s->module_config, &cgi_module); - conf->bufbytes = atoi (arg); + conf->bufbytes = atoi(arg); return NULL; } -static command_rec cgi_cmds[] = { -{ "ScriptLog", set_scriptlog, NULL, RSRC_CONF, TAKE1, - "the name of a log for script debugging info"}, -{ "ScriptLogLength", set_scriptlog_length, NULL, RSRC_CONF, TAKE1, - "the maximum length (in bytes) of the script debug log"}, -{ "ScriptLogBuffer", set_scriptlog_buffer, NULL, RSRC_CONF, TAKE1, - "the maximum size (in bytes) to record of a POST request"}, -{ NULL} +static command_rec cgi_cmds[] = +{ + {"ScriptLog", set_scriptlog, NULL, RSRC_CONF, TAKE1, + "the name of a log for script debugging info"}, + {"ScriptLogLength", set_scriptlog_length, NULL, RSRC_CONF, TAKE1, + "the maximum length (in bytes) of the script debug log"}, + {"ScriptLogBuffer", set_scriptlog_buffer, NULL, RSRC_CONF, TAKE1, + "the maximum size (in bytes) to record of a POST request"}, + {NULL} }; -static int log_scripterror (request_rec *r, cgi_server_conf *conf, int ret, - char *error) +static int log_scripterror(request_rec *r, cgi_server_conf * conf, int ret, + char *error) { FILE *f; @@ -164,10 +167,10 @@ if (!conf->logname || ((stat(server_root_relative(r->pool, conf->logname), &r->finfo) == 0) - && (r->finfo.st_size > conf->logbytes)) || - ((f = pfopen(r->pool, server_root_relative(r->pool, conf->logname), - "a")) == NULL)) { - return ret; + && (r->finfo.st_size > conf->logbytes)) || + ((f = pfopen(r->pool, server_root_relative(r->pool, conf->logname), + "a")) == NULL)) { + return ret; } /* "%% [Wed Jun 19 10:53:21 1996] GET /cgi-bin/printenv HTTP/1.0" */ @@ -182,26 +185,26 @@ return ret; } -static int log_script (request_rec *r, cgi_server_conf *conf, int ret, - char *dbuf, char *sbuf, BUFF *script_in, BUFF *script_err) +static int log_script(request_rec *r, cgi_server_conf * conf, int ret, + char *dbuf, char *sbuf, BUFF *script_in, BUFF *script_err) { table *hdrs_arr = r->headers_in; - table_entry *hdrs = (table_entry *)hdrs_arr->elts; + table_entry *hdrs = (table_entry *) hdrs_arr->elts; char argsbuffer[HUGE_STRING_LEN]; FILE *f; int i; if (!conf->logname || ((stat(server_root_relative(r->pool, conf->logname), &r->finfo) == 0) - && (r->finfo.st_size > conf->logbytes)) || - ((f = pfopen(r->pool, server_root_relative(r->pool, conf->logname), - "a")) == NULL)) { - /* Soak up script output */ - while (bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) - continue; - while (bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) - continue; - return ret; + && (r->finfo.st_size > conf->logbytes)) || + ((f = pfopen(r->pool, server_root_relative(r->pool, conf->logname), + "a")) == NULL)) { + /* Soak up script output */ + while (bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) + continue; + while (bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) + continue; + return ret; } /* "%% [Wed Jun 19 10:53:21 1996] GET /cgi-bin/printenv HTTP/1.0" */ @@ -212,40 +215,42 @@ fputs("%request\n", f); for (i = 0; i < hdrs_arr->nelts; ++i) { - if (!hdrs[i].key) continue; - fprintf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val); + if (!hdrs[i].key) + continue; + fprintf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val); } if ((r->method_number == M_POST || r->method_number == M_PUT) && *dbuf) { - fprintf(f, "\n%s\n", dbuf); + fprintf(f, "\n%s\n", dbuf); } fputs("%response\n", f); hdrs_arr = r->err_headers_out; - hdrs = (table_entry *)hdrs_arr->elts; + hdrs = (table_entry *) hdrs_arr->elts; for (i = 0; i < hdrs_arr->nelts; ++i) { - if (!hdrs[i].key) continue; - fprintf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val); + if (!hdrs[i].key) + continue; + fprintf(f, "%s: %s\n", hdrs[i].key, hdrs[i].val); } if (sbuf && *sbuf) - fprintf(f, "%s\n", sbuf); + fprintf(f, "%s\n", sbuf); if (bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) { - fputs("%stdout\n", f); - fputs(argsbuffer, f); - while (bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) + fputs("%stdout\n", f); fputs(argsbuffer, f); - fputs("\n", f); + while (bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) + fputs(argsbuffer, f); + fputs("\n", f); } if (bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) { - fputs("%stderr\n", f); - fputs(argsbuffer, f); - while (bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) + fputs("%stderr\n", f); fputs(argsbuffer, f); - fputs("\n", f); + while (bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) + fputs(argsbuffer, f); + fputs("\n", f); } bclose(script_in); @@ -268,54 +273,55 @@ char *argv0; }; -static int cgi_child (void *child_stuff) +static int cgi_child(void *child_stuff) { - struct cgi_child_stuff *cld = (struct cgi_child_stuff *)child_stuff; + struct cgi_child_stuff *cld = (struct cgi_child_stuff *) child_stuff; request_rec *r = cld->r; char *argv0 = cld->argv0; int child_pid; -#ifdef DEBUG_CGI +#ifdef DEBUG_CGI #ifdef __EMX__ /* Under OS/2 need to use device con. */ - FILE *dbg = fopen ("con", "w"); -#else - FILE *dbg = fopen ("/dev/tty", "w"); -#endif + FILE *dbg = fopen("con", "w"); +#else + FILE *dbg = fopen("/dev/tty", "w"); +#endif int i; #endif - + char **env; #ifndef WIN32 char err_string[HUGE_STRING_LEN]; #endif - -#ifdef DEBUG_CGI - fprintf (dbg, "Attempting to exec %s as %sCGI child (argv0 = %s)\n", + +#ifdef DEBUG_CGI + fprintf(dbg, "Attempting to exec %s as %sCGI child (argv0 = %s)\n", r->filename, nph ? "NPH " : "", argv0); -#endif +#endif + + add_cgi_vars(r); + env = create_environment(r->pool, r->subprocess_env); - add_cgi_vars (r); - env = create_environment (r->pool, r->subprocess_env); - -#ifdef DEBUG_CGI - fprintf (dbg, "Environment: \n"); - for (i = 0; env[i]; ++i) fprintf (dbg, "'%s'\n", env[i]); +#ifdef DEBUG_CGI + fprintf(dbg, "Environment: \n"); + for (i = 0; env[i]; ++i) + fprintf(dbg, "'%s'\n", env[i]); #endif - - chdir_file (r->filename); + + chdir_file(r->filename); if (!cld->debug) - error_log2stderr (r->server); + error_log2stderr(r->server); /* Transumute outselves into the script. * NB only ISINDEX scripts get decoded arguments. */ - + cleanup_for_exec(); - + child_pid = call_exec(r, argv0, env, 0); #ifdef WIN32 - return(child_pid); + return (child_pid); #else /* Uh oh. Still here. Where's the kaboom? There was supposed to be an @@ -328,65 +334,66 @@ * was tied to in cleanup_for_exec(). It's only available on stderr * now, so that's what we use). */ - + ap_snprintf(err_string, sizeof(err_string), - "exec of %s failed, reason: %s (errno = %d)\n", - r->filename, strerror(errno), errno); + "exec of %s failed, reason: %s (errno = %d)\n", + r->filename, strerror(errno), errno); write(STDERR_FILENO, err_string, strlen(err_string)); exit(0); /* NOT REACHED */ - return(0); + return (0); #endif } -static int cgi_handler (request_rec *r) +static int cgi_handler(request_rec *r) { int retval, nph, dbpos = 0; char *argv0, *dbuf = NULL; BUFF *script_out, *script_in, *script_err; char argsbuffer[HUGE_STRING_LEN]; - int is_included = !strcmp (r->protocol, "INCLUDED"); + int is_included = !strcmp(r->protocol, "INCLUDED"); void *sconf = r->server->module_config; cgi_server_conf *conf = - (cgi_server_conf *)get_module_config(sconf, &cgi_module); + (cgi_server_conf *) get_module_config(sconf, &cgi_module); struct cgi_child_stuff cld; pid_t child_pid; if (r->method_number == M_OPTIONS) { - /* 99 out of 100 CGI scripts, this is all they support */ - r->allowed |= (1 << M_GET); - r->allowed |= (1 << M_POST); + /* 99 out of 100 CGI scripts, this is all they support */ + r->allowed |= (1 << M_GET); + r->allowed |= (1 << M_POST); return DECLINED; } - if((argv0 = strrchr(r->filename,'/')) != NULL) - argv0++; - else argv0 = r->filename; + if ((argv0 = strrchr(r->filename, '/')) != NULL) + argv0++; + else + argv0 = r->filename; - nph = !(strncmp(argv0,"nph-",4)); + nph = !(strncmp(argv0, "nph-", 4)); - if (!(allow_options (r) & OPT_EXECCGI) && !is_scriptaliased (r)) + if (!(allow_options(r) & OPT_EXECCGI) && !is_scriptaliased(r)) return log_scripterror(r, conf, FORBIDDEN, "Options ExecCGI is off in this directory"); if (nph && is_included) return log_scripterror(r, conf, FORBIDDEN, "attempt to include NPH CGI script"); - + if (S_ISDIR(r->finfo.st_mode)) return log_scripterror(r, conf, FORBIDDEN, "attempt to invoke directory as script"); #if defined(__EMX__) || defined(WIN32) /* Allow for cgi files without the .EXE extension on them under OS/2 */ if (r->finfo.st_mode == 0) { - struct stat statbuf; + struct stat statbuf; - r->filename = pstrcat (r->pool, r->filename, ".EXE", NULL); + r->filename = pstrcat(r->pool, r->filename, ".EXE", NULL); - if ((stat(r->filename, &statbuf) != 0) || (!S_ISREG(statbuf.st_mode))) { - return log_scripterror(r, conf, NOT_FOUND, - "script not found or unable to stat"); - } + if ((stat(r->filename, &statbuf) != 0) || (!S_ISREG(statbuf.st_mode))) { + return log_scripterror(r, conf, NOT_FOUND, + "script not found or unable to stat"); + } } #else if (r->finfo.st_mode == 0) @@ -394,18 +401,20 @@ "script not found or unable to stat"); #endif if (!suexec_enabled) { - if (!can_exec(&r->finfo)) - return log_scripterror(r, conf, FORBIDDEN, - "file permissions deny server execution"); + if (!can_exec(&r->finfo)) + return log_scripterror(r, conf, FORBIDDEN, + "file permissions deny server execution"); } if ((retval = setup_client_block(r, REQUEST_CHUNKED_ERROR))) return retval; - add_common_vars (r); - cld.argv0 = argv0; cld.r = r; cld.nph = nph; + add_common_vars(r); + cld.argv0 = argv0; + cld.r = r; + cld.nph = nph; cld.debug = conf->logname ? 1 : 0; - + /* * we spawn out of r->main if it's there so that we can avoid * waiting for free_proc_chain to cleanup in the middle of an @@ -413,12 +422,12 @@ */ if (!(child_pid = spawn_child_err_buff(r->main ? r->main->pool : r->pool, cgi_child, - (void *)&cld, + (void *) &cld, kill_after_timeout, &script_out, &script_in, &script_err))) { - aplog_error(APLOG_MARK, APLOG_ERR, r->server, + aplog_error(APLOG_MARK, APLOG_ERR, r->server, "couldn't spawn child process: %s", r->filename); - return SERVER_ERROR; + return SERVER_ERROR; } /* Transfer any put/post args, CERN style... @@ -429,76 +438,75 @@ * on every invocation by chasing the real client data with a * spurious newline). */ - - if (should_client_block(r)) { - void (*handler)(int); + + if (should_client_block(r)) { + void (*handler) (int); int dbsize, len_read; if (conf->logname) { - dbuf = pcalloc(r->pool, conf->bufbytes+1); + dbuf = pcalloc(r->pool, conf->bufbytes + 1); dbpos = 0; } - hard_timeout ("copy script args", r); + hard_timeout("copy script args", r); #ifdef SIGPIPE - handler = signal (SIGPIPE, SIG_IGN); + handler = signal(SIGPIPE, SIG_IGN); #endif - + while ((len_read = - get_client_block(r, argsbuffer, HUGE_STRING_LEN)) > 0) - { + get_client_block(r, argsbuffer, HUGE_STRING_LEN)) > 0) { if (conf->logname) { if ((dbpos + len_read) > conf->bufbytes) { dbsize = conf->bufbytes - dbpos; } - else { - dbsize = len_read; - } - memcpy(dbuf + dbpos, argsbuffer, dbsize); + else { + dbsize = len_read; + } + memcpy(dbuf + dbpos, argsbuffer, dbsize); dbpos += dbsize; } reset_timeout(r); - if (bwrite(script_out, argsbuffer, len_read) - < len_read) { - /* silly script stopped reading, soak up remaining message */ - while (get_client_block(r, argsbuffer, HUGE_STRING_LEN) > 0) - ; /* dump it */ - break; + if (bwrite(script_out, argsbuffer, len_read) < len_read) { + /* silly script stopped reading, soak up remaining message */ + while (get_client_block(r, argsbuffer, HUGE_STRING_LEN) > 0) { + /* dump it */ + } + break; } } - bflush (script_out); - signal (SIGPIPE, handler); - - kill_timeout (r); + bflush(script_out); + signal(SIGPIPE, handler); + + kill_timeout(r); } - + bclose(script_out); - + /* Handle script return... */ if (script_in && !nph) { - char *location, sbuf[MAX_STRING_LEN]; + char *location, sbuf[MAX_STRING_LEN]; int ret; - - if ((ret = scan_script_header_err_buff(r, script_in, sbuf))) + + if ((ret = scan_script_header_err_buff(r, script_in, sbuf))) return log_script(r, conf, ret, dbuf, sbuf, script_in, script_err); - - location = table_get (r->headers_out, "Location"); - if (location && location[0] == '/' && r->status == 200) { - + location = table_get(r->headers_out, "Location"); + + if (location && location[0] == '/' && r->status == 200) { + /* Soak up all the script output */ - hard_timeout ("read from script", r); + hard_timeout("read from script", r); while (bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) - continue; + continue; while (bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) - continue; - kill_timeout (r); + continue; + kill_timeout(r); - /* This redirect needs to be a GET no matter what the original - * method was. - */ + /* This redirect needs to be a GET no matter what the original + * method was. + */ r->method = pstrdup(r->pool, "GET"); r->method_number = M_GET; @@ -508,24 +516,24 @@ */ table_unset(r->headers_in, "Content-Length"); - internal_redirect_handler (location, r); + internal_redirect_handler(location, r); return OK; - } + } else if (location && r->status == 200) { /* XX Note that if a script wants to produce its own Redirect * body, it now has to explicitly *say* "Status: 302" */ return REDIRECT; } - + send_http_header(r); if (!r->header_only) send_fb(script_in, r); bclose(script_in); soft_timeout("soaking script stderr", r); - while(bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) - continue; + while (bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) + continue; kill_timeout(r); bclose(script_err); } @@ -533,37 +541,39 @@ if (script_in && nph) { send_fb(script_in, r); #if !defined(__EMX__) && !defined(WIN32) - waitpid(child_pid, (int*)0, 0); + waitpid(child_pid, (int *) 0, 0); #endif - } + } return OK; /* NOT r->status, even if it has changed. */ } -static handler_rec cgi_handlers[] = { -{ CGI_MAGIC_TYPE, cgi_handler }, -{ "cgi-script", cgi_handler }, -{ NULL } +static handler_rec cgi_handlers[] = +{ + {CGI_MAGIC_TYPE, cgi_handler}, + {"cgi-script", cgi_handler}, + {NULL} }; -module MODULE_VAR_EXPORT cgi_module = { - STANDARD_MODULE_STUFF, - NULL, /* initializer */ - NULL, /* dir config creater */ - NULL, /* dir merger --- default is to override */ - create_cgi_config, /* server config */ - merge_cgi_config, /* merge server config */ - cgi_cmds, /* command table */ - cgi_handlers, /* handlers */ - NULL, /* filename translation */ - NULL, /* check_user_id */ - NULL, /* check auth */ - NULL, /* check access */ - NULL, /* type_checker */ - NULL, /* fixups */ - NULL, /* logger */ - NULL, /* header parser */ - NULL, /* child_init */ - NULL, /* child_exit */ - NULL /* post read-request */ +module MODULE_VAR_EXPORT cgi_module = +{ + STANDARD_MODULE_STUFF, + NULL, /* initializer */ + NULL, /* dir config creater */ + NULL, /* dir merger --- default is to override */ + create_cgi_config, /* server config */ + merge_cgi_config, /* merge server config */ + cgi_cmds, /* command table */ + cgi_handlers, /* handlers */ + NULL, /* filename translation */ + NULL, /* check_user_id */ + NULL, /* check auth */ + NULL, /* check access */ + NULL, /* type_checker */ + NULL, /* fixups */ + NULL, /* logger */ + NULL, /* header parser */ + NULL, /* child_init */ + NULL, /* child_exit */ + NULL /* post read-request */ }; 1.23 +102 -95 apachen/src/modules/standard/mod_digest.c Index: mod_digest.c =================================================================== RCS file: /export/home/cvs/apachen/src/modules/standard/mod_digest.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- mod_digest.c 1997/09/02 16:12:15 1.22 +++ mod_digest.c 1997/09/18 08:12:23 1.23 @@ -77,48 +77,50 @@ char *digest; } digest_header_rec; -void *create_digest_dir_config (pool *p, char *d) +void *create_digest_dir_config(pool *p, char *d) { - return pcalloc (p, sizeof(digest_config_rec)); + return pcalloc(p, sizeof(digest_config_rec)); } -const char *set_digest_slot (cmd_parms *cmd, void *offset, char *f, char *t) +const char *set_digest_slot(cmd_parms *cmd, void *offset, char *f, char *t) { if (t && strcmp(t, "standard")) - return pstrcat(cmd->pool, "Invalid auth file type: ", t, NULL); + return pstrcat(cmd->pool, "Invalid auth file type: ", t, NULL); return set_string_slot(cmd, offset, f); } -command_rec digest_cmds[] = { -{ "AuthDigestFile", set_digest_slot, - (void*)XtOffsetOf(digest_config_rec,pwfile), OR_AUTHCFG, TAKE12, NULL }, -{ NULL } +command_rec digest_cmds[] = +{ + {"AuthDigestFile", set_digest_slot, + (void *) XtOffsetOf(digest_config_rec, pwfile), OR_AUTHCFG, TAKE12, NULL}, + {NULL} }; module MODULE_VAR_EXPORT digest_module; -char *get_hash (request_rec *r, char *user, char *auth_pwfile) +char *get_hash(request_rec *r, char *user, char *auth_pwfile) { FILE *f; char l[MAX_STRING_LEN]; const char *rpw; char *w, *x; - if (!(f=pfopen(r->pool, auth_pwfile, "r"))) { - aplog_error(APLOG_MARK, APLOG_ERR, r->server, + if (!(f = pfopen(r->pool, auth_pwfile, "r"))) { + aplog_error(APLOG_MARK, APLOG_ERR, r->server, "Could not open password file: %s", auth_pwfile); return NULL; } - while(!(cfg_getline(l,MAX_STRING_LEN,f))) { - if((l[0] == '#') || (!l[0])) continue; + while (!(cfg_getline(l, MAX_STRING_LEN, f))) { + if ((l[0] == '#') || (!l[0])) + continue; rpw = l; - w = getword(r->pool, &rpw, ':'); + w = getword(r->pool, &rpw, ':'); x = getword(r->pool, &rpw, ':'); - if(x && w && !strcmp(user,w) && !strcmp(auth_name(r), x)) { + if (x && w && !strcmp(user, w) && !strcmp(auth_name(r), x)) { pfclose(r->pool, f); - return pstrdup (r->pool, rpw); + return pstrdup(r->pool, rpw); } } pfclose(r->pool, f); @@ -127,7 +129,7 @@ /* Parse the Authorization header, if it exists */ -int get_digest_rec (request_rec *r, digest_header_rec *response) +int get_digest_rec(request_rec *r, digest_header_rec * response) { const char *auth_line = table_get(r->headers_in, "Authorization"); int l; @@ -137,13 +139,13 @@ if (!(t = auth_type(r)) || strcasecmp(t, "Digest")) return DECLINED; - if (!auth_name (r)) { + if (!auth_name(r)) { aplog_error(APLOG_MARK, APLOG_ERR, r->server, "need AuthName: %s", r->uri); return SERVER_ERROR; } if (!auth_line) { - note_digest_auth_failure (r); + note_digest_auth_failure(r); return AUTH_REQUIRED; } @@ -157,8 +159,8 @@ l = strlen(auth_line); - key = palloc(r->pool,l); - value = palloc(r->pool,l); + key = palloc(r->pool, l); + value = palloc(r->pool, l); /* There's probably a better way to do this, but for the time being... */ @@ -169,8 +171,8 @@ while (s != D_EXIT) { switch (s) { - case D_STRING: - if (auth_line[0] == '\"') { + case D_STRING: + if (auth_line[0] == '\"') { s = D_VALUE; } else { @@ -180,8 +182,8 @@ auth_line++; break; - case D_VALUE: - if (isalnum(auth_line[0])) { + case D_VALUE: + if (isalnum(auth_line[0])) { value[vv] = auth_line[0]; vv++; } @@ -201,15 +203,15 @@ response->requested_uri = pstrdup(r->pool, value); else if (!strcasecmp(key, "response")) response->digest = pstrdup(r->pool, value); - + vv = 0; s = D_KEY; } auth_line++; break; - case D_KEY: - if (isalnum(auth_line[0])) { + case D_KEY: + if (isalnum(auth_line[0])) { key[vk] = auth_line[0]; vk++; } @@ -228,7 +230,7 @@ if (!response->username || !response->realm || !response->nonce || !response->requested_uri || !response->digest) { - note_digest_auth_failure (r); + note_digest_auth_failure(r); return AUTH_REQUIRED; } @@ -240,13 +242,14 @@ /* The actual MD5 code... whee */ -char *find_digest(request_rec *r, digest_header_rec *h, char *a1) { - return ap_md5(r->pool, - (unsigned char *)pstrcat(r->pool, a1, ":", h->nonce, ":", - ap_md5(r->pool, - (unsigned char *)pstrcat(r->pool,r->method,":", - h->requested_uri,NULL)), - NULL)); +char *find_digest(request_rec *r, digest_header_rec * h, char *a1) +{ + return ap_md5(r->pool, + (unsigned char *)pstrcat(r->pool, a1, ":", h->nonce, ":", + ap_md5(r->pool, + (unsigned char *)pstrcat(r->pool, r->method, ":", + h->requested_uri, NULL)), + NULL)); } /* These functions return 0 if client is OK, and proper error status @@ -263,44 +266,46 @@ * basic authentication... */ -int authenticate_digest_user (request_rec *r) +int authenticate_digest_user(request_rec *r) { digest_config_rec *sec = - (digest_config_rec *)get_module_config (r->per_dir_config, - &digest_module); - digest_header_rec *response = pcalloc (r->pool, sizeof(digest_header_rec)); + (digest_config_rec *) get_module_config(r->per_dir_config, + &digest_module); + digest_header_rec *response = pcalloc(r->pool, sizeof(digest_header_rec)); conn_rec *c = r->connection; char *a1; char errstr[MAX_STRING_LEN]; int res; - - if ((res = get_digest_rec (r, response))) return res; - - if(!sec->pwfile) - return DECLINED; - + + if ((res = get_digest_rec(r, response))) + return res; + + if (!sec->pwfile) + return DECLINED; + if (!(a1 = get_hash(r, c->user, sec->pwfile))) { - ap_snprintf(errstr, sizeof(errstr), "user %s not found", c->user); + ap_snprintf(errstr, sizeof(errstr), "user %s not found", c->user); aplog_error(APLOG_MARK, APLOG_ERR, r->server, "%s: %s", errstr, r->uri); note_digest_auth_failure(r); return AUTH_REQUIRED; } /* anyone know where the prototype for crypt is? */ if (strcmp(response->digest, find_digest(r, response, a1))) { - ap_snprintf(errstr, sizeof(errstr), "user %s: password mismatch", c->user); + ap_snprintf(errstr, sizeof(errstr), "user %s: password mismatch", c->user); aplog_error(APLOG_MARK, APLOG_ERR, r->server, "%s: %s", errstr, r->uri); - note_digest_auth_failure (r); + note_digest_auth_failure(r); return AUTH_REQUIRED; } return OK; } - + /* Checking ID */ - -int digest_check_auth (request_rec *r) { + +int digest_check_auth(request_rec *r) +{ char *user = r->connection->user; int m = r->method_number; - int method_restricted = 0; + int method_restricted = 0; register int x; const char *t; char *w; @@ -308,62 +313,64 @@ require_line *reqs; if (!(t = auth_type(r)) || strcasecmp(t, "Digest")) - return DECLINED; + return DECLINED; - reqs_arr = requires (r); + reqs_arr = requires(r); /* If there is no "requires" directive, * then any user will do. */ if (!reqs_arr) - return OK; - reqs = (require_line *)reqs_arr->elts; + return OK; + reqs = (require_line *) reqs_arr->elts; + + for (x = 0; x < reqs_arr->nelts; x++) { - for(x=0; x < reqs_arr->nelts; x++) { - - if (! (reqs[x].method_mask & (1 << m))) continue; - - method_restricted = 1; + if (!(reqs[x].method_mask & (1 << m))) + continue; + + method_restricted = 1; t = reqs[x].requirement; - w = getword(r->pool, &t, ' '); - if(!strcmp(w,"valid-user")) - return OK; - else if(!strcmp(w,"user")) { - while(t[0]) { - w = getword_conf (r->pool, &t); - if(!strcmp(user,w)) - return OK; - } - } + w = getword(r->pool, &t, ' '); + if (!strcmp(w, "valid-user")) + return OK; + else if (!strcmp(w, "user")) { + while (t[0]) { + w = getword_conf(r->pool, &t); + if (!strcmp(user, w)) + return OK; + } + } else - return DECLINED; + return DECLINED; } - + if (!method_restricted) - return OK; + return OK; note_digest_auth_failure(r); return AUTH_REQUIRED; } -module MODULE_VAR_EXPORT digest_module = { - STANDARD_MODULE_STUFF, - NULL, /* initializer */ - create_digest_dir_config, /* dir config creater */ - NULL, /* dir merger --- default is to override */ - NULL, /* server config */ - NULL, /* merge server config */ - digest_cmds, /* command table */ - NULL, /* handlers */ - NULL, /* filename translation */ - authenticate_digest_user, /* check_user_id */ - digest_check_auth, /* check auth */ - NULL, /* check access */ - NULL, /* type_checker */ - NULL, /* fixups */ - NULL, /* logger */ - NULL, /* header parser */ - NULL, /* child_init */ - NULL, /* child_exit */ - NULL /* post read-request */ +module MODULE_VAR_EXPORT digest_module = +{ + STANDARD_MODULE_STUFF, + NULL, /* initializer */ + create_digest_dir_config, /* dir config creater */ + NULL, /* dir merger --- default is to override */ + NULL, /* server config */ + NULL, /* merge server config */ + digest_cmds, /* command table */ + NULL, /* handlers */ + NULL, /* filename translation */ + authenticate_digest_user, /* check_user_id */ + digest_check_auth, /* check auth */ + NULL, /* check access */ + NULL, /* type_checker */ + NULL, /* fixups */ + NULL, /* logger */ + NULL, /* header parser */ + NULL, /* child_init */ + NULL, /* child_exit */ + NULL /* post read-request */ };