Browse Source

Always use our 'own' md5 implementation, fixes linking issues on MacOS (fixes #2331)

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.4.x@2799 152afb58-edef-0310-8abb-c4023f1b3aa9
svn/tags/lighttpd-1.4.30
Stefan Bühler 11 years ago
parent
commit
90dd8af32b
  1. 2
      NEWS
  2. 5
      src/CMakeLists.txt
  3. 4
      src/Makefile.am
  4. 5
      src/SConscript
  5. 172
      src/http_auth.c
  6. 26
      src/http_auth_digest.c
  7. 24
      src/http_auth_digest.h
  8. 20
      src/mod_cml_funcs.c
  9. 12
      src/mod_cml_lua.c
  10. 3
      src/mod_dirlisting.c
  11. 20
      src/mod_secure_download.c
  12. 28
      src/mod_usertrack.c

2
NEWS

@ -4,7 +4,7 @@ NEWS
====
- 1.4.30 -
*
* Always use our 'own' md5 implementation, fixes linking issues on MacOS (fixes #2331)
- 1.4.29 - 2011-07-03
* Fix mod_proxy waiting for response even if content-length is 0 (fixes #2259)

5
src/CMakeLists.txt

@ -417,7 +417,8 @@ SET(COMMON_SRC
data_integer.c md5.c data_fastcgi.c
fdevent_select.c fdevent_libev.c
fdevent_poll.c fdevent_linux_sysepoll.c
fdevent_solaris_devpoll.c fdevent_freebsd_kqueue.c
fdevent_solaris_devpoll.c fdevent_solaris_port.c
fdevent_freebsd_kqueue.c
data_config.c bitset.c
inet_ntop_cache.c crc32.c
connections-glue.c
@ -463,7 +464,7 @@ SET(L_INSTALL_TARGETS ${L_INSTALL_TARGETS} lighttpd)
ADD_AND_INSTALL_LIBRARY(mod_access mod_access.c)
ADD_AND_INSTALL_LIBRARY(mod_accesslog mod_accesslog.c)
ADD_AND_INSTALL_LIBRARY(mod_alias mod_alias.c)
ADD_AND_INSTALL_LIBRARY(mod_auth "mod_auth.c;http_auth_digest.c;http_auth.c")
ADD_AND_INSTALL_LIBRARY(mod_auth "mod_auth.c;http_auth.c")
IF(NOT WIN32)
ADD_AND_INSTALL_LIBRARY(mod_cgi mod_cgi.c)
ENDIF(NOT WIN32)

4
src/Makefile.am

@ -241,7 +241,7 @@ mod_compress_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
mod_compress_la_LIBADD = $(Z_LIB) $(BZ_LIB) $(common_libadd)
lib_LTLIBRARIES += mod_auth.la
mod_auth_la_SOURCES = mod_auth.c http_auth_digest.c http_auth.c
mod_auth_la_SOURCES = mod_auth.c http_auth.c
mod_auth_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
mod_auth_la_LIBADD = $(CRYPT_LIB) $(LDAP_LIB) $(LBER_LIB) $(common_libadd)
@ -268,7 +268,7 @@ mod_accesslog_la_LIBADD = $(common_libadd)
hdr = server.h buffer.h network.h log.h keyvalue.h \
response.h request.h fastcgi.h chunk.h \
settings.h http_chunk.h http_auth_digest.h \
settings.h http_chunk.h \
md5.h http_auth.h stream.h \
fdevent.h connections.h base.h stat_cache.h \
plugin.h mod_auth.h \

5
src/SConscript

@ -12,7 +12,8 @@ common_src = Split("buffer.c log.c \
data_integer.c md5.c data_fastcgi.c \
fdevent_select.c fdevent_libev.c \
fdevent_poll.c fdevent_linux_sysepoll.c \
fdevent_solaris_devpoll.c fdevent_freebsd_kqueue.c \
fdevent_solaris_devpoll.c fdevent_solaris_port.c \
fdevent_freebsd_kqueue.c \
data_config.c bitset.c \
inet_ntop_cache.c crc32.c \
connections-glue.c \
@ -62,7 +63,7 @@ modules = {
'mod_redirect' : { 'src' : [ 'mod_redirect.c' ], 'lib' : [ env['LIBPCRE'] ] },
'mod_rewrite' : { 'src' : [ 'mod_rewrite.c' ], 'lib' : [ env['LIBPCRE'] ] },
'mod_auth' : {
'src' : [ 'mod_auth.c', 'http_auth_digest.c', 'http_auth.c' ],
'src' : [ 'mod_auth.c', 'http_auth.c' ],
'lib' : [ env['LIBCRYPT'], env['LIBLDAP'], env['LIBLBER'] ] },
'mod_webdav' : { 'src' : [ 'mod_webdav.c' ], 'lib' : [ env['LIBXML2'], env['LIBSQLITE3'], env['LIBUUID'] ] },
'mod_mysql_vhost' : { 'src' : [ 'mod_mysql_vhost.c' ], 'lib' : [ env['LIBMYSQL'] ] },

172
src/http_auth.c

@ -1,7 +1,6 @@
#include "server.h"
#include "log.h"
#include "http_auth.h"
#include "http_auth_digest.h"
#include "inet_ntop_cache.h"
#include "stream.h"
@ -28,17 +27,22 @@
#include <unistd.h>
#include <ctype.h>
#ifdef USE_OPENSSL
# include <openssl/md5.h>
#else
# include "md5.h"
#include "md5.h"
typedef li_MD5_CTX MD5_CTX;
#define MD5_Init li_MD5_Init
#define MD5_Update li_MD5_Update
#define MD5_Final li_MD5_Final
#define HASHLEN 16
#define HASHHEXLEN 32
typedef unsigned char HASH[HASHLEN];
typedef char HASHHEX[HASHHEXLEN+1];
#endif
static void CvtHex(const HASH Bin, char Hex[33]) {
unsigned short i;
for (i = 0; i < 16; i++) {
Hex[i*2] = int2hex((Bin[i] >> 4) & 0xf);
Hex[i*2+1] = int2hex(Bin[i] & 0xf);
}
Hex[32] = '\0';
}
/**
* the $apr1$ handling is taken from apache 1.3.x
@ -435,7 +439,7 @@ static int http_auth_match_rules(server *srv, mod_auth_plugin_data *p, const cha
static void to64(char *s, unsigned long v, int n)
{
static unsigned char itoa64[] = /* 0 ... 63 => ASCII - 64 */
static const unsigned char itoa64[] = /* 0 ... 63 => ASCII - 64 */
"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
while (--n >= 0) {
@ -455,7 +459,7 @@ static void apr_md5_encode(const char *pw, const char *salt, char *result, size_
const char *sp, *ep;
unsigned char final[APR_MD5_DIGESTSIZE];
ssize_t sl, pl, i;
MD5_CTX ctx, ctx1;
li_MD5_CTX ctx, ctx1;
unsigned long l;
/*
@ -487,33 +491,33 @@ static void apr_md5_encode(const char *pw, const char *salt, char *result, size_
/*
* 'Time to make the doughnuts..'
*/
MD5_Init(&ctx);
li_MD5_Init(&ctx);
/*
* The password first, since that is what is most unknown
*/
MD5_Update(&ctx, pw, strlen(pw));
li_MD5_Update(&ctx, pw, strlen(pw));
/*
* Then our magic string
*/
MD5_Update(&ctx, APR1_ID, strlen(APR1_ID));
li_MD5_Update(&ctx, APR1_ID, strlen(APR1_ID));
/*
* Then the raw salt
*/
MD5_Update(&ctx, sp, sl);
li_MD5_Update(&ctx, sp, sl);
/*
* Then just as many characters of the MD5(pw, salt, pw)
*/
MD5_Init(&ctx1);
MD5_Update(&ctx1, pw, strlen(pw));
MD5_Update(&ctx1, sp, sl);
MD5_Update(&ctx1, pw, strlen(pw));
MD5_Final(final, &ctx1);
li_MD5_Init(&ctx1);
li_MD5_Update(&ctx1, pw, strlen(pw));
li_MD5_Update(&ctx1, sp, sl);
li_MD5_Update(&ctx1, pw, strlen(pw));
li_MD5_Final(final, &ctx1);
for (pl = strlen(pw); pl > 0; pl -= APR_MD5_DIGESTSIZE) {
MD5_Update(&ctx, final,
li_MD5_Update(&ctx, final,
(pl > APR_MD5_DIGESTSIZE) ? APR_MD5_DIGESTSIZE : pl);
}
@ -527,10 +531,10 @@ static void apr_md5_encode(const char *pw, const char *salt, char *result, size_
*/
for (i = strlen(pw); i != 0; i >>= 1) {
if (i & 1) {
MD5_Update(&ctx, final, 1);
li_MD5_Update(&ctx, final, 1);
}
else {
MD5_Update(&ctx, pw, 1);
li_MD5_Update(&ctx, pw, 1);
}
}
@ -542,7 +546,7 @@ static void apr_md5_encode(const char *pw, const char *salt, char *result, size_
strncat(passwd, sp, sl);
strcat(passwd, "$");
MD5_Final(final, &ctx);
li_MD5_Final(final, &ctx);
/*
* And now, just to make sure things don't run too fast..
@ -550,28 +554,28 @@ static void apr_md5_encode(const char *pw, const char *salt, char *result, size_
* need 30 seconds to build a 1000 entry dictionary...
*/
for (i = 0; i < 1000; i++) {
MD5_Init(&ctx1);
li_MD5_Init(&ctx1);
if (i & 1) {
MD5_Update(&ctx1, pw, strlen(pw));
li_MD5_Update(&ctx1, pw, strlen(pw));
}
else {
MD5_Update(&ctx1, final, APR_MD5_DIGESTSIZE);
li_MD5_Update(&ctx1, final, APR_MD5_DIGESTSIZE);
}
if (i % 3) {
MD5_Update(&ctx1, sp, sl);
li_MD5_Update(&ctx1, sp, sl);
}
if (i % 7) {
MD5_Update(&ctx1, pw, strlen(pw));
li_MD5_Update(&ctx1, pw, strlen(pw));
}
if (i & 1) {
MD5_Update(&ctx1, final, APR_MD5_DIGESTSIZE);
li_MD5_Update(&ctx1, final, APR_MD5_DIGESTSIZE);
}
else {
MD5_Update(&ctx1, pw, strlen(pw));
li_MD5_Update(&ctx1, pw, strlen(pw));
}
MD5_Final(final,&ctx1);
li_MD5_Final(final,&ctx1);
}
p = passwd + strlen(passwd);
@ -614,17 +618,17 @@ static int http_auth_basic_password_compare(server *srv, mod_auth_plugin_data *p
* user:realm:md5(user:realm:password)
*/
MD5_CTX Md5Ctx;
li_MD5_CTX Md5Ctx;
HASH HA1;
char a1[256];
MD5_Init(&Md5Ctx);
MD5_Update(&Md5Ctx, (unsigned char *)username->ptr, username->used - 1);
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
MD5_Update(&Md5Ctx, (unsigned char *)realm->ptr, realm->used - 1);
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
MD5_Update(&Md5Ctx, (unsigned char *)pw, strlen(pw));
MD5_Final(HA1, &Md5Ctx);
li_MD5_Init(&Md5Ctx);
li_MD5_Update(&Md5Ctx, (unsigned char *)username->ptr, username->used - 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)realm->ptr, realm->used - 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)pw, strlen(pw));
li_MD5_Final(HA1, &Md5Ctx);
CvtHex(HA1, a1);
@ -930,7 +934,7 @@ int http_auth_digest_check(server *srv, connection *con, mod_auth_plugin_data *p
int i;
buffer *password, *b, *username_buf, *realm_buf;
MD5_CTX Md5Ctx;
li_MD5_CTX Md5Ctx;
HASH HA1;
HASH HA2;
HASH RespHash;
@ -1067,13 +1071,13 @@ int http_auth_digest_check(server *srv, connection *con, mod_auth_plugin_data *p
if (p->conf.auth_backend == AUTH_BACKEND_PLAIN) {
/* generate password from plain-text */
MD5_Init(&Md5Ctx);
MD5_Update(&Md5Ctx, (unsigned char *)username, strlen(username));
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
MD5_Update(&Md5Ctx, (unsigned char *)realm, strlen(realm));
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
MD5_Update(&Md5Ctx, (unsigned char *)password->ptr, password->used - 1);
MD5_Final(HA1, &Md5Ctx);
li_MD5_Init(&Md5Ctx);
li_MD5_Update(&Md5Ctx, (unsigned char *)username, strlen(username));
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)realm, strlen(realm));
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)password->ptr, password->used - 1);
li_MD5_Final(HA1, &Md5Ctx);
} else if (p->conf.auth_backend == AUTH_BACKEND_HTDIGEST) {
/* HA1 */
/* transform the 32-byte-hex-md5 to a 16-byte-md5 */
@ -1090,45 +1094,45 @@ int http_auth_digest_check(server *srv, connection *con, mod_auth_plugin_data *p
if (algorithm &&
strcasecmp(algorithm, "md5-sess") == 0) {
MD5_Init(&Md5Ctx);
MD5_Update(&Md5Ctx, (unsigned char *)HA1, 16);
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
MD5_Update(&Md5Ctx, (unsigned char *)nonce, strlen(nonce));
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
MD5_Update(&Md5Ctx, (unsigned char *)cnonce, strlen(cnonce));
MD5_Final(HA1, &Md5Ctx);
li_MD5_Init(&Md5Ctx);
li_MD5_Update(&Md5Ctx, (unsigned char *)HA1, 16);
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)nonce, strlen(nonce));
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)cnonce, strlen(cnonce));
li_MD5_Final(HA1, &Md5Ctx);
}
CvtHex(HA1, a1);
/* calculate H(A2) */
MD5_Init(&Md5Ctx);
MD5_Update(&Md5Ctx, (unsigned char *)m, strlen(m));
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
MD5_Update(&Md5Ctx, (unsigned char *)uri, strlen(uri));
li_MD5_Init(&Md5Ctx);
li_MD5_Update(&Md5Ctx, (unsigned char *)m, strlen(m));
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)uri, strlen(uri));
if (qop && strcasecmp(qop, "auth-int") == 0) {
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
MD5_Update(&Md5Ctx, (unsigned char *)"", HASHHEXLEN);
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)"", HASHHEXLEN);
}
MD5_Final(HA2, &Md5Ctx);
li_MD5_Final(HA2, &Md5Ctx);
CvtHex(HA2, HA2Hex);
/* calculate response */
MD5_Init(&Md5Ctx);
MD5_Update(&Md5Ctx, (unsigned char *)a1, HASHHEXLEN);
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
MD5_Update(&Md5Ctx, (unsigned char *)nonce, strlen(nonce));
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Init(&Md5Ctx);
li_MD5_Update(&Md5Ctx, (unsigned char *)a1, HASHHEXLEN);
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)nonce, strlen(nonce));
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
if (qop && *qop) {
MD5_Update(&Md5Ctx, (unsigned char *)nc, strlen(nc));
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
MD5_Update(&Md5Ctx, (unsigned char *)cnonce, strlen(cnonce));
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
MD5_Update(&Md5Ctx, (unsigned char *)qop, strlen(qop));
MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)nc, strlen(nc));
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)cnonce, strlen(cnonce));
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)qop, strlen(qop));
li_MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
};
MD5_Update(&Md5Ctx, (unsigned char *)HA2Hex, HASHHEXLEN);
MD5_Final(RespHash, &Md5Ctx);
li_MD5_Update(&Md5Ctx, (unsigned char *)HA2Hex, HASHHEXLEN);
li_MD5_Final(RespHash, &Md5Ctx);
CvtHex(RespHash, a2);
if (0 != strcmp(a2, respons)) {
@ -1171,24 +1175,24 @@ int http_auth_digest_check(server *srv, connection *con, mod_auth_plugin_data *p
int http_auth_digest_generate_nonce(server *srv, mod_auth_plugin_data *p, buffer *fn, char out[33]) {
HASH h;
MD5_CTX Md5Ctx;
li_MD5_CTX Md5Ctx;
char hh[32];
UNUSED(p);
/* generate shared-secret */
MD5_Init(&Md5Ctx);
MD5_Update(&Md5Ctx, (unsigned char *)fn->ptr, fn->used - 1);
MD5_Update(&Md5Ctx, (unsigned char *)"+", 1);
li_MD5_Init(&Md5Ctx);
li_MD5_Update(&Md5Ctx, (unsigned char *)fn->ptr, fn->used - 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)"+", 1);
/* we assume sizeof(time_t) == 4 here, but if not it ain't a problem at all */
LI_ltostr(hh, srv->cur_ts);
MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
MD5_Update(&Md5Ctx, (unsigned char *)srv->entropy, sizeof(srv->entropy));
li_MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
li_MD5_Update(&Md5Ctx, (unsigned char *)srv->entropy, sizeof(srv->entropy));
LI_ltostr(hh, rand());
MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
li_MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
MD5_Final(h, &Md5Ctx);
li_MD5_Final(h, &Md5Ctx);
CvtHex(h, out);

26
src/http_auth_digest.c

@ -1,26 +0,0 @@
#include "buffer.h"
#include "http_auth_digest.h"
#include <string.h>
#ifndef USE_OPENSSL
# include "md5.h"
typedef li_MD5_CTX MD5_CTX;
#define MD5_Init li_MD5_Init
#define MD5_Update li_MD5_Update
#define MD5_Final li_MD5_Final
#endif
void CvtHex(IN HASH Bin, OUT HASHHEX Hex) {
unsigned short i;
for (i = 0; i < HASHLEN; i++) {
Hex[i*2] = int2hex((Bin[i] >> 4) & 0xf);
Hex[i*2+1] = int2hex(Bin[i] & 0xf);
}
Hex[HASHHEXLEN] = '\0';
}

24
src/http_auth_digest.h

@ -1,24 +0,0 @@
#ifndef _DIGCALC_H_
#define _DIGCALC_H_
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#define HASHLEN 16
typedef unsigned char HASH[HASHLEN];
#define HASHHEXLEN 32
typedef char HASHHEX[HASHHEXLEN+1];
#ifdef USE_OPENSSL
#define IN const
#else
#define IN
#endif
#define OUT
void CvtHex(
IN HASH Bin,
OUT HASHHEX Hex
);
#endif

20
src/mod_cml_funcs.c

@ -17,17 +17,7 @@
#include <dirent.h>
#include <stdio.h>
#ifdef USE_OPENSSL
# include <openssl/md5.h>
#else
# include "md5.h"
typedef li_MD5_CTX MD5_CTX;
#define MD5_Init li_MD5_Init
#define MD5_Update li_MD5_Update
#define MD5_Final li_MD5_Final
#endif
#include "md5.h"
#define HASHLEN 16
typedef unsigned char HASH[HASHLEN];
@ -43,7 +33,7 @@ typedef char HASHHEX[HASHHEXLEN+1];
#ifdef HAVE_LUA_H
int f_crypto_md5(lua_State *L) {
MD5_CTX Md5Ctx;
li_MD5_CTX Md5Ctx;
HASH HA1;
buffer b;
char hex[33];
@ -63,9 +53,9 @@ int f_crypto_md5(lua_State *L) {
lua_error(L);
}
MD5_Init(&Md5Ctx);
MD5_Update(&Md5Ctx, (unsigned char *)lua_tostring(L, 1), lua_strlen(L, 1));
MD5_Final(HA1, &Md5Ctx);
li_MD5_Init(&Md5Ctx);
li_MD5_Update(&Md5Ctx, (unsigned char *)lua_tostring(L, 1), lua_strlen(L, 1));
li_MD5_Final(HA1, &Md5Ctx);
buffer_copy_string_hex(&b, (char *)HA1, 16);

12
src/mod_cml_lua.c

@ -11,18 +11,6 @@
#include <time.h>
#include <string.h>
#ifdef USE_OPENSSL
# include <openssl/md5.h>
#else
# include "md5.h"
typedef li_MD5_CTX MD5_CTX;
#define MD5_Init li_MD5_Init
#define MD5_Update li_MD5_Update
#define MD5_Final li_MD5_Final
#endif
#define HASHLEN 16
typedef unsigned char HASH[HASHLEN];
#define HASHHEXLEN 32

3
src/mod_dirlisting.c

@ -657,7 +657,8 @@ static int http_list_directory(server *srv, connection *con, plugin_data *p, buf
i = dir->used - 1;
#ifdef HAVE_PATHCONF
if (-1 == (name_max = pathconf(dir->ptr, _PC_NAME_MAX))) {
if (0 >= (name_max = pathconf(dir->ptr, _PC_NAME_MAX))) {
/* some broken fs (fuse) return 0 instead of -1 */
#ifdef NAME_MAX
name_max = NAME_MAX;
#else

20
src/mod_secure_download.c

@ -8,17 +8,7 @@
#include <stdlib.h>
#include <string.h>
#ifdef USE_OPENSSL
# include <openssl/md5.h>
#else
# include "md5.h"
typedef li_MD5_CTX MD5_CTX;
#define MD5_Init li_MD5_Init
#define MD5_Update li_MD5_Update
#define MD5_Final li_MD5_Final
#endif
#include "md5.h"
#define HASHLEN 16
typedef unsigned char HASH[HASHLEN];
@ -200,7 +190,7 @@ static int mod_secdownload_patch_connection(server *srv, connection *con, plugin
URIHANDLER_FUNC(mod_secdownload_uri_handler) {
plugin_data *p = p_d;
MD5_CTX Md5Ctx;
li_MD5_CTX Md5Ctx;
HASH HA1;
const char *rel_uri, *ts_str, *md5_str;
time_t ts = 0;
@ -266,9 +256,9 @@ URIHANDLER_FUNC(mod_secdownload_uri_handler) {
buffer_append_string(p->md5, rel_uri);
buffer_append_string_len(p->md5, ts_str, 8);
MD5_Init(&Md5Ctx);
MD5_Update(&Md5Ctx, (unsigned char *)p->md5->ptr, p->md5->used - 1);
MD5_Final(HA1, &Md5Ctx);
li_MD5_Init(&Md5Ctx);
li_MD5_Update(&Md5Ctx, (unsigned char *)p->md5->ptr, p->md5->used - 1);
li_MD5_Final(HA1, &Md5Ctx);
buffer_copy_string_hex(p->md5, (char *)HA1, 16);

28
src/mod_usertrack.c

@ -8,17 +8,7 @@
#include <stdlib.h>
#include <string.h>
#ifdef USE_OPENSSL
# include <openssl/md5.h>
#else
# include "md5.h"
typedef li_MD5_CTX MD5_CTX;
#define MD5_Init li_MD5_Init
#define MD5_Update li_MD5_Update
#define MD5_Final li_MD5_Final
#endif
#include "md5.h"
/* plugin config for all request/connections */
@ -182,7 +172,7 @@ URIHANDLER_FUNC(mod_usertrack_uri_handler) {
plugin_data *p = p_d;
data_string *ds;
unsigned char h[16];
MD5_CTX Md5Ctx;
li_MD5_CTX Md5Ctx;
char hh[32];
if (con->uri.path->used == 0) return HANDLER_GO_ON;
@ -228,18 +218,18 @@ URIHANDLER_FUNC(mod_usertrack_uri_handler) {
/* taken from mod_auth.c */
/* generate shared-secret */
MD5_Init(&Md5Ctx);
MD5_Update(&Md5Ctx, (unsigned char *)con->uri.path->ptr, con->uri.path->used - 1);
MD5_Update(&Md5Ctx, (unsigned char *)"+", 1);
li_MD5_Init(&Md5Ctx);
li_MD5_Update(&Md5Ctx, (unsigned char *)con->uri.path->ptr, con->uri.path->used - 1);
li_MD5_Update(&Md5Ctx, (unsigned char *)"+", 1);
/* we assume sizeof(time_t) == 4 here, but if not it ain't a problem at all */
LI_ltostr(hh, srv->cur_ts);
MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
MD5_Update(&Md5Ctx, (unsigned char *)srv->entropy, sizeof(srv->entropy));
li_MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
li_MD5_Update(&Md5Ctx, (unsigned char *)srv->entropy, sizeof(srv->entropy));
LI_ltostr(hh, rand());
MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
li_MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
MD5_Final(h, &Md5Ctx);
li_MD5_Final(h, &Md5Ctx);
buffer_append_string_encoded(ds->value, (char *)h, 16, ENCODING_HEX);
buffer_append_string_len(ds->value, CONST_STR_LEN("; Path=/"));

Loading…
Cancel
Save