diff options
Diffstat (limited to 'src/qmail-vmailuser.c')
-rw-r--r-- | src/qmail-vmailuser.c | 106 |
1 files changed, 54 insertions, 52 deletions
diff --git a/src/qmail-vmailuser.c b/src/qmail-vmailuser.c index 27dc85d..82cb243 100644 --- a/src/qmail-vmailuser.c +++ b/src/qmail-vmailuser.c @@ -1,24 +1,25 @@ -#include <sys/types.h> #include <sys/stat.h> +#include <sys/types.h> #include <unistd.h> -#include "global.h" -#include "auto_qmail.h" -#include "stralloc.h" + +#include "byte.h" #include "case.h" -#include "control.h" #include "constmap.h" #include "direntry.h" #include "error.h" -#include "str.h" #include "fmt.h" #include "open.h" -#include "byte.h" #include "scan.h" #include "str.h" +#include "stralloc.h" + +#include "auto_qmail.h" +#include "control.h" +#include "global.h" -#define FDAUTH 3 +#define FDAUTH 3 #define RESPECT_CASE "-C" -#define BUFFER_SIZE 128 +#define BUFFER_SIZE 128 /** @file qmail-vmailuser.c @return 0: virtual user exists @@ -44,10 +45,10 @@ void pam_exit(int fail) _exit(fail); } -int main(int argc,char **argv) +int main(int argc, char **argv) { DIR *dir; - char *vdomuser; + char *vdomuser; char *domain = 0; int buflen = 0; int domlen = 0; @@ -56,29 +57,30 @@ int main(int argc,char **argv) char ch; char *homedir = "/home"; - if (argv[1]) - if (!case_diffs(argv[1],RESPECT_CASE)) { - flagrespect = 1; + if (argv[1]) + if (!case_diffs(argv[1], RESPECT_CASE)) { + flagrespect = 1; } else { homedir = argv[1]; dir = opendir(homedir); if (!dir) pam_exit(2); } - if (argv[2]) - if (!case_diffs(argv[2],RESPECT_CASE)) flagrespect = 1; + if (argv[2]) + if (!case_diffs(argv[2], RESPECT_CASE)) flagrespect = 1; if (chdir(auto_qmail) == -1) pam_exit(110); - - switch (control_readfile(&vdoms,"control/virtualdomains",0)) { + + switch (control_readfile(&vdoms, "control/virtualdomains", 0)) { case -1: pam_exit(110); - case 0: if (!constmap_init(&mapvdoms,"",0,1)) pam_exit(111); - case 1: if (!constmap_init(&mapvdoms,vdoms.s,vdoms.len,1)) pam_exit(111); + case 0: + if (!constmap_init(&mapvdoms, "", 0, 1)) pam_exit(111); + case 1: + if (!constmap_init(&mapvdoms, vdoms.s, vdoms.len, 1)) pam_exit(111); } - for (;;) { /* read input */ - do - r = read(FDAUTH,inputbuf + buflen,sizeof(inputbuf) - buflen); + for (;;) { /* read input */ + do r = read(FDAUTH, inputbuf + buflen, sizeof(inputbuf) - buflen); while ((r == -1) && (errno == EINTR)); if (r == -1) pam_exit(111); if (r == 0) break; @@ -87,62 +89,62 @@ int main(int argc,char **argv) } close(FDAUTH); - if ((r = byte_rchr(inputbuf,buflen,'@'))) /* @domain */ + if ((r = byte_rchr(inputbuf, buflen, '@'))) /* @domain */ if (r < buflen && inputbuf[r] == '@') { domain = inputbuf + r + 1; domlen = str_len(domain); if (!flagrespect) - case_lowerb(inputbuf,buflen); + case_lowerb(inputbuf, buflen); else - case_lowerb(domain,domlen); + case_lowerb(domain, domlen); } - vdomuser = constmap(&mapvdoms,domain,domlen); + vdomuser = constmap(&mapvdoms, domain, domlen); if (!vdomuser) pam_exit(1); - if (!stralloc_copys(&vuser,"")) pam_exit(111); /* user */ + if (!stralloc_copys(&vuser, "")) pam_exit(111); /* user */ for (i = 0; i < r; ++i) { ch = inputbuf[i]; if (ch == '.') ch = ':'; - if (!stralloc_append(&vuser,&ch)) pam_exit(111); + if (!stralloc_append(&vuser, &ch)) pam_exit(111); } - if (!stralloc_0(&vuser)) pam_exit(111); + if (!stralloc_0(&vuser)) pam_exit(111); - if (!stralloc_copys(&vdomdir,homedir)) pam_exit(111); /* vpopmail */ - if (!stralloc_cats(&vdomdir,"/")) pam_exit(111); - if (!stralloc_cats(&vdomdir,"vpopmail")) pam_exit(111); - if (!stralloc_copy(&vuserdir,&vdomdir)) pam_exit(111); - if (!stralloc_cats(&vuserdir,"/domains/")) pam_exit(111); - if (!stralloc_cats(&vuserdir,vdomuser)) pam_exit(111); - if (!stralloc_copy(&vdomdir,&vuserdir)) pam_exit(111); - if (!stralloc_0(&vdomdir)) pam_exit(111); + if (!stralloc_copys(&vdomdir, homedir)) pam_exit(111); /* vpopmail */ + if (!stralloc_cats(&vdomdir, "/")) pam_exit(111); + if (!stralloc_cats(&vdomdir, "vpopmail")) pam_exit(111); + if (!stralloc_copy(&vuserdir, &vdomdir)) pam_exit(111); + if (!stralloc_cats(&vuserdir, "/domains/")) pam_exit(111); + if (!stralloc_cats(&vuserdir, vdomuser)) pam_exit(111); + if (!stralloc_copy(&vdomdir, &vuserdir)) pam_exit(111); + if (!stralloc_0(&vdomdir)) pam_exit(111); dir = opendir(vdomdir.s); if (dir) { - if (!stralloc_cats(&vuserdir,"/")) pam_exit(111); - if (!stralloc_cat(&vuserdir,&vuser)) pam_exit(111); - if (!stralloc_0(&vuserdir)) pam_exit(111); + if (!stralloc_cats(&vuserdir, "/")) pam_exit(111); + if (!stralloc_cat(&vuserdir, &vuser)) pam_exit(111); + if (!stralloc_0(&vuserdir)) pam_exit(111); dir = opendir(vuserdir.s); if (dir) pam_exit(0); } - if (!stralloc_copys(&vdomdir,homedir)) pam_exit(111); /* vmailmgr */ - if (!stralloc_cats(&vdomdir,"/")) pam_exit(111); - if (!stralloc_copy(&vuserdir,&vdomdir)) pam_exit(111); - if (!stralloc_cats(&vuserdir,vdomuser)) pam_exit(111); - if (!stralloc_cats(&vuserdir,"/users")) pam_exit(111); - if (!stralloc_copy(&vdomdir,&vuserdir)) pam_exit(111); - if (!stralloc_0(&vdomdir)) pam_exit(111); + if (!stralloc_copys(&vdomdir, homedir)) pam_exit(111); /* vmailmgr */ + if (!stralloc_cats(&vdomdir, "/")) pam_exit(111); + if (!stralloc_copy(&vuserdir, &vdomdir)) pam_exit(111); + if (!stralloc_cats(&vuserdir, vdomuser)) pam_exit(111); + if (!stralloc_cats(&vuserdir, "/users")) pam_exit(111); + if (!stralloc_copy(&vdomdir, &vuserdir)) pam_exit(111); + if (!stralloc_0(&vdomdir)) pam_exit(111); dir = opendir(vdomdir.s); if (dir) { - if (!stralloc_cats(&vuserdir,"/")) pam_exit(111); - if (!stralloc_cat(&vuserdir,&vuser)) pam_exit(111); - if (!stralloc_0(&vuserdir)) pam_exit(111); + if (!stralloc_cats(&vuserdir, "/")) pam_exit(111); + if (!stralloc_cat(&vuserdir, &vuser)) pam_exit(111); + if (!stralloc_0(&vuserdir)) pam_exit(111); dir = opendir(vuserdir.s); if (dir) pam_exit(0); } - + pam_exit(1); } |