summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c4
-rw-r--r--snac.c14
-rw-r--r--snac.h2
-rw-r--r--upgrade.c10
-rw-r--r--utils.c15
5 files changed, 28 insertions, 17 deletions
diff --git a/data.c b/data.c
index 7b57003..3827422 100644
--- a/data.c
+++ b/data.c
@@ -88,7 +88,7 @@ int srv_open(char *basedir, int auto_upgrade)
/* create the queue/ subdir, just in case */
xs *qdir = xs_fmt("%s/queue", srv_basedir);
- mkdir(qdir, DIR_PERM);
+ mkdirx(qdir);
#ifdef __OpenBSD__
char *v = xs_dict_get(srv_config, "disable_openbsd_security");
@@ -434,7 +434,7 @@ d_char *_object_fn_by_md5(const char *md5)
{
xs *bfn = xs_fmt("%s/object/%c%c", srv_basedir, md5[0], md5[1]);
- mkdir(bfn, DIR_PERM);
+ mkdirx(bfn);
return xs_fmt("%s/%s.json", bfn, md5);
}
diff --git a/snac.c b/snac.c
index 3cf146a..3fa4b94 100644
--- a/snac.c
+++ b/snac.c
@@ -30,6 +30,18 @@ int srv_running = 0;
int dbglevel = 0;
+int mkdirx(const char *pathname)
+/* creates a directory with special permissions */
+{
+ int ret;
+
+ if ((ret = mkdir(pathname, DIR_PERM)) != -1)
+ ret = chmod(pathname, DIR_PERM);
+
+ return ret;
+}
+
+
int valid_status(int status)
/* is this HTTP status valid? */
{
@@ -149,7 +161,7 @@ void srv_archive(const char *direction, xs_dict *req,
xs *dir = xs_fmt("%s/archive/%s_%s", srv_basedir, date, direction);
FILE *f;
- if (mkdir(dir, DIR_PERM) != -1) {
+ if (mkdirx(dir) != -1) {
xs *meta_fn = xs_fmt("%s/_META", dir);
if ((f = fopen(meta_fn, "w")) != NULL) {
diff --git a/snac.h b/snac.h
index ab8bf3a..866986c 100644
--- a/snac.h
+++ b/snac.h
@@ -17,6 +17,8 @@ extern int dbglevel;
#define L(s) (s)
+int mkdirx(const char *pathname);
+
int valid_status(int status);
d_char *tid(int offset);
double ftime(void);
diff --git a/upgrade.c b/upgrade.c
index 639dcda..a9d231c 100644
--- a/upgrade.c
+++ b/upgrade.c
@@ -36,7 +36,7 @@ int snac_upgrade(xs_str **error)
else
if (f < 2.1) {
xs *dir = xs_fmt("%s/object", srv_basedir);
- mkdir(dir, DIR_PERM);
+ mkdirx(dir);
nf = 2.1;
}
@@ -61,7 +61,7 @@ int snac_upgrade(xs_str **error)
xs *dir = xs_fmt("%s/object/%c%c", srv_basedir, b[0], b[1]);
xs *nfn = xs_fmt("%s/%s", dir, b);
- mkdir(dir, DIR_PERM);
+ mkdirx(dir);
rename(fn, nfn);
}
@@ -88,7 +88,7 @@ int snac_upgrade(xs_str **error)
xs *dir = xs_fmt("%s/hidden", snac.basedir);
/* create the hidden directory */
- mkdir(dir, DIR_PERM);
+ mkdirx(dir);
/* rename all muted files incorrectly named .json */
xs *spec = xs_fmt("%s/muted/" "*.json", snac.basedir);
@@ -117,10 +117,10 @@ int snac_upgrade(xs_str **error)
if (user_open(&snac, v)) {
xs *dir = xs_fmt("%s/public", snac.basedir);
- mkdir(dir, DIR_PERM);
+ mkdirx(dir);
dir = xs_replace_i(dir, "public", "private");
- mkdir(dir, DIR_PERM);
+ mkdirx(dir);
user_free(&snac);
}
diff --git a/utils.c b/utils.c
index d64cb64..384fde9 100644
--- a/utils.c
+++ b/utils.c
@@ -143,22 +143,19 @@ int snac_init(const char *basedir)
}
}
- if (mkdir(srv_basedir, DIR_PERM) == -1) {
+ if (mkdirx(srv_basedir) == -1) {
printf("ERROR: cannot create directory '%s'\n", srv_basedir);
return 1;
}
- /* force permissions (mkdir also uses 777) */
- chmod(srv_basedir, DIR_PERM);
-
xs *udir = xs_fmt("%s/user", srv_basedir);
- mkdir(udir, DIR_PERM);
+ mkdirx(udir);
xs *odir = xs_fmt("%s/object", srv_basedir);
- mkdir(odir, DIR_PERM);
+ mkdirx(odir);
xs *qdir = xs_fmt("%s/queue", srv_basedir);
- mkdir(qdir, DIR_PERM);
+ mkdirx(qdir);
xs *gfn = xs_fmt("%s/greeting.html", srv_basedir);
if ((f = fopen(gfn, "w")) == NULL) {
@@ -246,7 +243,7 @@ int adduser(const char *uid)
xs *basedir = xs_fmt("%s/user/%s", srv_basedir, uid);
- if (mkdir(basedir, DIR_PERM) == -1) {
+ if (mkdirx(basedir) == -1) {
printf("ERROR: cannot create directory '%s'\n", basedir);
return 0;
}
@@ -259,7 +256,7 @@ int adduser(const char *uid)
for (n = 0; dirs[n]; n++) {
xs *d = xs_fmt("%s/%s", basedir, dirs[n]);
- mkdir(d, DIR_PERM);
+ mkdirx(d);
}
xs *scssfn = xs_fmt("%s/style.css", srv_basedir);