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
+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 }