commit 92fe933
default
·
2023-10-22 07:18:25 +0000 UTC
parent 0d78dee
Also delete the user directory in deluser().
1 files changed,
+38,
-0
M
utils.c
M
utils.c
+38,
-0
1@@ -7,6 +7,7 @@
2 #include "xs_time.h"
3 #include "xs_openssl.h"
4 #include "xs_random.h"
5+#include "xs_glob.h"
6
7 #include "snac.h"
8
9@@ -339,6 +340,41 @@ int resetpwd(snac *snac)
10 }
11
12
13+void rm_rf(const char *dir)
14+/* does an rm -rf (yes, I'm also scared) */
15+{
16+ xs *d = xs_str_cat(xs_dup(dir), "/" "*");
17+ xs *l = xs_glob(d, 0, 0);
18+ xs_list *p = l;
19+ xs_str *v;
20+
21+ if (dbglevel >= 1)
22+ printf("Deleting directory %s\n", dir);
23+
24+ while (xs_list_iter(&p, &v)) {
25+ struct stat st;
26+
27+ if (stat(v, &st) != -1) {
28+ if (st.st_mode & S_IFDIR) {
29+ rm_rf(v);
30+ }
31+ else {
32+ if (dbglevel >= 1)
33+ printf("Deleting file %s\n", v);
34+
35+ if (unlink(v) == -1)
36+ printf("ERROR: cannot delete file %s\n", v);
37+ }
38+ }
39+ else
40+ printf("ERROR: stat() fail for %s\n", v);
41+ }
42+
43+ if (rmdir(dir) == -1)
44+ printf("ERROR: cannot delete directory %s\n", dir);
45+}
46+
47+
48 int deluser(snac *user)
49 /* deletes a user */
50 {
51@@ -361,5 +397,7 @@ int deluser(snac *user)
52 }
53 }
54
55+ rm_rf(user->basedir);
56+
57 return ret;
58 }