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