Patrick Foubet преди 6 месеца
родител
ревизия
b8c96d8533
променени са 1 файла, в които са добавени 196 реда и са изтрити 151 реда
  1. +196
    -151
      octave.c

+ 196
- 151
octave.c Целия файл

@@ -406,20 +406,55 @@ int markElt(int i, int v)
return 1;
}

void listElt(void)
void listElt(char c)
{
int i;
for (i=0; i<iT; i++)
printf("%d : %s (%d)\n",Tno[i], Turl[i], Trv[i]);
int i,n=0;
switch (c) {
case '-':
for (i=0; i<iT; i++)
if (Tno[i]<0) { printf("%d : %s (%d)\n",Tno[i], Turl[i], Trv[i]);
n++;
}
break;
case '+':
for (i=0; i<iT; i++)
if (Tno[i]>0) { printf("%d : %s (%d)\n",Tno[i], Turl[i], Trv[i]);
n++;
}
break;
default:
for (i=0; i<iT; i++) {
printf("%d : %s (%d)\n",Tno[i], Turl[i], Trv[i]);
n++;
}
break;
}
printf(" %d elements trouves.\n",n);
}



int comsh(char *com)
{
pid_t pid;
int ret;
if ((pid = fork()) < 0) {
perror("fork2"); return 99;
}
if (pid == 0) {
signal(SIGINT,SIG_IGN);
execl("/bin/sh", "sh", "-c", com, (char *) 0);
perror("execl2"); return 98;
}
waitpid(pid,&ret,0);
return WEXITSTATUS(ret);
}

int exeCom(char * comm) /* on se reserve le droit de modifier */
{
char b[120];
sprintf(b,"%s >/dev/null 2>&1",comm);
return system(b);
return comsh(b);
}

/* ### fct de MAJ iptables */
@@ -575,7 +610,7 @@ FILE * fw;
static int NBin=0, NBout=0;
void prInOut(void)
{
printf("%d echanges DNS : %d requetes, %d reponses.\n",NBout+NBin,NBout,NBin);
printf(" %d messages DNS: %d requetes, %d reponses.\n",NBout+NBin,NBout,NBin);
}

