|
|
@@ -59,7 +59,6 @@ size_t const cred_names_len[] = |
|
|
|
}; |
|
|
|
|
|
|
|
creds_t creds = {0}; |
|
|
|
char ** admins = NULL; |
|
|
|
|
|
|
|
DECL char * |
|
|
|
slurp(char const * fn) |
|
|
@@ -161,6 +160,7 @@ DECL int |
|
|
|
parse_pair(char const * buf, size_t len) |
|
|
|
{ |
|
|
|
size_t i, f, x; |
|
|
|
char * adm; |
|
|
|
/* fprintf(stderr, "ENT len:%ld buf:%sEOF\n", len, buf); */ |
|
|
|
for (i = 0; buf[i] && |
|
|
|
i < len; ++i) |
|
|
@@ -192,7 +192,7 @@ parse_pair(char const * buf, size_t len) |
|
|
|
case CHANNEL: creds.channel = strndup(buf,x); break; |
|
|
|
case SERVER: creds.server = strndup(buf,x); break; |
|
|
|
case PORT: creds.port = atoi(buf); break; |
|
|
|
case ADMINS: parse_admins(strndup(buf,x)); break; |
|
|
|
case ADMINS: adm = strndup(buf,x); parse_admins(adm); free(adm); break; |
|
|
|
} |
|
|
|
if (x + 2 < len) |
|
|
|
{ buf += x + 1; } |
|
|
@@ -207,6 +207,7 @@ parse_pair(char const * buf, size_t len) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
/* FIXME MAKE parse_admins constant! */ |
|
|
|
/* WARNING: admin_string WILL be changed */ |
|
|
|
DECL void |
|
|
|
parse_admins(char * admin_string) |
|
|
@@ -218,7 +219,7 @@ parse_admins(char * admin_string) |
|
|
|
size_t i = 0; |
|
|
|
char * token = NULL; |
|
|
|
|
|
|
|
admins = calloc(ADMIN_LIST_INIT_SIZE, sizeof(char *)); |
|
|
|
creds.admins = calloc(ADMIN_LIST_INIT_SIZE, sizeof(char *)); |
|
|
|
|
|
|
|
while ((token = strtok(admin_string, " "))) |
|
|
|
{ |
|
|
@@ -226,30 +227,30 @@ parse_admins(char * admin_string) |
|
|
|
{ |
|
|
|
/* double the space */ |
|
|
|
current_array_size *= 2; |
|
|
|
admins = realloc(admins, current_array_size); |
|
|
|
creds.admins = realloc(creds.admins, current_array_size); |
|
|
|
} |
|
|
|
|
|
|
|
admins[i - 1] = strdup(token); |
|
|
|
creds.admins[i - 1] = strdup(token); |
|
|
|
} |
|
|
|
|
|
|
|
/* set up array end marker for proper clean-up later */ |
|
|
|
if (i + 1 > current_array_size) |
|
|
|
{ |
|
|
|
admins = realloc(admins, current_array_size + 1); |
|
|
|
creds.admins = realloc(creds.admins, current_array_size + 1); |
|
|
|
} |
|
|
|
admins[i] = NULL; |
|
|
|
creds.admins[i] = NULL; |
|
|
|
} |
|
|
|
|
|
|
|
DECL int |
|
|
|
is_admin(char const * user) |
|
|
|
{ |
|
|
|
/* No Gods or Kings, Only Man */ |
|
|
|
if (admins == NULL) |
|
|
|
if (creds.admins == NULL) |
|
|
|
{ return 0; } |
|
|
|
|
|
|
|
for (size_t i = 0; admins[i]; ++i) |
|
|
|
for (size_t i = 0; creds.admins[i]; ++i) |
|
|
|
{ |
|
|
|
if (!strcmp(admins[i], user)) |
|
|
|
if (!strcmp(creds.admins[i], user)) |
|
|
|
{ return 1; } |
|
|
|
} |
|
|
|
|
|
|
@@ -269,5 +270,5 @@ creds_free_rest(void) |
|
|
|
/* FULL_FREE(creds.password); */ |
|
|
|
FULL_FREE(creds.channel); |
|
|
|
FULL_FREE(creds.server); |
|
|
|
FULL_FREE(creds.admin); |
|
|
|
FREE(creds.admins); |
|
|
|
} |