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

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. extern    char    **environ;
  5. extern    char    *newenvp[];
  6. extern    int    newenvc;
  7. extern    int    maxenv;
  8.  
  9. char    *strdup ();
  10. void    free ();
  11.  
  12. static    char    *forbid[] = {
  13.     "HOME",
  14.     "IFS",
  15.     "PATH",
  16.     "SHELL",
  17.     (char *) 0
  18. };
  19.  
  20. void    addenv (entry)
  21. char    *entry;
  22. {
  23.     char    *cp;
  24.     int    i;
  25.     int    len;
  26.  
  27.     if (cp = strchr (entry, '='))
  28.         len = cp - entry;
  29.     else
  30.         len = strlen (entry);
  31.  
  32.     for (i = 0;i < newenvc;i++)
  33.         if (strncmp (entry, newenvp[i], len) == 0 &&
  34.             (newenvp[i][len] == '=' || newenvp[i][len] == '\0'))
  35.             break;
  36.  
  37.     if (i == maxenv) {
  38.         puts ("Environment overflow");
  39.         return;
  40.     }
  41.     if (i == newenvc) {
  42.         newenvp[newenvc++] = strdup (entry);
  43.     } else {
  44.         free (newenvp[i]);
  45.         newenvp[i] = strdup (entry);
  46.     }
  47. }
  48.  
  49. void    setenv (argc, argv)
  50. int    argc;
  51. char    **argv;
  52. {
  53.     int    i;
  54.     int    n;
  55.     char    variable[BUFSIZ];
  56.     char    *cp;
  57.  
  58.     for (i = 0;i < argc;i++) {
  59.         if ((n = strlen (argv[i])) >= BUFSIZ)
  60.             continue;    /* ignore long entries */
  61.  
  62.         if (! (cp = strchr (argv[i], '='))) {
  63.             (void) strcpy (variable, argv[i]);
  64.         } else {
  65.             (void) strncpy (variable, argv[i], cp - argv[i]);
  66.             variable[cp - argv[i]] = '\0';
  67.         }
  68.         for (n = 0;forbid[n] != (char *) 0;n++)
  69.             if (strcmp (variable, forbid[n]) == 0)
  70.                 break;
  71.  
  72.         if (forbid[n] != (char *) 0) {
  73.             printf ("You may not change $%s\n", forbid[n]);
  74.             continue;
  75.         }
  76.         addenv (argv[i]);
  77.     }
  78. }
  79.