int printQ(char * q)
@@ -615,150 +650,159 @@ pid_t pid;
fauth = (char*)p;
pid = getpid();
read_history(FHISTO);
if (REPR) system("reset");
if (REPR) comsh("reset");
while (REQ) {
if (kill(pid,SIGUSR1) < 0) { /* verif processus acquisition */
ENDT=1;
write(p1[1],"\n",1);
}
free(cmd);
cmd = readline("O-> ");
if ((n2 = strlen(cmd)) > 0) {
write(p1[1],"\n",1);
add_history(cmd);
switch (*cmd) {
case '+' :
if (*(cmd+1) != '\0') {
if (litligne(cmd+1)) { /* ajout au fichier fauth */
if (debloqueIP(cmd+1,NULL)) printf("Element non valable !\n");
else {
if (printQ("ajouter au fichier parametres"))
ajoutParam(fauth,cmd+1);
listeAllow();
}
} else printf("Erreur ajout param. !\n");
} else listeAllow();
break;
case '-' :
if (*(cmd+1) != '\0') {
if (litligne(cmd)) { /* ajout au fichier fauth */
if (rebloqueIP(cmd+1)) printf("Element non valable !\n");
else {
if (printQ("ajouter au fichier parametres"))
ajoutParam(fauth,cmd);
listeDeny();
}
} else printf("Erreur ajout param. !\n");
} else listeDeny();
break;
case 'l' :
listElt();
printf("%sReste %d elts (Max. %d)!\n",ctime(&tim1),iT,MaxElt);
prInOut();
break;
case 't' :
if (*(cmd+1) != '\0') {
if ((cmd[1] == '+') || (cmd[1] == '-')) {
if ((cmd[1] == '+') && (Trace < TMAX)) Trace++;
else {
if ((cmd[1] == '-') && (Trace > TMIN)) Trace--;
else printf("Erreur: niveau dans [%d, %d].\n",TMIN,TMAX);
}
} else printf("Erreur: Utiliser t+ ou t- !\n");
if (kill(pid,SIGUSR1) < 0) { /* verif processus acquisition */
ENDT=1;
write(p1[1],"\n",1);
}
free(cmd);
cmd = readline("O-> ");
if ((n2 = strlen(cmd)) > 0) {
write(p1[1],"\n",1);
add_history(cmd);
switch (*cmd) {
case '+' :
if (*(cmd+1) != '\0') {
if (litligne(cmd+1)) { /* ajout au fichier fauth */
if (debloqueIP(cmd+1,NULL)) printf("Element non valable !\n");
else {
if (printQ("ajouter au fichier parametres"))
ajoutParam(fauth,cmd+1);
listeAllow();
}
printf("Trace niveau %d\n",Trace);
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);
system(com);
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);
system(com);
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);
system(com);
break;
case 'E' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
sprintf(com,"grep '%s\\[%d\\]%s' %s",NPROG,pid,".*ERR: ",CHLOG);
system(com);
break;
case 'L' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
sprintf(com,"grep '%s\\[%d\\]' %s%s",NPROG,pid,CHLOGREP,"-v 'Re[pq]. '");
system(com);
break;
case 'T' :
if (*(cmd+1) != '\0')
sprintf(com,"grep '%s\\[%d\\].*%s' %s%s",NPROG,pid,cmd+1,CHLOGREP," 'Re[pq]. '");
else
sprintf(com,"grep '%s\\[%d\\]' %s%s",NPROG,pid,CHLOGREP," 'Re[pq]. '");
system(com);
prInOut();
break;
case '>' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid,CHLOGREP," 'Req. '",CUT7S,SUNIC);
system(com);
prInOut();
break;
case '<' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid,CHLOGREP," 'Rep. '",CUT7S,SUNIC);
system(com);
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);
pr_encours();
system(com);
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();
system(com);
break;
case 'S' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
RUN = 0;
REQ = 0;
write(p1[1],"\n",1);
break;
case 'V' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
printf("Version %s\n",Version);
prInOut();
break;
case ' ' :
if (*(cmd+1) != '\0') system(cmd+1);
break;
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");
break;
}
}
} else printf("Erreur ajout param. !\n");
} else listeAllow();
break;
case '-' :
if (*(cmd+1) != '\0') {
if (litligne(cmd)) { /* ajout au fichier fauth */
if (rebloqueIP(cmd+1)) printf("Element non valable !\n");
else {
if (printQ("ajouter au fichier parametres"))
ajoutParam(fauth,cmd);
listeDeny();
}
} else printf("Erreur ajout param. !\n");
} else listeDeny();
break;
case 'l' :
listElt(cmd[1]);
printf(" %s Utilise %d elts/%d : %.2f%% (Max. %d)!\n",ctime(&tim1),iT,
NBT, (float)(iT*100)/(float)NBT, MaxElt);
prInOut();
break;
case 't' :
if (*(cmd+1) != '\0') {
if ((cmd[1] == '+') || (cmd[1] == '-')) {
if ((cmd[1] == '+') && (Trace < TMAX)) Trace++;
else {
if ((cmd[1] == '-') && (Trace > TMIN)) Trace--;
else printf("Erreur: niveau dans [%d, %d].\n",TMIN,TMAX);
}
} else printf("Erreur: Utiliser t+ ou t- !\n");
}
printf(" Trace niveau %d\n",Trace);
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);
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);
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);
break;
case 'E' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
sprintf(com,"grep '%s\\[%d\\]%s' %s",NPROG,pid,".*ERR: ",CHLOG);
comsh(com);
break;
case 'L' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
sprintf(com,"grep '%s\\[%d\\]' %s%s",NPROG,pid,
CHLOGREP,"-v 'Re[pq]. '");
comsh(com);
break;
case 'T' :
if (*(cmd+1) != '\0')
sprintf(com,"grep '%s\\[%d\\].*%s' %s%s",NPROG,pid,cmd+1,
CHLOGREP," 'Re[pq]. '");
else
sprintf(com,"grep '%s\\[%d\\]' %s%s",NPROG,pid,
CHLOGREP," 'Re[pq]. '");
comsh(com);
prInOut();
break;
case '>' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid,
CHLOGREP," 'Req. '",CUT7S,SUNIC);
comsh(com);
prInOut();
break;
case '<' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid,
CHLOGREP," 'Rep. '",CUT7S,SUNIC);
comsh(com);
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);
pr_encours();
comsh(com);
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);
break;
case 'S' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
RUN = 0;
REQ = 0;
write(p1[1],"\n",1);
break;
case 'V' :
if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1);
printf("Version %s\n",Version);
prInOut();
break;
case ' ' :
if (*(cmd+1) != '\0') comsh(cmd+1);
break;
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");
break;
}
}
}
write_history(FHISTO);
free(cmd);
@@ -1018,8 +1062,9 @@ int Inter=0, LogC=0, i, ie, np=0, opt;
REQ = 0;
break;
case 'L' :
printf("Reste %d elts !\n",iT);
listElt();
listElt(cmd[1]);
printf(" %s Utilise %d elts/%d : %.2f%% (Max. %d)!\n",
ctime(&tim1),iT,NBT,(float)(iT*100)/(float)NBT,MaxElt);
break;
case 'S' :
RUN = 0;
@@ -1042,7 +1087,7 @@ int Inter=0, LogC=0, i, ie, np=0, opt;
close(p1[1]);
closelog();
if (ENDT) { /* relance auto */
system("reset");
comsh("reset");
if (T1) printf("Relance auto %s dans %d sec. ...\n",strPID, DELAYR);
sleep(DELAYR); /* attend N s */
NP = (char**)malloc((sizeof(Pars))*(N+3));


Зареждане…
Отказ
Запис