Commit 2822e350 authored by Karl Heyes's avatar Karl Heyes

htpasswd auth should apply even if no filename is specified, just reject all

new listeners with the reason logged. auth_t refcount was getting out of sync
which is a potential small memory leak.

svn path=/icecast/trunk/icecast/; revision=14788
parent a3d1ff80
......@@ -195,15 +195,25 @@ static void auth_new_listener (auth_t *auth, auth_client *auth_user)
{
DEBUG0 ("listener is no longer connected");
client->respcode = 400;
auth_release (client->auth);
client->auth = NULL;
return;
}
if (auth->authenticate)
{
if (auth->authenticate (auth_user) != AUTH_OK)
{
auth_release (client->auth);
client->auth = NULL;
return;
}
}
if (auth_postprocess_listener (auth_user) < 0)
{
auth_release (client->auth);
client->auth = NULL;
INFO1 ("client %lu failed", client->con->id);
}
}
......
......@@ -185,6 +185,11 @@ static auth_result htpasswd_auth (auth_client *auth_user)
if (client->username == NULL || client->password == NULL)
return AUTH_FAILED;
if (htpasswd->filename == NULL)
{
ERROR0("No filename given in options for authenticator.");
return AUTH_FAILED;
}
htpasswd_recheckfile (htpasswd);
thread_rwlock_rlock (&htpasswd->file_rwlock);
......@@ -225,19 +230,20 @@ int auth_get_htpasswd_auth (auth_t *authenticator, config_options_t *options)
while(options) {
if(!strcmp(options->name, "filename"))
{
free (state->filename);
state->filename = strdup(options->value);
}
options = options->next;
}
if(!state->filename) {
free(state);
if (state->filename)
INFO1("Configured htpasswd authentication using password file \"%s\"",
state->filename);
else
ERROR0("No filename given in options for authenticator.");
return -1;
}
authenticator->state = state;
DEBUG1("Configured htpasswd authentication using password file %s",
state->filename);
thread_rwlock_create(&state->file_rwlock);
htpasswd_recheckfile (state);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment