Avoid the confusion... the digests are NOT strings.

Add some debug logging

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1540220 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jim Jagielski
2013-11-08 23:42:50 +00:00
parent 51875adb6d
commit 7a0c59f66f
2 changed files with 23 additions and 10 deletions

View File

@ -1 +1 @@
2551 2555

View File

@ -178,7 +178,7 @@ static void store_slotmem(ap_slotmem_instance_t *slotmem)
apr_status_t rv; apr_status_t rv;
apr_size_t nbytes; apr_size_t nbytes;
const char *storename; const char *storename;
char digest[APR_MD5_DIGESTSIZE]; unsigned char digest[APR_MD5_DIGESTSIZE];
apr_size_t written = 0; apr_size_t written = 0;
storename = slotmem_filename(slotmem->gpool, slotmem->name, 1); storename = slotmem_filename(slotmem->gpool, slotmem->name, 1);
@ -202,7 +202,7 @@ static void store_slotmem(ap_slotmem_instance_t *slotmem)
} }
nbytes = (slotmem->desc.size * slotmem->desc.num) + nbytes = (slotmem->desc.size * slotmem->desc.num) +
(slotmem->desc.num * sizeof(char)) + AP_UNSIGNEDINT_OFFSET; (slotmem->desc.num * sizeof(char)) + AP_UNSIGNEDINT_OFFSET;
apr_md5((unsigned char*)digest, slotmem->persist, nbytes); apr_md5(digest, slotmem->persist, nbytes);
rv = apr_file_write_full(fp, slotmem->persist, nbytes, &written); rv = apr_file_write_full(fp, slotmem->persist, nbytes, &written);
if (rv == APR_SUCCESS && written == nbytes) { if (rv == APR_SUCCESS && written == nbytes) {
rv = apr_file_write_full(fp, digest, APR_MD5_DIGESTSIZE, &written); rv = apr_file_write_full(fp, digest, APR_MD5_DIGESTSIZE, &written);
@ -221,8 +221,8 @@ static apr_status_t restore_slotmem(void *ptr, const char *name, apr_size_t size
apr_file_t *fp; apr_file_t *fp;
apr_size_t nbytes = size; apr_size_t nbytes = size;
apr_status_t rv = APR_SUCCESS; apr_status_t rv = APR_SUCCESS;
char digest[APR_MD5_DIGESTSIZE]; unsigned char digest[APR_MD5_DIGESTSIZE];
char digest2[APR_MD5_DIGESTSIZE]; unsigned char digest2[APR_MD5_DIGESTSIZE];
storename = slotmem_filename(pool, name, 1); storename = slotmem_filename(pool, name, 1);
@ -241,17 +241,28 @@ static apr_status_t restore_slotmem(void *ptr, const char *name, apr_size_t size
* - backwards compatibility * - backwards compatibility
* */ * */
if (apr_file_eof(fp) != APR_EOF) { if (apr_file_eof(fp) != APR_EOF) {
rv = apr_file_gets(digest, APR_MD5_DIGESTSIZE, fp); apr_size_t ds = APR_MD5_DIGESTSIZE;
if (rv == APR_SUCCESS) { rv = apr_file_read(fp, digest, &ds);
apr_md5((unsigned char*)digest2, ptr, nbytes); if ((rv == APR_SUCCESS || rv == APR_EOF) &&
if (!strcasecmp(digest, digest2)) { ds == APR_MD5_DIGESTSIZE) {
rv = APR_SUCCESS;
apr_md5(digest2, ptr, nbytes);
if (memcmp(digest, digest2, APR_MD5_DIGESTSIZE)) {
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
APLOGNO(02551) "bad md5 match");
rv = APR_EGENERAL; rv = APR_EGENERAL;
} }
} }
} }
else {
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
APLOGNO(02552) "at EOF... bypassing md5 match check (old persist file?)");
}
} }
else if (nbytes != size) { else if (nbytes != size) {
/* didn't get it all */ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
APLOGNO(02553) "Expected %" APR_SIZE_T_FMT ": Read %" APR_SIZE_T_FMT,
size, nbytes);
rv = APR_EGENERAL; rv = APR_EGENERAL;
} }
apr_file_close(fp); apr_file_close(fp);
@ -421,6 +432,8 @@ static apr_status_t slotmem_create(ap_slotmem_instance_t **new,
} }
else { else {
/* just in case, re-zero */ /* just in case, re-zero */
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
APLOGNO(02554) "could not restore %s", fname);
memset(ptr, 0, dsize); memset(ptr, 0, dsize);
} }
} }