Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!linus!decvax!harpo!seismo!hao!hplabs!sri-unix!dpk@brl-vgr
From: dpk@brl-vgr@sri-unix.UUCP
Newsgroups: net.unix-wizards
Subject: Re: enhanced cron.c, anyone?
Message-ID: <3351@sri-arpa.UUCP>
Date: Fri, 22-Jul-83 12:42:33 EDT
Article-I.D.: sri-arpa.3351
Posted: Fri Jul 22 12:42:33 1983
Date-Received: Sun, 24-Jul-83 02:35:24 EDT
Lines: 77
From: Doug Kingston
On our pdp-11's we modified cron to have a username field prior
to the command. In the interest of compatability we did not do this on
the Vaxes. Instead, we wrote a program called "alias" which is used
like nohup or nice (e.g. "alias user programs args ...") which if run
by the superuser (like from crontab) will run the given program as the
specified user. All you need to is add "alias user " to the fron of the
command string in the crontab entry.
Cheers,
-Doug-
PS. The following is alias.c. Enjoy!
/*
* A L I A S . C
*
* To compile: cc alias.c -O -o alias
*
* This program allows the superuser to run a program with
* arbitrary arguments with the uid/gid of any account on
* the system. If no program is specified, /bin/sh is
* assumed.
*
* % alias [[]]
*
* R E V I S I O N H I S T O R Y
*
* 05/20/78 RNJ Any program may be run, not just shell.
* New /etc/passwd lookup function.
*
* 10/25/81 DPK Converted to integer UIDs and GIDs & LIB7.
*
* 12/23/81 RSM Fixed to not "blow away" V7 environment.
* Default case now sets argv[0] to "-Alias(account)"
*/
#include
#include
char namebuf[30]; /* Argument 0 to new shell */
main(argc, argv)
char **argv;
{
register char *program; /* name of program to be exec ed */
register struct passwd *pw;
if( argc <2 ) {
printf("Usage: %s account [ []]\n", argv[0]);
exit(1);
}
if ((pw = getpwnam(argv[1])) == 0) {
printf("%s: account not found\n", argv[1]);
exit(2);
}
if (setgid( pw->pw_gid ) < 0)
perror ("setgid");
if (setuid( pw->pw_uid ) < 0)
perror ("setuid");
if( argc <= 2 ) {
program = "/bin/sh";
printf("UID = %d; GID = %d\n", pw->pw_uid, pw->pw_gid);
sprintf(namebuf, "-Alias(%s)", argv[1]);
execl(program, namebuf, 0);
} else {
program = argv[2];
argv[argc] = 0;
execv(program, &argv[2]);
}
perror(program);
exit(3);
}