[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |