userdb-vpopmail.c revision 1b1595b23dea4343e8f9b65e390b7ecd03792b1d
5a580c3a38ced62d4bcc95b8ac7c4f2935b5d294Timo Sirainen/* Copyright (C) 2002-2003 Timo Sirainen */
2201e2cc1b3f744dac61c2bf8095bcb6b5719540Timo Sirainen/* Thanks to Courier-IMAP for showing how the vpopmail API should be used */
6967fa47dde9f2726bd86019a50627dacf2d7509Timo Sirainen#if defined(PASSDB_VPOPMAIL) || defined(USERDB_VPOPMAIL)
34830cefe1757de0ffca67acdc529d5bc8b06b66Timo Sirainenstruct vqpasswd *vpopmail_lookup_vqp(const char *user,
fcca16701767c6b92227a9ee125de69d257882f6Timo Sirainen /* vpop_user must be zero-filled or parse_email() leaves an
2201e2cc1b3f744dac61c2bf8095bcb6b5719540Timo Sirainen extra character after the user name. we'll fill vpop_domain
d10cb4d7a80571af21f776c65604442bf09b1765Timo Sirainen as well just to be sure... */
fcca16701767c6b92227a9ee125de69d257882f6Timo Sirainen if (parse_email(t_strdup_noconst(user), vpop_user, vpop_domain,
a6f281d078ed03d555802c1a8e15fefce80132dcTimo Sirainenstatic void vpopmail_lookup(const char *user, userdb_callback_t *callback,
a6f281d078ed03d555802c1a8e15fefce80132dcTimo Sirainen char vpop_user[VPOPMAIL_LIMIT], vpop_domain[VPOPMAIL_LIMIT];
2201e2cc1b3f744dac61c2bf8095bcb6b5719540Timo Sirainen vpw = vpopmail_lookup_vqp(user, vpop_user, vpop_domain);
fcca16701767c6b92227a9ee125de69d257882f6Timo Sirainen /* we have to get uid/gid separately, because the gid field in
c1d4780bc0c9017e8e5d366b81e4fad31174c0adTimo Sirainen struct vqpasswd isn't really gid at all but just some flags... */
2201e2cc1b3f744dac61c2bf8095bcb6b5719540Timo Sirainen if (vget_assign(vpop_domain, NULL, 0, &uid, &gid) == NULL) {
252db51b6c0a605163326b3ea5d09e9936ca3b29Timo Sirainen i_info("vpopmail(%s): vget_assign(%s) failed",
597dba3488c648ffb375ee4a552bd52ac4346979Timo Sirainen if (vpw->pw_dir == NULL || vpw->pw_dir[0] == '\0') {
2201e2cc1b3f744dac61c2bf8095bcb6b5719540Timo Sirainen /* user's homedir doesn't exist yet, create it */
2201e2cc1b3f744dac61c2bf8095bcb6b5719540Timo Sirainen i_info("vpopmail(%s): pw_dir isn't set, creating",
2201e2cc1b3f744dac61c2bf8095bcb6b5719540Timo Sirainen if (make_user_dir(vpop_user, vpop_domain, uid, gid) == NULL) {
2201e2cc1b3f744dac61c2bf8095bcb6b5719540Timo Sirainen i_error("vpopmail(%s): make_user_dir(%s, %s) failed",
2201e2cc1b3f744dac61c2bf8095bcb6b5719540Timo Sirainen /* get the user again so pw_dir is visible */