From 86e45cfbd0655193e363be6daadbfd5434566a03 Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Thu, 12 Aug 2004 00:50:29 +0000 Subject: - Added postgresql database support - Lots of changes to properly abstract bd handlers - Handle multiple passwords and ha1s properly. --- daemon/digest.h | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) (limited to 'daemon/digest.h') diff --git a/daemon/digest.h b/daemon/digest.h index f763133..a889024 100644 --- a/daemon/digest.h +++ b/daemon/digest.h @@ -25,33 +25,37 @@ typedef struct digest_header } digest_header_t; -/* Kept by the server for validating the client */ -typedef struct digest_record +typedef struct digest_context { - unsigned char nonce[DIGEST_NONCE_LEN]; - unsigned char userhash[MD5_LEN]; - unsigned char ha1[MD5_LEN]; - unsigned int nc; -} -digest_record_t; - -digest_record_t* digest_makerec(unsigned char* nonce, const char* user); + digest_header_t client; -int ha_digestparse(char* header, ha_buffer_t* buf, digest_header_t* rec, - unsigned char* nonce); + long server_nc; + const char* server_uri; + const char* server_method; -int ha_digestnonce(time_t* tm, unsigned char* nonce); + unsigned char ha1[MD5_LEN]; +} +digest_context_t; -int digest_check(digest_header_t* dg, digest_record_t* rec, const ha_context_t* opts, - ha_buffer_t* buf, const char* method, const char* uri); +void digest_makeha1(unsigned char* digest, const char* user, + const char* realm, const char* password); -const char* digest_respond(ha_buffer_t* buf, digest_header_t* dg, - digest_record_t* rec, unsigned char* next); +int digest_parse(const char* header, ha_buffer_t* buf, digest_header_t* dg); const char* digest_challenge(ha_buffer_t* buf, const char* nonce_str, const char* realm, const char* domains, int stale); -void digest_makeha1(unsigned char* digest, const char* user, - const char* realm, const char* password); +/* + * Validate digest headers once they've been parsed. Note that it's up + * to the caller to validate the 'username' and 'nonce' fields. + */ +int digest_check(digest_context_t* dg, const ha_context_t* opts, ha_buffer_t* buf); +int digest_pre_check(digest_context_t* dg, const ha_context_t* opts, ha_buffer_t* buf); + +/* This assumes a digest_context that's been prechecked successfully */ +int digest_complete_check(digest_context_t* dg, ha_buffer_t* buf); + +/* This assumes a digest_context that's been checked and validated successfully */ +const char* digest_respond(digest_context_t* dg, ha_buffer_t* buf, unsigned char* next); #endif /* __DIGEST_H__ */ -- cgit v1.2.3