home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume6
/
shadow-2.pt2
/
setup.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-03
|
2KB
|
100 lines
#include <sys/types.h>
#include <pwd.h>
#include <utmp.h>
#include <string.h>
#include "config.h"
extern char home[];
extern char prog[];
extern char name[];
extern char mail[];
#ifndef SU
extern struct utmp utent;
#endif
#ifdef QUOTAS
long strtol ();
long ulimit ();
#endif
void addenv ();
void setup (info)
struct passwd *info;
{
extern int errno;
char logname[30];
#ifndef SU
char tty[30];
#endif
char *cp;
int i;
long l;
#ifndef SU
(void) strcat (strcpy (tty, "/dev/"), utent.ut_line);
if (chown (tty, info->pw_uid, info->pw_gid) ||
chmod (tty, TTYPERM))
perror (tty);
#endif
if (chdir (info->pw_dir) == -1) {
(void) printf ("Unable to change directory to \"%s\"\n", info->pw_dir);
exit (errno);
}
#ifdef QUOTAS
for (cp = info->pw_gecos;cp != (char *) 0;cp = strchr (cp, ',')) {
if (*cp == ',')
cp++;
if (strncmp (cp, "pri=", 4) == 0) {
i = atoi (cp + 4);
if (i >= -20 && i <= 20)
(void) nice (i);
continue;
}
if (strncmp (cp, "ulimit=", 6) == 0) {
l = strtol (cp + 6, (char **) 0, 10);
(void) ulimit (2, l);
continue;
}
if (strncmp (cp, "umask=", 5) == 0) {
i = strtol (cp + 5, (char **) 0, 8) & 0777;
(void) umask (i);
continue;
}
}
#endif
if (setgid (info->pw_gid) == -1) {
puts ("Bad group id");
exit (errno);
}
if (setuid (info->pw_uid) == -1) {
puts ("Bad user id");
exit (errno);
}
(void) strcat (strcpy (home, "HOME="), info->pw_dir);
addenv (home);
if (info->pw_shell == (char *) 0)
info->pw_shell = "/bin/sh";
(void) strcat (strcpy (prog, "SHELL="), info->pw_shell);
addenv (prog);
if (info->pw_uid == 0)
addenv (SUPATH);
else
addenv (PATH);
#ifndef SU
(void) strcat (strcpy (logname, "LOGNAME="), name);
addenv (logname);
#endif
(void) strcat (strcat (strcpy (mail, "MAIL="), MAILDIR), name);
addenv (mail);
}