aboutsummaryrefslogtreecommitdiff
path: root/src/auth.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2015-12-07 17:48:32 -0500
committerFranklin Wei <git@fwei.tk>2015-12-07 17:48:32 -0500
commit0f3bd99c40594c46b5b4bb0603085ec9cc111e0e (patch)
tree0533aa2d245a8bc8aaa652c8c4c039c27504f0f9 /src/auth.c
parent8bc78787a99efdf4c64032d7fe55905ff995cd98 (diff)
downloadnetcosm-0f3bd99c40594c46b5b4bb0603085ec9cc111e0e.zip
netcosm-0f3bd99c40594c46b5b4bb0603085ec9cc111e0e.tar.gz
netcosm-0f3bd99c40594c46b5b4bb0603085ec9cc111e0e.tar.bz2
netcosm-0f3bd99c40594c46b5b4bb0603085ec9cc111e0e.tar.xz
child-parent communication
Diffstat (limited to 'src/auth.c')
-rw-r--r--src/auth.c49
1 files changed, 38 insertions, 11 deletions
diff --git a/src/auth.c b/src/auth.c
index b54d0a4..dcc89d8 100644
--- a/src/auth.c
+++ b/src/auth.c
@@ -123,7 +123,7 @@ static int remove_user_internal(const char *user, int *found, char **filename)
bool auth_remove(const char *user2)
{
char *user = strdup(user2);
- strtok(user, "\r\n");
+ remove_cruft(user);
if(valid_login_name(user))
{
int found = 0;
@@ -151,9 +151,9 @@ bool auth_remove(const char *user2)
bool add_change_user(const char *user2, const char *pass2, int level)
{
char *user = strdup(user2);
- strtok(user, "\r\n");
+ remove_cruft(user);
char *pass = strdup(pass2);
- strtok(pass, "\r\n");
+ remove_cruft(pass);
printf("Add user '%s'\n", user);
@@ -213,7 +213,7 @@ void first_run_setup(void)
printf("Admin account name: ");
fflush(stdout);
getline(&admin_name, &len, stdin);
- strtok(admin_name, "\r\n");
+ remove_cruft(admin_name);
} while(!valid_login_name(admin_name));
printf("Admin password (_DO_NOT_ USE A VALUABLE PASSWORD): ");
@@ -221,7 +221,7 @@ void first_run_setup(void)
char *admin_pass = NULL;
len = 0;
getline(&admin_pass, &len, stdin);
- strtok(admin_pass, "\r\n");
+ remove_cruft(admin_pass);
if(!add_change_user(admin_name, admin_pass, PRIV_ADMIN))
error("Unknown error");
@@ -238,8 +238,8 @@ struct authinfo_t auth_check(const char *name2, const char *pass2)
/* get our own copy to remove newlines */
char *name = strdup(name2);
char *pass = strdup(pass2);
- strtok(name, "\r\n");
- strtok(pass, "\r\n");
+ remove_cruft(name);
+ remove_cruft(pass);
/* find it in the user list */
@@ -255,6 +255,7 @@ struct authinfo_t auth_check(const char *name2, const char *pass2)
while(1)
{
char *line = NULL;
+ char *save;
size_t len = 0;
if(getline(&line, &len, f) < 0)
{
@@ -264,14 +265,14 @@ struct authinfo_t auth_check(const char *name2, const char *pass2)
free(pass);
goto bad;
}
- if(!strcmp(strtok(line, ":\r\n"), name))
+ if(!strcmp(strtok_r(line, ":\r\n", &save), name))
{
free(name);
- char *salt = strdup(strtok(NULL, ":\r\n"));
- char *hash = strdup(strtok(NULL, ":\r\n"));
+ char *salt = strdup(strtok_r(NULL, ":\r\n", &save));
+ char *hash = strdup(strtok_r(NULL, ":\r\n", &save));
- ret.authlevel = strtol(strtok(NULL, ":\r\n"), NULL, 10);
+ ret.authlevel = strtol(strtok_r(NULL, ":\r\n", &save), NULL, 10);
free(line);
@@ -314,3 +315,29 @@ bad:
printf("Failed authentication.\n");
return ret;
}
+
+void auth_list_users(void)
+{
+ FILE *f = fopen(USERFILE, "r");
+
+ flock(fileno(f), LOCK_SH);
+
+ while(1)
+ {
+ char *line = NULL;
+ char *save;
+ size_t len = 0;
+ if(getline(&line, &len, f) < 0)
+ {
+ free(line);
+ return;
+ }
+ char *user = strdup(strtok_r(line, ":\r\n", &save));
+ strtok_r(NULL, ":\r\n", &save);
+ strtok_r(NULL, ":\r\n", &save);
+ int priv = strtol(strtok_r(NULL, ":\r\n", &save), NULL, 0);
+ out("User %s priv %d\n", user, priv);
+ free(user);
+ free(line);
+ }
+}