home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume17 / contest-prog / part02 / chexec8.c next >
C/C++ Source or Header  |  1989-02-06  |  882b  |  51 lines

  1. #include <stdio.h>
  2. /*#include <fcntl.h>*/
  3. #include <signal.h>
  4. /*#include <sys/wait.h>*/
  5. int k;
  6. main(argc,argv)
  7. char **argv;
  8. {
  9.     int childstatus(),oops();
  10.     setuid(getuid());
  11.     k=fork();
  12.     if(k){
  13.         signal(SIGALRM,oops);
  14. #ifndef SIGCHLD
  15. #define SIGCHLD SIGCLD
  16. #endif
  17. /*CHLD=20 for dynix, CLD=18 for SysV2*/
  18. /* anyway what we want is to catch "death of child" signal*/
  19.         signal(SIGCHLD,childstatus);
  20.         alarm(10);
  21.         wait(0);}
  22.     else
  23.         execl(argv[1],"dumbo",0);
  24. }
  25. childstatus(sig,code,x)
  26. {
  27.     int i,j,m;
  28.  
  29.     fprintf(stderr,"sig=%d,code=%d, k=%d\n",sig,code,k);
  30.  
  31.     for(i=0;i<200;i++){
  32.         j=k+i;
  33.         j= j % 32768;
  34.         if(j>1){
  35.             m=kill(j,9);
  36.             if(m>=0)fprintf(stderr,"killed %d ",j);
  37.             }
  38.         }
  39.  
  40.     exit(0);
  41. }
  42. oops(sig,code,x)
  43. {
  44.     fprintf(stderr,"sig=%d,code=%d\n",sig,code);
  45.     fprintf(stderr,"there may be a daemon attack underway\n");
  46.     fprintf(stderr,"kill %d\n",k);
  47.     childstatus(sig,code,x);
  48.     exit(1);
  49. }
  50.  
  51.