besoin d'aide urgent merci d'avance

Forum traitant de la distribution sécurisée montante nommée IP cop et basée sur la distribution Smoothwall. C'est à l'heure actuelle le forum le plus actif du site.

Modérateur: modos Ixus

besoin d'aide urgent merci d'avance

Messagepar testeur290306 » 07 Avr 2006 11:46

bonjour,
j'ai déjà posté pour un script présent à cette adresse
le script dyndns
http://www.fr.ixus.net/modules.php?name=Content&pa=showpage&pid=107

après avoir vu qu'il se lançait en tâche cron mais que j'avais pas de résultat, j'ai chercher avec l'aide de beaucoup d'entre vous.
impossible de le lancer manuellement en tapant ./dyndns
alors que le script en perl nslookup.cgi fonctionne très bien en tapant ./nslookup www.google.fr(exemple)

#!/usr/bin/perl -w
#
#version 1.2 : gestion d'erreur supplementaire par rapport a nslook.cgi
#auteur : juliette michaux
#date de creation : le 18 juillet 2003
#
#ce script permet de recuperer l'adresse ip d'un hote a partir de son nom de domaine
#Il remplace la commande reseau "nslookup" connue, mais absente d'ipcop.
#Il peut etre utiliser simplement en ligne de commande (ex : ./nslookup.cgi www.google.fr)
#mais il a ete cree pour rendre plus rapide l'execution du programme dyndns

#utilisation des librairies
use Socket;
use IO::Socket;

#on recupere l'argument place en ligne de commande (ARGV[0]) et on cherche l'ip
#correspondante. Si l'argument est oublie ou ne correspond pas a un nom de domaine connu,
#un message d'erreur "bad host" est envoye
$addr = (gethostbyname($ARGV[0]))[4] or die "bad host : $ARGV[0]";

#on convertit l'adresse en chaine de caractere
$ipaddr = inet_ntoa($addr);

#on affiche l'adresse ip trouve
print "$ipaddr\n";

j'ai essayer deux scripts de tests : essai

#!/usr/bin/sh
echo tout fonctionne


en le lançant ./essai cela fonctionne, pareil avec le deuxième script ou je remplace sh par bash


et le script qui ne fonctionne pas en question dans comporter une mauvaise syntaxe

#!/bin/sh
#
#version 1.2 du script dyndns
#auteur : juliette michaux
#date creation : le 11 juillet 2003
#
#Ce script sert a remettre a jour la table config du firewall.
#Cette table est dans le fichier /var/ipcop/portfw/config.
#
#Dans les regles de firewall, a chaque adresse ip a mettre a jour, un commentaire speciale
#a ete insere avant le nom de domaine : **DDNS**. Par ex : **DDNS**www.google.fr
#
#Quand le script parcourt la config et voit ce commentaire, il recherche l'ip correspondante
#au nom de domaine et insere cette nouvelle adresse ip a la place de l'ancienne.
#
#Ainsi, si un domaine change d'ip tous les jours, ce script permet de renseigner le
#firewall de facon transparente pour l'utilisateur
#
#Ce script est une deuxieme version de dyndns, mais au lieu d'utiliser la commande ping
#pour trouver l'adresse ip correspondante au nom de domaine, on utilise la commande
#nslookup.cgi. Ce script est un script perl qui se trouve dans le repertoire
#/home/httpd/cgi-bin. Il prend en argument argv[0] le nom de domaine et retourne
#l'adresse ip correspondante.

#Ceci rend l'execution beaucoup plus rapide et permet de faire tourner l'application
#sur la crontab toutes les minutes au lieu de cinq, avec le ping.

#creation d'une variable chemin
chemin="/var/ipcop/portfw/"

# copie du fichier de config dans un fichier temporaire ficIN
cp $chemin"config" $chemin"ficIN"

#changement du mode du fichier config pour l'interdire en ecriture pendant la procedure
chmod 555 $chemin"config"

#changement du mode du fichier ficIn pour pouvoir travailler dessus
chmod 744 $chemin"ficIN"

#la boucle while va permettre de lire une ligne du fichier de config,
#de l'analyser, et de la reecrire dans le fichier ficOUT
cat $chemin"ficIN" | while read ligne
do
rem=`echo $ligne |awk -F "," '{print $10}'`
if test -z "$rem"
then
#on est dans le cas ou il n'y a pas de remarque sur la ligne de firewall
#on recopie donc la ligne tel quel
echo $ligne >> $chemin"ficOUT"
else
#on a une remarque dans le fichier de config
domaine=`echo $rem | awk -F "*" '{print $5}'`
if test -z "$domaine"
then
#la remarque ne porte pas le symbole cle **DDNS**
#on ne fait donc aucun traitement et on la reecrit tel quel
echo $ligne >> $chemin"ficOUT"
else
#la remarque porte le symbole **DDNS**, on doit l'analyser
#on cherche la nouvelle ip a l'aide de la commande nslookup.cgi
ipnew=`/home/httpd/cgi-bin/nslookup.cgi $domaine`
#echo "ipnew "$ipnew
#on reprend le debut de la ligne du fichier config a ne pas modifier
arg1=`echo $ligne | awk -F "," '{print $1}'`
arg2=`echo $ligne | awk -F "," '{print $2}'`
arg3=`echo $ligne | awk -F "," '{print $3}'`
arg4=`echo $ligne | awk -F "," '{print $4}'`
arg5=`echo $ligne | awk -F "," '{print $5}'`
arg6=`echo $ligne | awk -F "," '{print $6}'`
arg7=`echo $ligne | awk -F "," '{print $7}'`
arg8=`echo $ligne | awk -F "," '{print $8}'`
#on ecrit le debut de ligne, l'adresse ip nouvelle et la remarque
#a la suite du fichier ficOUT
echo $arg1,$arg2,$arg3,$arg4,$arg5,$arg6,$arg7,$arg8,$ipnew,$rem >> $chemin"ficOUT"
fi
fi
done

#calcul du nombre de difference entre le fichier ficIN et ficOUT
di=`diff $chemin"ficIN" $chemin"ficOUT" | grep [0-9]c[0-9] | wc -l`
#calcul du nombre de remarque contenant **DDNS**
dd=`cat $chemin"ficIN" | grep \*\*DDNS\*\* | wc -l`

if test $di -le $dd
then
#on est dans le cas ou le nombre de changement est inferieur ou egal au nombre
#d'adresse ip verifier : ce qui signifie que le script c'est bien passe
#on detruit le fichier ficIn maintenant inutile
rm $chemin"ficIN"
#on remplace le fichier config par le fichier ficOUT
mv $chemin"ficOUT" $chemin"config"
chmod 766 $chemin"config"
#on active les changements
/usr/local/bin/setportfw
#echo "tout c'est bien passe"" nb diff:"$di" nb ddns:$dd"

else
#on a un nombre de changement beaucoup trop grand
#on prefere ne rien changer
rm $chemin"ficIN"
rm $chemin"ficOUT"
chmod 766 $chemin"config"
#echo "une erreur s'est produite"" nb diff:"$di" nb ddns:$dd"
fi

je suis sous ipcop 1.4.10
si vous pouvez m'aider

MERCI D'AVANCE pour votre aide
testeur290306
Premier-Maître
Premier-Maître
 
Messages: 57
Inscrit le: 29 Mars 2006 11:09

Retour vers IPCop

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron