cyrus-imapd/cyrus-deliver-wrapper.c

35 lines
838 B
C
Raw Normal View History

/*
* Wrapper for cyrus 'deliver' to allow anyone to run it -
* I hope this is secure! Should be setgid mail.
*/
#include <stdio.h>
#include <unistd.h>
#include <pwd.h>
#include <sys/types.h>
#include <sysexits.h>
#ifndef LIBEXECDIR
#define LIBEXECDIR "/usr/lib/cyrus-imapd"
#endif
int main(int argc, char *argv[])
{
char *const envp[] = { NULL };
struct passwd *ent = getpwuid(getuid());
const char *uname = (ent && ent->pw_name && ent->pw_name[0])
? ent->pw_name : "anonymous";
if (argc != 2) {
fprintf(stderr, "Usage: %s mailbox\n", argv[0]);
return EX_USAGE;
}
execle(LIBEXECDIR"/deliver", "deliver", "-e",
"-a", uname, "-m", argv[1],
NULL, envp);
perror("exec "LIBEXECDIR"/deliver");
return EX_OSERR;
}