home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume6 / shadow-2.pt2 / setup.c < prev    next >
C/C++ Source or Header  |  1989-02-03  |  2KB  |  100 lines

  1. #include <sys/types.h>
  2. #include <pwd.h>
  3. #include <utmp.h>
  4. #include <string.h>
  5. #include "config.h"
  6.  
  7. extern    char    home[];
  8. extern    char    prog[];
  9. extern    char    name[];
  10. extern    char    mail[];
  11.  
  12. #ifndef    SU
  13. extern    struct    utmp    utent;
  14. #endif
  15.  
  16. #ifdef    QUOTAS
  17. long    strtol ();
  18. long    ulimit ();
  19. #endif
  20.  
  21. void    addenv ();
  22.  
  23. void    setup (info)
  24. struct    passwd    *info;
  25. {
  26.     extern    int    errno;
  27.     char    logname[30];
  28. #ifndef    SU
  29.     char    tty[30];
  30. #endif
  31.     char    *cp;
  32.     int    i;
  33.     long    l;
  34.  
  35. #ifndef    SU
  36.     (void) strcat (strcpy (tty, "/dev/"), utent.ut_line);
  37.     if (chown (tty, info->pw_uid, info->pw_gid) ||
  38.                     chmod (tty, TTYPERM))
  39.         perror (tty);
  40. #endif
  41.     if (chdir (info->pw_dir) == -1) {
  42.         (void) printf ("Unable to change directory to \"%s\"\n", info->pw_dir);
  43.         exit (errno);
  44.     }
  45. #ifdef    QUOTAS
  46.     for (cp = info->pw_gecos;cp != (char *) 0;cp = strchr (cp, ',')) {
  47.         if (*cp == ',')
  48.             cp++;
  49.  
  50.         if (strncmp (cp, "pri=", 4) == 0) {
  51.             i = atoi (cp + 4);
  52.             if (i >= -20 && i <= 20)
  53.                 (void) nice (i);
  54.  
  55.             continue;
  56.         }
  57.         if (strncmp (cp, "ulimit=", 6) == 0) {
  58.             l = strtol (cp + 6, (char **) 0, 10);
  59.             (void) ulimit (2, l);
  60.  
  61.             continue;
  62.         }
  63.         if (strncmp (cp, "umask=", 5) == 0) {
  64.             i = strtol (cp + 5, (char **) 0, 8) & 0777;
  65.             (void) umask (i);
  66.  
  67.             continue;
  68.         }
  69.     }
  70. #endif
  71.     if (setgid (info->pw_gid) == -1) {
  72.         puts ("Bad group id");
  73.         exit (errno);
  74.     }
  75.     if (setuid (info->pw_uid) == -1) {
  76.         puts ("Bad user id");
  77.         exit (errno);
  78.     }
  79.     (void) strcat (strcpy (home, "HOME="), info->pw_dir);
  80.     addenv (home);
  81.  
  82.     if (info->pw_shell == (char *) 0)
  83.         info->pw_shell = "/bin/sh";
  84.  
  85.     (void) strcat (strcpy (prog, "SHELL="), info->pw_shell);
  86.     addenv (prog);
  87.  
  88.     if (info->pw_uid == 0)
  89.         addenv (SUPATH);
  90.     else
  91.         addenv (PATH);
  92.  
  93. #ifndef    SU
  94.     (void) strcat (strcpy (logname, "LOGNAME="), name);
  95.     addenv (logname);
  96. #endif
  97.     (void) strcat (strcat (strcpy (mail, "MAIL="), MAILDIR), name);
  98.     addenv (mail);
  99. }
  100.