Hello, Je suis en train de réécrire mon script iptables et je recontre un probleme avec ce bout de code que j'ai volontairement simplifié pour la comprehension :
C'est encore brouillon et il y à pas mal d'autres points à améliorer mais je souhaiterais déja savoir plus précisement s'il m'est possible d'éviter d'utiliser eval (ligne 30-31) :
Code :
- FW_WOOT() {
- rule FILTER INPUT -i wlan0 -p tcp --sport 43 -state "ER" -com "MON COMMENTAIRE WOOT" -j DROP
- }
- state() {
- for (( i=0; i<${#1}; i++ )); do
- if [ "${1:$i:1}" == "N" ]; then N=",NEW"; fi
- if [ "${1:$i:1}" == "E" ]; then E=",ESTABLISHED"; fi
- if [ "${1:$i:1}" == "R" ]; then R=",RELATED"; fi
- done
- res=$(sed -e 's/^,//' -e 's/,$//' <<<"$N$E$R" )
- echo "-m state --state "$res
- }
- rule() {
- local build
- if [ "$1" = "FILTER" ]; then build="-t filter $IR"; shift; fi
- if [ "$1" = "NAT" ]; then build="-t nat $IR" ; shift; fi
- while test -n "$1"; do
- case "$1" in
- -state) build=$build" "$(state $2) ; shift ;;
- -com) build=$build" -m comment --comment '${2}'" ; shift ;;
- *) build=$build" "$1;;
- esac;shift
- done
-
- #FIXME
- iptables $build #Probleme
- eval iptables $build #OK
- }
- FW() {
- if [ "$1" == "open" ]; then
- IR="-D";"${2}"
- IR="-A";"${2}"
- fi
- if [ "$1" == "close" ]; then
- IR="-D";"${2}"
- fi
- }
- FW "open" "FW_WOOT"
- #FW "close" FW_WOOT
|
Si je n'utilise pas eval, cela bloque avec mon commentaire contenant plusieurs mots ("MON COMMENTAIRE WOOT" ) :
Code :
- Bad argument `COMMENTAIRE'
- Try `iptables -h' or 'iptables --help' for more information.
|
J'ai essayer tout un tas de syntaxes pour essayer de me passer d'eval mais je n'y arrive pas, est-ce que c'est réalisable ?
Message édité par Profil supprimé le 17-11-2017 à 12:16:50