summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2023-10-22 09:18:25 +0200
committerGravatar default2023-10-22 09:18:25 +0200
commit92fe93362c266c155f236a2f49dc7dee3c5389cc (patch)
treef61254e1e63c8a272ad9eafb6bc1b4edd274e7b3
parentNew function deluser(), to delete a user. (diff)
downloadpenes-snac2-92fe93362c266c155f236a2f49dc7dee3c5389cc.tar.gz
penes-snac2-92fe93362c266c155f236a2f49dc7dee3c5389cc.tar.xz
penes-snac2-92fe93362c266c155f236a2f49dc7dee3c5389cc.zip
Also delete the user directory in deluser().
-rw-r--r--utils.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/utils.c b/utils.c
index 74058aa..f23655c 100644
--- a/utils.c
+++ b/utils.c
@@ -7,6 +7,7 @@
7#include "xs_time.h" 7#include "xs_time.h"
8#include "xs_openssl.h" 8#include "xs_openssl.h"
9#include "xs_random.h" 9#include "xs_random.h"
10#include "xs_glob.h"
10 11
11#include "snac.h" 12#include "snac.h"
12 13
@@ -339,6 +340,41 @@ int resetpwd(snac *snac)
339} 340}
340 341
341 342
343void rm_rf(const char *dir)
344/* does an rm -rf (yes, I'm also scared) */
345{
346 xs *d = xs_str_cat(xs_dup(dir), "/" "*");
347 xs *l = xs_glob(d, 0, 0);
348 xs_list *p = l;
349 xs_str *v;
350
351 if (dbglevel >= 1)
352 printf("Deleting directory %s\n", dir);
353
354 while (xs_list_iter(&p, &v)) {
355 struct stat st;
356
357 if (stat(v, &st) != -1) {
358 if (st.st_mode & S_IFDIR) {
359 rm_rf(v);
360 }
361 else {
362 if (dbglevel >= 1)
363 printf("Deleting file %s\n", v);
364
365 if (unlink(v) == -1)
366 printf("ERROR: cannot delete file %s\n", v);
367 }
368 }
369 else
370 printf("ERROR: stat() fail for %s\n", v);
371 }
372
373 if (rmdir(dir) == -1)
374 printf("ERROR: cannot delete directory %s\n", dir);
375}
376
377
342int deluser(snac *user) 378int deluser(snac *user)
343/* deletes a user */ 379/* deletes a user */
344{ 380{
@@ -361,5 +397,7 @@ int deluser(snac *user)
361 } 397 }
362 } 398 }
363 399
400 rm_rf(user->basedir);
401
364 return ret; 402 return ret;
365} 403}