Improve some logging during HTSP connect / disconnect.
This commit is contained in:
parent
de15de8a53
commit
680c105e94
3 changed files with 29 additions and 8 deletions
8
access.c
8
access.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
3
access.h
3
access.h
|
@ -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
26
htsp.c
|
@ -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.
|
||||
*/
|
||||
|
|
Loading…
Add table
Reference in a new issue