home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / security / passwd+ / sig.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-03-12  |  1.1 KB  |  83 lines

  1. /*
  2.  * signal handling
  3.  */
  4. #include "passwd.h"
  5. #include <signal.h>
  6.  
  7. /*
  8.  * signal handling routines
  9.  */
  10. void (*trap[NSIG])();        /* values returned by signal() */
  11.  
  12. /*
  13.  * grab initial values of all signals
  14.  */
  15. initsig()
  16. {
  17.     register int i;        /* counter in a for loop */
  18.  
  19.     for(i = 0; i < NSIG; i++)
  20.         trap[i] =  signal(i, SIG_DFL);
  21. }
  22.  
  23. /*
  24.  * disable ALL signal trapping
  25.  */
  26. sigoff()
  27. {
  28.     register int i;        /* counter in a for loop */
  29.  
  30.     for(i = 0; i < NSIG; i++)
  31.         (void) signal(i, SIG_IGN);
  32. }
  33.  
  34. /*
  35.  * restore to the initial setting all signals
  36.  */
  37. sigon()
  38. {
  39.     register int i;        /* counter in a for loop */
  40.  
  41.     for(i = 0; i < NSIG; i++)
  42.         (void) signal(i, trap[i]);
  43.  
  44. }
  45.  
  46. #ifdef ALLOWCORE
  47.  
  48. /*
  49.  * if you are allowing core dumps, this subroutine
  50.  * (designed to disable core dumping) is a no-op
  51.  */
  52. nocore()
  53. {
  54. }
  55.  
  56. #else
  57.  
  58. /*
  59.  * the trapper
  60.  */
  61. trapsig(n)
  62. int n;
  63. {
  64.     char sigmsg[BUFSIZ];
  65.  
  66.     SPRINTF(sigmsg, "Caught signal #%d -- no change.", n);
  67.     pwexit(sigmsg);
  68. }
  69.  
  70. /*
  71.  * trap signals causing core dumps
  72.  * and terminate gracefully
  73.  */
  74. nocore()
  75. {
  76.     register int i;        /* counter in a for loop */
  77.  
  78.     for(i = 0; i < NSIG; i++)
  79.         (void) signal(i, trapsig);
  80. }
  81.  
  82. #endif
  83.