commit 7787a2d
default
·
2022-12-04 20:14:18 +0000 UTC
parent 6714084
New function new_password().
M
data.c
+1,
-1
1@@ -120,7 +120,7 @@ void user_free(snac *snac)
2 }
3
4
5-int user_open(snac *snac, char *uid)
6+int user_open(snac *snac, const char *uid)
7 /* opens a user */
8 {
9 int ret = 0;
M
snac.c
+3,
-3
1@@ -57,7 +57,7 @@ double ftime(void)
2 }
3
4
5-int validate_uid(char *uid)
6+int validate_uid(const char *uid)
7 /* returns if uid is a valid identifier */
8 {
9 while (*uid) {
10@@ -103,7 +103,7 @@ void snac_debug(snac *snac, int level, d_char *str)
11 }
12
13
14-d_char *hash_password(char *uid, char *passwd, char *nonce)
15+d_char *hash_password(const char *uid, const char *passwd, const char *nonce)
16 /* hashes a password */
17 {
18 xs *d_nonce = NULL;
19@@ -120,7 +120,7 @@ d_char *hash_password(char *uid, char *passwd, char *nonce)
20 }
21
22
23-int check_password(char *uid, char *passwd, char *hash)
24+int check_password(const char *uid, const char *passwd, const char *hash)
25 /* checks a password */
26 {
27 int ret = 0;
M
snac.h
+5,
-5
1@@ -36,17 +36,17 @@ typedef struct _snac {
2 d_char *md5; /* actor url md5 */
3 } snac;
4
5-int user_open(snac *snac, char *uid);
6+int user_open(snac *snac, const char *uid);
7 void user_free(snac *snac);
8 d_char *user_list(void);
9
10 void snac_debug(snac *snac, int level, d_char *str);
11 #define snac_log(snac, str) snac_debug(snac, 0, str)
12
13-int validate_uid(char *uid);
14+int validate_uid(const char *uid);
15
16-d_char *hash_password(char *uid, char *passwd, char *nonce);
17-int check_password(char *uid, char *passwd, char *hash);
18+d_char *hash_password(const char *uid, const char *passwd, const char *nonce);
19+int check_password(const char *uid, const char *passwd, const char *hash);
20
21 void srv_archive(char *direction, char *req, char *payload, int p_size,
22 int status, char *headers, char *body, int b_size);
23@@ -173,4 +173,4 @@ int html_post_handler(d_char *req, char *q_path, d_char *payload, int p_size,
24 char **body, int *b_size, char **ctype);
25
26 int initdb(const char *_basedir);
27-int adduser(char *uid);
28+int adduser(const char *uid);
M
utils.c
+17,
-9
1@@ -187,13 +187,27 @@ int initdb(const char *basedir)
2 }
3
4
5-int adduser(char *uid)
6+void new_password(const char *uid, d_char **clear_pwd, d_char **hashed_pwd)
7+/* creates a random password */
8+{
9+ int rndbuf[3];
10+
11+ srandom(time(NULL) ^ getpid());
12+ rndbuf[0] = random() & 0xffffffff;
13+ rndbuf[1] = random() & 0xffffffff;
14+ rndbuf[2] = random() & 0xffffffff;
15+
16+ *clear_pwd = xs_base64_enc((char *)rndbuf, sizeof(rndbuf));
17+ *hashed_pwd = hash_password(uid, *clear_pwd, NULL);
18+}
19+
20+
21+int adduser(const char *uid)
22 /* creates a new user */
23 {
24 snac snac;
25 xs *config = xs_dict_new();
26 xs *date = xs_str_utctime(0, "%Y-%m-%dT%H:%M:%SZ");
27- int rndbuf[3];
28 xs *pwd = NULL;
29 xs *pwd_f = NULL;
30 xs *key = NULL;
31@@ -214,13 +228,7 @@ int adduser(char *uid)
32 return 1;
33 }
34
35- srandom(time(NULL) ^ getpid());
36- rndbuf[0] = random() & 0xffffffff;
37- rndbuf[1] = random() & 0xffffffff;
38- rndbuf[2] = random() & 0xffffffff;
39-
40- pwd = xs_base64_enc((char *)rndbuf, sizeof(rndbuf));
41- pwd_f = hash_password(uid, pwd, NULL);
42+ new_password(uid, &pwd, &pwd_f);
43
44 config = xs_dict_append(config, "uid", uid);
45 config = xs_dict_append(config, "name", uid);