commit 7787a2d

default  ·  2022-12-04 20:14:18 +0000 UTC
parent 6714084
New function new_password().
4 files changed,  +26, -18
M data.c
M snac.c
M snac.h
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);
+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);