| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -45,12 +45,12 @@ https://e2li.org -> menu : Projet Prosecco. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include <arpa/inet.h> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#include <pthread.h> | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define Version "1.00" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define Version "1.01" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define F_GETPIPE_SZ 1032 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define F_SETPIPE_SZ 1031 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static int RUN=1, REQ=0, ENDT=0, REPR=0, p1[2],Trace=0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static int RUN=1, REQ=0, ENDT=0, REPR=0, JCTL=0, LogC=0, WH=1, p1[2],Trace=0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static pid_t pid; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static char * NPROG, *IFACE=NULL; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define DELAYR 20 /* delai avant relance auto */ | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -88,6 +88,14 @@ int r; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   return 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int isIPv6(char *a) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			struct in6_addr S; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int r; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if ((r = inet_pton(AF_INET6,a, (void *)&S)) <= 0) return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   return 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int isCidr(char*r) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			char buf[20], *sn; | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -102,6 +110,21 @@ int n; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   return n; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int isCidr6(char*r) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			char buf[52], *sn; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int n; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if (strlen(r)>50) return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   strcpy(buf,r); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if ((sn=strstr(buf,"/")) == NULL) return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   *sn = '\0'; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if (!isIPv6(buf)) return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   n = atoi(sn+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if (n>128) return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   return n; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			uint64_t NbAddCidrs = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int isSousRes(char*r, char *a) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			struct in_addr Sa, Sr, Sm; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -198,7 +221,7 @@ char a[20],*p, *g, *w; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        *w = '\0'; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        w++; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (isSousRes(p,a)) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (T3) printf("T3: %s contient %s (%s)\n",p,a,w); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (T1) printf("T1: %s contient %s (%s)\n",p,a,w); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          delCidr(g); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			     } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -207,7 +230,7 @@ char a[20],*p, *g, *w; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void listCidr(void) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int i; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  printf("CIDR : %d\n",iC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  printf("CIDR : %d elts representent %lld adresses.\n",iC,(long long)NbAddCidrs); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  for (i=0; i<iC; i++) printf("\t%s\n", Tcidr[i]); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -296,15 +319,20 @@ int litligne(char * line) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			char *w, **S; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void * M; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int t; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int t,v; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if (*line == '#') return 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if ((w=strstr(line, "\n")) != NULL) *w = '\0'; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      w=line; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if (*w == '-') w++; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      t=strlen(w); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if (t==0) return 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if (isCidr(w)) { /* test si CIDR */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if ((v=isCidr(w)) > 0) { /* test si CIDR */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			         addCidr(w); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			         NbAddCidrs += (int)(1<<v); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			         return 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if ((v=isCidr6(w)) > 0) { /* test si CIDR6 */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        printf("%s : CIDR IPv6 non pris en compte pour l'instant !\n",w); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			         return 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if (*line == '-') { | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -434,14 +462,21 @@ int i,n=0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int comsh(char *com) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define EX_NOOUT 1 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define EX_NOERR 2 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define EX_SILENT EX_NOOUT|EX_NOERR  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int comsh(char *com,int mode) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			pid_t pid; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int ret; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if ((pid = fork()) < 0) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      perror("fork2"); return 99; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if (T3) printf("$ %s\n",com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if (pid == 0) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if (mode & EX_NOOUT) close(1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      if (mode & EX_NOERR) close(2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      signal(SIGINT,SIG_IGN); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      execl("/bin/sh", "sh", "-c", com, (char *) 0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      perror("execl2"); return 98; | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -454,7 +489,7 @@ int exeCom(char * comm) /* on se reserve le droit de modifier */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			char b[120]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   sprintf(b,"%s >/dev/null 2>&1",comm); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   return comsh(b); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   return comsh(b,EX_SILENT); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/* ### fct de MAJ iptables */ | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -632,6 +667,8 @@ void pr_encours(void) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define SUNIC "|sort|uniq" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define JCTLSYS "journalctl --system" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define JCTLSYSG JCTLSYS"|grep " | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define CHLOG "/var/log/user.log" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define CHLOGREP "/var/log/user.log|grep " | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define CUT6 "|cut -d' ' -f6" | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -642,6 +679,7 @@ void pr_encours(void) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define AWK5 "|awk '{ print $5}'" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define AWK4 "|awk '{ print $4}'" | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define DREJ "^REJECT " | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#define DACC "^ACCEPT " | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			void * fct_com(void * p) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int REQ=1; | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -651,7 +689,7 @@ pid_t pid; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  fauth = (char*)p; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  pid = getpid(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  read_history(FHISTO); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  if (REPR) comsh("reset"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  if (REPR) comsh("reset",0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  while (REQ) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (kill(pid,SIGUSR1) < 0) { /* verif processus acquisition */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      ENDT=1; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -707,73 +745,102 @@ pid_t pid; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case 'a' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid,".* ok", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                   CHLOG,CUT6,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (JCTL) sprintf(com,"%s'%s\\[%d\\]%s'%s%s",JCTLSYSG,NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                     ".* ok", CUT6,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          else sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                     ".* ok", CHLOG,CUT6,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case 'i' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid,".* DENY", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                    CHLOG,CUT6,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (JCTL) sprintf(com,"%s'%s\\[%d\\]%s'%s%s",JCTLSYSG,NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                          ".* DENY", CUT6,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          else sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                          ".* DENY", CHLOG,CUT6,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case 'e' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid,".* ACCEPT", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                    CHLOG,CUT6,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (JCTL) sprintf(com,"%s'%s\\[%d\\]%s'%s%s",JCTLSYSG,NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                    ".* ACCEPT", CUT6,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          else sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                    ".* ACCEPT", CHLOG,CUT6,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case 'E' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"grep '%s\\[%d\\]%s' %s%s",NPROG,pid,".*ERR: ", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                             CHLOG,CUTM45); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (JCTL) sprintf(com,"%s'%s\\[%d\\]%s'%s",JCTLSYSG,NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                       ".*ERR: ", CUTM45); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          else sprintf(com,"grep '%s\\[%d\\]%s' %s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                       ".*ERR: ", CHLOG,CUTM45); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case 'L' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"grep '%s\\[%d\\]' %s%s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) == '\0') { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             if (JCTL) sprintf(com,"%s'%s\\[%d\\]'|grep %s%s",JCTLSYSG,NPROG, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                             pid, "-v 'Re[pq]. '",CUTM45); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             else sprintf(com,"grep '%s\\[%d\\]' %s%s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                             CHLOGREP,"-v 'Re[pq]. '",CUTM45); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             if (JCTL) sprintf(com,"%s'%s\\[%d\\]'|grep %s%s|grep '%s'",JCTLSYSG | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                     ,NPROG,pid,"-v 'Re[pq]. '",CUTM45,cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             else sprintf(com,"grep '%s\\[%d\\]' %s%s%s|grep '%s'",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                     CHLOGREP,"-v 'Re[pq]. '",CUTM45,cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case 'T' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') { /* avec parametre */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             if ((*(cmd+1) == '+') && (*(cmd+2) != '\0')) { /* script + param */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                sprintf(com,"./t1.sh %d %s >.Trav%d",pid,cmd+2,pid); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                comsh(com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                sprintf(com,"cat .Trav%d",pid); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             } else sprintf(com,"grep '%s\\[%d\\].*%s' %s%s%s",NPROG,pid,cmd+1, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                if (JCTL) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                sprintf(com,"%s'%s\\[%d\\].*%s'|grep%s%s",JCTLSYSG,NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                             cmd+1," 'Re[pq]. '",CUTM45); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                sprintf(com,"grep '%s\\[%d\\].*%s' %s%s%s",NPROG,pid,cmd+1, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                             CHLOGREP," 'Re[pq]. '",CUTM45); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          } else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"grep '%s\\[%d\\]' %s%s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             if (JCTL)sprintf(com,"%s'%s\\[%d\\]'|grep %s%s",JCTLSYSG,NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                             " 'Re[pq]. '",CUTM45); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             else sprintf(com,"grep '%s\\[%d\\]' %s%s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                             CHLOGREP," 'Re[pq]. '",CUTM45); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          prInOut(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case '>' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (JCTL) sprintf(com,"%s'%s\\[%d\\].*%s%s%s",JCTLSYSG,NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                             " Req. '",CUT7S,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          else sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                             CHLOGREP," 'Req. '",CUT7S,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          prInOut(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case '<' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (JCTL) sprintf(com,"%s'%s\\[%d\\].*%s%s%s",JCTLSYSG,NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                             " Rep. '",CUT7S,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          else sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                             CHLOGREP," 'Rep. '",CUT7S,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          prInOut(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case 'r' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"%s -L|grep %s%s%s",IPT,DREJ,AWK5,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"%s -L %s|grep %s%s%s",IPT,OUTP,DREJ,AWK5,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          pr_encours(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case 'R' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"%s -L|grep %s%s%s",IP6T,DREJ,AWK4,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          pr_encours(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case 'S' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -781,36 +848,44 @@ pid_t pid; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          REQ = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          write(p1[1],"\n",1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case 'V' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case 'v' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("Version %s\n",Version); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          prInOut(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          sprintf(com,"%s -L %s|grep %s%s%s",IPT,MYCH,DACC,AWK5,SUNIC); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          pr_encours(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          comsh(com,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case ' ' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') comsh(cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') comsh(cmd+1,0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        case '?' : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("Version %s\n",Version); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          prInOut(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        default : | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("+url\t: Allow (autoriser une Url)\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("-url\t: Deny (interdire une Url)\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("a\t: Autorisations suivant analyse\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("i\t: Interdictions suivant analyse\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("e\t: Exceptions suivant analyse\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("E\t: Liste des erreurs\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("l[+|-]\t: Liste des elements dynamiques\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("L\t: Logs du systeme\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("r\t: Rejets actifs IPv4 (dure plusieurs sec.)\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("R\t: Rejets actifs IPv6 (dure plusieurs sec.)\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("S\t: Stopper\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("t+|-\t: Niveau de trace : 0 (off) => 3\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("T[mot]\t: Traces des demandes/reponses contenant mot\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf(">\t: Traces des demandes triees\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("<\t: Traces des reponses triees\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("V\t: Version\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("?\t\t: Version et menu.\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("+url\t\t: Allow (autoriser une Url)\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("-url\t\t: Deny (interdire une Url)\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("a\t\t: Autorisations suivant analyse\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("i\t\t: Interdictions suivant analyse\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("e\t\t: Exceptions suivant analyse\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("E\t\t: Liste des erreurs\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("l[+|-]\t\t: Liste des elements dynamiques\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("L[filtre]\t: Logs du systeme avec filtre de type regex\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("r\t\t: Rejets actifs IPv4 (dure plusieurs sec.)\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("R\t\t: Rejets actifs IPv6 (dure plusieurs sec.)\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("v\t\t: Validations actives IPv4 (dure plusieurs sec.)\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("t+|-\t\t: Niveau de trace : 0 (off) => 3\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          if (LogC) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             printf("T[+][mot]\t: Traces des demandes/reponses contenant mot.\n\t\t  Avec + fait les liaisons entre requetes et reponses.\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             printf(">\t\t: Traces des demandes triees\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			             printf("<\t\t: Traces des reponses triees\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          printf("S\t\t: Stopper\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			          break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  write_history(FHISTO); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  WH=write_history(FHISTO); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  free(cmd); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  /* fin dialogue */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			  pthread_exit(NULL); | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -851,7 +926,7 @@ char *analyse="tcpdump", *line = NULL, *cmd = NULL, *s1, *s2, *refU; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			char *fauth = "auth1.txt", *strR = "-R", *Pars, strPID[8], **NP; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			size_t ll = 0, lc = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			ssize_t n,n2; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int Inter=0, LogC=0, i, ie, np=0, opt; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			int Inter=0, i, ie, np=0, opt; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if ((NPROG = strrchr(P[0],(int)'/')) == NULL) NPROG=P[0]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   else NPROG++; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   sprintf(strPID,"%d",getpid()); | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -906,6 +981,7 @@ int Inter=0, LogC=0, i, ie, np=0, opt; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      fprintf(stderr,"A executer sous root !\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			      return 2; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if (comsh(JCTLSYS,EX_SILENT) == 0) JCTL=1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if (T1) printf("T1: Fichier parametres = %s\n",fauth); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   signal(SIGUSR1,SIG_IGN); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if (pipe(p1) < 0) { | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -1093,7 +1169,7 @@ int Inter=0, LogC=0, i, ie, np=0, opt; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   close(p1[1]); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   closelog(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   if (ENDT) { /* relance auto */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       comsh("reset"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       comsh("reset",0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       if (T1) printf("Relance auto %s dans %d sec. ...\n",strPID, DELAYR); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       sleep(DELAYR); /* attend N s */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       NP = (char**)malloc((sizeof(Pars))*(N+3)); | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -1101,6 +1177,7 @@ int Inter=0, LogC=0, i, ie, np=0, opt; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       NP[i++]=strR;  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       NP[i++]=strPID;  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       NP[i]=NULL;  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       if (WH) write_history(FHISTO); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       execv(P[0],NP); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			       perror("execv"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			   } | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |