freebsd-dev/gnu/libexec/uucp/contrib/amiga.c

44 lines
1.4 KiB
C
Raw Normal View History

1994-05-07 18:14:43 +00:00
/* Wrapper code for Taylor UUCP on Amiga Unix (SVR4) for cron invoked UUCP */
/* processes. */
/* The problem: Cron is not a "licensed" process. any process that grabs a
1994-05-07 18:14:43 +00:00
controlling terminal needs to be licensed. Taylor UUCP needs controlling
terminals. Taylor UUCP does relinquish the controlling terminal before
fork(), so the "UUCP" license is appropriate.
1994-05-07 18:14:43 +00:00
This simple program does the "right" thing, but *MUST* be SETUID ROOT */
/* Written by: Lawrence E. Rosenman <ler@lerami.lerctr.org> */
#include <sys/sysm68k.h>
#include <sys/types.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <pwd.h>
int main(int argc,char *argv[],char *envp)
{
struct passwd *pw;
char name[256];
strcpy(name,"/usr/local/lib/uucp/uucico");
if (sysm68k(_m68k_LIMUSER,EUA_GET_LIC) == 0 ) { /* are we unlicensed? */
if (sysm68k(_m68k_LIMUSER,EUA_UUCP) == -1) { /* yes, get a "uucp" license */
fprintf(stderr,"sysm68k failed, errno=%d\n",errno); /* we didn't? crab it */
exit(errno);
}
}
pw = getpwnam("uucp"); /* get the Password Entry for uucp */
if (pw == NULL)
{
fprintf(stderr,"User ID \"uucp\" doesn't exist.\n");
exit(1);
}
setgid(pw->pw_gid); /* set gid to uucp */
setuid(pw->pw_uid); /* set uid to uucp */
1994-05-07 18:14:43 +00:00
argv[0]=name; /* have PS not lie... */
execv("/usr/local/lib/uucp/uucico",argv); /* go to the real program */
exit(errno);
}