[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/var/cache/se3_install/admind/ -> admind2.c (source)

   1  /*
   2  admind projet SE3
   3  Daemon d'administration Serveur SE3
   4  
   5  « wawaChief »       olivier.lecluse@crdp.ac-caen.fr
   6  ErotoKriTOS <(-_°)> jean-luc.chretien@tice.ac-caen.fr
   7  
   8  Equipe Tice académie de Caen
   9  
  10  V 0.1 maj : 09/12/2002
  11  Distribué selon les termes de la licence GPL
  12  compilation du binaire : gcc -o admind admind2.c
  13  */
  14  
  15  #define _GNU_SOURCE
  16  #include <stdio.h>
  17  #include <stdlib.h>
  18  #include <unistd.h>
  19  #include <fcntl.h>
  20  #include <limits.h>
  21  #include <syslog.h>
  22  #include <sys/file.h>
  23  
  24  #define OPEN_MAX         256   /* # open files a process may have */
  25  #define PIDFILE        "/var/run/admind.pid"
  26  #define ADMIND               "/var/remote_adm/admin.sh"
  27  main() {
  28  
  29    int fd, i;
  30  
  31    static char ligne [128], str[12];
  32  
  33    FILE *result;
  34    FILE *tbp;
  35  
  36    openlog("admind_SE3", LOG_PERROR | LOG_PID, LOG_INFO);
  37    umask (022);
  38    chdir ("/tmp");
  39  
  40    // Le daemon passe en arrière plan
  41    if (fork() !=0) exit (EXIT_SUCCESS);
  42    // Creation d'une session
  43    setsid();
  44  
  45    // Fermeture des descripteurs de fichiers
  46    // Plus d'affichage des  messages stdout, stderr
  47    for (i=0; i<OPEN_MAX; i++) close (i);
  48  
  49    // Creation d'un fichier lock contenant le n° pid
  50    // et empechant le lancement de plusieurs admind
  51    fd = open (PIDFILE, O_RDWR | O_CREAT,0640);
  52    if (fd < 0) exit (EXIT_FAILURE); // sortie car impossibilite de creer le fichier PIDFILE
  53    if (lockf (fd, F_TLOCK, 0) < 0 ) {
  54      syslog (LOG_INFO, "SE3 admind is running !!!\n");
  55      exit(EXIT_SUCCESS);  // sortie car le fichier est deja locke par un autre process
  56    }
  57    snprintf (str, 12, "%d\n", getpid ());
  58    write (fd, str, strlen (str));
  59  
  60    // Message syslog d'information de demarrage du daemon
  61    syslog (LOG_INFO, "Starting SE3 admin daemon...\n");
  62  
  63    while(1) {
  64      tbp = fopen(ADMIND,"r");
  65      if (tbp != NULL) {
  66        fclose(tbp);
  67        // Analyse syntaxique du script admin.sh
  68        // A FAIRE !!
  69  
  70        // Execution de la tache d'administration
  71        result = popen (ADMIND,"r");
  72          while (fgets(ligne, 127, result)!=NULL) {
  73            // Redirection des sorties admin.sh vers syslog
  74            syslog (LOG_INFO, ligne,"\n");
  75          }
  76        pclose(result);
  77  
  78        // Effacement du fichier admin.sh
  79        remove (ADMIND);
  80        // Ecriture d'un message syslog  de Fin d'execution
  81        syslog (LOG_INFO, "Fin execution admin.sh");
  82      }
  83      sleep(1);
  84    }
  85  }


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1