Improve some logging during HTSP connect / disconnect.

This commit is contained in:
Andreas Öman 2009-03-03 22:41:32 +00:00
parent de15de8a53
commit 680c105e94
3 changed files with 29 additions and 8 deletions

View file

@ -79,7 +79,8 @@ access_verify(const char *username, const char *password,
*/
uint32_t
access_get_hashed(const char *username, const uint8_t digest[20],
const uint8_t *challenge, struct sockaddr *src)
const uint8_t *challenge, struct sockaddr *src,
int *entrymatch)
{
struct sockaddr_in *si = (struct sockaddr_in *)src;
uint32_t b = ntohl(si->sin_addr.s_addr);
@ -87,6 +88,7 @@ access_get_hashed(const char *username, const uint8_t digest[20],
struct AVSHA1 *shactx = alloca(av_sha1_size);
uint8_t d[20];
uint32_t r = 0;
int match = 0;
TAILQ_FOREACH(ae, &access_entries, ae_link) {
@ -101,9 +103,11 @@ access_get_hashed(const char *username, const uint8_t digest[20],
if(memcmp(d, digest, 20)) /* Nintendo would have use strncmp() here :) */
continue;
match = 1;
r |= ae->ae_rights;
}
if(entrymatch != NULL)
*entrymatch = match;
return r;
}

View file

@ -63,7 +63,8 @@ int access_verify(const char *username, const char *password,
*
*/
uint32_t access_get_hashed(const char *username, const uint8_t digest[20],
const uint8_t *challenge, struct sockaddr *src);
const uint8_t *challenge, struct sockaddr *src,
int *entrymatch);
/**
*

26
htsp.c
View file

@ -541,17 +541,28 @@ htsp_authenticate(htsp_connection_t *htsp, htsmsg_t *m)
const void *digest;
size_t digestlen;
uint32_t access;
int privgain;
int match;
if((username = htsmsg_get_str(m, "username")) == NULL)
return;
tvh_str_update(&htsp->htsp_username, username);
if(htsmsg_get_bin(m, "digest", &digest, &digestlen))
return;
access = access_get_hashed(username, digest, htsp->htsp_challenge,
(struct sockaddr *)htsp->htsp_peer);
(struct sockaddr *)htsp->htsp_peer, &match);
privgain = (access | htsp->htsp_granted_access) != htsp->htsp_granted_access;
if(strcmp(htsp->htsp_username ?: "", username) || privgain) {
free(htsp->htsp_username);
tvhlog(LOG_INFO, "htsp", "%s: %suthenticated as user %s (%s)%s",
htsp->htsp_name, htsp->htsp_username ? "Rea" : "A", username,
privgain ? "Gained privileges" : "Did not gain privileges",
match ? "" : ", no match in access-list");
htsp->htsp_username = strdup(username);
}
htsp->htsp_granted_access |= access;
}
@ -665,8 +676,11 @@ htsp_read_loop(htsp_connection_t *htsp)
htsmsg_destroy(m);
tvhlog(LOG_INFO, "htsp", "%s: Connected as user %s",
htsp->htsp_name, htsp->htsp_username ?: "<anonymous>");
if(htsp->htsp_username == NULL)
tvhlog(LOG_INFO, "htsp", "%s: Anonymous connection",
htsp->htsp_name);
htsp_send_login_ack(htsp, NULL,
!(htsp->htsp_granted_access & HTSP_PRIV_MASK));
@ -823,6 +837,8 @@ htsp_serve(int fd, void *opaque, struct sockaddr_in *source)
htsp_read_loop(&htsp);
tvhlog(LOG_INFO, "htsp", "%s: Disconnected", htsp.htsp_name);
/**
* Ok, we're back, other end disconnected. Clean up stuff.
*/