keybase
[m6w6/m6w6.github.io] / _posts / 2008-11-18-vpopmail-and-people-reaching-their-maildir-quota.md
1 ---
2 title: Vpopmail and people reaching their maildir quota
3 author: m6w6
4 tags:
5 - SYS
6 ---
7
8 This tiny program lists all users of a domain with a maildir quota usage above
9 90%.
10
11 ```c
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <unistd.h>
15 #include <string.h>
16
17 #include <pwd.h>
18 #include <errno.h>
19
20 #include <vpopmail.h>
21 #include <vauth.h>
22
23 int main(int argc, char **argv) {
24 struct vqpasswd *user;
25 char dir[1024];
26 uid_t uid;
27 gid_t gid;
28 int offset_counter = -1, sort = 1, usage;
29
30 if (argc != 2) {
31 fprintf(stderr, "Usage: %s <domain>n", argv[0]);
32 return EXIT_FAILURE;
33 }
34 if (vget_assign(argv[1], NULL, 0, &uid, &gid) == NULL) {
35 fprintf(stderr, "domain '%s' does not existn", argv[1]);
36 return EXIT_FAILURE;
37 }
38 if (setgid(gid) || setuid(uid)) {
39 fprintf(stderr, "could not setuid/setgid to %d:%dn", uid, gid);
40 return EXIT_FAILURE;
41 }
42
43 while (NULL != (user = vauth_getall(argv[1], !++offset_counter, sort))) {
44 if (strcmp(user->pw_shell, "NOQUOTA")) {
45 snprintf(dir, sizeof(dir), "%s/Maildir", user->pw_dir);
46 usage = vmaildir_readquota(dir,
47 format_maildirquota(user->pw_shell));
48
49 if (usage >= 90) {
50 printf("%s %s %dn", user->pw_name, user->pw_shell, usage);
51 }
52 }
53 }
54
55 return EXIT_SUCCESS;
56 }
57 ```
58