You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Alexei Kosut <ak...@hyperreal.com> on 1996/03/21 04:50:20 UTC
cvs commit: apache/src mod_digest.c util_md5.c util_md5.h Configuration.tmpl Makefile.tmpl http_core.c http_core.h http_protocol.c http_protocol.h
akosut 96/03/20 19:50:19
Modified: src Configuration.tmpl Makefile.tmpl http_core.c
http_core.h http_protocol.c http_protocol.h
Added: src mod_digest.c util_md5.c util_md5.h
Log:
Added some more MD5 support to Apache:
* A new module, mod_digest, which supports digest authentication, as per
draft-ietf-http-digest-aa-02. Could use some work in terms of being a bit
more secure in terms of nonce-generating and so forth, and it needs a
support/ utility to generate htdigest file entries. Use it the same way
as in NCSA httpd 1.5; AuthType Digest, and use AuthDigestFile to point
at the file.
* A new server or per-directory directive, ContentDigest. Set it to On,
and Apache will generate a Content-MD5 header with each file sent. This
may or may not be useful, and there has been some discussion on http-wg
about removing this from the spec (it is currently vaugely defined in
the 1.1 draft), but it doesn't hurt anything.
Reviewed by: Everyone. At least, no one objected during the two weeks given.
Revision Changes Path
1.8 +1 -0 apache/src/Configuration.tmpl
Index: Configuration.tmpl
===================================================================
RCS file: /export/home/cvs/apache/src/Configuration.tmpl,v
retrieving revision 1.7
retrieving revision 1.8
diff -C3 -r1.7 -r1.8
*** Configuration.tmpl 1996/03/17 18:33:51 1.7
--- Configuration.tmpl 1996/03/21 03:50:12 1.8
***************
*** 158,163 ****
--- 158,164 ----
Module cern_meta_module mod_cern_meta.o
Module env_module mod_env.o
Module anon_auth_module mod_auth_anon.o
+ Module digest_module mod_digest.o
# Optional authentication modules, which should only be
# uncommented out if you have the neccessary system support.
1.7 +4 -1 apache/src/Makefile.tmpl
Index: Makefile.tmpl
===================================================================
RCS file: /export/home/cvs/apache/src/Makefile.tmpl,v
retrieving revision 1.6
retrieving revision 1.7
diff -C3 -r1.6 -r1.7
*** Makefile.tmpl 1996/03/01 02:46:42 1.6
--- Makefile.tmpl 1996/03/21 03:50:13 1.7
***************
*** 5,11 ****
OBJS= alloc.o http_main.o http_core.o http_config.o http_request.o \
http_log.o http_protocol.o rfc1413.o util.o util_script.o modules.o buff.o\
! md5c.o $(MODULES)
.c.o:
$(CC) -c $(CFLAGS) $(AUX_CFLAGS) $<
--- 5,11 ----
OBJS= alloc.o http_main.o http_core.o http_config.o http_request.o \
http_log.o http_protocol.o rfc1413.o util.o util_script.o modules.o buff.o\
! md5c.o util_md5.o $(MODULES)
.c.o:
$(CC) -c $(CFLAGS) $(AUX_CFLAGS) $<
***************
*** 66,73 ****
--- 66,76 ----
mod_cgi.o mod_dir.o mod_imap.o mod_include.o mod_negotiation.o: http_request.h
mod_proxy.o: md5.h
mod_asis.o mod_cgi.o mod_dir.o mod_imap.o mod_include.o: util_script.h
+ mod_digest.o: util_md5.h
#Utils
md5c.o: md5.h
util.o: http_conf_globals.h
util_script.o: http_core.h http_main.h http_protocol.h util_script.h
+ util_md5.o: md5.h
+
1.6 +17 -1 apache/src/http_core.c
Index: http_core.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_core.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C3 -r1.5 -r1.6
*** http_core.c 1996/03/17 18:23:09 1.5
--- http_core.c 1996/03/21 03:50:14 1.6
***************
*** 62,67 ****
--- 62,68 ----
#include "http_main.h" /* For the default_handler below... */
#include "http_log.h"
#include "rfc1413.h"
+ #include "util_md5.h"
/* Server core module... This module provides support for really basic
* server operations, including options and commands which control the
***************
*** 87,92 ****
--- 88,95 ----
conf->opts = dir ? OPT_UNSET : OPT_ALL;
conf->override = dir ? OR_UNSET : OR_ALL;
+ conf->content_md5 = 2;
+
conf->hostname_lookups = 2;/* binary, but will use 2 as an "unset = on" */
conf->do_rfc1413 = DEFAULT_RFC1413 | 2; /* set bit 1 to indicate default */
return (void *)conf;
***************
*** 118,123 ****
--- 121,127 ----
if (new->hostname_lookups != 2)
conf->hostname_lookups = new->hostname_lookups;
if ((new->do_rfc1413 & 2) == 0) conf->do_rfc1413 = new->do_rfc1413;
+ if ((new->content_md5 & 2) == 0) conf->content_md5 = new->content_md5;
return (void*)conf;
}
***************
*** 623,628 ****
--- 627,637 ----
return NULL;
}
+ char *set_content_md5 (cmd_parms *cmd, core_dir_config *d, int arg) {
+ d->content_md5 = arg;
+ return NULL;
+ }
+
char *set_daemons_to_start (cmd_parms *cmd, void *dummy, char *arg) {
daemons_to_start = atoi (arg);
return NULL;
***************
*** 749,754 ****
--- 758,764 ----
{ "KeepAliveTimeout", set_keep_alive_timeout, NULL, RSRC_CONF, TAKE1, "Keep-Alive timeout duration (sec)"},
{ "KeepAlive", set_keep_alive, NULL, RSRC_CONF, TAKE1, "Maximum Keep-Alive requests per connection (0 to disable)" },
{ "IdentityCheck", set_idcheck, NULL, RSRC_CONF|ACCESS_CONF, FLAG, NULL },
+ { "ContentDigest", set_content_md5, NULL, RSRC_CONF|ACCESS_CONF|OR_AUTHCFG, FLAG, "whether or not to send a Content-MD5 header with each request" },
{ "CacheNegotiatedDocs", },
{ "StartServers", set_daemons_to_start, NULL, RSRC_CONF, TAKE1, NULL },
{ "MinSpareServers", set_min_free_servers, NULL, RSRC_CONF, TAKE1, NULL },
***************
*** 794,799 ****
--- 804,811 ----
int default_handler (request_rec *r)
{
+ core_dir_config *d =
+ (core_dir_config *)get_module_config(r->per_dir_config, &core_module);
int errstatus;
FILE *f;
***************
*** 818,824 ****
log_reason("file permissions deny server access", r->filename, r);
return FORBIDDEN;
}
!
soft_timeout ("send", r);
send_http_header (r);
--- 830,840 ----
log_reason("file permissions deny server access", r->filename, r);
return FORBIDDEN;
}
!
! if (d->content_md5 & 1) {
! table_set (r->headers_out, "Content-MD5", md5digest(r->pool, f));
! }
!
soft_timeout ("send", r);
send_http_header (r);
1.5 +2 -0 apache/src/http_core.h
Index: http_core.h
===================================================================
RCS file: /export/home/cvs/apache/src/http_core.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -C3 -r1.4 -r1.5
*** http_core.h 1996/03/01 02:46:44 1.4
--- http_core.h 1996/03/21 03:50:15 1.5
***************
*** 140,145 ****
--- 140,147 ----
char *auth_type;
char *auth_name;
array_header *requires;
+
+ int content_md5;
/* Custom response config. These can contain text or a URL to redirect to.
*/
1.8 +20 -1 apache/src/http_protocol.c
Index: http_protocol.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_protocol.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C3 -r1.7 -r1.8
*** http_protocol.c 1996/03/01 19:37:18 1.7
--- http_protocol.c 1996/03/21 03:50:15 1.8
***************
*** 384,398 ****
{
}
! /* Support for the Basic authentication protocol.
*/
void note_basic_auth_failure(request_rec *r)
{
table_set (r->err_headers_out, "WWW-Authenticate",
pstrcat(r->pool, "Basic realm=\"", auth_name(r), "\"", NULL));
}
int get_basic_auth_pw (request_rec *r, char **pw)
{
--- 384,417 ----
{
}
! /* Support for the Basic authentication protocol, and a bit for Digest.
*/
+ void note_auth_failure(request_rec *r)
+ {
+ if (!strcasecmp(auth_type(r), "Basic"))
+ return note_basic_auth_failure(r);
+ else if(!strcasecmp(auth_type(r), "Digest"))
+ return note_digest_auth_failure(r);
+ }
+
void note_basic_auth_failure(request_rec *r)
{
+ if (strcasecmp(auth_type(r), "Basic"))
+ return note_auth_failure(r);
table_set (r->err_headers_out, "WWW-Authenticate",
pstrcat(r->pool, "Basic realm=\"", auth_name(r), "\"", NULL));
}
+ void note_digest_auth_failure(request_rec *r)
+ {
+ char nonce[10];
+
+ sprintf(nonce, "%lu", time(NULL));
+ table_set (r->err_headers_out, "WWW-Authenticate",
+ pstrcat(r->pool, "Digest realm=\"", auth_name(r),
+ "\", nonce=\"", nonce, "\"", NULL));
+ }
int get_basic_auth_pw (request_rec *r, char **pw)
{
1.5 +7 -1 apache/src/http_protocol.h
Index: http_protocol.h
===================================================================
RCS file: /export/home/cvs/apache/src/http_protocol.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -C3 -r1.4 -r1.5
*** http_protocol.h 1996/03/01 02:34:33 1.4
--- http_protocol.h 1996/03/21 03:50:15 1.5
***************
*** 147,156 ****
*
* note_basic_auth_failure arranges for the right stuff to be scribbled on
* the HTTP return so that the client knows how to authenticate itself the
! * next time.
*/
void note_basic_auth_failure(request_rec *r);
int get_basic_auth_pw (request_rec *r, char **pw);
/*
--- 147,162 ----
*
* note_basic_auth_failure arranges for the right stuff to be scribbled on
* the HTTP return so that the client knows how to authenticate itself the
! * next time. As does note_digest_auth_failure for Digest auth.
! *
! * note_auth_failure does the same thing, but will call the correct one
! * based on the authentication type in use.
! *
*/
+ void note_auth_failure(request_rec *r);
void note_basic_auth_failure(request_rec *r);
+ void note_digest_auth_failure(request_rec *r);
int get_basic_auth_pw (request_rec *r, char **pw);
/*