commit 67f2d43

default  ·  2023-02-07 08:25:01 +0000 UTC
parent 392c514
New utility function mkdirx().
5 files changed,  +28, -17
M data.c
M snac.c
M snac.h
M data.c
+2, -2
 1@@ -88,7 +88,7 @@ int srv_open(char *basedir, int auto_upgrade)
 2 
 3     /* create the queue/ subdir, just in case */
 4     xs *qdir = xs_fmt("%s/queue", srv_basedir);
 5-    mkdir(qdir, DIR_PERM);
 6+    mkdirx(qdir);
 7 
 8 #ifdef __OpenBSD__
 9     char *v = xs_dict_get(srv_config, "disable_openbsd_security");
10@@ -434,7 +434,7 @@ d_char *_object_fn_by_md5(const char *md5)
11 {
12     xs *bfn = xs_fmt("%s/object/%c%c", srv_basedir, md5[0], md5[1]);
13 
14-    mkdir(bfn, DIR_PERM);
15+    mkdirx(bfn);
16 
17     return xs_fmt("%s/%s.json", bfn, md5);
18 }
M snac.c
+13, -1
 1@@ -30,6 +30,18 @@ int     srv_running = 0;
 2 int dbglevel = 0;
 3 
 4 
 5+int mkdirx(const char *pathname)
 6+/* creates a directory with special permissions */
 7+{
 8+    int ret;
 9+
10+    if ((ret = mkdir(pathname, DIR_PERM)) != -1)
11+        ret = chmod(pathname, DIR_PERM);
12+
13+    return ret;
14+}
15+
16+
17 int valid_status(int status)
18 /* is this HTTP status valid? */
19 {
20@@ -149,7 +161,7 @@ void srv_archive(const char *direction, xs_dict *req,
21     xs *dir  = xs_fmt("%s/archive/%s_%s", srv_basedir, date, direction);
22     FILE *f;
23 
24-    if (mkdir(dir, DIR_PERM) != -1) {
25+    if (mkdirx(dir) != -1) {
26         xs *meta_fn = xs_fmt("%s/_META", dir);
27 
28         if ((f = fopen(meta_fn, "w")) != NULL) {
M snac.h
+2, -0
1@@ -17,6 +17,8 @@ extern int dbglevel;
2 
3 #define L(s) (s)
4 
5+int mkdirx(const char *pathname);
6+
7 int valid_status(int status);
8 d_char *tid(int offset);
9 double ftime(void);
+5, -5
 1@@ -36,7 +36,7 @@ int snac_upgrade(xs_str **error)
 2         else
 3         if (f < 2.1) {
 4             xs *dir = xs_fmt("%s/object", srv_basedir);
 5-            mkdir(dir, DIR_PERM);
 6+            mkdirx(dir);
 7 
 8             nf = 2.1;
 9         }
10@@ -61,7 +61,7 @@ int snac_upgrade(xs_str **error)
11                         xs *dir = xs_fmt("%s/object/%c%c", srv_basedir, b[0], b[1]);
12                         xs *nfn = xs_fmt("%s/%s", dir, b);
13 
14-                        mkdir(dir, DIR_PERM);
15+                        mkdirx(dir);
16                         rename(fn, nfn);
17                     }
18 
19@@ -88,7 +88,7 @@ int snac_upgrade(xs_str **error)
20                     xs *dir = xs_fmt("%s/hidden", snac.basedir);
21 
22                     /* create the hidden directory */
23-                    mkdir(dir, DIR_PERM);
24+                    mkdirx(dir);
25 
26                     /* rename all muted files incorrectly named .json */
27                     xs *spec = xs_fmt("%s/muted/" "*.json", snac.basedir);
28@@ -117,10 +117,10 @@ int snac_upgrade(xs_str **error)
29 
30                 if (user_open(&snac, v)) {
31                     xs *dir = xs_fmt("%s/public", snac.basedir);
32-                    mkdir(dir, DIR_PERM);
33+                    mkdirx(dir);
34 
35                     dir = xs_replace_i(dir, "public", "private");
36-                    mkdir(dir, DIR_PERM);
37+                    mkdirx(dir);
38 
39                     user_free(&snac);
40                 }
+6, -9
 1@@ -143,22 +143,19 @@ int snac_init(const char *basedir)
 2         }
 3     }
 4 
 5-    if (mkdir(srv_basedir, DIR_PERM) == -1) {
 6+    if (mkdirx(srv_basedir) == -1) {
 7         printf("ERROR: cannot create directory '%s'\n", srv_basedir);
 8         return 1;
 9     }
10 
11-    /* force permissions (mkdir also uses 777) */
12-    chmod(srv_basedir, DIR_PERM);
13-
14     xs *udir = xs_fmt("%s/user", srv_basedir);
15-    mkdir(udir, DIR_PERM);
16+    mkdirx(udir);
17 
18     xs *odir = xs_fmt("%s/object", srv_basedir);
19-    mkdir(odir, DIR_PERM);
20+    mkdirx(odir);
21 
22     xs *qdir = xs_fmt("%s/queue", srv_basedir);
23-    mkdir(qdir, DIR_PERM);
24+    mkdirx(qdir);
25 
26     xs *gfn = xs_fmt("%s/greeting.html", srv_basedir);
27     if ((f = fopen(gfn, "w")) == NULL) {
28@@ -246,7 +243,7 @@ int adduser(const char *uid)
29 
30     xs *basedir = xs_fmt("%s/user/%s", srv_basedir, uid);
31 
32-    if (mkdir(basedir, DIR_PERM) == -1) {
33+    if (mkdirx(basedir) == -1) {
34         printf("ERROR: cannot create directory '%s'\n", basedir);
35         return 0;
36     }
37@@ -259,7 +256,7 @@ int adduser(const char *uid)
38 
39     for (n = 0; dirs[n]; n++) {
40         xs *d = xs_fmt("%s/%s", basedir, dirs[n]);
41-        mkdir(d, DIR_PERM);
42+        mkdirx(d);
43     }
44 
45     xs *scssfn = xs_fmt("%s/style.css", srv_basedir);