diff --git a/src/auth_htpasswd.c b/src/auth_htpasswd.c index 3767e83d..74e9e354 100644 --- a/src/auth_htpasswd.c +++ b/src/auth_htpasswd.c @@ -194,6 +194,11 @@ static auth_result htpasswd_auth (auth_client *auth_user) } htpasswd_recheckfile (htpasswd); + if (htpasswd->users == NULL) { + ICECAST_LOG_ERROR("No user list."); + return AUTH_FAILED; + } + thread_rwlock_rlock (&htpasswd->file_rwlock); entry.name = client->username; if (avl_get_by_key (htpasswd->users, &entry, &result) == 0) @@ -262,8 +267,18 @@ static auth_result htpasswd_adduser (auth_t *auth, const char *username, const c htpasswd_user entry; void *result; + if (state->filename == NULL) { + ICECAST_LOG_ERROR("No filename given in options for authenticator."); + return AUTH_FAILED; + } + htpasswd_recheckfile (state); + if (state->filename == NULL) { + ICECAST_LOG_ERROR("No user list."); + return AUTH_FAILED; + } + thread_rwlock_wlock (&state->file_rwlock); entry.name = (char*)username; @@ -308,6 +323,17 @@ static auth_result htpasswd_deleteuser(auth_t *auth, const char *username) struct stat file_info; state = auth->state; + + if (state->filename == NULL) { + ICECAST_LOG_ERROR("No filename given in options for authenticator."); + return AUTH_FAILED; + } + + if (state->users == NULL) { + ICECAST_LOG_ERROR("No user list."); + return AUTH_FAILED; + } + thread_rwlock_wlock (&state->file_rwlock); passwdfile = fopen(state->filename, "rb"); @@ -392,8 +418,18 @@ static auth_result htpasswd_userlist(auth_t *auth, xmlNodePtr srcnode) state = auth->state; + if (state->filename == NULL) { + ICECAST_LOG_ERROR("No filename given in options for authenticator."); + return AUTH_FAILED; + } + htpasswd_recheckfile (state); + if (state->users == NULL) { + ICECAST_LOG_ERROR("No user list."); + return AUTH_FAILED; + } + thread_rwlock_rlock (&state->file_rwlock); node = avl_get_first (state->users); while (node)