admin is broken
This commit is contained in:
parent
82dbc4a7b9
commit
4d893fb3d9
@ -2,12 +2,13 @@
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char * username;
|
||||
char * password;
|
||||
char * channel;
|
||||
char * server;
|
||||
char * admin;
|
||||
int port;
|
||||
size_t admin_count;
|
||||
char * username;
|
||||
char * password;
|
||||
char * channel;
|
||||
char * server;
|
||||
char ** admins;
|
||||
int port;
|
||||
} creds_t;
|
||||
|
||||
extern creds_t creds;
|
||||
|
10
src/main.c
10
src/main.c
@ -81,17 +81,17 @@ main (int argc,
|
||||
if (strcmp(arg, "db") == 0)
|
||||
{ db = argv[1]; }
|
||||
else if (strcmp(arg, "server") == 0)
|
||||
{ FREE(creds.server); creds.server = strdup(argv[1]); }
|
||||
{ free(creds.server); creds.server = strdup(argv[1]); }
|
||||
else if (strcmp(arg, "port") == 0)
|
||||
{ creds.port = atoi(argv[1]); }
|
||||
else if (strcmp(arg, "channel") == 0)
|
||||
{ FREE(creds.channel); creds.channel = strdup(argv[1]); }
|
||||
{ free(creds.channel); creds.channel = strdup(argv[1]); }
|
||||
else if (strcmp(arg, "username") == 0)
|
||||
{ FREE(creds.username); creds.username = strdup(argv[1]); }
|
||||
{ free(creds.username); creds.username = strdup(argv[1]); }
|
||||
else if (strcmp(arg, "password") == 0)
|
||||
{ FREE(creds.password); creds.password = strdup(argv[1]); }
|
||||
{ free(creds.password); creds.password = strdup(argv[1]); }
|
||||
else if (strcmp(arg, "admin") == 0)
|
||||
{ FREE(creds.admin); creds.admin = strdup(argv[1]); }
|
||||
{ free(creds.admins); parse_admins(argv[1]); } /* argv isn't constant :> */
|
||||
else if (strcmp(arg, "auth") == 0)
|
||||
{
|
||||
authfile = argv[1];
|
||||
|
23
src/parse.c
23
src/parse.c
@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user