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