coar 99/08/02 13:50:23
Modified: src/ap ap_sha1.c
src/include ap.h ap_md5.h ap_sha1.h
src/main http_main.c
src/modules/standard mod_auth.c mod_auth_db.c mod_auth_dbm.c
Removed: src/include ap_checkpass.h
Log:
Fix some spacing issues in the SHA1 and ap_validate_password
changes. ap_validate_password() isn't called by anything in
the core, so the link may well omit it -- causing DSO mod_auth*
modules to fail to load. Force a reference to it into the
core server so that won't happen. As soon as ap_checkpass.c
includes any other symbols routinely referenced by the core,
the kludge at the bottom of http_main.c can go away. Or earlier,
if someone finds a better solution.
Revision Changes Path
1.2 +100 -91 apache-1.3/src/ap/ap_sha1.c
Index: ap_sha1.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/ap/ap_sha1.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ap_sha1.c 1999/08/02 10:13:44 1.1
+++ ap_sha1.c 1999/08/02 20:50:12 1.2
@@ -55,7 +55,7 @@
*
* The only exported function:
*
- * ap_sha1_base64(char *clear, int len, char *out);
+ * ap_sha1_base64(const char *clear, int len, char *out);
*
* provides a means to SHA1 crypt/encode a plaintext password in
* a way which makes password files compatible with those commonly
@@ -140,19 +140,19 @@
#define SHA_DIGESTSIZE 20
typedef struct {
- LONG digest[5]; /* message digest */
- LONG count_lo, count_hi; /* 64-bit bit count */
- LONG data[16]; /* SHA data buffer */
- int local; /* unprocessed amount in data */
- } SHA_INFO;
-
-void sha_init(SHA_INFO *);
-void sha_update(SHA_INFO *, BYTE *, int);
-void sha_final(SHA_INFO *);
-void sha_raw_swap(SHA_INFO *);
-void output64chunk(unsigned char, unsigned char, unsigned char,
- int, unsigned char **);
-void encode_mime64(unsigned char *, unsigned char *, int);
+ LONG digest[5]; /* message digest */
+ LONG count_lo, count_hi; /* 64-bit bit count */
+ LONG data[16]; /* SHA data buffer */
+ int local; /* unprocessed amount in data */
+} SHA_INFO;
+
+static void sha_init(SHA_INFO *);
+static void sha_update(SHA_INFO *, const BYTE *, int);
+static void sha_final(SHA_INFO *);
+static void sha_raw_swap(SHA_INFO *);
+static void output64chunk(unsigned char, unsigned char, unsigned char,
+ int, unsigned char **);
+static void encode_mime64(unsigned char *, unsigned char *, int);
void sha1_base64(char *, int, char *);
/* do SHA transformation */
@@ -217,14 +217,15 @@
}
union endianTest {
- long Long;
- char Char[sizeof(long)];
+ long Long;
+ char Char[sizeof(long)];
};
-char isLittleEndian() {
- static union endianTest u;
- u.Long = 1;
- return(u.Char[0]==1);
+static char isLittleEndian(void)
+{
+ static union endianTest u;
+ u.Long = 1;
+ return (u.Char[0] == 1);
}
/* change endianness of data */
@@ -236,25 +237,25 @@
BYTE ct[4], *cp;
if (isLittleEndian()) { /* do the swap only if it is little endian */
- count /= sizeof(LONG);
- cp = (BYTE *) buffer;
- for (i = 0; i < count; ++i) {
- ct[0] = cp[0];
- ct[1] = cp[1];
- ct[2] = cp[2];
- ct[3] = cp[3];
- cp[0] = ct[3];
- cp[1] = ct[2];
- cp[2] = ct[1];
- cp[3] = ct[0];
- cp += sizeof(LONG);
- }
+ count /= sizeof(LONG);
+ cp = (BYTE *) buffer;
+ for (i = 0; i < count; ++i) {
+ ct[0] = cp[0];
+ ct[1] = cp[1];
+ ct[2] = cp[2];
+ ct[3] = cp[3];
+ cp[0] = ct[3];
+ cp[1] = ct[2];
+ cp[2] = ct[1];
+ cp[3] = ct[0];
+ cp += sizeof(LONG);
+ }
}
}
/* initialize the SHA digest */
-void sha_init(SHA_INFO *sha_info)
+static void sha_init(SHA_INFO *sha_info)
{
sha_info->digest[0] = 0x67452301L;
sha_info->digest[1] = 0xefcdab89L;
@@ -268,7 +269,7 @@
/* update the SHA digest */
-void sha_update(SHA_INFO *sha_info, BYTE *buffer, int count)
+static void sha_update(SHA_INFO *sha_info, const BYTE *buffer, int count)
{
int i;
@@ -289,7 +290,8 @@
if (sha_info->local == SHA_BLOCKSIZE) {
maybe_byte_reverse(sha_info->data, SHA_BLOCKSIZE);
sha_transform(sha_info);
- } else {
+ }
+ else {
return;
}
}
@@ -306,7 +308,7 @@
/* finish computing the SHA digest */
-void sha_final(SHA_INFO *sha_info)
+static void sha_final(SHA_INFO *sha_info)
{
int count;
LONG lo_bit_count, hi_bit_count;
@@ -320,15 +322,15 @@
maybe_byte_reverse(sha_info->data, SHA_BLOCKSIZE);
sha_transform(sha_info);
memset((BYTE *) sha_info->data, 0, SHA_BLOCKSIZE - 8);
- } else {
+ }
+ else {
memset(((BYTE *) sha_info->data) + count, 0,
- SHA_BLOCKSIZE - 8 - count);
+ SHA_BLOCKSIZE - 8 - count);
}
maybe_byte_reverse(sha_info->data, SHA_BLOCKSIZE);
sha_info->data[14] = hi_bit_count;
sha_info->data[15] = lo_bit_count;
sha_transform(sha_info);
-
}
/*
@@ -337,75 +339,82 @@
through with arrays of longs.
*/
-void sha_raw_swap(SHA_INFO *sha_info) {
- int i;
+static void sha_raw_swap(SHA_INFO *sha_info)
+{
+ int i;
- for (i=0; i<5; ++i)
- maybe_byte_reverse((LONG *) &sha_info->digest[i], 4);
+ for (i = 0; i < 5; ++i) {
+ maybe_byte_reverse((LONG *) &sha_info->digest[i], 4);
+ }
}
static char basis_64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-void output64chunk(unsigned char c1, unsigned char c2, unsigned char c3,
- int pads, unsigned char **outfile) {
- *(*outfile)++ = basis_64[c1>>2];
+static void output64chunk(unsigned char c1, unsigned char c2, unsigned char
c3,
+ int pads, unsigned char **outfile)
+{
+ *(*outfile)++ = basis_64[c1>>2];
- *(*outfile)++ = basis_64[((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)];
- if (pads == 2) {
- *(*outfile)++ = '=';
- *(*outfile)++ = '=';
- } else if (pads) {
- *(*outfile)++ = basis_64[((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)];
- *(*outfile)++ = '=';
- } else {
- *(*outfile)++ = basis_64[((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)];
- *(*outfile)++ = basis_64[c3 & 0x3F];
- }
+ *(*outfile)++ = basis_64[((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)];
+ if (pads == 2) {
+ *(*outfile)++ = '=';
+ *(*outfile)++ = '=';
+ }
+ else if (pads) {
+ *(*outfile)++ = basis_64[((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)];
+ *(*outfile)++ = '=';
+ }
+ else {
+ *(*outfile)++ = basis_64[((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)];
+ *(*outfile)++ = basis_64[c3 & 0x3F];
+ }
}
-void encode_mime64(unsigned char *in, unsigned char *out, int length) {
- int diff, ct=0;
+static void encode_mime64(unsigned char *in, unsigned char *out, int length)
+{
+ int diff, ct = 0;
- while ( (diff= length - ct) ) {
- if ( diff >= 3 ) {
- diff = 3;
- output64chunk(in[ct], in[ct+1], in[ct+2], 0, &out);
- }
- else if ( diff == 2 ) {
- output64chunk(in[ct], in[ct+1], 0, 1, &out);
- }
- else if ( diff == 1 ) {
- output64chunk(in[ct], 0, 0, 2, &out);
+ while ((diff = length - ct)) {
+ if ( diff >= 3 ) {
+ diff = 3;
+ output64chunk(in[ct], in[ct+1], in[ct+2], 0, &out);
+ }
+ else if (diff == 2) {
+ output64chunk(in[ct], in[ct+1], 0, 1, &out);
+ }
+ else if (diff == 1) {
+ output64chunk(in[ct], 0, 0, 2, &out);
+ }
+ ct += diff;
}
- ct += diff;
- }
-
- *out++ = 0;
+ *out++ = 0;
}
/* {SHA} is the prefix used for base64 encoded sha1 in
* ldap data interchange format.
*/
const char *sha1_id = "{SHA}";
+
+API_EXPORT(void) ap_sha1_base64(const char *clear, int len, char *out)
+{
+ SHA_INFO context;
+
+ if (!strncmp(clear, sha1_id, strlen(sha1_id))) {
+ clear += strlen(sha1_id);
+ }
+
+ sha_init(&context);
+ sha_update(&context, clear, len);
+ sha_final(&context);
-API_EXPORT(void) ap_sha1_base64(char *clear, int len, char *out) {
- SHA_INFO context;
+ sha_raw_swap(&context);
- if (!strncmp(clear,sha1_id,strlen(sha1_id)))
- clear+=strlen(sha1_id);
+ /* private marker. */
+ strcpy(out, sha1_id);
- sha_init(&context);
- sha_update(&context, clear, len);
- sha_final(&context);
-
- sha_raw_swap(&context);
-
- /* private marker. */
- strcpy(out,sha1_id);
-
- /* SHA1 hash is always 20 chars */
- encode_mime64((char *)context.digest, out+strlen(sha1_id), 20);
- /* output of MIME Base 64 encoded SHA1 is always 28 characters +
strlen(sha1_id) */
+ /* SHA1 hash is always 20 chars */
+ encode_mime64((char *)context.digest, out+strlen(sha1_id), 20);
+ /* output of MIME Base 64 encoded SHA1 is always
+ * 28 characters + strlen(sha1_id) */
}
1.22 +1 -0 apache-1.3/src/include/ap.h
Index: ap.h
===================================================================
RCS file: /home/cvs/apache-1.3/src/include/ap.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- ap.h 1999/05/31 17:09:31 1.21
+++ ap.h 1999/08/02 20:50:14 1.22
@@ -159,6 +159,7 @@
__attribute__((format(printf,3,4)));
API_EXPORT(int) ap_vsnprintf(char *buf, size_t len, const char *format,
va_list ap);
+API_EXPORT(char *) ap_validate_password(const char *passwd, const char
*hash);
#ifdef __cplusplus
}
1.7 +0 -1 apache-1.3/src/include/ap_md5.h
Index: ap_md5.h
===================================================================
RCS file: /home/cvs/apache-1.3/src/include/ap_md5.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ap_md5.h 1999/08/02 10:13:45 1.6
+++ ap_md5.h 1999/08/02 20:50:14 1.7
@@ -114,7 +114,6 @@
const unsigned char *salt,
char *result, size_t nbytes);
API_EXPORT(void) ap_to64(char *s, unsigned long v, int n);
-API_EXPORT(char *) ap_validate_password(const char *passwd, const char
*hash);
#ifdef __cplusplus
}
1.2 +2 -2 apache-1.3/src/include/ap_sha1.h
Index: ap_sha1.h
===================================================================
RCS file: /home/cvs/apache-1.3/src/include/ap_sha1.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ap_sha1.h 1999/08/02 10:13:46 1.1
+++ ap_sha1.h 1999/08/02 20:50:15 1.2
@@ -84,8 +84,8 @@
extern "C" {
#endif
-const char * sha1_id; /* passwd prefix marker for SHA1 */
-API_EXPORT(void) ap_sha1_base64(char *, int, char *);
+const char *sha1_id; /* passwd prefix marker for SHA1 */
+API_EXPORT(void) ap_sha1_base64(const char *clear, int len, char *out);
#ifdef __cplusplus
}
1.466 +11 -0 apache-1.3/src/main/http_main.c
Index: http_main.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/main/http_main.c,v
retrieving revision 1.465
retrieving revision 1.466
diff -u -r1.465 -r1.466
--- http_main.c 1999/07/29 18:13:43 1.465
+++ http_main.c 1999/08/02 20:50:20 1.466
@@ -6643,6 +6643,17 @@
#endif /* def OS2 */
#endif /* ndef SHARED_CORE_BOOTSTRAP */
+#ifndef SHARED_CORE_BOOTSTRAP
+/*
+ * Force ap_validate_password() into the image so that modules like
+ * mod_auth can use it even if they're dynamically loaded.
+ */
+const void suck_in_ap_validate_password(void)
+{
+ ap_validate_password("a", "b");
+}
+#endif
+
/* force Expat to be linked into the server executable */
#if defined(USE_EXPAT) && !defined(SHARED_CORE_BOOTSTRAP)
#include "xmlparse.h"
1.47 +0 -1 apache-1.3/src/modules/standard/mod_auth.c
Index: mod_auth.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_auth.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- mod_auth.c 1999/08/02 10:13:46 1.46
+++ mod_auth.c 1999/08/02 20:50:22 1.47
@@ -74,7 +74,6 @@
#include "http_core.h"
#include "http_log.h"
#include "http_protocol.h"
-#include "ap_checkpass.h"
typedef struct auth_config_struct {
char *auth_pwfile;
1.42 +0 -1 apache-1.3/src/modules/standard/mod_auth_db.c
Index: mod_auth_db.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_auth_db.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -r1.41 -r1.42
--- mod_auth_db.c 1999/08/02 10:13:47 1.41
+++ mod_auth_db.c 1999/08/02 20:50:22 1.42
@@ -96,7 +96,6 @@
#include "http_log.h"
#include "http_protocol.h"
#include <db.h>
-#include "ap_checkpass.h"
#if defined(DB_VERSION_MAJOR) && (DB_VERSION_MAJOR == 2)
#define DB2
1.48 +0 -1 apache-1.3/src/modules/standard/mod_auth_dbm.c
Index: mod_auth_dbm.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_auth_dbm.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- mod_auth_dbm.c 1999/08/02 10:13:47 1.47
+++ mod_auth_dbm.c 1999/08/02 20:50:22 1.48
@@ -80,7 +80,6 @@
#else
#include <ndbm.h>
#endif
-#include "ap_checkpass.h"
/*
* Module definition information - the part between the -START and -END