home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3313 < prev    next >
Internet Message Format  |  1991-05-09  |  2KB

  1. From: urban@cbnewsl.att.com (john.urban)
  2. Newsgroups: alt.security,alt.sources,comp.unix.internals
  3. Subject: Re: BSD tty security - an example
  4. Message-ID: <1991May9.182941.16988@cbnewsl.att.com>
  5. Date: 9 May 91 18:29:41 GMT
  6.  
  7. In article <15678@life.ai.mit.edu> fidelio@geech.gnu.ai.mit.edu (Rob J. Nauta) writes:
  8. >Here's a small program I wrote a while back. It speaks for itself,
  9. >compile it, run it in the background (with &) and sit back.
  10. >This program is an official release of the TimeWasters from HOLLAND !
  11. >
  12. >---
  13. >        close(0);               /* close stdin */
  14. >#ifdef ULTRIX
  15. >    if(setpgrp(0,100)==-1)
  16. >        perror("setpgrp:");     /* Hopefully this works */
  17. >#else
  18. >    if(setsid()==-1)
  19. >        perror("setsid:"); /* Disconnect from our controlling TTY and
  20. >                                   start a new session as sessionleader */
  21. >#endif
  22. >        f=fopen(term,"r");      /* Open tty as a stream, this guarantees
  23. >                                           getting file descriptor 0 */
  24. >        if (f==NULL)
  25. >        {       printf("Error opening %s with fopen()\n",term);
  26. >                exit(2);
  27. >        }
  28. >    if (DEBUG) system("ps -xu>>/dev/null &");
  29. >        fclose(f);              /* Close the TTY again */
  30. >        f=fopen("/dev/tty","r");        /* We can now use /dev/tty instead */
  31. >        if (f==NULL)
  32. >        {       printf("Error opening /dev/tty with fopen()\n",term);
  33. >                exit(2);
  34. >        }
  35.  
  36. This program does not exhibit the problem on AT&T UNIX System V/386 Release 4.0
  37. Version 2.[01]. The fopen of "/dev/tty" fails because the setsid() passed
  38. successfully.
  39.  
  40. In this small program:
  41.     # cat T.c
  42.     main()
  43.     {
  44.         setsid();
  45.         fopen("/dev/tty", "r");
  46.     }
  47.     # make T
  48.     cc -O T.c -o T
  49.     # truss ./T
  50.  
  51.     You'll see the fopen fails w/ ENXIO.  If the setsid() is removed, then the
  52. fopen passes fine.
  53.  
  54.  
  55. Sincerely,
  56.  
  57. John Ben Urban
  58.