diff options
Diffstat (limited to 'daemon/simple.c')
-rw-r--r-- | daemon/simple.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/daemon/simple.c b/daemon/simple.c index cd1b812..fdaa0e0 100644 --- a/daemon/simple.c +++ b/daemon/simple.c @@ -60,6 +60,8 @@ static digest_record_t* get_cached_digest(simple_context_t* ctx, unsigned char* { digest_record_t* rec; + ASSERT(ctx && nonce); + if(ctx->cache_max == 0) return NULL; @@ -81,6 +83,8 @@ static int have_cached_basic(simple_context_t* ctx, unsigned char* key) { int ret = 0; + ASSERT(ctx && key); + ha_lock(NULL); ret = (hash_get(ctx->cache, key) == BASIC_ESTABLISHED); @@ -94,6 +98,8 @@ static int save_cached_digest(simple_context_t* ctx, digest_record_t* rec) { int r; + ASSERT(ctx && rec); + if(ctx->cache_max == 0) return HA_FALSE; @@ -119,6 +125,8 @@ static int add_cached_basic(simple_context_t* ctx, unsigned char* key) { int r; + ASSERT(ctx && key); + if(ctx->cache_max == 0) return HA_FALSE; @@ -148,6 +156,8 @@ static int complete_digest_ha1(simple_context_t* ctx, digest_record_t* rec, char* t; char line[SIMPLE_MAXLINE]; + ASSERT(ctx && rec && buf && user && user[0] && code); + f = fopen(ctx->filename, "r"); if(!f) { @@ -222,6 +232,9 @@ static int validate_user_password(simple_context_t* ctx, ha_buffer_t* buf, char* t; char* t2; + ASSERT(ctx && buf && code); + ASSERT(user && user[0] && clearpw); + f = fopen(ctx->filename, "r"); if(!f) { @@ -349,6 +362,8 @@ static int simple_digest_challenge(simple_context_t* ctx, ha_response_t* resp, unsigned char nonce[DIGEST_NONCE_LEN]; const char* header; + ASSERT(ctx && resp && buf); + /* Generate an nonce */ digest_makenonce(nonce, g_simple_secret, NULL); @@ -378,6 +393,8 @@ static int simple_digest_response(simple_context_t* ctx, const char* header, int stale = 0; int r; + ASSERT(ctx && header && method && uri && resp && buf); + /* We use this below to send a default response */ resp->code = -1; @@ -481,6 +498,8 @@ int simple_config(ha_context_t* context, const char* name, const char* value) { simple_context_t* ctx = (simple_context_t*)(context->data); + ASSERT(name && name[0] && value && value[0]); + if(strcmp(name, "passwordfile") == 0) { ctx->filename = value; @@ -521,6 +540,8 @@ int simple_init(ha_context_t* context) simple_context_t* ctx = (simple_context_t*)(context->data); int fd; + ASSERT(ctx); + /* Make sure there are some types of authentication we can do */ if(!(context->types & (HA_TYPE_BASIC | HA_TYPE_DIGEST))) { @@ -547,6 +568,8 @@ int simple_init(ha_context_t* context) close(fd); + ASSERT(!ctx->cache); + /* The cache for digest records and basic */ if(!(ctx->cache = hash_create(MD5_LEN, free_hash_object, NULL))) { @@ -563,10 +586,11 @@ void simple_destroy(ha_context_t* context) /* Per context destroy */ if(context) { + /* Note: We don't need to be thread safe here anymore */ simple_context_t* ctx = (simple_context_t*)(context->data); - /* Note: We don't need to be thread safe here anymore */ - hash_free(ctx->cache); + if(ctx->cache) + hash_free(ctx->cache); } } @@ -579,6 +603,9 @@ int simple_process(ha_context_t* context, ha_request_t* req, int found = 0; basic_header_t basic; + ASSERT(context && req && resp && buf); + ASSERT(req->args[AUTH_ARG_METHOD]); + ASSERT(req->args[AUTH_ARG_URI]); ha_lock(NULL); |