diff options
| author | 2023-10-22 09:18:25 +0200 | |
|---|---|---|
| committer | 2023-10-22 09:18:25 +0200 | |
| commit | 92fe93362c266c155f236a2f49dc7dee3c5389cc (patch) | |
| tree | f61254e1e63c8a272ad9eafb6bc1b4edd274e7b3 /utils.c | |
| parent | New function deluser(), to delete a user. (diff) | |
| download | snac2-92fe93362c266c155f236a2f49dc7dee3c5389cc.tar.gz snac2-92fe93362c266c155f236a2f49dc7dee3c5389cc.tar.xz snac2-92fe93362c266c155f236a2f49dc7dee3c5389cc.zip | |
Also delete the user directory in deluser().
Diffstat (limited to 'utils.c')
| -rw-r--r-- | utils.c | 38 |
1 files changed, 38 insertions, 0 deletions
| @@ -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 | ||
| 343 | void 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 | |||
| 342 | int deluser(snac *user) | 378 | int 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 | } |