basicauth: use sblist

master
rofl0r 2020-09-16 01:54:05 +01:00
parent 487f2aba47
commit a5381223df
4 changed files with 24 additions and 19 deletions

View File

@ -48,10 +48,10 @@ ssize_t basicauth_string(const char *user, const char *pass,
/* /*
* Add entry to the basicauth list * Add entry to the basicauth list
*/ */
void basicauth_add (vector_t authlist, void basicauth_add (sblist *authlist,
const char *user, const char *pass) const char *user, const char *pass)
{ {
char b[BASE64ENC_BYTES((256+2)-1) + 1]; char b[BASE64ENC_BYTES((256+2)-1) + 1], *s;
ssize_t ret; ssize_t ret;
ret = basicauth_string(user, pass, b, sizeof b); ret = basicauth_string(user, pass, b, sizeof b);
@ -65,7 +65,8 @@ void basicauth_add (vector_t authlist,
return; return;
} }
if (vector_append(authlist, b, ret + 1) == -ENOMEM) { if (!(s = safestrdup(b)) || !sblist_add(authlist, &s)) {
safefree(s);
log_message (LOG_ERR, log_message (LOG_ERR,
"Unable to allocate memory in basicauth_add()"); "Unable to allocate memory in basicauth_add()");
return; return;
@ -80,18 +81,16 @@ void basicauth_add (vector_t authlist,
* is in the basicauth list. * is in the basicauth list.
* return 1 on success, 0 on failure. * return 1 on success, 0 on failure.
*/ */
int basicauth_check (vector_t authlist, const char *authstring) int basicauth_check (sblist *authlist, const char *authstring)
{ {
ssize_t vl, i; size_t i;
size_t el; char** entry;
const char* entry;
vl = vector_length (authlist); if (!authlist) return 0;
if (vl == -EINVAL) return 0;
for (i = 0; i < vl; i++) { for (i = 0; i < sblist_getsize(authlist); i++) {
entry = vector_getentry (authlist, i, &el); entry = sblist_get (authlist, i);
if (strcmp (authstring, entry) == 0) if (entry && strcmp (authstring, *entry) == 0)
return 1; return 1;
} }
return 0; return 0;

View File

@ -22,14 +22,14 @@
#define TINYPROXY_BASICAUTH_H #define TINYPROXY_BASICAUTH_H
#include <stddef.h> #include <stddef.h>
#include "vector.h" #include "sblist.h"
extern ssize_t basicauth_string(const char *user, const char *pass, extern ssize_t basicauth_string(const char *user, const char *pass,
char *buf, size_t bufsize); char *buf, size_t bufsize);
extern void basicauth_add (vector_t authlist, extern void basicauth_add (sblist *authlist,
const char *user, const char *pass); const char *user, const char *pass);
extern int basicauth_check (vector_t authlist, const char *authstring); extern int basicauth_check (sblist *authlist, const char *authstring);
#endif #endif

View File

@ -289,7 +289,7 @@ free_added_headers (sblist* add_headers)
void free_config (struct config_s *conf) void free_config (struct config_s *conf)
{ {
char *k; char *k, **s;
htab_value *v; htab_value *v;
size_t it; size_t it;
safefree (conf->logf_name); safefree (conf->logf_name);
@ -297,7 +297,13 @@ void free_config (struct config_s *conf)
safefree (conf->user); safefree (conf->user);
safefree (conf->group); safefree (conf->group);
vector_delete(conf->listen_addrs); vector_delete(conf->listen_addrs);
vector_delete(conf->basicauth_list); if(conf->basicauth_list) {
for(it = 0; it < sblist_getsize(conf->basicauth_list); it++) {
s = sblist_get(conf->basicauth_list, it);
if(s) safefree(*s);
}
sblist_free(conf->basicauth_list);
}
#ifdef FILTER_ENABLE #ifdef FILTER_ENABLE
safefree (conf->filter); safefree (conf->filter);
#endif /* FILTER_ENABLE */ #endif /* FILTER_ENABLE */
@ -915,7 +921,7 @@ static HANDLE_FUNC (handle_basicauth)
return -1; return -1;
} }
if (!conf->basicauth_list) { if (!conf->basicauth_list) {
conf->basicauth_list = vector_create (); conf->basicauth_list = sblist_new (sizeof(char*), 16);
} }
basicauth_add (conf->basicauth_list, user, pass); basicauth_add (conf->basicauth_list, user, pass);

View File

@ -38,7 +38,7 @@ typedef struct {
* Hold all the configuration time information. * Hold all the configuration time information.
*/ */
struct config_s { struct config_s {
vector_t basicauth_list; sblist *basicauth_list;
char *logf_name; char *logf_name;
unsigned int syslog; /* boolean */ unsigned int syslog; /* boolean */
unsigned int port; unsigned int port;