#if HAVE_UNISTD_H
#include <unistd.h>
#endif
+#include <sys/types.h>
+#include <sys/wait.h>
#include "auth.h"
#include "courierauthdebug.h"
#include "userdb/userdb.h"
-
-static const char rcsid[]="$Id: preauthuserdbcommon.c,v 1.21 2006/10/28 19:22:52 mrsam Exp $";
-
-#define TOKEN_CMD "/etc/courier/get-token "
+#include "numlib/numlib.h"
int auth_userdb_pre_common(const char *userid, const char *service,
int needpass,
auth.maildir=udb->udb_mailbox;
auth.quota=udb->udb_quota;
- courier_authdebug_authinfo("DEBUG: authuserdb: ", &auth, 0, passwords);
- rc= (*callback)(&auth, arg);
- if (passwords) free(passwords);
-
/* Get tokens for AFS */
- { char uidstr[32] = "<null>";
- char *token_cmd;
- if (&udb->udb_uid)
- {
- snprintf(uidstr, sizeof(uidstr), "%ld", (long)udb->udb_uid);
- if ((token_cmd=malloc(sizeof(TOKEN_CMD)+strlen(uidstr))))
- {
- strcat(strcpy(token_cmd, TOKEN_CMD),uidstr);
- system(token_cmd);
- free(token_cmd);
- }
- }
+ {
+ if (auth.sysuserid)
+ {
+ pid_t pid = fork ();
+
+ if (pid == 0)
+ {
+ char uidstr[32] = "<null>";
+ snprintf(uidstr, sizeof(uidstr), "%ld", (long)*auth.sysuserid);
+
+ libmail_changeuidgid (*auth.sysuserid, auth.sysgroupid);
+ execl ("/etc/courier/get-token", "get-token", uidstr, NULL);
+ }
+ else
+ {
+ waitpid (pid, NULL, 0);
+ }
+ }
}
+ courier_authdebug_authinfo("DEBUG: authuserdb: ", &auth, 0, passwords);
+ rc= (*callback)(&auth, arg);
+ if (passwords) free(passwords);
userdb_frees(udb);
return (rc);
}