« Contrôle parental » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
(version 3.21 nombreux correctif pour le paramètre -tlo + nouveau paramètre caché -deb utile pour la création du deb.)
Aucun résumé des modifications
Ligne 5 : Ligne 5 :
# CTparental.sh
# CTparental.sh
#
#
# par guillaume MARSAT
# par Guillaume MARSAT
# une parti du code est tirer du scripte alcasar-bl.sh créer par Franck BOUIJOUX and Richard REY
# Corrections orthographiques par Pierre-Edouard TESSIER
# une parti du code est tiré du script alcasar-bl.sh créé par Franck BOUIJOUX et Richard REY
# présent dans le code du projet alcasar en version 2.6.1 ; web page http://www.alcasar.net/
# présent dans le code du projet alcasar en version 2.6.1 ; web page http://www.alcasar.net/
 
# This script is distributed under the Gnu General Public License (GPL)
# This script is distributed under the Gnu General Public License (GPL)
#if [ ! $UID -eq 0 ]; then
arg1=${1}
#  echo "Il vous faut les droit root pour lancer ce scripte"
if [ $arg1 != "-listusers" ] ; then
#  exit 1
if [ ! $UID -le 499 ]; then # considaire comme root tous les utilisateurs avec un uid inferieur ou egale a 499,ce qui permet a apt-get,urpmi,yum... de lance le scripte sans erreur.
#fi
   echo "Il vous faut des droits root pour lancer ce script"
args=${1}
  exit 1
installdeb="0"
fi
if [ ! -z ${2} ];then
  if [ ${2} = "-deb" ];then # utiliser dans les fichiers postinst et prerm du deb
      installdeb="1"
   else
  DIRhtmlPersonaliser=${2}
  if [ ! -d $DIRhtmlPersonaliser ];then
      echo "Chemin de répertoir non valide!"
      exit 0
  fi
  fi
fi
fi
noinstalldep="0"
nomanuel="0"
ARGS=($*)
for (( narg=1; narg<=$#; narg++ )) ; do
        case "${ARGS[$narg]}" in
  -nodep )
    noinstalldep="1"
  ;;
  -nomanuel )
    nomanuel="1"
  ;;
  -dirhtml )
    narg=$(( $narg +1 ))
    DIRhtmlPersonaliser=${ARGS[$narg]}
    if [ ! -d $DIRhtmlPersonaliser ];then
echo "Chemin de répertoire non valide!"
exit 0
    fi
  ;;
esac
done
pause () {  # fonction pause pour debugage
      MESSAGE="$*"
      choi=""
      MESSAGE=${MESSAGE:="pour continuer appuyez sur une touche :"}
      echo  "$MESSAGE"
      while (true); do
        read choi
        case $choi in
        * )
        break
        ;;
      esac
      done
}
SED="/bin/sed -i"
SED="/bin/sed -i"
DIR_CONF="/usr/local/etc/CTparental"
DIR_CONF="/usr/local/etc/CTparental"
FILE_CONF="$DIR_CONF/CTparental.conf"
FILE_CONF="$DIR_CONF/CTparental.conf"
FILE_HCONF="$DIR_CONF/CThours.conf";
FILE_HCONF="$DIR_CONF/CThours.conf"
if [ ! -f $FILE_CONF ] ; then
if [ ! -f $FILE_CONF ] ; then
mkdir -p $DIR_CONF
mkdir -p $DIR_CONF
mkdir -p /usr/local/share/CTparental/
cat << EOF > $FILE_CONF
cat << EOF > $FILE_CONF
LASTUPDATE=0
LASTUPDATE=0
Ligne 39 : Ligne 68 :
HOURSCONNECT=OFF
HOURSCONNECT=OFF
EOF
EOF
fi
## imports du plugin de la distributions si il existe
if [ -f $DIR_CONF/dist.conf ];then
source  $DIR_CONF/dist.conf
fi
fi


Ligne 46 : Ligne 81 :
VertD="\033[1;32m"
VertD="\033[1;32m"
Fcolor="\033[0m"
Fcolor="\033[0m"
GESTIONNAIREDESESSIONS=" login gdm lightdm slim kdm xdm "
GESTIONNAIREDESESSIONS=" login gdm lightdm slim kdm xdm lxdm gdm3 "
FILEPAMTIMECONF="/etc/security/time.conf"
FILEPAMTIMECONF="/etc/security/time.conf"
DIRPAM="/etc/pam.d/"
DIRPAM="/etc/pam.d/"
DAYS=( lundi mardi mercredi jeudi vendredi samedi dimanche )
DAYS=${DAYS:="lundi mardi mercredi jeudi vendredi samedi dimanche "}
DAYS=( $DAYS )
DAYSPAM=( Mo Tu We Th Fr Sa Su )
DAYSPAM=( Mo Tu We Th Fr Sa Su )
DAYSCRON=( mon tue wed thu fri sat sun )
DAYSCRON=( mon tue wed thu fri sat sun )
 
service --help 2&> /dev/null
#### DEPENDANCES par DEFAULT #####
if [ $? -eq 0 ] ; then
DEPENDANCES=${DEPENDANCES:=" dnsmasq lighttpd php5-cgi libnotify-bin notification-daemon resolvconf "}
  CMDSERVICE="service "
#### RESOLVCONF EST PAS PRESENT DANS LA DISTRIBUTION ####
else
NORESOLVCONF=${NORESOLVCONF:=0}
  CMDSERVICE="/etc/init.d/"
#### COMMANDES de services par DEFAULT #####
fi
CMDSERVICE=${CMDSERVICE:="service "}
DNSMASQCONF="/etc/dnsmasq.conf"
CRONstart=${CRONstart:="$CMDSERVICE crond start "}
MAINCONFHTTPD="/etc/lighttpd/lighttpd.conf"
CRONstop=${CRONstop:="$CMDSERVICE crond stop "}
DIRCONFENABLEDHTTPD="/etc/lighttpd/conf-enabled"
CRONrestart=${CRONrestart:="$CMDSERVICE crond restart "}
CTPARENTALCONFHTTPD=$DIRCONFENABLEDHTTPD"/10-CTparental.conf"
LIGHTTPDstart=${LIGHTTPDstart:="$CMDSERVICE lighttpd start "}
RESOLVCONFMAIN="/etc/resolvconf"
LIGHTTPDstop=${LIGHTTPDstop:="$CMDSERVICE lighttpd stop "}
RESOLVDNSMASQ="$RESOLVCONFMAIN/run/interface/lo.dnsmasq"
LIGHTTPDrestart=${LIGHTTPDrestart:="$CMDSERVICE lighttpd restart "}
RESOLVCONFORDER="$RESOLVCONFMAIN/interface-order"
DNSMASQstart=${DNSMASQstart:="$CMDSERVICE dnsmasq start "}
DIRHTML="/var/www/CTparental"
DNSMASQstop=${DNSMASQstop:="$CMDSERVICE dnsmasq stop "}
DIRadminHTML="/var/www/CTadmin"
DNSMASQrestart=${DNSMASQrestart:="$CMDSERVICE dnsmasq restart "}
namservicednsmaq="dnsmasq"
NWMANAGERstop=${NWMANAGERstop:="$CMDSERVICE network-manager stop"}
namservicehttpd="lighttpd"
NWMANAGERstart=${NWMANAGERstart:="$CMDSERVICE network-manager start"}
namservicecrond="cron"
NWMANAGERrestart=${NWMANAGERrestart:="$CMDSERVICE network-manager restart"}
PASSWORDFILEHTTPD="/etc/lighttpd/lighttpd-htdigest.user"
 
REALMADMINHTTPD="interface admin"
#### LOCALISATION du fichier PID lighttpd par default ####
LIGHTTPpidfile=${LIGHTTPpidfile:="/var/run/lighttpd.pid"}
 
#### COMMANDES D'ACTIVATION DES SERVICES AU DEMARAGE DU PC ####
ENCRON=${ENCRON:=""}
ENLIGHTTPD=${ENLIGHTTPD:=""}
ENDNSMASQ=${ENDNSMASQ:=""}
ENNWMANAGER=${ENNWMANAGER:=""}
#### UID MINIMUM pour les UTILISATEUR
UIDMINUSER=${UIDMINUSER:=1000}
 
DNSMASQCONF=${DNSMASQCONF:="/etc/dnsmasq.conf"}
MAINCONFHTTPD=${MAINCONFHTTPD:="/etc/lighttpd/lighttpd.conf"}
DIRCONFENABLEDHTTPD=${DIRCONFENABLEDHTTPD:="/etc/lighttpd/conf-enabled"}
CTPARENTALCONFHTTPD=${CTPARENTALCONFHTTPD:="$DIRCONFENABLEDHTTPD/10-CTparental.conf"}
RESOLVCONFMAIN=${RESOLVCONFMAIN:="/etc/resolvconf"}
RESOLVDNSMASQ=${RESOLVDNSMASQ:="$RESOLVCONFMAIN/run/interface/lo.dnsmasq"}
RESOLVCONFORDER=${RESOLVCONFORDER:="$RESOLVCONFMAIN/interface-order"}
DIRHTML=${DIRHTML:="/var/www/CTparental"}
DIRadminHTML=${DIRadminHTML:="/var/www/CTadmin"}
PASSWORDFILEHTTPD=${PASSWORDFILEHTTPD:="/etc/lighttpd/lighttpd-htdigest.user"}
REALMADMINHTTPD=${REALMADMINHTTPD:="interface admin"}
CMDINSTALL=""
CMDINSTALL=""
paquetresolv="resolvconf"
 
yum help 2&> /dev/null
if [ $(yum help | wc -l ) -ge 50 ] ; then
if [ $? -eq 0 ] ; then
   ## "Distribution basée sur yum exemple redhat, fedora..."
   ## "Distribution baser sur yum exemple readhat,fedora..."
   CMDINSTALL=${CMDINSTALL:="yum install "}
   CMDINSTALL="yum install "
   CMDREMOVE=${CMDREMOVE:="yum remove "}
   CMDREMOVE="yum remove "
fi
fi
urpmi --help 2&> /dev/null
urpmi --help 2&> /dev/null
if [ $? -eq 1 ] ; then
if [ $? -eq 1 ] ; then
   ## "Distribution baser sur urpmi exemple mandriva..."
   ## "Distribution basée sur urpmi exemple mandriva..."
   CMDINSTALL="urpmi -a --auto "
   CMDINSTALL=${CMDINSTALL:="urpmi -a --auto "}
   CMDREMOVE="urpme --auto "
   CMDREMOVE=${CMDREMOVE:="urpme --auto "}
  namservicecrond="crond"
fi
fi
apt-get -h 2&> /dev/null
apt-get -h 2&> /dev/null
if [ $? -eq 0 ] ; then
if [ $? -eq 0 ] ; then
   ## "Distribution baser sur apt-get exemple debian,ubuntu ..."
   ## "Distribution basée sur apt-get exemple debian, ubuntu ..."
   CMDINSTALL="apt-get -y --force-yes install "
   CMDINSTALL=${CMDINSTALL:="apt-get -y --force-yes install "}
   CMDREMOVE="apt-get -y --force-yes remove --purge "
   CMDREMOVE=${CMDREMOVE:="apt-get -y --force-yes remove --purge "}
fi
if [ $args="-i" ] ; then
  namserviceNetworkManager="network-manager"
  if [ -f /etc/NetworkManager/NetworkManager.conf ];then
    $SED "s/^dns=dnsmasq/#dns=dnsmasq/g" /etc/NetworkManager/NetworkManager.conf
    $CMDSERVICE$namserviceNetworkManager restart
    sleep 5
  fi
fi
fi


Ligne 129 : Ligne 176 :
WL_CATEGORIES_AVAILABLE="$DIR_CONF/wl-categories-available"
WL_CATEGORIES_AVAILABLE="$DIR_CONF/wl-categories-available"
DIR_DNS_FILTER_AVAILABLE="$DIR_CONF/dnsfilter-available"
DIR_DNS_FILTER_AVAILABLE="$DIR_CONF/dnsfilter-available"
DIR_DNS_BLACKLISTE_ENABLED="$DIR_CONF/blackliste-enabled"
DIR_DNS_BLACKLIST_ENABLED="$DIR_CONF/blacklist-enabled"
DIR_DNS_WHITELIST_ENABLED="$DIR_CONF/whitelist-enabled"
DIR_DNS_WHITELIST_ENABLED="$DIR_CONF/whitelist-enabled"
DNS_FILTER_OSSI="$DIR_CONF/blackliste-local"
DNS_FILTER_OSSI="$DIR_CONF/blacklist-local"
DREAB="$DIR_CONF/domaine-rehabiliter"  
DREAB="$DIR_CONF/domaine-rehabiliter"  
THISDAYS=$(expr $(date +%Y) \* 365 + $(date +%j))
THISDAYS=$(expr $(date +%Y) \* 365 + $(date +%j))
Ligne 181 : Ligne 228 :
   wget -P $tempDIR http://$BL_SERVER/blacklists/download/blacklists.tar.gz 2>&1 | cat
   wget -P $tempDIR http://$BL_SERVER/blacklists/download/blacklists.tar.gz 2>&1 | cat
   if [ ! $? -eq 0 ]; then
   if [ ! $? -eq 0 ]; then
       echo "erreur lors du téléchargement processu interompu"
       echo "erreur lors du téléchargement, processus interrompu"
       rm -rf $tempDIR
       rm -rf $tempDIR
       set -e
       set -e
Ligne 188 : Ligne 235 :
   tar -xzf $tempDIR/blacklists.tar.gz -C $tempDIR
   tar -xzf $tempDIR/blacklists.tar.gz -C $tempDIR
   if [ ! $? -eq 0 ]; then
   if [ ! $? -eq 0 ]; then
       echo "erreur d'extraction de l'archive processu interompu"
       echo "erreur d'extraction de l'archive, processus interrompu"
       set -e
       set -e
       exit 1
       exit 1
Ligne 211 : Ligne 258 :
$SED "s?^AUTOUPDATE.*?AUTOUPDATE=ON?g" $FILE_CONF
$SED "s?^AUTOUPDATE.*?AUTOUPDATE=ON?g" $FILE_CONF
echo "*/10 * * * * root $CHEMINCTPARENTLE -aup" > /etc/cron.d/CTparental-autoupdate
echo "*/10 * * * * root $CHEMINCTPARENTLE -aup" > /etc/cron.d/CTparental-autoupdate
$CMDSERVICE$namservicecrond restart
$CRONrestart
}
}


Ligne 217 : Ligne 264 :
$SED "s?^AUTOUPDATE.*?AUTOUPDATE=OFF?g" $FILE_CONF
$SED "s?^AUTOUPDATE.*?AUTOUPDATE=OFF?g" $FILE_CONF
rm -f /etc/cron.d/CTparental-autoupdate
rm -f /etc/cron.d/CTparental-autoupdate
$CMDSERVICE$namservicecrond restart
$CRONrestart
}
}
adapt() {
adapt() {
Ligne 257 : Ligne 304 :
             $SED "/^#.*/d" $FILE_tmp
             $SED "/^#.*/d" $FILE_tmp
             $SED "/^$/d" $FILE_tmp
             $SED "/^$/d" $FILE_tmp
             $SED "s/\.\{2,1000\}/\./g" $FILE_tmp # supprime les suite de "." exemple: address=/fucking-big-tits..com/127.0.0.10 devient address=/fucking-big-tits.com/127.0.0.10
             $SED "s/\.\{2,10\}/\./g" $FILE_tmp # supprime les suite de "." exemple: address=/fucking-big-tits..com/127.0.0.10 devient address=/fucking-big-tits.com/127.0.0.10
    is_blacklist=`grep $DOMAINE $BL_CATEGORIES_AVAILABLE |wc -l`
    is_blacklist=`grep $DOMAINE $BL_CATEGORIES_AVAILABLE |wc -l`
    if [ $is_blacklist -ge "1" ] ; then
    if [ $is_blacklist -ge "1" ] ; then
Ligne 275 : Ligne 322 :
         $SED "/^#.*/d" $FILE_tmp  
         $SED "/^#.*/d" $FILE_tmp  
         $SED "/^$/d" $FILE_tmp  
         $SED "/^$/d" $FILE_tmp  
         $SED "s/\.\{2,1000\}/\./g" $FILE_tmp # supprime les suite de "." exemple: address=/fucking-big-tits..com/127.0.0.10 devient address=/fucking-big-tits.com/127.0.0.10
         $SED "s/\.\{2,10\}/\./g" $FILE_tmp # supprime les suite de "." exemple: address=/fucking-big-tits..com/127.0.0.10 devient address=/fucking-big-tits.com/127.0.0.10
         $SED "s?.*?address=/&/$PRIVATE_IP?g" $FILE_tmp  # Mise en forme dnsmasq
         $SED "s?.*?address=/&/$PRIVATE_IP?g" $FILE_tmp  # Mise en forme dnsmasq
         mv $FILE_tmp $DIR_DNS_FILTER_AVAILABLE/ossi.conf
         mv $FILE_tmp $DIR_DNS_FILTER_AVAILABLE/ossi.conf
Ligne 284 : Ligne 331 :
catChoice() {
catChoice() {
#  echo "catChoice"
#  echo "catChoice"
   rm -rf $DIR_DNS_BLACKLISTE_ENABLED/
   rm -rf $DIR_DNS_BLACKLIST_ENABLED/
   mkdir $DIR_DNS_BLACKLISTE_ENABLED
   mkdir $DIR_DNS_BLACKLIST_ENABLED
   rm -rf  $DIR_DNS_WHITELIST_ENABLED/
   rm -rf  $DIR_DNS_WHITELIST_ENABLED/
   mkdir  $DIR_DNS_WHITELIST_ENABLED
   mkdir  $DIR_DNS_WHITELIST_ENABLED
Ligne 293 : Ligne 340 :
is_blacklist=`grep $CATEGORIE $BL_CATEGORIES_AVAILABLE |wc -l`
is_blacklist=`grep $CATEGORIE $BL_CATEGORIES_AVAILABLE |wc -l`
if [ $is_blacklist -ge "1" ] ; then
if [ $is_blacklist -ge "1" ] ; then
cp $DIR_DNS_FILTER_AVAILABLE/$CATEGORIE.conf $DIR_DNS_BLACKLISTE_ENABLED/
cp $DIR_DNS_FILTER_AVAILABLE/$CATEGORIE.conf $DIR_DNS_BLACKLIST_ENABLED/
         else
         else
cp $DIR_DNS_FILTER_AVAILABLE/$CATEGORIE.conf $DIR_DNS_WHITELIST_ENABLED/
cp $DIR_DNS_FILTER_AVAILABLE/$CATEGORIE.conf $DIR_DNS_WHITELIST_ENABLED/
     fi     
     fi     
       done
       done
       cp $DIR_DNS_FILTER_AVAILABLE/ossi.conf $DIR_DNS_BLACKLISTE_ENABLED/
       cp $DIR_DNS_FILTER_AVAILABLE/ossi.conf $DIR_DNS_BLACKLIST_ENABLED/
#      echo "fincatChoice"
#      echo "fincatChoice"
       reabdomaine
       reabdomaine
Ligne 310 : Ligne 357 :
EOF
EOF
fi
fi
if [ ! -f $DIR_DNS_BLACKLISTE_ENABLED/ossi.conf ] ; then
if [ ! -f $DIR_DNS_BLACKLIST_ENABLED/ossi.conf ] ; then
echo > $DIR_DNS_BLACKLISTE_ENABLED/ossi.conf
echo > $DIR_DNS_BLACKLIST_ENABLED/ossi.conf
fi
fi
echo
echo
echo -n "Application de la liste blanche (domaine réabiliter):"
echo -n "Application de la liste blanche (domaine réhabilité):"
for CATEGORIE in `cat  $CATEGORIES_ENABLED  `  # pour chaque catégorie
for CATEGORIE in `cat  $CATEGORIES_ENABLED  `  # pour chaque catégorie
do  
do  
Ligne 322 : Ligne 369 :
for DOMAINE in `cat  $DREAB`
for DOMAINE in `cat  $DREAB`
do
do
    $SED "/$DOMAINE/d" $DIR_DNS_BLACKLISTE_ENABLED/$CATEGORIE.conf
    $SED "/$DOMAINE/d" $DIR_DNS_BLACKLIST_ENABLED/$CATEGORIE.conf
done
done
         fi
         fi
Ligne 332 : Ligne 379 :


dnsmasqon () {
dnsmasqon () {
   categorie1=`sed -n "1 p" $CATEGORIES_ENABLED` # on considaire que si la 1 er categorie activer est un blackliste on fonctionne par blackliste.
   categorie1=`sed -n "1 p" $CATEGORIES_ENABLED` # on considère que si la 1ère categorie activée est un blacklist on fonctionne par blacklist.
   is_blacklist=`grep $categorie1 $BL_CATEGORIES_AVAILABLE |wc -l`
   is_blacklist=`grep $categorie1 $BL_CATEGORIES_AVAILABLE |wc -l`
   if [ $is_blacklist -ge "1" ] ; then
   if [ $is_blacklist -ge "1" ] ; then
Ligne 339 : Ligne 386 :
         # Configuration file for "dnsmasq with blackhole"
         # Configuration file for "dnsmasq with blackhole"
   # Inclusion de la blacklist <domains> de Toulouse dans la configuration
   # Inclusion de la blacklist <domains> de Toulouse dans la configuration
   conf-dir=$DIR_DNS_BLACKLISTE_ENABLED
   conf-dir=$DIR_DNS_BLACKLIST_ENABLED
   # conf-file=$DIR_DEST_ETC/alcasar-dns-name  # zone de definition de noms DNS locaux
   # conf-file=$DIR_DEST_ETC/alcasar-dns-name  # zone de definition de noms DNS locaux
   no-dhcp-interface=$interface_WAN
   no-dhcp-interface=$interface_WAN
Ligne 351 : Ligne 398 :
    
    
EOF
EOF
$CMDSERVICE$namservicednsmaq restart
$DNSMASQrestart
else
else
   dnsmasqwhitelistonly
   dnsmasqwhitelistonly
Ligne 361 : Ligne 408 :
         # Configuration file for "dnsmasq with blackhole"
         # Configuration file for "dnsmasq with blackhole"
   # Inclusion de la blacklist <domains> de Toulouse dans la configuration
   # Inclusion de la blacklist <domains> de Toulouse dans la configuration
   # conf-dir=$DIR_DNS_BLACKLISTE_ENABLED
   # conf-dir=$DIR_DNS_BLACKLIST_ENABLED
   # conf-file=$DIR_DEST_ETC/alcasar-dns-name  # zone de definition de noms DNS locaux
   # conf-file=$DIR_DEST_ETC/alcasar-dns-name  # zone de definition de noms DNS locaux
   no-dhcp-interface=$interface_WAN
   no-dhcp-interface=$interface_WAN
Ligne 374 : Ligne 421 :
EOF
EOF


$CMDSERVICE$namservicednsmaq restart
$DNSMASQrestart
}
}
dnsmasqwhitelistonly  () {
dnsmasqwhitelistonly  () {
Ligne 391 : Ligne 438 :
   server=$DNS1
   server=$DNS1
   server=$DNS2
   server=$DNS2
   address=/#/$PRIVATE_IP #redirige vers $PRIVATE_IP pour tous ce qui n'a pas étais resolut dans les listes blanches
   address=/#/$PRIVATE_IP #redirige vers $PRIVATE_IP pour tout ce qui n'a pas été resolu dans les listes blanches
EOF
EOF


$CMDSERVICE$namservicednsmaq restart
$DNSMASQrestart
}
}




FoncHTTPDCONF () {
FoncHTTPDCONF () {
$CMDSERVICE$namservicehttpd stop
$LIGHTTPDstop
rm -rf $DIRHTML/*
rm -rf $DIRHTML/*
mkdir -v $DIRHTML
mkdir -v $DIRHTML
Ligne 493 : Ligne 540 :
"mod_alias",
"mod_alias",
"mod_redirect",
"mod_redirect",
"mod_auth", #pour insteface admin
"mod_auth", #pour interface admin
"mod_fastcgi",  #pour insteface admin (activation du php)
"mod_fastcgi",  #pour interface admin (activation du php)
# "mod_rewrite",
)
)
auth.debug                = 0
auth.debug                = 0
Ligne 504 : Ligne 550 :
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.pid-file = "$LIGHTTPpidfile"
server.username = "$USERHTTPD"
server.username = "$USERHTTPD"
server.groupname = "$GROUPHTTPD"
server.groupname = "$GROUPHTTPD"
Ligne 514 : Ligne 560 :
url.access-deny = ( "~", ".inc" )
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = (".php", ".pl", ".fcgi" )
static-file.exclude-extensions = (".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "text/css", "text/html", "text/plain" )


server.tag = ""
server.tag = ""
Ligne 578 : Ligne 621 :
mkdir -p $DIRadminHTML
mkdir -p $DIRadminHTML
cp -rf CTadmin/* $DIRadminHTML/
cp -rf CTadmin/* $DIRadminHTML/
#if [ $installdeb = "1" ]; then
#if [ $noinstalldep = "1" ]; then
# addadminhttpd "admin" "admin"
# addadminhttpd "admin" "admin"
#else
#else
Ligne 593 : Ligne 636 :
done
done
clear
clear
echo "Entrer le mot de $loginhttp :"
echo "Entrer le mot de passe de $loginhttp :"
while (true); do
while (true); do
read password
read password
Ligne 654 : Ligne 697 :
is_sudo_ok=`grep $USERHTTPD /etc/sudoers |wc -l`
is_sudo_ok=`grep $USERHTTPD /etc/sudoers |wc -l`
         if [ $is_sudo_ok -ge "1" ] ; then
         if [ $is_sudo_ok -ge "1" ] ; then
$SED "s?^Defaults:$USERHTTPD.*requiretty.*?Defaults:$USERHTTPD    \!requiretty?g" /etc/sudoers
$SED "s?^$USERHTTPD.*?$USERHTTPD ALL=(ALL) NOPASSWD:/usr/local/bin/CTparental.sh -tlu,/usr/local/bin/CTparental.sh -trf,/usr/local/bin/CTparental.sh -dble,/usr/local/bin/CTparental.sh -ubl,/usr/local/bin/CTparental.sh -dl,/usr/local/bin/CTparental.sh -on,/usr/local/bin/CTparental.sh -off,/usr/local/bin/CTparental.sh -aupon,/usr/local/bin/CTparental.sh -aupoff?g" /etc/sudoers
$SED "s?^$USERHTTPD.*?$USERHTTPD ALL=(ALL) NOPASSWD:/usr/local/bin/CTparental.sh -tlu,/usr/local/bin/CTparental.sh -trf,/usr/local/bin/CTparental.sh -dble,/usr/local/bin/CTparental.sh -ubl,/usr/local/bin/CTparental.sh -dl,/usr/local/bin/CTparental.sh -on,/usr/local/bin/CTparental.sh -off,/usr/local/bin/CTparental.sh -aupon,/usr/local/bin/CTparental.sh -aupoff?g" /etc/sudoers
         else
         else
echo "Defaults:$USERHTTPD    !requiretty" >> /etc/sudoers
         echo "$USERHTTPD ALL=(ALL) NOPASSWD:/usr/local/bin/CTparental.sh -tlu,/usr/local/bin/CTparental.sh -trf,/usr/local/bin/CTparental.sh -dble,/usr/local/bin/CTparental.sh -ubl,/usr/local/bin/CTparental.sh -dl,/usr/local/bin/CTparental.sh -on,/usr/local/bin/CTparental.sh -off,/usr/local/bin/CTparental.sh -aupon,/usr/local/bin/CTparental.sh -aupoff" >> /etc/sudoers
         echo "$USERHTTPD ALL=(ALL) NOPASSWD:/usr/local/bin/CTparental.sh -tlu,/usr/local/bin/CTparental.sh -trf,/usr/local/bin/CTparental.sh -dble,/usr/local/bin/CTparental.sh -ubl,/usr/local/bin/CTparental.sh -dl,/usr/local/bin/CTparental.sh -on,/usr/local/bin/CTparental.sh -off,/usr/local/bin/CTparental.sh -aupon,/usr/local/bin/CTparental.sh -aupoff" >> /etc/sudoers
         fi
         fi
Ligne 664 : Ligne 710 :
chown root:$GROUPHTTPD $FILE_HCONF
chown root:$GROUPHTTPD $FILE_HCONF
chmod 660 $FILE_HCONF
chmod 660 $FILE_HCONF
 
chown -R root:$GROUPHTTPD $DIRHTML
$CMDSERVICE$namservicehttpd start
chown -R root:$GROUPHTTPD $DIRadminHTML
$LIGHTTPDstart
test=$?
test=$?
if [ ! $test -eq 0 ];then
if [ ! $test -eq 0 ];then
Ligne 675 : Ligne 722 :


install () {
install () {
if [ $nomanuel -eq 0 ]; then
vim -h 2&> /dev/null
if [ $? -eq 0 ] ; then
EDIT="vim "
fi
mono -h 2&> /dev/null
if [ $? -eq 0 ] ; then
EDIT=${EDIT:="mono "}
fi
vi -h 2&> /dev/null
if [ $? -eq 0 ] ; then
EDIT=${EDIT:="vi "}
fi
if [ -f gpl-3.0.fr.txt ] ; then
cp -f gpl-3.0.fr.txt /usr/local/share/CTparental/
fi
if [ -f gpl-3.0.txt ] ; then
cp -f gpl-3.0.txt /usr/local/share/CTparental/
fi
if [ -f CHANGELOG ] ; then
cp -f CHANGELOG /usr/local/share/CTparental/
fi
if [ -f dist.conf ];then
cp -f dist.conf /usr/local/share/CTparental/dist.conf.orig
cp -f dist.conf $DIR_CONF/
fi
while (true); do
$EDIT $DIR_CONF/dist.conf
clear
cat $EDIT $DIR_CONF/dist.conf | grep -v -E ^#
echo "Entrer : S pour continuer avec ces parramêtres ."
echo "Entrer : Q pour Quiter l'installation."
echo "Entrer tous autre choix pour modifier les parramêtres."
read choi
case $choi in
S | s )
break
;;
Q | q )
exit
;;
esac
done
fi
if [ -f $DIR_CONF/dist.conf ];then
source  $DIR_CONF/dist.conf
fi
if [ -f /etc/NetworkManager/NetworkManager.conf ];then
    $SED "s/^dns=dnsmasq/#dns=dnsmasq/g" /etc/NetworkManager/NetworkManager.conf
    $NWMANAGERrestart
    sleep 5
  fi


       mkdir $tempDIR
       mkdir $tempDIR
Ligne 680 : Ligne 781 :
       initblenabled
       initblenabled
       cat /etc/resolv.conf > $DIR_CONF/resolv.conf.sav
       cat /etc/resolv.conf > $DIR_CONF/resolv.conf.sav
       if [ $installdeb = "0" ]; then
       if [ $noinstalldep = "0" ]; then
      $CMDINSTALL dnsmasq
      $CMDINSTALL $DEPENDANCES
      $CMDINSTALL lighttpd
      $CMDINSTALL php5-cgi
       fi
       fi
       if [ ! -f blacklists.tar.gz ]
       if [ ! -f blacklists.tar.gz ]
Ligne 691 : Ligne 790 :
         tar -xzf blacklists.tar.gz -C $tempDIR
         tar -xzf blacklists.tar.gz -C $tempDIR
         if [ ! $? -eq 0 ]; then
         if [ ! $? -eq 0 ]; then
             echo "erreur d'extraction de l'archive processu interompu"
             echo "Erreur d'extraction de l'archive, processus interrompu"
             uninstall
             uninstall
             set -e
             set -e
Ligne 703 : Ligne 802 :
       dnsmasqon
       dnsmasqon
       $SED "s?^LASTUPDATE.*?LASTUPDATE=$THISDAYS=`date +%d-%m-%Y\ %T`?g" $FILE_CONF
       $SED "s?^LASTUPDATE.*?LASTUPDATE=$THISDAYS=`date +%d-%m-%Y\ %T`?g" $FILE_CONF
      if [ $installdeb = "0" ]; then
    $CMDINSTALL $paquetresolv
      fi
       confresolvconf
       confresolvconf
       FoncHTTPDCONF
       FoncHTTPDCONF
}
      $ENCRON
      $ENLIGHTTPD
      $ENDNSMASQ
      $ENNWMANAGER
 
     
}


confresolvconf () {
confresolvconf () {
echo "nameserver 127.0.0.1" > $RESOLVDNSMASQ
if [ $NORESOLVCONF -eq 1 ] ; then
if [ ! -f $RESOLVCONFORDER ];then
chattr -i /etc/resolv.conf
echo "nameserver 127.0.0.1" > /etc/resolv.conf
chattr +i /etc/resolv.conf
else
echo "nameserver 127.0.0.1" > $RESOLVDNSMASQ
if [ ! -f $RESOLVCONFORDER ];then
cat << EOF > $RESOLVCONFORDER
cat << EOF > $RESOLVCONFORDER
# interface-order(5)
# interface-order(5)
lo.inet*
lo.inet*
lo.dnsmasq
lo.dnsmasq
lo.pdnsd
lo.pdnsd
lo.!(pdns|pdns-recursor)
lo.!(pdns|pdns-recursor)
lo
lo
tun*
tun*
tap*
tap*
hso*
hso*
em+([0-9])?[+([0-9]))*
em+([0-9])?[+([0-9]))*
p+([0-9]p+([0-9])?(_+([0-9]))*
p+([0-9]p+([0-9])?(_+([0-9]))*
eth*
eth*
ath*
ath*
wlan*
wlan*
ppp*
ppp*
*
*
EOF
EOF
fi
resolvconf -u
fi
fi
resolvconf -u
}
}


uninstall () {
uninstall () {
   rm -f /etc/cron.d/CTparental*
   rm -f /etc/cron.d/CTparental*
   $CMDSERVICE$namservicecrond restart
   $DNSMASQrestart
   $CMDSERVICE$namservicehttpd stop
   $LIGHTTPDstop
   rm -f /var/www/index.lighttpd.html
   rm -f /var/www/index.lighttpd.html
   rm -rf $tempDIR
   rm -rf $tempDIR
  rm -rf $DIR_CONF
   rm -rf $DIRHTML
   rm -rf $DIRHTML


  rm -rf /usr/local/share/CTparental
  rm -rf /usr/share/lighttpd/*
  rm -f $CTPARENTALCONFHTTPD
  rm -rf $DIRadminHTML
  if [ $NORESOLVCONF -eq 1 ] ; then
chattr -i /etc/resolv.conf
cat $DIR_CONF/resolv.conf.sav > /etc/resolv.conf
dhclient -r
dhclient
  else
  rm -f $RESOLVDNSMASQ
  resolvconf -u
  fi
   if [ -f /etc/NetworkManager/NetworkManager.conf ];then
   if [ -f /etc/NetworkManager/NetworkManager.conf ];then
$SED "s/^#dns=dnsmasq/dns=dnsmasq/g" /etc/NetworkManager/NetworkManager.conf
$SED "s/^#dns=dnsmasq/dns=dnsmasq/g" /etc/NetworkManager/NetworkManager.conf
$CMDSERVICE$namserviceNetworkManager restart
$NWMANAGERrestart
   sleep 5
   sleep 5
   fi
   fi
  rm -rf /usr/share/lighttpd/*
   rm -rf $DIR_CONF
  rm -f $CTPARENTALCONFHTTPD
   if [ $noinstalldep = "0" ]; then
   rm -rf $DIRadminHTML
  $CMDREMOVE $DEPENDANCES
  rm -f $RESOLVDNSMASQ
  resolvconf -u
   if [ $installdeb = "0" ]; then
          $CMDREMOVE php5-cgi
  $CMDREMOVE lighttpd
  $CMDREMOVE dnsmasq
  $CMDREMOVE $paquetresolv
   fi
   fi
}
}
Ligne 766 : Ligne 879 :
echo -n > $CATEGORIES_ENABLED
echo -n > $CATEGORIES_ENABLED
clear
clear
echo "Voulez Filtre par Blackliste ou Whiteliste :"
echo "Voulez-vous filtrer par Blacklist ou Whitelist :"
echo -n " B/W :"
echo -n " B/W :"
while (true); do
while (true); do
Ligne 772 : Ligne 885 :
         case $choi in
         case $choi in
         B | b )
         B | b )
         echo "Vous aller maintenant choisir les \"Black listes\" a appliquer."
         echo "Vous allez maintenant choisir les \"Black listes\" à appliquer."
for CATEGORIE in `cat  $BL_CATEGORIES_AVAILABLE`  # pour chaque catégorie
for CATEGORIE in `cat  $BL_CATEGORIES_AVAILABLE`  # pour chaque catégorie
do   
do   
Ligne 794 : Ligne 907 :
         ;;
         ;;
         W | w )
         W | w )
         echo "Vous aller maintenant choisir les \"White listes\" a appliquer."
         echo "Vous allez maintenant choisir les \"White listes\" à appliquer."
for CATEGORIE in `cat  $WL_CATEGORIES_AVAILABLE`  # pour chaque catégorie
for CATEGORIE in `cat  $WL_CATEGORIES_AVAILABLE`  # pour chaque catégorie
do   
do   
Ligne 822 : Ligne 935 :
errortime1 () {
errortime1 () {
clear
clear
echo -e "L'heure de debut doit ètre strictement inférieur a l'heure de fin: $RougeD$input$Fcolor "
echo -e "L'heure de début doit être strictement inférieure a l'heure de fin: $RougeD$input$Fcolor "
echo "exemple: 08h00 a 23h59 ou 08h00 a 12h00 et 14h00 a 23h59"
echo "exemple: 08h00 à 23h59 ou 08h00 à 12h00 et 14h00 à 23h59"
echo -e -n "$RougeD$PCUSER$Fcolor est autorisés à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de:"
echo -e -n "$RougeD$PCUSER$Fcolor est autorisé à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de :"
}
}
errortime2 () {
errortime2 () {
clear
clear
echo -e "Mauvaise syntaxe: $RougeD$input$Fcolor "
echo -e "Mauvaise syntaxe: $RougeD$input$Fcolor "
echo "exemple: 08h00 a 23h59 ou 08h00 a 12h00 et 14h00 a 23h59"
echo "exemple: 08h00 à 23h59 ou 08h00 à 12h00 et 14h00 à 23h59"
echo -e -n "$RougeD$PCUSER$Fcolor est autorisés à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de:"
echo -e -n "$RougeD$PCUSER$Fcolor est autorisé à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de :"
}
}


pause () {   # fonction pause pour debugage
 
      choi=""
timecronalert () {
      echo  "pour continuer  press Q :"
MinAlert=${1} # temp en minute entre l'alerte et l'action
      while (true); do
H=$((10#${2}))
        read choi
M=$((10#${3}))
        case $choi in
D=$((10#${4}))
        Q | q )
MinTotalAlert="$(($H*60+$M-$MinAlert))"
        break
if [ $(( $MinTotalAlert < 0 )) -eq 1 ]
        ;;
then
      esac
if [ $Numday -eq 0 ] ; then
      done
D=6
else
D=$(( $D -1 ))
fi
MinTotalAlert="$(($(($H + 24))*60+$M-$MinAlert))"
fi
Halert=$(($MinTotalAlert/60))
MAlert=$(($MinTotalAlert - $(( $Halert *60 )) ))
echo "$MAlert $Halert * * ${DAYSCRON[$D]}"
}
}
activetimelogin () {
activetimelogin () {
   TESTGESTIONNAIRE=""
   TESTGESTIONNAIRE=""
Ligne 851 : Ligne 973 :
       if [ -f $DIRPAM$FILE ];then
       if [ -f $DIRPAM$FILE ];then
         if [ $(cat $DIRPAM$FILE | grep -c "account required pam_time.so") -eq 0  ] ; then
         if [ $(cat $DIRPAM$FILE | grep -c "account required pam_time.so") -eq 0  ] ; then
             echo "account required pam_time.so" >> $DIRPAM$FILE
             $SED "1i account required pam_time.so" $DIRPAM$FILE
         fi
         fi
         TESTGESTIONNAIRE=$TESTGESTIONNAIRE\ $FILE
         TESTGESTIONNAIRE=$TESTGESTIONNAIRE\ $FILE
Ligne 857 : Ligne 979 :
   done
   done
   if [ $( echo $TESTGESTIONNAIRE | wc -m ) -eq 1 ] ; then
   if [ $( echo $TESTGESTIONNAIRE | wc -m ) -eq 1 ] ; then
       echo "Aucun gestionner de session connu , n'a été détecté."
       echo "Aucun gestionnaire de session connu n'a été détecté."
       echo " il est donc impossible d'activer le controle horaires des connections"
       echo " il est donc impossible d'activer le contrôle horaire des connexions"
       desactivetimelogin
       desactivetimelogin
       exit 1
       exit 1
Ligne 871 : Ligne 993 :
   echo  > /etc/cron.d/CTparental${DAYS[$NumDAY]}
   echo  > /etc/cron.d/CTparental${DAYS[$NumDAY]}
   done
   done
   for PCUSER in `cat /etc/passwd | cut -d":" -f1,3| grep -E [1-9][0-9][0-9][0-9] | cut -d ":" -f1`
   for PCUSER in `listeusers`
   do
   do
  HOMEPCUSER=$(getent passwd "$PCUSER" | cut -d ':' -f6)
   $SED "/^$PCUSER=/d" $FILE_HCONF
   $SED "/^$PCUSER=/d" $FILE_HCONF
   echo -e -n "$PCUSER est autoriser a ce connecter 7j/7 24h/24 O/N?"  
   echo -e -n "$PCUSER est autorisé a se connecter 7j/7 24h/24 O/N?"  
   choi=""
   choi=""
   while (true); do
   while (true); do
Ligne 899 : Ligne 1 022 :
 
 
         clear
         clear
         echo "exemple: 00h00 a 23h59 ou 08h00 a 12h00 et 14h00 a 16h50"
         echo "exemple: 00h00 à 23h59 ou 08h00 à 12h00 et 14h00 à 16h50"
         echo -e -n "$RougeD$PCUSER$Fcolor est autorisés à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de:"
         echo -e -n "$RougeD$PCUSER$Fcolor est autorisé à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de :"
         while (true); do
         while (true); do
             read choi
             read choi
             input=$choi
             input=$choi
             choi=$(echo $choi | sed -e "s/h//g" | sed -e "s/ //g" | sed -e "s/a/-/g" | sed -e "s/et/:/g" ) # mise en forme de choi pour pam   
             choi=$(echo $choi | sed -e "s/h//g" | sed -e "s/ //g" | sed -e "s/a/-/g" | sed -e "s/et/:/g" ) # mise en forme de la variable choi pour pam   
               if [ $( echo $choi | grep -E -c "^([0-1][0-9]|2[0-3])[0-5][0-9]-([0-1][0-9]|2[0-3])[0-5][0-9]$|^([0-1][0-9]|2[0-3])[0-5][0-9]-([0-1][0-9]|2[0-3])[0-5][0-9]:([0-1][0-9]|2[0-3])[0-5][0-9]-([0-1][0-9]|2[0-3])[0-5][0-9]$" ) -eq 1 ];then
               if [ $( echo $choi | grep -E -c "^([0-1][0-9]|2[0-3])[0-5][0-9]-([0-1][0-9]|2[0-3])[0-5][0-9]$|^([0-1][0-9]|2[0-3])[0-5][0-9]-([0-1][0-9]|2[0-3])[0-5][0-9]:([0-1][0-9]|2[0-3])[0-5][0-9]-([0-1][0-9]|2[0-3])[0-5][0-9]$" ) -eq 1 ];then
                   int1=$(echo $choi | cut -d ":" -f1 | cut -d "-" -f1)
                   int1=$(echo $choi | cut -d ":" -f1 | cut -d "-" -f1)
Ligne 917 : Ligne 1 040 :
                           HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2|"
                           HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2|"
                         fi
                         fi
                         MINUTES1=$(echo $int1 | sed -e 's/.\{02\}//')
                         m1=$(echo $int1 | sed -e 's/.\{02\}//')
                         HEURES1=$(echo $int1 | sed -e 's/.\{02\}$//')  
                         h1=$(echo $int1 | sed -e 's/.\{02\}$//')  
                         MINUTES2=$(echo $int2 | sed -e 's/.\{02\}//')
                         m2=$(echo $int2 | sed -e 's/.\{02\}//')
                         HEURES2=$(echo $int2 | sed -e 's/.\{02\}$//')
                         h2=$(echo $int2 | sed -e 's/.\{02\}$//')
echo "$PCUSER=$NumDAY=$HEURES1${h}h$MINUTES1:$HEURES2${h}h$MINUTES2" >> $FILE_HCONF   
echo "$PCUSER=$NumDAY=$h1${h}h$m1:$h2${h}h$m2" >> $FILE_HCONF   
                         echo "$MINUTES2 $HEURES2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
                         echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
for count in 1 2 3 4 5
do
                        echo "$(timecronalert $count $h2 $m2 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER  /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes \" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
done
                         break
                         break
    
    
Ligne 933 : Ligne 1 060 :
                                 HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2|${DAYSPAM[$NumDAY]}$int3-$int4|"
                                 HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2|${DAYSPAM[$NumDAY]}$int3-$int4|"
                               fi
                               fi
                               MINUTES1=$(echo $int1 | sed -e 's/.\{02\}//')
                               m1=$(echo $int1 | sed -e 's/.\{02\}//')
                               HEURES1=$(echo $int1 | sed -e 's/.\{02\}$//')   
                               h1=$(echo $int1 | sed -e 's/.\{02\}$//')   
                               MINUTES2=$(echo $int2 | sed -e 's/.\{02\}//')
                               m2=$(echo $int2 | sed -e 's/.\{02\}//')
                               HEURES2=$(echo $int2 | sed -e 's/.\{02\}$//')   
                               h2=$(echo $int2 | sed -e 's/.\{02\}$//')   
                               MINUTES3=$(echo $int3 | sed -e 's/.\{02\}//')
                               m3=$(echo $int3 | sed -e 's/.\{02\}//')
                               HEURES3=$(echo $int3 | sed -e 's/.\{02\}$//')   
                               h3=$(echo $int3 | sed -e 's/.\{02\}$//')   
                               MINUTES4=$(echo $int4 | sed -e 's/.\{02\}//')
                               m4=$(echo $int4 | sed -e 's/.\{02\}//')
                               HEURES4=$(echo $int4 | sed -e 's/.\{02\}$//')   
                               h4=$(echo $int4 | sed -e 's/.\{02\}$//')   
                               ## minutes heures jourdumoi moi jourdelasemaine utilisateur  commande
                               ## minutes heures jourdumoi moi jourdelasemaine utilisateur  commande
      echo "$PCUSER=$NumDAY=$HEURES1${h}h$MINUTES1:$HEURES2${h}h$MINUTES2:$HEURES3${h}h$MINUTES3:$HEURES4${h}h$MINUTES4" >> $FILE_HCONF
  echo "$PCUSER=$NumDAY=$h1${h}h$m1:$h2${h}h$m2:$h3${h}h$m3:$h4${h}h$m4" >> $FILE_HCONF
                               echo "$MINUTES2 $HEURES2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
                               echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
                              echo "$MINUTES4 $HEURES4 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
      echo "$m4 $h4 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
      for count in 1 2 3 4 5
      do
                              echo "$(timecronalert $count $h2 $m2 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER  /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes \" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
                              echo "$(timecronalert $count $h4 $m4 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER  /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes\" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
      done
                           
                               break   
                               break   
                           else
                           else
Ligne 978 : Ligne 1 111 :
   echo >> $FILE_HCONF
   echo >> $FILE_HCONF
$SED "s?^HOURSCONNECT.*?HOURSCONNECT=ON?g" $FILE_CONF
$SED "s?^HOURSCONNECT.*?HOURSCONNECT=ON?g" $FILE_CONF
$CMDSERVICE$namservicecrond restart
$CRONrestart
}
}


Ligne 993 : Ligne 1 126 :
$SED "s?^HOURSCONNECT.*?HOURSCONNECT=OFF?g" $FILE_CONF
$SED "s?^HOURSCONNECT.*?HOURSCONNECT=OFF?g" $FILE_CONF


$CMDSERVICE$namservicecrond restart
$CRONrestart
}
 
 
listeusers () {
TABUSER=( " $(getent passwd | cut -d":" -f1,3) " )
for LIGNES in $TABUSER
do
#echo $(echo $LIGNES | cut -d":" -f2)
if [ $(echo $LIGNES | cut -d":" -f2) -ge $UIDMINUSER ] ;then
echo $LIGNES | cut -d":" -f1
fi
done
}
}


Ligne 1 003 : Ligne 1 148 :
       if [ -f $DIRPAM$FILE ];then
       if [ -f $DIRPAM$FILE ];then
         if [ $(cat $DIRPAM$FILE | grep -c "account required pam_time.so") -eq 0  ] ; then
         if [ $(cat $DIRPAM$FILE | grep -c "account required pam_time.so") -eq 0  ] ; then
             echo "account required pam_time.so" >> $DIRPAM$FILE
             $SED "1i account required pam_time.so" $DIRPAM$FILE
         fi
         fi
         TESTGESTIONNAIRE=$TESTGESTIONNAIRE\ $FILE
         TESTGESTIONNAIRE=$TESTGESTIONNAIRE\ $FILE
Ligne 1 009 : Ligne 1 154 :
   done
   done
   if [ $( echo $TESTGESTIONNAIRE | wc -m ) -eq 1 ] ; then
   if [ $( echo $TESTGESTIONNAIRE | wc -m ) -eq 1 ] ; then
       echo "Aucun gestionner de session connu , n'a été détecté."
       echo "Aucun gestionnaire de session connu n'a été détecté."
       echo " il est donc impossible d'activer le controle horaires des connections"
       echo " il est donc impossible d'activer le contrôle horaire des connexions"
       desactivetimelogin
       desactivetimelogin
       exit 1
       exit 1
Ligne 1 024 : Ligne 1 169 :
   done
   done
    
    
   for PCUSER in `cat /etc/passwd | cut -d":" -f1,3| grep -E [1-9][0-9][0-9][0-9] | cut -d ":" -f1`
   for PCUSER in `listeusers`
   do
   do
  HOMEPCUSER=$(getent passwd "$PCUSER" | cut -d ':' -f6)
   HORAIRESPAM=""
   HORAIRESPAM=""
   userisconfigured="0"
   userisconfigured="0"
Ligne 1 052 : Ligne 1 198 :
echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
echo "$m4 $h4 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
echo "$m4 $h4 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
for count in 1 2 3 4 5
do
echo "$(timecronalert $count $h2 $m2 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER  /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes \" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
echo "$(timecronalert $count $h4 $m4 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER  /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes \" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
userisconfigured="1"
userisconfigured="1"
done


else
else
Ligne 1 060 : Ligne 1 211 :
          HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$h1$m1-$h2$m2|"
          HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$h1$m1-$h2$m2|"
        fi
        fi
for count in 1 2 3 4 5
do
echo "$(timecronalert $count $h2 $m2 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER  /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes \" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
done
echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
userisconfigured="1"
userisconfigured="1"
fi
fi
Ligne 1 075 : Ligne 1 231 :


$SED "s?^HOURSCONNECT.*?HOURSCONNECT=ON?g" $FILE_CONF
$SED "s?^HOURSCONNECT.*?HOURSCONNECT=ON?g" $FILE_CONF
$CMDSERVICE$namservicecrond restart
$CRONrestart
}
}


Ligne 1 082 : Ligne 1 238 :
usage="Usage: CTparental.sh    {-i }|{ -u }|{ -dl }|{ -ubl }|{ -rl }|{ -on }|{ -off }|{ -cble }|{ -dble }
usage="Usage: CTparental.sh    {-i }|{ -u }|{ -dl }|{ -ubl }|{ -rl }|{ -on }|{ -off }|{ -cble }|{ -dble }
                               |{ -tlo }|{ -tlu }|{ -uhtml }|{ -aupon }|{ -aupoff }|{ -aup }  
                               |{ -tlo }|{ -tlu }|{ -uhtml }|{ -aupon }|{ -aupoff }|{ -aup }  
-i      => Install le controll parental sur l'ordinateur (pc de bureau) peut ètre utiliser avec
-i      => Installe le contrôle parental sur l'ordinateur (pc de bureau). Peut être utilisé avec
           un paramètre suplémentaire pour indiquer un chemin de sources pour la page web de redirection.
           un paramètre supplémentaire pour indiquer un chemin de sources pour la page web de redirection.
           exemple : CTparental.sh -i /home/toto/html/
           exemple : CTparental.sh -i -dirhtml /home/toto/html/
           si pas d'option le \"sens interdit\" est utiliser par default.
           si pas d'option le \"sens interdit\" est utilisé par défaut.
-u      => désinstall le controll parental de l'ordinateur (pc de bureau)
-u      => désinstalle le contrôle parental de l'ordinateur (pc de bureau)
-dl    => mais a jour le controll a partir de la black liste de l'université de toulouse
-dl    => met à jour le contrôle parental à partir de la blacklist de l'université de Toulouse
-ubl    => A faire aprés chaque modification du fichier $DNS_FILTER_OSSI
-ubl    => A faire après chaque modification du fichier $DNS_FILTER_OSSI
-rl    => A faire aprés chaque modification manuel du fichier $DREAB
-rl    => A faire après chaque modification manuelle du fichier $DREAB
-on    => Active le controll parental
-on    => Active le contrôle parental
-off    => Désactive le controll parental
-off    => Désactive le contrôle parental
-cble  => Configure du mode de filtrage par liste blanche ou par liste noir(default) ainssi que les  
-cble  => Configure le mode de filtrage par liste blanche ou par liste noire (défaut) ainsi que les  
           catégories que l'on veux activer.
           catégories que l'on veut activer.
-dble  => Remet les catégories activent par défaut et filtrage par liste noir.
-dble  => Remet les catégories actives par défaut et le filtrage par liste noire.
-tlo    => Active est paramètre les restrictions horaire de login pour les utilisateurs.
-tlo    => Active et paramètre les restrictions horaires de login pour les utilisateurs.
           Compatible avec les gestionnaire de sessions suivant $GESTIONNAIREDESESSIONS .
           Compatible avec les gestionnaire de sessions suivant $GESTIONNAIREDESESSIONS .
-tlu    => Desative les restrictions horaire de login pour les utilisateurs.
-tlu    => Désactive les restrictions horaires de login pour les utilisateurs.
-uhtml  => mait a jour la page de redirection a partir d'un repertoir source ou par defaut avec  
-uhtml  => met à jour la page de redirection à partir d'un répertoire source ou par défaut avec  
             le \"sens interdit\".
             le \"sens interdit\".
             exemples:
             exemples:
                     - avec un repertoir source : CTparental.sh -uhtml /home/toto/html/
                     - avec un repertoire source : CTparental.sh -uhtml -dirhtml /home/toto/html/
       - par default :              CTparental.sh -uhtml
       - par défaut :              CTparental.sh -uhtml
             permet aussi de changer le couple login ,mots de passe de l'interface web.
             permet aussi de changer le couple login, mot de passe de l'interface web.
-aupon  => active la mise ajour automatique de la black liste de toulouse (tous les 7 jours).
-aupon  => active la mise à jour automatique de la blacklist de Toulouse (tous les 7 jours).
-aupoff => desactve la mise ajour automatique de la black liste de toulouse.
-aupoff => désactive la mise à jour automatique de la blacklist de Toulouse.
-aup    => comme -dl mais seulement si il n'y a pas eu de mise a jour depuis plus de 7 jours.
-aup    => comme -dl mais seulement si il n'y a pas eu de mise à jour depuis plus de 7 jours.
-nodep  => si placer aprés -i ou -u permet de ne pas installer/désinstaller les dépendances, utiles si
            on préfaire les installer a la mains , ou pour le scripte de postinst et prerm
            du deb.
            exemples:
                    CTparental.sh -i -nodep
    CTparental.sh -i -dirhtml /home/toto/html/ -nodep 
    CTparental.sh -u -nodep
-nomanuel => utiliser uniquement pour le scripte de postinst et prerm
            du deb.
  "
  "
case $args in
case $arg1 in
   -\? | -h* | --h*)
   -\? | -h* | --h*)
       echo "$usage"
       echo "$usage"
Ligne 1 188 : Ligne 1 353 :
     -aup | --autoupdate )
     -aup | --autoupdate )
       autoupdate
       autoupdate
      ;;
    -listusers )
      listeusers
       ;;
       ;;
        
        
Ligne 1 209 : Ligne 1 377 :
</HEAD>
</HEAD>
<body>
<body>
<?
<?php
function form_filter ($form_content)
function form_filter ($form_content)
{
{
Ligne 1 224 : Ligne 1 392 :
   $Language = strtolower(substr(chop($Langue[0]),0,2)); }
   $Language = strtolower(substr(chop($Langue[0]),0,2)); }
if($Language == 'fr'){
if($Language == 'fr'){
   $l_hours_error1="un mauvais format horaire a étais trouver:exemple 8h30 doit c'écrir 08h30";
  $l_switch_LogOFF="Déconnection";
   $l_hours_error2="incoérance horaire: ";
   $l_hours_error1="un mauvais format horaire a été trouvé :exemple 8h30 doit s'écrire 08h30";
   $l_hours_on = "Les horaires de connection sont actuellement activés";
   $l_hours_error2="incohérence horaire : ";
   $l_hours_off = "Les horaires de connection sont actuellement désactivés";
   $l_hours_on = "Les horaires de connexion sont actuellement activés";
   $l_switch_hours_off = "Désactiver les horaires de connection";
   $l_hours_off = "Les horaires de connexion sont actuellement désactivés";
   $l_switch_hours_on = "Activer les horaires de connection";
   $l_switch_hours_off = "Désactiver les horaires de connexion";
   $l_hours1 = "Heures de connections autorisées";
   $l_switch_hours_on = "Activer les horaires de connexion";
   $l_hours1 = "Heures de connexions autorisées";
   $l_switch_Init_bl = "Init Catégories";
   $l_switch_Init_bl = "Init Catégories";
   $l_auto_update_on = "La mise a jour de la blackliste de Toulouse tout les 7 jour est activé";
   $l_auto_update_on = "La mise à jour de la blacklist de Toulouse tous les 7 jours est activée";
   $l_auto_update_off = "La mise a jour de la blackliste de Toulouse tout les 7 jour est désactivé";
   $l_auto_update_off = "La mise à jour de la blacklist de Toulouse tous les 7 jours est désactivée";
   $l_switch_auto_update_on = "Activer Maj Auto";
   $l_switch_auto_update_on = "Activer Maj Auto";
   $l_switch_auto_update_off = "Désactiver Maj Auto";
   $l_switch_auto_update_off = "Désactiver Maj Auto";
   $l_fmenu_black = "Firlrage par BlackListe";
   $l_fmenu_black = "Filtrage par BlackList";
   $l_fmenu_white = "Firlrage par WhiteListe";
   $l_fmenu_white = "Filtrage par WhiteList";
   $l_title1 = "Filtrage de noms de domaine ";
   $l_title1 = "Filtrage de noms de domaine ";
   $l_error_open_file="Erreur d'ouverture du fichier";
   $l_error_open_file="Erreur d'ouverture du fichier";
Ligne 1 254 : Ligne 1 423 :
   $l_reject_bl="Rejeter";
   $l_reject_bl="Rejeter";
   $l_warning="Temps estimé : une minute.";
   $l_warning="Temps estimé : une minute.";
   $l_specific_filtering="Filtrage special";
   $l_specific_filtering="Filtrage spécial";
   $l_forbidden_dns="Noms de domaine filtrés";
   $l_forbidden_dns="Noms de domaine filtrés";
   $l_forbidden_dns_explain="Entrez un nom de domaine par ligne (exemple : domaine.org)";
   $l_forbidden_dns_explain="Entrez un nom de domaine par ligne (exemple : domaine.org)";
Ligne 1 260 : Ligne 1 429 :
   $l_rehabilitated_dns="Noms de domaine réhabilités";
   $l_rehabilitated_dns="Noms de domaine réhabilités";
   $l_rehabilitated_dns_explain_bl="1-Entrez ici des noms de domaine bloqués par la liste noire <BR> que vous souhaitez réhabiliter.";
   $l_rehabilitated_dns_explain_bl="1-Entrez ici des noms de domaine bloqués par la liste noire <BR> que vous souhaitez réhabiliter.";
   $l_rehabilitated_dns_explain_wl="2-Entrez ici des noms de domaine autorisée en plus de ceux <BR> de la liste blanche de Toulouze.";
   $l_rehabilitated_dns_explain_wl="2-Entrez ici des noms de domaine autorisés en plus de ceux <BR> de la liste blanche de Toulouse.";
   $l_add_to_bl="Noms de domaine ajoutés à la liste noire";
   $l_add_to_bl="Noms de domaine ajoutés à la liste noire";
   $l_record="Enregistrer les modifications";
   $l_record="Enregistrer les modifications";
Ligne 1 266 : Ligne 1 435 :
}
}
else {
else {
   $l_hours_error1="un mauvais format horaire a étais trouver:exemple 8h30 doit c'écrir 08h30";
  $l_switch_LogOFF="Logout";
   $l_hours_error2="incoérance horaire: ";
   $l_hours_error1="Un mauvais format horaire a été trouvé : exemple 8h30 doit s'écrire 08h30";
   $l_hours_on = "Les horaires de connection sont actuellement activés";
   $l_hours_error2="incohérence horaire : ";
   $l_hours_off = "Les horaires de connection sont actuellement désactivés";
   $l_hours_on = "Les horaires de connexion sont actuellement activés";
   $l_switch_hours_off = "Désactiver les horaires de connection";
   $l_hours_off = "Les horaires de connexion sont actuellement désactivés";
   $l_switch_hours_on = "Activer les horaires de connection";
   $l_switch_hours_off = "Désactiver les horaires de connexion";
   $l_hours1 = "Heures de connections autorisées";
   $l_switch_hours_on = "Activer les horaires de connexion";
   $l_hours1 = "Heures de connexions autorisées";
   $l_switch_Init_bl = "Init Catégories";
   $l_switch_Init_bl = "Init Catégories";
   $l_auto_update_on = "La mise a jour de la blackliste de Toulouse tout les 7 jour est activé";
   $l_auto_update_on = "La mise à jour de la blacklist de Toulouse tous les 7 jours est activée";
   $l_auto_update_off = "La mise a jour de la blackliste de Toulouse tout les 7 jour est désactivé";
   $l_auto_update_off = "La mise à jour de la blacklist de Toulouse tous les 7 jours est désactivée";
   $l_switch_auto_update_on = "Activer Maj Auto";
   $l_switch_auto_update_on = "Activer Maj Auto";
   $l_switch_auto_update_off = "Désactiver Maj Auto";
   $l_switch_auto_update_off = "Désactiver Maj Auto";
   $l_fmenu_black = "Firlrage par BlackListe";
   $l_fmenu_black = "Filtrage par BlackList";
   $l_fmenu_white = "Firlrage par WhiteListe";
   $l_fmenu_white = "Filtrage par WhiteList";
   $l_title1 = "Domain names filtering";
   $l_title1 = "Domain names filtering";
   $l_error_open_file="Error opening the file";
   $l_error_open_file="Error opening the file";
Ligne 1 286 : Ligne 1 456 :
   $l_switch_filtering_on="Switch the Filter on";
   $l_switch_filtering_on="Switch the Filter on";
   $l_switch_filtering_off="Switch the Filter off";
   $l_switch_filtering_off="Switch the Filter off";
   $l_main_bl="Blacklist/Whiteliste";
   $l_main_bl="Blacklist/Whitelist";
   $l_bl_version="Current version : ";
   $l_bl_version="Current version : ";
   $l_bl_categories_bl="Choice of filtered categories";
   $l_bl_categories_bl="Choice of filtered categories";
   $l_bl_categories_wl="Choice of autorised categories";
   $l_bl_categories_wl="Choice of authorized categories";
   $l_download_bl="Download the last version";
   $l_download_bl="Download the last version";
   $l_fingerprint="The digital fingerprint of the downloaded blacklist is : ";
   $l_fingerprint="The digital fingerprint of the downloaded blacklist is : ";
Ligne 1 302 : Ligne 1 472 :
   $l_rehabilitated_dns="Rehabilitated domain names";
   $l_rehabilitated_dns="Rehabilitated domain names";
   $l_rehabilitated_dns_explain_bl="Enter here domain names that are blocked by the blacklist <BR> and you want to rehabilitate.";
   $l_rehabilitated_dns_explain_bl="Enter here domain names that are blocked by the blacklist <BR> and you want to rehabilitate.";
   $l_rehabilitated_dns_explain_wl="2-Entrez ici des noms de domaine autorisée en plus de ceux <BR> de la liste blanche de Toulouze.";
   $l_rehabilitated_dns_explain_wl="2-Entrez ici des noms de domaine autorisés en plus de ceux <BR> de la liste blanche de Toulouse.";
   $l_add_to_bl="Domain names to add to blacklist";
   $l_add_to_bl="Domain names to add to blacklist";
   $l_record="Save changes";
   $l_record="Save changes";
Ligne 1 313 : Ligne 1 483 :
$hconf_file="/usr/local/etc/CTparental/CThours.conf";
$hconf_file="/usr/local/etc/CTparental/CThours.conf";
$wl_domains="/usr/local/etc/CTparental/domaine-rehabiliter";
$wl_domains="/usr/local/etc/CTparental/domaine-rehabiliter";
$bl_domains="/usr/local/etc/CTparental/blackliste-local";
$bl_domains="/usr/local/etc/CTparental/blacklist-local";
# default values
# default values


Ligne 1 320 : Ligne 1 490 :
switch ($choix)
switch ($choix)
{
{
case 'LogOFF' :
header('HTTP/1.0 401 Unauthorized');
header('WWW-Authenticate: Digest realm="interface admin"');
exit;
break;
case 'BL_On' :
case 'BL_On' :
exec ("sudo -u root /usr/local/bin/CTparental.sh -on");
exec ("sudo -u root /usr/local/bin/CTparental.sh -on");
Ligne 1 382 : Ligne 1 557 :
if (strstr($line,$selectuser) == false)
if (strstr($line,$selectuser) == false)
{
{
fwrite($pointeur,$line); # on reécrit toutes les lignes ne corepondent pas a l'utilisateur selectionner
fwrite($pointeur,$line); # on reécrit toutes les lignes ne correspondant pas à l'utilisateur sélectionné
}
}
Ligne 1 473 : Ligne 1 648 :
echo "<TABLE width='100%' border=1 cellspacing=0 cellpadding=0>";
echo "<TABLE width='100%' border=1 cellspacing=0 cellpadding=0>";
echo "<tr><td valign='middle' align='left'>";
echo "<tr><td valign='middle' align='left'>";
 
echo "<CENTER>";
echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";
echo "<input type=hidden name='choix' value=\"LogOFF\">";
echo "<input type=submit value=\"$l_switch_LogOFF\">";
echo "</FORM>";
echo "</CENTER>";
if (is_file ($conf_file))
if (is_file ($conf_file))
{
{
Ligne 1 480 : Ligne 1 660 :
{
{
foreach ($tab as $line)
foreach ($tab as $line)
{
{
$field=explode("=", $line);
$field=explode("=", $line);
if ($field[0] == "LASTUPDATE") {$LASTUPDATE=trim($field[2]);}
if ($field[0] == "LASTUPDATE") {$LASTUPDATE=trim($field[2]);}
if ($field[0] == "DNSMASQ") {$DNSMASQ=trim($field[1]);}
if ($field[0] == "DNSMASQ") {$DNSMASQ=trim($field[1]);}
if ($field[0] == "AUTOUPDATE") {$AUTOUPDATE=trim($field[1]);}
if ($field[0] == "AUTOUPDATE") {$AUTOUPDATE=trim($field[1]);}
if ($field[0] == "HOURSCONNECT") {$HOURSCONNECT=trim($field[1]);}
if ($field[0] == "HOURSCONNECT") {$HOURSCONNECT=trim($field[1]);}
                          
                          
}
}
}
}
}
}
else { echo "$l_error_open_file $conf_file";}
else { echo "$l_error_open_file $conf_file";}
if ($DNSMASQ <> "OFF")
if ($DNSMASQ <> "OFF")
{
{
echo "<CENTER><H3>$l_dnsfilter_on</H3></CENTER>";
echo "<CENTER><H3>$l_dnsfilter_on</H3></CENTER>";
  echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";
  echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";
echo "<input type=hidden name='choix' value=\"BL_Off\">";
echo "<input type=hidden name='choix' value=\"BL_Off\">";
echo "<input type=submit value=\"$l_switch_filtering_off\">";
echo "<input type=submit value=\"$l_switch_filtering_off\">";
}
}
else
else
{
{
echo "<CENTER><H3>$l_dnsfilter_off</H3></CENTER>";
echo "<CENTER><H3>$l_dnsfilter_off</H3></CENTER>";
  echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";
  echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";
echo "<input type=hidden name='choix' value=\"BL_On\">";
echo "<input type=hidden name='choix' value=\"BL_On\">";
echo "<input type=submit value=\"$l_switch_filtering_on\">";
echo "<input type=submit value=\"$l_switch_filtering_on\">";
}
}
echo "</FORM>";
echo "</FORM>";
 
if ( $DNSMASQ<>"OFF"){
if ( $DNSMASQ<>"OFF"){
include 'dns.php';
include 'dns.php';
Ligne 1 543 : Ligne 1 724 :
'''dns.php'''
'''dns.php'''
<code php>
<code php>
<?
<?php
if (isset($_GET['filtragemode'])){ $filtragemode=$_GET['filtragemode']; } else {$filtragemode=$DNSMASQ;}
if (isset($_GET['filtragemode'])){ $filtragemode=$_GET['filtragemode']; } else {$filtragemode=$DNSMASQ;}
if ($filtragemode == 'WHITE')
if ($filtragemode == 'WHITE')
Ligne 1 618 : Ligne 1 799 :
else {echo "<center>$l_bl_categories_wl</center></td></tr>";}
else {echo "<center>$l_bl_categories_wl</center></td></tr>";}


//on lit et on interprete le fichier de catégories
//on lit et on interprète le fichier de catégories
$cols=1;  
$cols=1;  
if (file_exists($bl_categories))
if (file_exists($bl_categories))
Ligne 1 632 : Ligne 1 813 :
echo "<td><a href='bl_categories_help.php?cat=$categorie' target='cat_help' onclick=window.open('bl_categories_help.php','cat_help','width=600,height=150,toolbar=no,scrollbars=no,resizable=yes') title='categories help page'>$categorie</a><br>";
echo "<td><a href='bl_categories_help.php?cat=$categorie' target='cat_help' onclick=window.open('bl_categories_help.php','cat_help','width=600,height=150,toolbar=no,scrollbars=no,resizable=yes') title='categories help page'>$categorie</a><br>";
echo "<input type='checkbox' name='chk-$categorie'";
echo "<input type='checkbox' name='chk-$categorie'";
// la categorie n'existe pas dans le fichier de categorie activer -> categorie non selectionnée
// la catégorie n'existe pas dans le fichier de catégorie activé -> categorie non selectionnée
                         $str = file_get_contents($bl_categories_enabled);
                         $str = file_get_contents($bl_categories_enabled);
if (strpos($str, $categorie)===false) { echo ">";}
if (strpos($str, $categorie)===false) { echo ">";}
Ligne 1 675 : Ligne 1 856 :
<code php>
<code php>


<?
<?php
# Choice of language
# Choice of language
$Language = 'en';
$Language = 'en';
Ligne 1 682 : Ligne 1 863 :
   $Language = strtolower(substr(chop($Langue[0]),0,2)); }
   $Language = strtolower(substr(chop($Langue[0]),0,2)); }
if($Language == 'fr'){
if($Language == 'fr'){
   $l_selectuser="l'utilisateur selectionner est: ";
   $l_selectuser="l'utilisateur selectionné est : ";
   $l_userisnotselect="Veuillez selectionner un utilisateur.";
   $l_userisnotselect="Veuillez selectionner un utilisateur.";
   $l_isadmin = "7j/7 24h/24";
   $l_isadmin = "7j/7 24h/24";
   $l_valide = "Enregistrer";
   $l_valide = "Enregistrer";
   $to = " a " ;
   $to = " à " ;
   $and = " et " ;
   $and = " et " ;
   $l_select = "Selectionner";
   $l_select = "Sélectionner";
   $l_info1 = "08h00 a 24h00 ou 08h00 a 12h00 et 14h00 a 24h00";
   $l_info1 = "08h00 à 24h00 ou 08h00 à 12h00 et 14h00 à 24h00";
   $week = array( "lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche");
   $week = array( "lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche");
}
}
else {
else {
   $l_userisnotselect="Veuillez selectionner un utilisateur.";
   $l_userisnotselect="Veuillez sélectionner un utilisateur.";
   $l_selectuser="l'utilisateur selectionner est: ";
   $l_selectuser="l'utilisateur sélectionné est : ";
   $l_isadmin = "7j/7 24h/24";
   $l_isadmin = "7j/7 24h/24";
   $l_valide = "Enregistrer";
   $l_valide = "Enregistrer";
Ligne 1 700 : Ligne 1 881 :
   $to = " to " ;
   $to = " to " ;
   $and = " and " ;
   $and = " and " ;
   $l_info1 = "08h00 a 24h00 ou 08h00 a 12h00 et 14h00 a 24h00";
   $l_info1 = "08h00 à 24h00 ou 08h00 à 12h00 et 14h00 à 24h00";
   $week = array( "lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche");
   $week = array( "lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche");
}
}
Ligne 1 708 : Ligne 1 889 :
### on lit est on interprète le fichier CTparental.conf
### on lit est on interprète le fichier CTparental.conf
echo "<TABLE width='100%' border=0 cellspacing=0 cellpadding=0>";
echo "<TABLE width='100%' border=0 cellspacing=0 cellpadding=0>";
exec ("cat /etc/passwd | cut -d\":\" -f1,3| grep -E [1-9][0-9][0-9][0-9] | cut -d \":\" -f1",$USERSPC); # récupération des utilisateurs du poste.(UID >= 1000)
exec ("/usr/local/bin/CTparental.sh -listusers 2> /dev/null",$USERSPC); # récupération des utilisateurs du poste.(UID >= 1000)
echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";
echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";
echo "<select name=\"selectuser\">";
echo "<select name=\"selectuser\">";
Ligne 1 775 : Ligne 1 956 :
<HEAD>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?
<?php
$bl_dir="/usr/local/etc/CTparental/dnsfilter-available/";
$bl_dir="/usr/local/etc/CTparental/dnsfilter-available/";
# Choice of language
# Choice of language

Version du 9 décembre 2013 à 20:17

lien sur le forum CTparental.sh

  1. !/bin/bash
  2. CTparental.sh
  3. par Guillaume MARSAT
  4. Corrections orthographiques par Pierre-Edouard TESSIER
  5. une parti du code est tiré du script alcasar-bl.sh créé par Franck BOUIJOUX et Richard REY
  6. présent dans le code du projet alcasar en version 2.6.1 ; web page http://www.alcasar.net/
  1. This script is distributed under the Gnu General Public License (GPL)

arg1=${1} if [ $arg1 != "-listusers" ] ; then if [ ! $UID -le 499 ]; then # considaire comme root tous les utilisateurs avec un uid inferieur ou egale a 499,ce qui permet a apt-get,urpmi,yum... de lance le scripte sans erreur.

  echo "Il vous faut des droits root pour lancer ce script"
  exit 1

fi fi


noinstalldep="0" nomanuel="0" ARGS=($*) for (( narg=1; narg<=$#; narg++ )) ; do

       case "${ARGS[$narg]}" in

-nodep ) noinstalldep="1"  ;; -nomanuel ) nomanuel="1"  ;; -dirhtml ) narg=$(( $narg +1 )) DIRhtmlPersonaliser=${ARGS[$narg]} if [ ! -d $DIRhtmlPersonaliser ];then echo "Chemin de répertoire non valide!" exit 0 fi  ;; esac done pause () { # fonction pause pour debugage

     MESSAGE="$*"
     choi=""
     MESSAGE=${MESSAGE:="pour continuer appuyez sur une touche :"}
     echo  "$MESSAGE"
     while (true); do
        read choi
        case $choi in
        * )
        break
        ;;
     esac
     done

} SED="/bin/sed -i" DIR_CONF="/usr/local/etc/CTparental" FILE_CONF="$DIR_CONF/CTparental.conf" FILE_HCONF="$DIR_CONF/CThours.conf" if [ ! -f $FILE_CONF ] ; then mkdir -p $DIR_CONF mkdir -p /usr/local/share/CTparental/ cat << EOF > $FILE_CONF LASTUPDATE=0 DNSMASQ=BLACK AUTOUPDATE=OFF HOURSCONNECT=OFF EOF fi


    1. imports du plugin de la distributions si il existe

if [ -f $DIR_CONF/dist.conf ];then source $DIR_CONF/dist.conf fi

tempDIR="/tmp/alcasar" RougeD="\033[1;31m" BleuD="\033[1;36m" VertD="\033[1;32m" Fcolor="\033[0m" GESTIONNAIREDESESSIONS=" login gdm lightdm slim kdm xdm lxdm gdm3 " FILEPAMTIMECONF="/etc/security/time.conf" DIRPAM="/etc/pam.d/" DAYS=${DAYS:="lundi mardi mercredi jeudi vendredi samedi dimanche "} DAYS=( $DAYS ) DAYSPAM=( Mo Tu We Th Fr Sa Su ) DAYSCRON=( mon tue wed thu fri sat sun )

        1. DEPENDANCES par DEFAULT #####

DEPENDANCES=${DEPENDANCES:=" dnsmasq lighttpd php5-cgi libnotify-bin notification-daemon resolvconf "}

        1. RESOLVCONF EST PAS PRESENT DANS LA DISTRIBUTION ####

NORESOLVCONF=${NORESOLVCONF:=0}

        1. COMMANDES de services par DEFAULT #####

CMDSERVICE=${CMDSERVICE:="service "} CRONstart=${CRONstart:="$CMDSERVICE crond start "} CRONstop=${CRONstop:="$CMDSERVICE crond stop "} CRONrestart=${CRONrestart:="$CMDSERVICE crond restart "} LIGHTTPDstart=${LIGHTTPDstart:="$CMDSERVICE lighttpd start "} LIGHTTPDstop=${LIGHTTPDstop:="$CMDSERVICE lighttpd stop "} LIGHTTPDrestart=${LIGHTTPDrestart:="$CMDSERVICE lighttpd restart "} DNSMASQstart=${DNSMASQstart:="$CMDSERVICE dnsmasq start "} DNSMASQstop=${DNSMASQstop:="$CMDSERVICE dnsmasq stop "} DNSMASQrestart=${DNSMASQrestart:="$CMDSERVICE dnsmasq restart "} NWMANAGERstop=${NWMANAGERstop:="$CMDSERVICE network-manager stop"} NWMANAGERstart=${NWMANAGERstart:="$CMDSERVICE network-manager start"} NWMANAGERrestart=${NWMANAGERrestart:="$CMDSERVICE network-manager restart"}

        1. LOCALISATION du fichier PID lighttpd par default ####

LIGHTTPpidfile=${LIGHTTPpidfile:="/var/run/lighttpd.pid"}

        1. COMMANDES D'ACTIVATION DES SERVICES AU DEMARAGE DU PC ####

ENCRON=${ENCRON:=""} ENLIGHTTPD=${ENLIGHTTPD:=""} ENDNSMASQ=${ENDNSMASQ:=""} ENNWMANAGER=${ENNWMANAGER:=""}

        1. UID MINIMUM pour les UTILISATEUR

UIDMINUSER=${UIDMINUSER:=1000}

DNSMASQCONF=${DNSMASQCONF:="/etc/dnsmasq.conf"} MAINCONFHTTPD=${MAINCONFHTTPD:="/etc/lighttpd/lighttpd.conf"} DIRCONFENABLEDHTTPD=${DIRCONFENABLEDHTTPD:="/etc/lighttpd/conf-enabled"} CTPARENTALCONFHTTPD=${CTPARENTALCONFHTTPD:="$DIRCONFENABLEDHTTPD/10-CTparental.conf"} RESOLVCONFMAIN=${RESOLVCONFMAIN:="/etc/resolvconf"} RESOLVDNSMASQ=${RESOLVDNSMASQ:="$RESOLVCONFMAIN/run/interface/lo.dnsmasq"} RESOLVCONFORDER=${RESOLVCONFORDER:="$RESOLVCONFMAIN/interface-order"} DIRHTML=${DIRHTML:="/var/www/CTparental"} DIRadminHTML=${DIRadminHTML:="/var/www/CTadmin"} PASSWORDFILEHTTPD=${PASSWORDFILEHTTPD:="/etc/lighttpd/lighttpd-htdigest.user"} REALMADMINHTTPD=${REALMADMINHTTPD:="interface admin"} CMDINSTALL=""

if [ $(yum help | wc -l ) -ge 50 ] ; then

  ## "Distribution basée sur yum exemple redhat, fedora..."
  CMDINSTALL=${CMDINSTALL:="yum install "}
  CMDREMOVE=${CMDREMOVE:="yum remove "}

fi urpmi --help 2&> /dev/null if [ $? -eq 1 ] ; then

  ## "Distribution basée sur urpmi exemple mandriva..."
  CMDINSTALL=${CMDINSTALL:="urpmi -a --auto "}
  CMDREMOVE=${CMDREMOVE:="urpme --auto "}

fi apt-get -h 2&> /dev/null if [ $? -eq 0 ] ; then

  ## "Distribution basée sur apt-get exemple debian, ubuntu ..."
  CMDINSTALL=${CMDINSTALL:="apt-get -y --force-yes install "}
  CMDREMOVE=${CMDREMOVE:="apt-get -y --force-yes remove --purge "}

fi

if [ $( echo $CMDINSTALL | wc -m ) -eq 1 ] ; then

  echo "Aucun gestionner de paquet connu , n'a été détecté."
  set -e
  exit 1

fi



interface_WAN=$(ip route | awk '/^default via/{print $5}') # suppose que la passerelle est la route par default

if [ -f $DIR_CONF/resolv.conf.sav ];then

  DNS1=$(cat $DIR_CONF/resolv.conf.sav | grep ^nameserver | cut -d " " -f2 | tr "\n" " " | cut -d " " -f1)
  DNS2=$(cat $DIR_CONF/resolv.conf.sav | grep ^nameserver | cut -d " " -f2 | tr "\n" " " | cut -d " " -f2)

else

  DNS1=$(cat /etc/resolv.conf | grep ^nameserver | cut -d " " -f2 | tr "\n" " " | cut -d " " -f1)
  DNS2=$(cat /etc/resolv.conf | grep ^nameserver | cut -d " " -f2 | tr "\n" " " | cut -d " " -f2)

fi

PRIVATE_IP="127.0.0.10" FILE_tmp="$tempDIR/filetmp.txt" BL_SERVER="dsi.ut-capitole.fr" CATEGORIES_ENABLED="$DIR_CONF/categories-enabled" BL_CATEGORIES_AVAILABLE="$DIR_CONF/bl-categories-available" WL_CATEGORIES_AVAILABLE="$DIR_CONF/wl-categories-available" DIR_DNS_FILTER_AVAILABLE="$DIR_CONF/dnsfilter-available" DIR_DNS_BLACKLIST_ENABLED="$DIR_CONF/blacklist-enabled" DIR_DNS_WHITELIST_ENABLED="$DIR_CONF/whitelist-enabled" DNS_FILTER_OSSI="$DIR_CONF/blacklist-local" DREAB="$DIR_CONF/domaine-rehabiliter" THISDAYS=$(expr $(date +%Y) \* 365 + $(date +%j)) MAXDAYSFORUPDATE="7" # update tous les 7 jours CHEMINCTPARENTLE=$(readlink -f $0)

initblenabled () {

  cat << EOF > $CATEGORIES_ENABLED

adult agressif dangerous_material dating drogue gambling hacking malware marketingware mixed_adult phishing redirector sect strict_redirector strong_redirector tricheur warez ossi EOF


}

addadminhttpd() { if [ ! -f $PASSWORDFILEHTTPD ] ; then

   echo -n > $PASSWORDFILEHTTPD   

fi chown root:$USERHTTPD $PASSWORDFILEHTTPD chmod 640 $PASSWORDFILEHTTPD USERADMINHTTPD=${1} pass=${2} hash=`echo -n "$USERADMINHTTPD:$REALMADMINHTTPD:$pass" | md5sum | cut -b -32` ligne=$(echo "$USERADMINHTTPD:$REALMADMINHTTPD:$hash") $SED "/^$USERADMINHTTPD:$REALMADMINHTTPD.*/d" $PASSWORDFILEHTTPD echo $ligne >> $PASSWORDFILEHTTPD }

download() {

  rm -rf $tempDIR
  mkdir $tempDIR
  wget -P $tempDIR http://$BL_SERVER/blacklists/download/blacklists.tar.gz 2>&1 | cat
  if [ ! $? -eq 0 ]; then
     echo "erreur lors du téléchargement, processus interrompu"
     rm -rf $tempDIR
     set -e
     exit 1
  fi
  tar -xzf $tempDIR/blacklists.tar.gz -C $tempDIR
  if [ ! $? -eq 0 ]; then
     echo "erreur d'extraction de l'archive, processus interrompu"
     set -e
     exit 1
  fi
  rm -rf $DIR_DNS_FILTER_AVAILABLE/
  mkdir $DIR_DNS_FILTER_AVAILABLE

} autoupdate() {

       LASTUPDATEDAY=`grep LASTUPDATE= $FILE_CONF | cut -d"=" -f2`
       LASTUPDATEDAY=${LASTUPDATEDAY:=0}
       DIFFDAY=$(expr $THISDAYS - $LASTUPDATEDAY)

if [ $DIFFDAY -ge $MAXDAYSFORUPDATE ] ; then download adapt catChoice dnsmasqon

               $SED "s?^LASTUPDATE.*?LASTUPDATE=$THISDAYS=`date +%d-%m-%Y\ %T`?g" $FILE_CONF

exit 0 fi } autoupdateon() { $SED "s?^AUTOUPDATE.*?AUTOUPDATE=ON?g" $FILE_CONF echo "*/10 * * * * root $CHEMINCTPARENTLE -aup" > /etc/cron.d/CTparental-autoupdate $CRONrestart }

autoupdateoff() { $SED "s?^AUTOUPDATE.*?AUTOUPDATE=OFF?g" $FILE_CONF rm -f /etc/cron.d/CTparental-autoupdate $CRONrestart } adapt() {

  dnsmasqoff
  if [ ! -f $DNS_FILTER_OSSI ] ; then
           echo > $DNS_FILTER_OSSI
  fi
  if [ -d $tempDIR  ] ; then

CATEGORIES_AVAILABLE=$tempDIR/categories_available ls -FR $tempDIR/blacklists | grep '/$' | sed -e "s/\///g" > $CATEGORIES_AVAILABLE

         echo -n > $BL_CATEGORIES_AVAILABLE
         echo -n > $WL_CATEGORIES_AVAILABLE
         if [ ! -f $DIR_DNS_FILTER_AVAILABLE/ossi.conf ] ; then

echo > $DIR_DNS_FILTER_AVAILABLE/ossi.conf fi for categorie in `cat $CATEGORIES_AVAILABLE` # creation des deux fichiers de categories (BL / WL) do if [ -e $tempDIR/blacklists/$categorie/usage ] then is_whitelist=`grep white $tempDIR/blacklists/$categorie/usage|wc -l` else is_whitelist=0 # ou si le fichier 'usage' n'existe pas, on considère que la catégorie est une BL fi if [ $is_whitelist -eq "0" ] then echo "$categorie" >> $BL_CATEGORIES_AVAILABLE else echo "$categorie" >> $WL_CATEGORIES_AVAILABLE fi done

        echo -n "Toulouse Black and White List migration process. Please wait : "
        for DOMAINE in `cat  $CATEGORIES_AVAILABLE`  # pour chaque catégorie
        do
           echo -n "."
           # suppression des @IP, de caractères acccentués et des lignes commentées ou vide
           egrep  -v "([0-9]{1,3}\.){3}[0-9]{1,3}" $tempDIR/blacklists/$DOMAINE/domains > $FILE_tmp
           $SED "/[äâëêïîöôüû]/d" $FILE_tmp
           $SED "/^#.*/d" $FILE_tmp
           $SED "/^$/d" $FILE_tmp
           $SED "s/\.\{2,10\}/\./g" $FILE_tmp # supprime les suite de "." exemple: address=/fucking-big-tits..com/127.0.0.10 devient address=/fucking-big-tits.com/127.0.0.10

is_blacklist=`grep $DOMAINE $BL_CATEGORIES_AVAILABLE |wc -l` if [ $is_blacklist -ge "1" ] ; then

           	$SED "s?.*?address=/&/$PRIVATE_IP?g" $FILE_tmp  # Mise en forme dnsmasq des listes noires

mv $FILE_tmp $DIR_DNS_FILTER_AVAILABLE/$DOMAINE.conf

           else

$SED "s?.*?server=/&/#?g" $FILE_tmp # Mise en forme dnsmasq des listes blanches mv $FILE_tmp $DIR_DNS_FILTER_AVAILABLE/$DOMAINE.conf

           fi
        done
  else
        mkdir   $tempDIR
        echo -n "."
	 # suppression des @IP, de caractères acccentués et des lignes commentées ou vide
        egrep  -v "([0-9]{1,3}\.){3}[0-9]{1,3}" $DNS_FILTER_OSSI  > $FILE_tmp
        $SED "/[äâëêïîöôüû]/d" $FILE_tmp 
        $SED "/^#.*/d" $FILE_tmp 
        $SED "/^$/d" $FILE_tmp 
        $SED "s/\.\{2,10\}/\./g" $FILE_tmp # supprime les suite de "." exemple: address=/fucking-big-tits..com/127.0.0.10 devient address=/fucking-big-tits.com/127.0.0.10
        $SED "s?.*?address=/&/$PRIVATE_IP?g" $FILE_tmp  # Mise en forme dnsmasq
        mv $FILE_tmp $DIR_DNS_FILTER_AVAILABLE/ossi.conf
  fi     
  echo
  rm -rf $tempDIR

} catChoice() {

  1. echo "catChoice"
  rm -rf $DIR_DNS_BLACKLIST_ENABLED/
  mkdir $DIR_DNS_BLACKLIST_ENABLED
  rm -rf  $DIR_DNS_WHITELIST_ENABLED/
  mkdir  $DIR_DNS_WHITELIST_ENABLED
    
     for CATEGORIE in `cat $CATEGORIES_ENABLED` # on affecte les catégories dnsmasq
     do

is_blacklist=`grep $CATEGORIE $BL_CATEGORIES_AVAILABLE |wc -l` if [ $is_blacklist -ge "1" ] ; then cp $DIR_DNS_FILTER_AVAILABLE/$CATEGORIE.conf $DIR_DNS_BLACKLIST_ENABLED/

        else

cp $DIR_DNS_FILTER_AVAILABLE/$CATEGORIE.conf $DIR_DNS_WHITELIST_ENABLED/

    	 fi     
     done
     cp $DIR_DNS_FILTER_AVAILABLE/ossi.conf $DIR_DNS_BLACKLIST_ENABLED/
  1. echo "fincatChoice"
     reabdomaine

}

reabdomaine () { if [ ! -f $DREAB ] ; then cat << EOF > $DREAB

  www.google.com
  www.google.fr

EOF fi if [ ! -f $DIR_DNS_BLACKLIST_ENABLED/ossi.conf ] ; then echo > $DIR_DNS_BLACKLIST_ENABLED/ossi.conf fi echo echo -n "Application de la liste blanche (domaine réhabilité):" for CATEGORIE in `cat $CATEGORIES_ENABLED ` # pour chaque catégorie do is_blacklist=`grep $CATEGORIE $BL_CATEGORIES_AVAILABLE |wc -l` if [ $is_blacklist -ge "1" ] ; then echo -n "." for DOMAINE in `cat $DREAB` do $SED "/$DOMAINE/d" $DIR_DNS_BLACKLIST_ENABLED/$CATEGORIE.conf done

       fi

done echo -n "." cat $DREAB | sed -e "s? ??g" | sed -e "s?.*?server=/&/#?g" > $DIR_DNS_WHITELIST_ENABLED/whiteliste.ossi.conf echo }

dnsmasqon () {

  categorie1=`sed -n "1 p" $CATEGORIES_ENABLED` # on considère que si la 1ère categorie activée est un blacklist on fonctionne par blacklist.
  is_blacklist=`grep $categorie1 $BL_CATEGORIES_AVAILABLE |wc -l`
  if [ $is_blacklist -ge "1" ] ; then
  $SED "s?^DNSMASQ.*?DNSMASQ=BLACK?g" $FILE_CONF
  cat << EOF > $DNSMASQCONF
        # Configuration file for "dnsmasq with blackhole"
  # Inclusion de la blacklist <domains> de Toulouse dans la configuration
  conf-dir=$DIR_DNS_BLACKLIST_ENABLED
  # conf-file=$DIR_DEST_ETC/alcasar-dns-name   # zone de definition de noms DNS locaux
  no-dhcp-interface=$interface_WAN
  bind-interfaces
  cache-size=1024
  domain-needed
  expand-hosts
  bogus-priv
  server=$DNS1
  server=$DNS2
  

EOF $DNSMASQrestart else

 dnsmasqwhitelistonly

fi } dnsmasqoff () {

  $SED "s?^DNSMASQ.*?DNSMASQ=OFF?g" $FILE_CONF
  cat << EOF > $DNSMASQCONF
        # Configuration file for "dnsmasq with blackhole"
  # Inclusion de la blacklist <domains> de Toulouse dans la configuration
  # conf-dir=$DIR_DNS_BLACKLIST_ENABLED
  # conf-file=$DIR_DEST_ETC/alcasar-dns-name   # zone de definition de noms DNS locaux
  no-dhcp-interface=$interface_WAN
  bind-interfaces
  cache-size=0
  domain-needed
  expand-hosts
  bogus-priv
  server=$DNS1
  server=$DNS2
  

EOF

$DNSMASQrestart } dnsmasqwhitelistonly () {

  $SED "s?^DNSMASQ.*?DNSMASQ=WHITE?g" $FILE_CONF
  cat << EOF > $DNSMASQCONF
        # Configuration file for "dnsmasq with blackhole"
  # Inclusion de la blacklist <domains> de Toulouse dans la configuration
  conf-dir=$DIR_DNS_WHITELIST_ENABLED
  # conf-file=$DIR_DEST_ETC/alcasar-dns-name   # zone de definition de noms DNS locaux
  no-dhcp-interface=$interface_WAN
  bind-interfaces
  cache-size=0
  domain-needed
  expand-hosts
  bogus-priv
  server=$DNS1
  server=$DNS2
  address=/#/$PRIVATE_IP #redirige vers $PRIVATE_IP pour tout ce qui n'a pas été resolu dans les listes blanches

EOF

$DNSMASQrestart }


FoncHTTPDCONF () { $LIGHTTPDstop rm -rf $DIRHTML/* mkdir -v $DIRHTML if [ ! -z $DIRhtmlPersonaliser ];then

  cp -r $DIRhtmlPersonaliser/* $DIRHTML

else s="span" st="style" c="$c" cab=";\">"

cat << EOF > $DIRHTML/index.html

<HTML>

<HEAD>

  <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
  <TITLE>danger</TITLE>

</HEAD> <BODY LANG="fr-FR" DIR="LTR">

<img alt="Site dangereux pour des mineurs"

 HEIGHT="600"   
 src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKIAAACgCAYAAACPOrcQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz

AAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAuGSURB VHic7d17jFTlGcfx7zMol7KriRpF3Sii3FyooE1EWuNaFrFeWjXWqEBCmyYtrSa2iX9g+wcx9RZN kya29i+1ETWKMSZI1AiClyI2KiJyFa8BBC9EuyAXhad/vDO7s8PszpyZc857zrzPJ9nsZvac931g fnnf2Zlz3ldUFVNBZCQwDhhf/H480A60Fb+X/9xWPGsP0FP2vfznr4AtwGZgC6p70/qn5IUEHUSR EcAFwGRc6Epfpybc83ZcKEtf64DXUd2XcL+ZFVYQRYYB04CLi1/TgKFea+pzEFgNrCh+rUb1gN+S 0tP6QRQ5B7gSF7zpwHC/BdVtP7AKF8olqK71XE+iWjOIIh3AjcBcYJLnauLyHvAI8Biq23wXE7fW CaJIO3AtMAfoAgpe60nOYWAlsAh4CtUev+XEI/9BdFPvrcA1wAjP1aRtH/A0cG/ep+78BlFkOnAb cLnvUjJiKXAnqqt8F9KI/AVRZBawALjIdykZ9TJwF6ov+C4kivwEUeQq4C/Aeb5LyYm3gL+i+ozv QuqR/SCKTADuB2b4LiWnlgM3obrJdyGDye5fliIjEbkbeBcLYTNmAO8icnfxo8tMyuaIKPJL4G9A h+9SWsw24E+oLvZdSKVsBVHkLOABoNt3KS1uGTAf1a2+CynJztQsMhtYg4UwDd3AGkTm+C6kxH8Q RX6AyIO4Twraah1uYtMGPILIw1l47eh3ahaZDDwBTPRXhMFdinY9qu/4KsDfiCjyW+C/WAizYDyw GpGbfBWQ/ogoMhR4EJidbsemTouBuWlfC5luEEWOwX1Ib+8LZtsrwM9R/SatDtMLosgo4DlgSjod miatAy5FdUcanaXzGlFkHPA6FsI8mQysKn7EmrjkgyhyPvAfYHTifZm4nQ68hsi0pDtKNogi3cBL wAmJ9mOSdDywvPhcJia514huJFwOeH+z1MRiLzAD1TeSaDyZIIqcDbwKHBd/48aj3cCFqG6Iu+H4 gyhyOu41YdI3qRs/tgM/RvWTOBuN9zWiyInAi1gIW9mpwIvF5zo28QXRvVn9PDA2tjZNVo0Fni8+ 57GIJ4giAjwJTI2lPZMHU4Eni8990+IaEf8MzIqpLZMfs3DPfdOa/2NFpAt3xe+QGOox+XMI6EZ1 ZTONNBdEkZOAd4BRzRRhcm8nMAXVXY020PjULFIAHsdCaFwGHi9moiHNvEZciFvqzRhwWVjY6MmN Tc0iF+JWpPJ/z4vJksNAF6qvRj0xehBFjsbdbdcZtTMThPXAVFS/i3JSIyPaH7EQmoF14jISSbQR UeQ0YAN2RY0Z3F7gbFQ/rfeEqCPi37EQmtpG4rJSt/pHRJHLgWej12QCdgWqS+s5sL4guv1I1gNn NFeXCcxHQGc9+8fUOzXPx0JoojsDl52aao+IIsOBD4GTmy7LhOgzYAyq+wc7qJ4R8TdYCE3jTsZl aFCDj4hueZAPsAUzTXO2AWeienCgA2qNiPOwEJrmdeCyNKCBR0SRo4D3sRvjTTw+Bsai+n21Xw42 Is7BQmjiMxqXqaoGC+IfYi/FhG7ATFWfmkU6cbthGhO3Saiur3xwoBFxXrK1mIDNq/bgkSOiyBDc n9t2C4BJwk6gA9VD5Q9WGxEvxUJokjMKl7F+qgVxXuKlmNDNq3yg/9QschywAxiWWkkmRAeAU1Dd XXqgckT8BRZCk7xhuKz1qgyirfZv0tIva5VT83bglJQLMmHagWrv8oV9QXSrx2+M3Nwtt8Dw4XEV Z/Jm1y546KFGz55Y2tC8PIjzgX9Gburrr+HYYxstxOTd2rUwpeFdS36P6gPQ/zXiT5suyphoejPn gugWW+zyVIwJV1dpoc/SiPhDbC8Uk74TcNnrDeK5/moxgTsX+oKYyn5rxlQxASyIxr9+QbRd5I0v EwEKxVtGx3guxoRrDCJDC8BZ2I4Axp8hwFkFbFo2/k0sAON9V2GCN74AxLq5nzENOLEAtPuuwgSv 3YJosqC9ALT5rsIEr81GRJMFNjWbTLCp2WSCTc0mE9ptU0eTCQWgx3cRJng9BWCP7ypM8PbYiGiy oMeCaLLApmaTCTY1m0ywqdlkQk8B+Nx3FSZ4nxeAzb6rMMHbXKCRpeiMidfGArAVOFTrSGMScgjY WihuXfqh72pMsD5E9WDpogebno0vG6FvyZFNHgsxYdsEFkTjX78gvu2xEBO2t6EviO8CX/qrxQTq S1z2ikF0Wwus9FePCdTKYvb67SrwkqdiTLh6M1cexBUeCjFh681cXxDdDkA7fFRjgrSjtOsUwFEV v1wBzI7U3IIFMMw2NA3WF180ema/GbhyU8hfAQ82XJQx9fs1qr2b+NnG4caHGhuHu18sSbkoE54l 5SGEIzcOB3g4nVpMwB6ufKD/1AwgMgTYBoxKpSQTmp1AB6r9roE9ckR0ByxKqSgTnkWVIYRqIyKA SCfwXgpFmfBMQnV95YPVVwNzB76ZdEUmOG9WCyEMFETnHwkVY8I1YKaqT80AIkcB7wOjEynJhOZj YCyq31f75cAjojvhrmRqMgG6a6AQwmAjIlDcufQDoCP+ukxAtgFnFu8YrWrwpYvdiffEXJQJzz2D hRBqjYgAIsNx9z2fHF9dJiCfAWNQ3T/YQbUXc3cN3BdTUSY899UKIdQzIgKIjADWA2c0X5cJyEdA J6r7ah1Y3/YWrqGbmyzKhOfmekII9QYRQHUp8EyjFZngPFPMTF3qm5p7j5bTgA3AyOh1mYDsBc5G 9dN6T4i285Rr+PaIRZnw3B4lhBB1RAQQORpYA3RGO9EEYj0wFdXvopwUfS8+18F84HDkc02rOwzM jxpCaCSIAKqvAnc0dK5pZXcUsxFZ9Km590wpAMuAixtrwLSYFUA3qg3NlI0HEUDkJOAd7P6W0O0E pqC6q9EGmtuv2XV8A7YYfMgOATc0E0JoNogAqiuBhU23Y/JqYTEDTWluau5tRQR4DpjVfGMmR14A fkYMIYoniAAix+AW+5waT4Mm49YAXaj+L47G4gsigMiJwGvA2PgaNRn0PvATVGPbx7H514jlXGEz ge2xtmuyZDswM84QQtxBBFD9BLgE2F3rUJM7u4FLis9xrOIPIoDqBuAy3FUYpjXsBS4rPrexSyaI AKpvAFcB3ybWh0nLt8BVxec0EfH+sVK1BzkfeBY4IdmOTEK+Aq5AdXWSnSQfRACRcbj3nEYn35mJ 0SfApeWLricluam5nOoW4ALc59ImH9YB09MIIaQVRADVncBFwPLU+jSNegW4ENXUtjtJL4hA8V34 y4BHU+3XRLEY9xbNN2l2mm4QwS1jojoH+B1Q88Zrk5oDuNs/r0P1QNqdp/PHyoC9y2TgCWCivyIM sBm4HlVvr+HTHxHLqa4DfgQ8VOtQk5h/A+f5DCH4HhHLicwG/gW0+S4lEHtwNzplYuF+vyNiOdVH cZeQLfNdSgCW4W75zEQIIUtBBFDdiupM4Drc4o4mXtuA61CdiepW38WUy1YQS1QXAxNwi4RGvkfW HOE73P/lhOL/beZk5zXiQEQmAPcDM3yXklPLgZvS+oSkUdkcEcupbkK1G7gaeMt3OTnyFnA1qt1Z DyHkYUSsJDILWID7uNAc6WXcCv4v+C4kivwFsURkOnAbcLnvUjJiKXAnqqt8F9KI/AaxROQc4Fbg GmCE52rStg94GrgX1bW+i2lG/oNYItIOXAvMAbrIw+vfxhzG3ba7CHgK1R6/5cSjdYJYTqQDuBGY C0zyXE1c3gMeAR5DteXeY23NIJZzU/eVuFXLpgPD/RZUt/3AKtwqW0vyPvXW0vpBLCcyDJiGC+XF xZ+Heq2pz0FgNS54K4DVPi7H8iWsIFZy+8dcAEwGxpd9nZpwz9txl16VvtYBr9e7FUQrCjuIAxEZ CYzDhXIccDzQjrsyqL3i59LVQnuAnrLv5T9/BWzBhW4Lqna/d4X/A/bydTBs1YRqAAAAAElFTkSu QmCC" />

</BODY> </HTML> EOF

fi

    1. GENERATION

ln -s $DIRHTML/index.html $DIRHTML/err404.html USERHTTPD=$(cat /etc/passwd | grep /var/www | cut -d":" -f1) GROUPHTTPD=$(cat /etc/group | grep $USERHTTPD | cut -d":" -f1) chmod 640 $FILE_CONF chown root:$GROUPHTTPD $FILE_CONF cat << EOF > $MAINCONFHTTPD server.modules = ( "mod_access", "mod_alias", "mod_redirect", "mod_auth", #pour interface admin "mod_fastcgi", #pour interface admin (activation du php) ) auth.debug = 0 auth.backend = "htdigest" auth.backend.htdigest.userfile = "$PASSWORDFILEHTTPD"

server.document-root = "/var/www" server.upload-dirs = ( "/var/cache/lighttpd/uploads" ) server.errorlog = "/var/log/lighttpd/error.log" server.pid-file = "$LIGHTTPpidfile" server.username = "$USERHTTPD" server.groupname = "$GROUPHTTPD" server.port = 80 server.bind = "127.0.0.1"


index-file.names = ( "index.php", "index.html" ) url.access-deny = ( "~", ".inc" ) static-file.exclude-extensions = (".php", ".pl", ".fcgi" )

server.tag = ""

include_shell "/usr/share/lighttpd/create-mime.assign.pl" include_shell "/usr/share/lighttpd/include-conf-enabled.pl" EOF

mkdir -p /usr/share/lighttpd/

if [ ! -f /usr/share/lighttpd/create-mime.assign.pl ];then cat << EOF > /usr/share/lighttpd/create-mime.assign.pl

  1. !/usr/bin/perl -w

use strict; open MIMETYPES, "/etc/mime.types" or exit; print "mimetype.assign = (\n"; my %extensions; while(<MIMETYPES>) {

 chomp;
 s/\#.*//;
 next if /^\w*$/;
 if(/^([a-z0-9\/+-.]+)\s+((?:[a-z0-9.+-]+[ ]?)+)$/) {
   foreach(split / /, \$2) {
     # mime.types can have same extension for different
     # mime types
     next if \$extensions{\$_};
     \$extensions{\$_} = 1;
     print "\".\$_\" => \"\$1\",\n";
   }
 }

} print ")\n"; EOF chmod +x /usr/share/lighttpd/create-mime.assign.pl fi


if [ ! -f /usr/share/lighttpd/include-conf-enabled.pl ];then cat << EOF > /usr/share/lighttpd/include-conf-enabled.pl

  1. !/usr/bin/perl -wl

use strict; use File::Glob ':glob';

my \$confdir = shift || "/etc/lighttpd/"; my \$enabled = "conf-enabled/*.conf";

chdir(\$confdir); my @files = bsd_glob(\$enabled);

for my \$file (@files) {

       print "include \"\$file\"";

} EOF chmod +x /usr/share/lighttpd/include-conf-enabled.pl

fi

mkdir -p $DIRCONFENABLEDHTTPD mkdir -p $DIRadminHTML cp -rf CTadmin/* $DIRadminHTML/

  1. if [ $noinstalldep = "1" ]; then
  2. addadminhttpd "admin" "admin"
  3. else

clear echo "Entrer le login pour l'interface d'administration :" while (true); do read loginhttp case $loginhttp in * ) echo "login: $loginhttp" > /root/passwordCTadmin break  ;; esac done clear echo "Entrer le mot de passe de $loginhttp :" while (true); do read password case $password in * ) echo "password: $password" >> /root/passwordCTadmin addadminhttpd "$loginhttp" "$password" break  ;; esac done

  1. fi

chmod 700 /root/passwordCTadmin chown root:root /root/passwordCTadmin cat << EOF > $CTPARENTALCONFHTTPD

fastcgi.server = (

   ".php" => (
     "localhost" => ( 
       "bin-path" => "/usr/bin/php-cgi",
       "socket" => "/run/lighttpd/php-fastcgi.sock",
       "max-procs" => 4, # default value
       "bin-environment" => (
         "PHP_FCGI_CHILDREN" => "1", # default value
       ),
       "broken-scriptfilename" => "enable"
     ))

)

 fastcgi.map-extensions     = ( ".php3" => ".php",
                              ".php4" => ".php",
                              ".php5" => ".php",
                              ".phps" => ".php",
                              ".phtml" => ".php" )

\$HTTP["url"] =~ ".*CTadmin.*" {

 auth.require = ( "" =>
                  (
                    "method"  => "digest",
                    "realm"   => "$REALMADMINHTTPD",
                    "require" => "user=$USERADMINHTTPD" 
                  )
                )

} \$SERVER["socket"] == "$PRIVATE_IP:80" { server.document-root = "$DIRHTML" server.errorfile-prefix = "$DIRHTML/err"

  1. ssl.engine = "enable"
  2. ssl.pemfile = "/etc/lighttpd/ssl/$PRIVATE_IP.pem"

}

EOF chown root:$GROUPHTTPD $DREAB chmod 660 $DREAB chown root:$GROUPHTTPD $DNS_FILTER_OSSI chmod 660 $DNS_FILTER_OSSI chown root:$GROUPHTTPD $CATEGORIES_ENABLED chmod 660 $CATEGORIES_ENABLED chmod 660 /etc/sudoers is_sudo_ok=`grep $USERHTTPD /etc/sudoers |wc -l`

        if [ $is_sudo_ok -ge "1" ] ; then

$SED "s?^Defaults:$USERHTTPD.*requiretty.*?Defaults:$USERHTTPD \!requiretty?g" /etc/sudoers $SED "s?^$USERHTTPD.*?$USERHTTPD ALL=(ALL) NOPASSWD:/usr/local/bin/CTparental.sh -tlu,/usr/local/bin/CTparental.sh -trf,/usr/local/bin/CTparental.sh -dble,/usr/local/bin/CTparental.sh -ubl,/usr/local/bin/CTparental.sh -dl,/usr/local/bin/CTparental.sh -on,/usr/local/bin/CTparental.sh -off,/usr/local/bin/CTparental.sh -aupon,/usr/local/bin/CTparental.sh -aupoff?g" /etc/sudoers

        else

echo "Defaults:$USERHTTPD !requiretty" >> /etc/sudoers

        	echo "$USERHTTPD ALL=(ALL) NOPASSWD:/usr/local/bin/CTparental.sh -tlu,/usr/local/bin/CTparental.sh -trf,/usr/local/bin/CTparental.sh -dble,/usr/local/bin/CTparental.sh -ubl,/usr/local/bin/CTparental.sh -dl,/usr/local/bin/CTparental.sh -on,/usr/local/bin/CTparental.sh -off,/usr/local/bin/CTparental.sh -aupon,/usr/local/bin/CTparental.sh -aupoff" >> /etc/sudoers
        fi

chmod 440 /etc/sudoers if [ ! -f $FILE_HCONF ] ; then echo > $FILE_HCONF fi chown root:$GROUPHTTPD $FILE_HCONF chmod 660 $FILE_HCONF chown -R root:$GROUPHTTPD $DIRHTML chown -R root:$GROUPHTTPD $DIRadminHTML $LIGHTTPDstart test=$? if [ ! $test -eq 0 ];then echo "Erreur au lancement du service lighttpd " set -e exit 1 fi }

install () { if [ $nomanuel -eq 0 ]; then vim -h 2&> /dev/null if [ $? -eq 0 ] ; then EDIT="vim " fi mono -h 2&> /dev/null if [ $? -eq 0 ] ; then EDIT=${EDIT:="mono "} fi vi -h 2&> /dev/null if [ $? -eq 0 ] ; then EDIT=${EDIT:="vi "} fi if [ -f gpl-3.0.fr.txt ] ; then cp -f gpl-3.0.fr.txt /usr/local/share/CTparental/ fi if [ -f gpl-3.0.txt ] ; then cp -f gpl-3.0.txt /usr/local/share/CTparental/ fi if [ -f CHANGELOG ] ; then cp -f CHANGELOG /usr/local/share/CTparental/ fi if [ -f dist.conf ];then cp -f dist.conf /usr/local/share/CTparental/dist.conf.orig cp -f dist.conf $DIR_CONF/ fi while (true); do $EDIT $DIR_CONF/dist.conf clear cat $EDIT $DIR_CONF/dist.conf | grep -v -E ^# echo "Entrer : S pour continuer avec ces parramêtres ." echo "Entrer : Q pour Quiter l'installation." echo "Entrer tous autre choix pour modifier les parramêtres." read choi case $choi in S | s ) break ;; Q | q ) exit ;; esac done

fi if [ -f $DIR_CONF/dist.conf ];then source $DIR_CONF/dist.conf fi

if [ -f /etc/NetworkManager/NetworkManager.conf ];then

   		 $SED "s/^dns=dnsmasq/#dns=dnsmasq/g" /etc/NetworkManager/NetworkManager.conf
   		 $NWMANAGERrestart
    		sleep 5
  	fi
     mkdir $tempDIR
     mkdir -p $DIR_CONF
     initblenabled
     cat /etc/resolv.conf > $DIR_CONF/resolv.conf.sav
     if [ $noinstalldep = "0" ]; then

$CMDINSTALL $DEPENDANCES

     fi
     if [ ! -f blacklists.tar.gz ]
     then
        download
     else
        tar -xzf blacklists.tar.gz -C $tempDIR
        if [ ! $? -eq 0 ]; then
           echo "Erreur d'extraction de l'archive, processus interrompu"
           uninstall
           set -e
           exit 1
        fi
        rm -rf $DIR_DNS_FILTER_AVAILABLE/
        mkdir $DIR_DNS_FILTER_AVAILABLE
     fi
     adapt
     catChoice
     dnsmasqon
     $SED "s?^LASTUPDATE.*?LASTUPDATE=$THISDAYS=`date +%d-%m-%Y\ %T`?g" $FILE_CONF
     confresolvconf
     FoncHTTPDCONF
     $ENCRON
     $ENLIGHTTPD
     $ENDNSMASQ
     $ENNWMANAGER


}

confresolvconf () { if [ $NORESOLVCONF -eq 1 ] ; then chattr -i /etc/resolv.conf echo "nameserver 127.0.0.1" > /etc/resolv.conf chattr +i /etc/resolv.conf else echo "nameserver 127.0.0.1" > $RESOLVDNSMASQ if [ ! -f $RESOLVCONFORDER ];then cat << EOF > $RESOLVCONFORDER # interface-order(5) lo.inet* lo.dnsmasq lo.pdnsd lo.!(pdns|pdns-recursor) lo tun* tap* hso* em+([0-9])?[+([0-9]))* p+([0-9]p+([0-9])?(_+([0-9]))* eth* ath* wlan* ppp* * EOF fi resolvconf -u fi }

uninstall () {

  rm -f /etc/cron.d/CTparental*
  $DNSMASQrestart
  $LIGHTTPDstop
  rm -f /var/www/index.lighttpd.html
  rm -rf $tempDIR
  rm -rf $DIRHTML


  rm -rf /usr/local/share/CTparental
  rm -rf /usr/share/lighttpd/*
  rm -f $CTPARENTALCONFHTTPD
  rm -rf $DIRadminHTML
  if [ $NORESOLVCONF -eq 1 ] ; then

chattr -i /etc/resolv.conf cat $DIR_CONF/resolv.conf.sav > /etc/resolv.conf dhclient -r dhclient

  else 

rm -f $RESOLVDNSMASQ resolvconf -u

  fi
  if [ -f /etc/NetworkManager/NetworkManager.conf ];then

$SED "s/^#dns=dnsmasq/dns=dnsmasq/g" /etc/NetworkManager/NetworkManager.conf $NWMANAGERrestart

 	sleep 5
  fi
  rm -rf $DIR_CONF
  if [ $noinstalldep = "0" ]; then

$CMDREMOVE $DEPENDANCES

  fi

}

choiblenabled () { echo -n > $CATEGORIES_ENABLED clear echo "Voulez-vous filtrer par Blacklist ou Whitelist :" echo -n " B/W :" while (true); do

        read choi
        case $choi in
        B | b )
        echo "Vous allez maintenant choisir les \"Black listes\" à appliquer."

for CATEGORIE in `cat $BL_CATEGORIES_AVAILABLE` # pour chaque catégorie do clear echo "Voulez vous activer la categorie :" echo -n "$CATEGORIE O/N :" while (true); do read choi case $choi in O | o ) echo $CATEGORIE >> $CATEGORIES_ENABLED break  ;; N | n ) break  ;; esac done done

        break
        ;;
        W | w )
        echo "Vous allez maintenant choisir les \"White listes\" à appliquer."

for CATEGORIE in `cat $WL_CATEGORIES_AVAILABLE` # pour chaque catégorie do clear echo "Voulez vous activer la categorie :" echo -n "$CATEGORIE O/N :" while (true); do read choi case $choi in O | o ) echo $CATEGORIE >> $CATEGORIES_ENABLED break  ;; N | n ) break  ;; esac done done

        break
        ;;
     esac

done }


errortime1 () { clear echo -e "L'heure de début doit être strictement inférieure a l'heure de fin: $RougeD$input$Fcolor " echo "exemple: 08h00 à 23h59 ou 08h00 à 12h00 et 14h00 à 23h59" echo -e -n "$RougeD$PCUSER$Fcolor est autorisé à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de :" } errortime2 () { clear echo -e "Mauvaise syntaxe: $RougeD$input$Fcolor " echo "exemple: 08h00 à 23h59 ou 08h00 à 12h00 et 14h00 à 23h59" echo -e -n "$RougeD$PCUSER$Fcolor est autorisé à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de :" }


timecronalert () { MinAlert=${1} # temp en minute entre l'alerte et l'action H=$((10#${2})) M=$((10#${3})) D=$((10#${4})) MinTotalAlert="$(($H*60+$M-$MinAlert))" if [ $(( $MinTotalAlert < 0 )) -eq 1 ] then if [ $Numday -eq 0 ] ; then D=6 else D=$(( $D -1 )) fi MinTotalAlert="$(($(($H + 24))*60+$M-$MinAlert))" fi Halert=$(($MinTotalAlert/60)) MAlert=$(($MinTotalAlert - $(( $Halert *60 )) )) echo "$MAlert $Halert * * ${DAYSCRON[$D]}" }

activetimelogin () {

  TESTGESTIONNAIRE=""
  for FILE in `echo $GESTIONNAIREDESESSIONS`
  do
     if [ -f $DIRPAM$FILE ];then
        if [ $(cat $DIRPAM$FILE | grep -c "account required pam_time.so") -eq 0  ] ; then
           $SED "1i account required pam_time.so"  $DIRPAM$FILE
        fi
        TESTGESTIONNAIRE=$TESTGESTIONNAIRE\ $FILE
     fi
  done
  if [ $( echo $TESTGESTIONNAIRE | wc -m ) -eq 1 ] ; then
     echo "Aucun gestionnaire de session connu n'a été détecté."
     echo " il est donc impossible d'activer le contrôle horaire des connexions"
     desactivetimelogin
     exit 1
  fi
  
  if [ ! -f $FILEPAMTIMECONF.old ] ; then
  cp $FILEPAMTIMECONF $FILEPAMTIMECONF.old
  fi
  echo "*;*;root;Al0000-2400" > $FILEPAMTIMECONF
  for NumDAY in 0 1 2 3 4 5 6
  do
  echo  > /etc/cron.d/CTparental${DAYS[$NumDAY]}
  done
  for PCUSER in `listeusers`
  do
  HOMEPCUSER=$(getent passwd "$PCUSER" | cut -d ':' -f6)
  $SED "/^$PCUSER=/d" $FILE_HCONF
  echo -e -n "$PCUSER est autorisé a se connecter 7j/7 24h/24 O/N?" 
  choi=""
  while (true); do
  read choi
       case $choi in
        O | o )

alltime="O"

        echo "$PCUSER=admin=" >> $FILE_HCONF
  	break
        ;;

N| n )

        alltime="N"
        echo "$PCUSER=user=" >> $FILE_HCONF
  	break
        ;;	
  esac
  done
     HORAIRES=""
     for NumDAY in 0 1 2 3 4 5 6
        do

if [ $alltime = "O" ];then break fi

        clear
        echo "exemple: 00h00 à 23h59 ou 08h00 à 12h00 et 14h00 à 16h50"
        echo -e -n "$RougeD$PCUSER$Fcolor est autorisé à se connecter le $BleuD${DAYS[$NumDAY]}$Fcolor de :"
        while (true); do
           read choi
           input=$choi
           choi=$(echo $choi | sed -e "s/h//g" | sed -e "s/ //g" | sed -e "s/a/-/g" | sed -e "s/et/:/g" ) # mise en forme de la variable choi pour pam   
              if [ $( echo $choi | grep -E -c "^([0-1][0-9]|2[0-3])[0-5][0-9]-([0-1][0-9]|2[0-3])[0-5][0-9]$|^([0-1][0-9]|2[0-3])[0-5][0-9]-([0-1][0-9]|2[0-3])[0-5][0-9]:([0-1][0-9]|2[0-3])[0-5][0-9]-([0-1][0-9]|2[0-3])[0-5][0-9]$" ) -eq 1 ];then
                 int1=$(echo $choi | cut -d ":" -f1 | cut -d "-" -f1)
                 int2=$(echo $choi | cut -d ":" -f1 | cut -d "-" -f2)
                 int3=$(echo $choi | cut -d ":" -f2 | cut -d "-" -f1)
                 int4=$(echo $choi | cut -d ":" -f2 | cut -d "-" -f2)
                 if [ $int1 -lt $int2 ];then
                    if [ ! $(echo $choi | grep -E -c ":") -eq 1 ] ; then
                       if [ $NumDAY -eq 6 ] ; then
                          HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2"
                       else
                          HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2|"
                       fi
                       m1=$(echo $int1 | sed -e 's/.\{02\}//')
                       h1=$(echo $int1 | sed -e 's/.\{02\}$//') 
                       m2=$(echo $int2 | sed -e 's/.\{02\}//')
                       h2=$(echo $int2 | sed -e 's/.\{02\}$//')

echo "$PCUSER=$NumDAY=$h1${h}h$m1:$h2${h}h$m2" >> $FILE_HCONF

                       echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}

for count in 1 2 3 4 5 do

                       echo "$(timecronalert $count $h2 $m2 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER  /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes \" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]}

done

                       break
  
                    else   
                       if [ $int2 -lt $int3 ];then
                          if [ $int3 -lt $int4 ];then
                             if [ $NumDAY -eq 6 ] ; then
                                HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2|${DAYSPAM[$NumDAY]}$int3-$int4"
                             else
                                HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$int1-$int2|${DAYSPAM[$NumDAY]}$int3-$int4|"
                             fi
                             m1=$(echo $int1 | sed -e 's/.\{02\}//')
                             h1=$(echo $int1 | sed -e 's/.\{02\}$//')   
                             m2=$(echo $int2 | sed -e 's/.\{02\}//')
                             h2=$(echo $int2 | sed -e 's/.\{02\}$//')  
                             m3=$(echo $int3 | sed -e 's/.\{02\}//')
                             h3=$(echo $int3 | sed -e 's/.\{02\}$//')   
                             m4=$(echo $int4 | sed -e 's/.\{02\}//')
                             h4=$(echo $int4 | sed -e 's/.\{02\}$//')   
                             ## minutes heures jourdumoi moi jourdelasemaine utilisateur  commande

echo "$PCUSER=$NumDAY=$h1${h}h$m1:$h2${h}h$m2:$h3${h}h$m3:$h4${h}h$m4" >> $FILE_HCONF

                             echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}

echo "$m4 $h4 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]} for count in 1 2 3 4 5 do

                             echo "$(timecronalert $count $h2 $m2 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER  /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes \" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
                             echo "$(timecronalert $count $h4 $m4 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER  /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes\" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]}

done

                             break   
                          else
                             errortime1
                          fi
                       else
                          errortime1
                       fi
                    fi
                 else
                    errortime1
  
                 fi
                      
              else
                 errortime2   
              fi
          
        done
    
       done
    	if [ $alltime = "N" ] ; then

echo "*;*;$PCUSER;$HORAIRESPAM" >> $FILEPAMTIMECONF else echo "*;*;$PCUSER;Al0000-2400" >> $FILEPAMTIMECONF fi

  done
  
  for NumDAY in 0 1 2 3 4 5 6
  do
     echo >> /etc/cron.d/CTparental${DAYS[$NumDAY]}
  done
  echo >> $FILE_HCONF

$SED "s?^HOURSCONNECT.*?HOURSCONNECT=ON?g" $FILE_CONF $CRONrestart }

desactivetimelogin () { for FILE in `echo $GESTIONNAIREDESESSIONS` do

  $SED "/account required pam_time.so/d" $DIRPAM$FILE

done cat $FILEPAMTIMECONF.old > $FILEPAMTIMECONF for NumDAY in 0 1 2 3 4 5 6 do

  rm -f /etc/cron.d/CTparental${DAYS[$NumDAY]}

done $SED "s?^HOURSCONNECT.*?HOURSCONNECT=OFF?g" $FILE_CONF

$CRONrestart }


listeusers () { TABUSER=( " $(getent passwd | cut -d":" -f1,3) " ) for LIGNES in $TABUSER do

  1. echo $(echo $LIGNES | cut -d":" -f2)

if [ $(echo $LIGNES | cut -d":" -f2) -ge $UIDMINUSER ] ;then echo $LIGNES | cut -d":" -f1 fi done }


readTimeFILECONF () {

  TESTGESTIONNAIRE=""
  for FILE in `echo $GESTIONNAIREDESESSIONS`
  do
     if [ -f $DIRPAM$FILE ];then
        if [ $(cat $DIRPAM$FILE | grep -c "account required pam_time.so") -eq 0  ] ; then
           $SED "1i account required pam_time.so"  $DIRPAM$FILE
        fi
        TESTGESTIONNAIRE=$TESTGESTIONNAIRE\ $FILE
     fi
  done
  if [ $( echo $TESTGESTIONNAIRE | wc -m ) -eq 1 ] ; then
     echo "Aucun gestionnaire de session connu n'a été détecté."
     echo " il est donc impossible d'activer le contrôle horaire des connexions"
     desactivetimelogin
     exit 1
  fi
  
  if [ ! -f $FILEPAMTIMECONF.old ] ; then
  cp $FILEPAMTIMECONF $FILEPAMTIMECONF.old
  fi
  echo "*;*;root;Al0000-2400" > $FILEPAMTIMECONF
  for NumDAY in 0 1 2 3 4 5 6
  do
  echo  > /etc/cron.d/CTparental${DAYS[$NumDAY]}
  done
  
  for PCUSER in `listeusers`
  do
  HOMEPCUSER=$(getent passwd "$PCUSER" | cut -d ':' -f6)
  HORAIRESPAM=""
 	userisconfigured="0"

while read line do

if [ $( echo $line | grep -E -c "^$PCUSER=[0-6]=" ) -eq 1 ] ; then echo "$line" NumDAY=$(echo $line | cut -d"=" -f2) h1=$(echo $line | cut -d"=" -f3 | cut -d":" -f1 | cut -d"h" -f1) m1=$(echo $line | cut -d"=" -f3 | cut -d":" -f1 | cut -d"h" -f2) h2=$(echo $line | cut -d"=" -f3 | cut -d":" -f2 | cut -d"h" -f1) m2=$(echo $line | cut -d"=" -f3 | cut -d":" -f2 | cut -d"h" -f2) h3=$(echo $line | cut -d"=" -f3 | cut -d":" -f3 | cut -d"h" -f1) m3=$(echo $line | cut -d"=" -f3 | cut -d":" -f3 | cut -d"h" -f2) h4=$(echo $line | cut -d"=" -f3 | cut -d":" -f4 | cut -d"h" -f1) m4=$(echo $line | cut -d"=" -f3 | cut -d":" -f4 | cut -d"h" -f2) if [ $(echo -n $h3$m3 | wc -c) -gt 2 ]; then

					if [ $NumDAY -eq 6 ] ; then

HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$h1$m1-$h2$m2|${DAYSPAM[$NumDAY]}$h3$m3-$h4$m4"

else HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$h1$m1-$h2$m2|${DAYSPAM[$NumDAY]}$h3$m3-$h4$m4|" fi echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]} echo "$m4 $h4 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]} for count in 1 2 3 4 5 do echo "$(timecronalert $count $h2 $m2 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes \" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]} echo "$(timecronalert $count $h4 $m4 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes \" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]} userisconfigured="1" done

else if [ $NumDAY -eq 6 ] ; then HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$h1$m1-$h2$m2" else HORAIRESPAM="$HORAIRESPAM${DAYSPAM[$NumDAY]}$h1$m1-$h2$m2|" fi for count in 1 2 3 4 5 do echo "$(timecronalert $count $h2 $m2 $NumDAY) root export DISPLAY=:0.0 && export XAUTHORITY=$HOMEPCUSER/.Xauthority && sudo -u $PCUSER /usr/bin/notify-send -u critical \"Alerte CTparental\" \"fermeture de session dans $count minutes \" " >> /etc/cron.d/CTparental${DAYS[$NumDAY]} done echo "$m2 $h2 * * ${DAYSCRON[$NumDAY]} root /usr/bin/skill -KILL -u$PCUSER" >> /etc/cron.d/CTparental${DAYS[$NumDAY]}

userisconfigured="1" fi fi


done < $FILE_HCONF if [ $userisconfigured -eq 1 ] ; then echo "*;*;$PCUSER;$HORAIRESPAM" >> $FILEPAMTIMECONF else echo "*;*;$PCUSER;Al0000-2400" >> $FILEPAMTIMECONF fi

  done

$SED "s?^HOURSCONNECT.*?HOURSCONNECT=ON?g" $FILE_CONF $CRONrestart }


usage="Usage: CTparental.sh {-i }|{ -u }|{ -dl }|{ -ubl }|{ -rl }|{ -on }|{ -off }|{ -cble }|{ -dble }

                              |{ -tlo }|{ -tlu }|{ -uhtml }|{ -aupon }|{ -aupoff }|{ -aup } 

-i => Installe le contrôle parental sur l'ordinateur (pc de bureau). Peut être utilisé avec

          un paramètre supplémentaire pour indiquer un chemin de sources pour la page web de redirection.
          exemple : CTparental.sh -i -dirhtml /home/toto/html/
          si pas d'option le \"sens interdit\" est utilisé par défaut.

-u => désinstalle le contrôle parental de l'ordinateur (pc de bureau) -dl => met à jour le contrôle parental à partir de la blacklist de l'université de Toulouse -ubl => A faire après chaque modification du fichier $DNS_FILTER_OSSI -rl => A faire après chaque modification manuelle du fichier $DREAB -on => Active le contrôle parental -off => Désactive le contrôle parental -cble => Configure le mode de filtrage par liste blanche ou par liste noire (défaut) ainsi que les

          catégories que l'on veut activer.

-dble => Remet les catégories actives par défaut et le filtrage par liste noire. -tlo => Active et paramètre les restrictions horaires de login pour les utilisateurs.

          Compatible avec les gestionnaire de sessions suivant $GESTIONNAIREDESESSIONS .

-tlu => Désactive les restrictions horaires de login pour les utilisateurs. -uhtml => met à jour la page de redirection à partir d'un répertoire source ou par défaut avec

           le \"sens interdit\".
           exemples:
                    - avec un repertoire source : CTparental.sh -uhtml -dirhtml /home/toto/html/
  		     - par défaut :              CTparental.sh -uhtml
           permet aussi de changer le couple login, mot de passe de l'interface web.

-aupon => active la mise à jour automatique de la blacklist de Toulouse (tous les 7 jours). -aupoff => désactive la mise à jour automatique de la blacklist de Toulouse. -aup => comme -dl mais seulement si il n'y a pas eu de mise à jour depuis plus de 7 jours. -nodep => si placer aprés -i ou -u permet de ne pas installer/désinstaller les dépendances, utiles si

           on préfaire les installer a la mains , ou pour le scripte de postinst et prerm 
           du deb.
           exemples:
                    CTparental.sh -i -nodep	

CTparental.sh -i -dirhtml /home/toto/html/ -nodep CTparental.sh -u -nodep -nomanuel => utiliser uniquement pour le scripte de postinst et prerm

           du deb.
"

case $arg1 in

  -\? | -h* | --h*)
     echo "$usage"
     exit 0
     ;;
  -i | --install )
     install
     exit 0
     ;;
  -u | --uninstall )
     autoupdateoff 
     dnsmasqoff
     desactivetimelogin
     uninstall
     exit 0
     ;;
  -dl | --download )
     download
     adapt
     catChoice
     dnsmasqon
     $SED "s?^LASTUPDATE.*?LASTUPDATE=$THISDAYS=`date +%d-%m-%Y\ %T`?g" $FILE_CONF
     exit 0
     ;;
  -ubl | --updatebl )
     adapt
     catChoice
     dnsmasqon
     exit 0
     ;;
  -uhtml | --updatehtml )
     FoncHTTPDCONF
     exit 0
     ;;
  -rl | --reload )
     catChoice
     dnsmasqon
     exit 0
     ;;
  -on | --on )
     dnsmasqon
     exit 0
     ;;
  -off | --off )
     autoupdateoff 
     dnsmasqoff
     exit 0
     ;;
  -wlo | --whitelistonly )
     dnsmasqwhitelistonly
     exit 0
     ;;
  -cble | --confblenable )
     choiblenabled
     catChoice
     dnsmasqon
     exit 0
     ;;
   -dble | --defaultblenable )
     initblenabled
     catChoice
     dnsmasqon
     ;;
   -tlo | --timeloginon )
     activetimelogin
     ;;
   -tlu | --timeloginon )
     desactivetimelogin
     ;;
   -trf | --timeloginon )
     readTimeFILECONF
     ;;
   -aupon | --autoupdateon )
     autoupdateon
     ;;
   -aupoff | --autoupdateoff )
     autoupdateoff
     ;;
   -aup | --autoupdate )
     autoupdate
     ;;
   -listusers )
     listeusers
     ;;
     
  *)
     echo "Argument inconnu :$1";
     echo "$usage";
     exit 1
     ;;

esac


index.php <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <TITLE>ALCASAR DNS filtering</TITLE> <link rel="stylesheet" href="/CTadmin/css/style.css" type="text/css"> </HEAD> <body> <?php function form_filter ($form_content) { // réencodage iso + format unix + rc fin de ligne (ouf...) $list = str_replace("\r\n", "\n", utf8_decode($form_content)); if (strlen($list) != 0){ if ($list[strlen($list)-1] != "\n") { $list[strlen($list)]="\n";} ;} ; return $list; }

  1. Choice of language

$Language = 'en'; if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){

 $Langue = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
 $Language = strtolower(substr(chop($Langue[0]),0,2)); }

if($Language == 'fr'){

 $l_switch_LogOFF="Déconnection";
 $l_hours_error1="un mauvais format horaire a été trouvé :exemple 8h30 doit s'écrire 08h30";
 $l_hours_error2="incohérence horaire : ";
 $l_hours_on = "Les horaires de connexion sont actuellement activés";
 $l_hours_off = "Les horaires de connexion sont actuellement désactivés";
 $l_switch_hours_off = "Désactiver les horaires de connexion";
 $l_switch_hours_on = "Activer les horaires de connexion";
 $l_hours1 = "Heures de connexions autorisées";
 $l_switch_Init_bl = "Init Catégories";
 $l_auto_update_on = "La mise à jour de la blacklist de Toulouse tous les 7 jours est activée";
 $l_auto_update_off = "La mise à jour de la blacklist de Toulouse tous les 7 jours est désactivée";
 $l_switch_auto_update_on = "Activer Maj Auto";
 $l_switch_auto_update_off = "Désactiver Maj Auto";
 $l_fmenu_black = "Filtrage par BlackList";
 $l_fmenu_white = "Filtrage par WhiteList";
 $l_title1 = "Filtrage de noms de domaine ";
 $l_error_open_file="Erreur d'ouverture du fichier";
 $l_dnsfilter_on="Le filtrage de noms de domaine est actuellement activé";
 $l_dnsfilter_off="Le filtrage de noms de domaine est actuellement désactivé";
 $l_switch_filtering_on="Activer le filtrage";
 $l_switch_filtering_off="Désactiver le filtrage";
 $l_main_bl="Liste noire/blanche";
 $l_bl_version="Version actuelle :";
 $l_bl_categories_bl="Choix des catégories à filtrer";
 $l_bl_categories_wl="Choix des catégories à autoriser";
 $l_download_bl="Télécharger la dernière version";
 $l_fingerprint="L'empreinte numérique du fichier téléchargé est : ";
 $l_fingerprint2="Vérifiez-là en suivant ce lien (ligne 'blacklists.tar.gz') : ";
 $l_activate_bl="Activer la nouvelle version";
 $l_reject_bl="Rejeter";
 $l_warning="Temps estimé : une minute.";
 $l_specific_filtering="Filtrage spécial";
 $l_forbidden_dns="Noms de domaine filtrés";
 $l_forbidden_dns_explain="Entrez un nom de domaine par ligne (exemple : domaine.org)";
 $l_one_dns="Entrez un nom de domaine par ligne (exemple : domaine.org)";
 $l_rehabilitated_dns="Noms de domaine réhabilités";
 $l_rehabilitated_dns_explain_bl="1-Entrez ici des noms de domaine bloqués par la liste noire 
que vous souhaitez réhabiliter."; $l_rehabilitated_dns_explain_wl="2-Entrez ici des noms de domaine autorisés en plus de ceux
de la liste blanche de Toulouse."; $l_add_to_bl="Noms de domaine ajoutés à la liste noire"; $l_record="Enregistrer les modifications"; $l_wait="Une fois validées, 30 secondes sont nécessaires pour traiter vos modifications";

} else {

 $l_switch_LogOFF="Logout";
 $l_hours_error1="Un mauvais format horaire a été trouvé : exemple 8h30 doit s'écrire 08h30";
 $l_hours_error2="incohérence horaire : ";
 $l_hours_on = "Les horaires de connexion sont actuellement activés";
 $l_hours_off = "Les horaires de connexion sont actuellement désactivés";
 $l_switch_hours_off = "Désactiver les horaires de connexion";
 $l_switch_hours_on = "Activer les horaires de connexion";
 $l_hours1 = "Heures de connexions autorisées";
 $l_switch_Init_bl = "Init Catégories";
 $l_auto_update_on = "La mise à jour de la blacklist de Toulouse tous les 7 jours est activée";
 $l_auto_update_off = "La mise à jour de la blacklist de Toulouse tous les 7 jours est désactivée";
 $l_switch_auto_update_on = "Activer Maj Auto";
 $l_switch_auto_update_off = "Désactiver Maj Auto";
 $l_fmenu_black = "Filtrage par BlackList";
 $l_fmenu_white = "Filtrage par WhiteList";
 $l_title1 = "Domain names filtering";
 $l_error_open_file="Error opening the file";
 $l_dnsfilter_on="Actually, the Domain name filter is on";
 $l_dnsfilter_off="Actually, the Domain name filter is off";
 $l_switch_filtering_on="Switch the Filter on";
 $l_switch_filtering_off="Switch the Filter off";
 $l_main_bl="Blacklist/Whitelist";
 $l_bl_version="Current version : ";
 $l_bl_categories_bl="Choice of filtered categories";
 $l_bl_categories_wl="Choice of authorized categories";
 $l_download_bl="Download the last version";
 $l_fingerprint="The digital fingerprint of the downloaded blacklist is : ";
 $l_fingerprint2="Verify it with this link (line 'blacklists.tar.gz') : ";
 $l_activate_bl="Activate the new version";
 $l_reject_bl="Reject";
 $l_warning="Estimated time : one minute.";
 $l_specific_filtering="Specific filtering";
 $l_forbidden_dns="Filtered domain names";
 $l_forbidden_dns_explain="Enter one domain name per row (exemple : domain.org)";
 $l_one_dns="Enter one domain name per row (example : domain.org)";
 $l_rehabilitated_dns="Rehabilitated domain names";
 $l_rehabilitated_dns_explain_bl="Enter here domain names that are blocked by the blacklist 
and you want to rehabilitate."; $l_rehabilitated_dns_explain_wl="2-Entrez ici des noms de domaine autorisés en plus de ceux
de la liste blanche de Toulouse."; $l_add_to_bl="Domain names to add to blacklist"; $l_record="Save changes"; $l_wait="Once validated, 30 seconds is necessary to compute your modifications"; }

$weeknum = array( 0,1,2,3,4,5,6); $bl_categories="/usr/local/etc/CTparental/bl-categories-available"; $bl_categories_enabled="/usr/local/etc/CTparental/categories-enabled"; $conf_file="/usr/local/etc/CTparental/CTparental.conf"; $hconf_file="/usr/local/etc/CTparental/CThours.conf"; $wl_domains="/usr/local/etc/CTparental/domaine-rehabiliter"; $bl_domains="/usr/local/etc/CTparental/blacklist-local";

  1. default values


if (isset($_POST['choix'])){ $choix=$_POST['choix']; } else { $choix=""; } switch ($choix) { case 'LogOFF' : header('HTTP/1.0 401 Unauthorized'); header('WWW-Authenticate: Digest realm="interface admin"'); exit; break; case 'BL_On' : exec ("sudo -u root /usr/local/bin/CTparental.sh -on"); break; case 'BL_Off' : exec ("sudo -u root /usr/local/bin/CTparental.sh -off"); break; case 'H_On' : exec ("sudo -u root /usr/local/bin/CTparental.sh -trf"); break; case 'H_Off' : exec ("sudo -u root /usr/local/bin/CTparental.sh -tlu"); break; case 'AUP_On' : exec ("sudo -u root /usr/local/bin/CTparental.sh -aupon"); break; case 'AUP_Off' : exec ("sudo -u root /usr/local/bin/CTparental.sh -aupoff"); break; case 'INIT_BL' : exec ("sudo -u root /usr/local/bin/CTparental.sh -dble"); break; case 'Download_bl' : exec ("sudo -u root /usr/local/bin/CTparental.sh -dl"); break; case 'MAJ_cat' : $tab=file($bl_categories_enabled); if ($tab) { $pointeur=fopen($bl_categories_enabled, "w+"); foreach ($_POST as $key => $value) {

                       if (strstr($key,'chk-'))

{ $line=str_replace('chk-',,$key)."\n"; fwrite($pointeur,$line); } } fclose($pointeur); } else {echo "$l_error_open_file $bl_categories_enabled";} $fichier=fopen($bl_domains,"w+"); fputs($fichier, form_filter($_POST['OSSI_bl_domains'])); fclose($fichier); unset($_POST['OSSI_bl_domains']); $fichier=fopen($wl_domains,"w+"); fputs($fichier, form_filter($_POST['OSSI_wl_domains'])); fclose($fichier); unset($_POST['OSSI_wl_domains']); exec ("sudo -u root /usr/local/bin/CTparental.sh -ubl"); break; case 'MAJ_H' : $formatheuresok=1; if (isset($_POST['selectuser'])){ $selectuser=$_POST['selectuser']; } #echo "$selectuser"; $tab=file($hconf_file); if ($tab) { $pointeur=fopen($hconf_file, "w+"); foreach ($tab as $line) { if (strstr($line,$selectuser) == false) { fwrite($pointeur,$line); # on reécrit toutes les lignes ne correspondant pas à l'utilisateur sélectionné }

} } else {echo "$l_error_open_file $hconf_file";} if (isset($_POST["isadmin"])){fwrite($pointeur,"$selectuser=admin="."\n"); } else { fwrite($pointeur,"$selectuser=user="."\n"); foreach ($weeknum as $numday) { $formatheuresok=1; if (isset($_POST["h1$numday"])){ $h1[$numday]=$_POST["h1$numday"]; } else { $h1[$numday]="00h00"; } if (isset($_POST["h2$numday"])){ $h2[$numday]=$_POST["h2$numday"]; } else { $h2[$numday]="23h59"; } if (isset($_POST["h3$numday"])){ $h3[$numday]=$_POST["h3$numday"]; } else { $h3[$numday]=""; } if (isset($_POST["h4$numday"])){ $h4[$numday]=$_POST["h4$numday"]; } else { $h4[$numday]=""; } if (preg_match("/^[0-1][0-9]h[0-5][0-9]$|^2[0-3]h[0-5][0-9]$/",$h1[$numday])!=1){$formatheuresok=0;} if (preg_match("/^[0-1][0-9]h[0-5][0-9]$|^2[0-3]h[0-5][0-9]$/",$h2[$numday])!=1){$formatheuresok=0;} if ($h3[$numday]=="") {

if ($formatheuresok == 1) { $t1=explode("h", $h1[$numday]); $t2=explode("h", $h2[$numday]); $v1="$t1[0]$t1[1]"; $v2="$t2[0]$t2[1]"; if ( $v1 < $v2) { fwrite($pointeur,"$selectuser=$numday=$h1[$numday]:$h2[$numday]"."\n"); } else { fwrite($pointeur,"$selectuser=$numday=00h00:23h59"."\n");

echo "

$l_hours_error2 $h1[$numday]>=$h2[$numday]

";

} } else { fwrite($pointeur,"$selectuser=$numday=00h00:23h59"."\n");

echo "

$l_hours_error1

";

} } else { if (preg_match("/^[0-1][0-9]h[0-5][0-9]$|^2[0-3]h[0-5][0-9]$/",$h3[$numday])!=1){$formatheuresok=0;} if (preg_match("/^[0-1][0-9]h[0-5][0-9]$|^2[0-3]h[0-5][0-9]$/",$h4[$numday])!=1){$formatheuresok=0;} if ($formatheuresok == 1) { $t1=explode("h", $h1[$numday]); $t2=explode("h", $h2[$numday]); $t3=explode("h", $h3[$numday]); $t4=explode("h", $h4[$numday]); $v1="$t1[0]$t1[1]"; $v2="$t2[0]$t2[1]"; $v3="$t3[0]$t3[1]"; $v4="$t4[0]$t4[1]"; if ( $v1 < $v2 && $v2 < $v3 && $v3 < $v4) { fwrite($pointeur,"$selectuser=$numday=$h1[$numday]:$h2[$numday]:$h3[$numday]:$h4[$numday]"."\n"); } else { fwrite($pointeur,"$selectuser=$numday=00h00:23h59"."\n");

echo "

$l_hours_error2 $h1[$numday]>=$h2[$numday]>=$h3[$numday]>=$h4[$numday]

";

} } else { fwrite($pointeur,"$selectuser=$numday=00h00:23h59"."\n");

echo "

$l_hours_error1

";

} }

} }

fclose($pointeur); exec ("sudo -u root /usr/local/bin/CTparental.sh -trf"); break;

}

echo "

"; echo ""; echo ""; echo "
$l_title1
<img src='/images/pix.gif' width=1 height=2>

"; echo "

"; echo "
"; echo "
";

echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>"; echo "<input type=hidden name='choix' value=\"LogOFF\">"; echo "<input type=submit value=\"$l_switch_LogOFF\">"; echo "</FORM>";

echo "
";

if (is_file ($conf_file)) { $tab=file($conf_file); if ($tab) { foreach ($tab as $line) { $field=explode("=", $line); if ($field[0] == "LASTUPDATE") {$LASTUPDATE=trim($field[2]);} if ($field[0] == "DNSMASQ") {$DNSMASQ=trim($field[1]);} if ($field[0] == "AUTOUPDATE") {$AUTOUPDATE=trim($field[1]);} if ($field[0] == "HOURSCONNECT") {$HOURSCONNECT=trim($field[1]);}

} } } else { echo "$l_error_open_file $conf_file";} if ($DNSMASQ <> "OFF") {

echo "

$l_dnsfilter_on

";
	echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";

echo "<input type=hidden name='choix' value=\"BL_Off\">"; echo "<input type=submit value=\"$l_switch_filtering_off\">"; } else {

echo "

$l_dnsfilter_off

";
	echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";

echo "<input type=hidden name='choix' value=\"BL_On\">"; echo "<input type=submit value=\"$l_switch_filtering_on\">"; } echo "</FORM>";

if ( $DNSMASQ<>"OFF"){ include 'dns.php'; }

echo "

"; echo "

"; echo ""; echo ""; echo "
$l_hours1
<img src='/images/pix.gif' width=1 height=2>

"; echo "

"; echo ""; ?> </BODY> </HTML>
";

if ($HOURSCONNECT == "ON") {

echo "

$l_hours_on

";
	echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";

echo "<input type=hidden name='choix' value=\"H_Off\">"; echo "<input type=submit value=\"$l_switch_hours_off\">"; } else {

echo "

$l_hours_off

";
	echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";

echo "<input type=hidden name='choix' value=\"H_On\">"; echo "<input type=submit value=\"$l_switch_hours_on\">"; } echo "</FORM>";

if ($HOURSCONNECT == "ON") { include 'hours.php'; }

echo "

dns.php

<?php if (isset($_GET['filtragemode'])){ $filtragemode=$_GET['filtragemode']; } else {$filtragemode=$DNSMASQ;} if ($filtragemode == 'WHITE') { $bl_categories="/usr/local/etc/CTparental/wl-categories-available"; } else { $bl_categories="/usr/local/etc/CTparental/bl-categories-available";} $filtragemode = urlencode($filtragemode); echo "

"; echo "<a href=\"$_SERVER[PHP_SELF]?filtragemode=BLACK\" title=\"\">$l_fmenu_black</a>"; echo "<a href=\"$_SERVER[PHP_SELF]?filtragemode=WHITE\" title=\"\">$l_fmenu_white</a>

"; echo "

"; echo "

"; echo "

"; echo "

"; echo" "; echo ""; function echo_file ($filename) { if (file_exists($filename)) { if (filesize($filename) != 0) { $pointeur=fopen($filename,"r"); $tampon = fread($pointeur, filesize($filename)); fclose($pointeur); echo $tampon; } } else { echo "$l_error_openfile $filename"; } } echo "

"; echo "

$l_main_bl

"; echo ""; echo "";} else {echo "
$l_bl_categories_wl
";}

//on lit et on interprète le fichier de catégories $cols=1; if (file_exists($bl_categories)) { $pointeur=fopen($bl_categories,"r"); while (!feof ($pointeur)) { $ligne=fgets($pointeur, 4096); if ($ligne) {

if ($cols == 1) { echo "";} $categorie=trim(basename($ligne)); echo ""; $cols++; if ($cols > 10) { echo ""; $cols=1; } } } fclose($pointeur); } else { echo "$l_error_open_file $bl_categories"; } echo ""; echo ""; echo ""; if ( $filtragemode == "BLACK" ) { echo ""; } echo ""; echo "
";

echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";

echo "
$l_bl_version $LASTUPDATE"; echo "

";

echo "<input type='hidden' name='choix' value='Download_bl'>"; echo "<input type='submit' value='$l_download_bl'>"; echo " ($l_warning)";

echo "</FORM>"; echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>"; echo "<input type='hidden' name='choix' value='INIT_BL'>"; echo "<input type='submit' value='$l_switch_Init_bl'>"; echo "</FORM>"; if ($AUTOUPDATE == "ON") {

echo "

$l_auto_update_on

";
	echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";

echo "<input type=hidden name='choix' value=\"AUP_Off\">"; echo "<input type=submit value=\"$l_switch_auto_update_off\">"; } else {

echo "

$l_auto_update_off

";
	echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>";

echo "<input type=hidden name='choix' value=\"AUP_On\">"; echo "<input type=submit value=\"$l_switch_auto_update_on\">"; } echo "</FORM>";

echo "
";

echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>"; echo "<input type='hidden' name='choix' value='MAJ_cat'>";

if ($filtragemode == "BLACK"){echo "
$l_bl_categories_bl
<a href='bl_categories_help.php?cat=$categorie' target='cat_help' onclick=window.open('bl_categories_help.php','cat_help','width=600,height=150,toolbar=no,scrollbars=no,resizable=yes') title='categories help page'>$categorie</a>
";

echo "<input type='checkbox' name='chk-$categorie'"; // la catégorie n'existe pas dans le fichier de catégorie activé -> categorie non selectionnée

                       $str = file_get_contents($bl_categories_enabled);

if (strpos($str, $categorie)===false) { echo ">";} else { echo "checked>"; }

echo "
"; if ($filtragemode == "BLACK"){echo "

$l_rehabilitated_dns

$l_rehabilitated_dns_explain_bl
$l_one_dns
";} else {echo "

$l_rehabilitated_dns

$l_rehabilitated_dns_explain_wl
$l_one_dns
";}

echo "<textarea name='OSSI_wl_domains' rows=5 cols=40>"; echo_file ($wl_domains);

echo "</textarea>
"; echo "

$l_forbidden_dns

$l_forbidden_dns_explain
";

echo "<textarea name='OSSI_bl_domains' rows=5 cols=40>"; echo_file ($bl_domains);

echo "</textarea>
";

echo "<input type='submit' value='$l_record'>"; echo "</form> ($l_wait)";

echo "

";

?> hours.php

<?php

  1. Choice of language

$Language = 'en'; if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){

 $Langue = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
 $Language = strtolower(substr(chop($Langue[0]),0,2)); }

if($Language == 'fr'){

 $l_selectuser="l'utilisateur selectionné est : ";
 $l_userisnotselect="Veuillez selectionner un utilisateur.";
 $l_isadmin = "7j/7 24h/24";
 $l_valide = "Enregistrer";
 $to = " à " ;
 $and = " et " ;
 $l_select = "Sélectionner";
 $l_info1 = "08h00 à 24h00 ou 08h00 à 12h00 et 14h00 à 24h00";
 $week = array( "lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche");

} else {

 $l_userisnotselect="Veuillez sélectionner un utilisateur.";
 $l_selectuser="l'utilisateur sélectionné est : ";
 $l_isadmin = "7j/7 24h/24";
 $l_valide = "Enregistrer";
 $l_select = "Select";
 $to = " to " ;
 $and = " and " ;
 $l_info1 = "08h00 à 24h00 ou 08h00 à 12h00 et 14h00 à 24h00";
 $week = array( "lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche");

} if (isset($_POST['selectuser'])){ $selectuser=$_POST['selectuser']; }


      1. on lit est on interprète le fichier CTparental.conf

echo "

"; exec ("/usr/local/bin/CTparental.sh -listusers 2> /dev/null",$USERSPC); # récupération des utilisateurs du poste.(UID >= 1000) echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>"; echo "<select name=\"selectuser\">"; if ($selectuser){echo "<option value=\"$selectuser\">$selectuser\n"; } else {echo "<option value=\"\">\n"; } foreach ($USERSPC as $USERSELECT){echo "<option value=\"$USERSELECT\">$USERSELECT\n";} echo " </select>"; echo "<input type=\"submit\" value=\"$l_select\">"; echo "</FORM>"; if (isset($selectuser)) { echo "

"; echo "

"; echo "<FORM action='$_SERVER[PHP_SELF]' method=POST>"; echo "

$l_selectuser $selectuser

";

if (is_file ($hconf_file)) { $tab=file($hconf_file); if ($tab) { foreach ($tab as $line) { $field=explode("=", $line); if ( $field[0] == $selectuser ){ $field2=explode(":", $field[2]); $numday=$field[1]; $isconfigured=1;

if ( $numday == "admin") { echo "";} elseif ( $numday == "user") {echo "";}

else {

echo""; echo" "; echo" "; echo" ";

}

}

}

}

} else { echo "$l_error_open_file $hconf_file";}

if (isset($isconfigured)==0){

echo "";

}


echo "
$l_isadmin : <input type='checkbox' name='isadmin' checked>
$l_isadmin : <input type='checkbox' name='isadmin' >
$week[$numday]:<INPUT type=\"text\" size=5 maxlength=5 value=\"$field2[0]\" name=\"h1$numday\">$to <INPUT type=\"text\" size=5 maxlength=5 value=\"$field2[1]\" name=\"h2$numday\">$and <INPUT type=\"text\" size=5 maxlength=5 value=\"$field2[2]\" name=\"h3$numday\">$to <INPUT type=\"text\" size=5 maxlength=5 value=\"$field2[3]\" name=\"h4$numday\">
$l_isadmin : <input type='checkbox' name='isadmin' checked=\"checked\">

";

echo "<input type=hidden name='selectuser' value=\"$selectuser\">";

       echo "<input type=hidden name='choix' value=\"MAJ_H\">";

echo "<input type=\"submit\" value=\"$l_valide\">"; echo "</FORM>"; }

else { echo "

$l_userisnotselect

";}

?>

bl_categories_help.php <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <?php $bl_dir="/usr/local/etc/CTparental/dnsfilter-available/";

  1. Choice of language

$Language = 'en'; if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){

 $Langue = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
 $Language = strtolower(substr(chop($Langue[0]),0,2)); }

if($Language == 'fr'){

 $l_title = "Catégories de la liste noire";
 $l_error_open_file="Erreur d'ouverture du fichier";
 $l_close="Fermer";
 $l_unknown_cat="Cette catégorie n'est pas décrite";
 $l_nb_domains="Nombre de noms de domaine filtrés :";
 $l_nb_urls="Nombre d'URL filtrés :";
 $l_explain_adult="Sites relatifs à l'érotisme et à la pornographie";
 $l_explain_agressif="Sites extrémistes, racistes, antisémites ou incitant à la haine";
 $l_explain_arjel="Sites de pari en ligne certifies par l'ARJEL (Autorité de Régulation des Jeux En Ligne)";
 $l_explain_astrology="Sites relatifs à l'astrologie";
 $l_explain_bank="Sites de banques en ligne";
 $l_explain_audio_video="Sites de téléchargement de fichiers audio et vidéo";
 $l_explain_blog="Sites d'hébergement de blogs";
 $l_explain_celebrity="Sites « people », stars, etc.";
 $l_explain_chat="Sites de dialogue en ligne";
 $l_explain_child="Sites pour enfants";
 $l_explain_cleaning="Sites relatifs à la mise à jour logicielle ou antivirale";
 $l_explain_dangerous_material="Sites relatifs à la création de produits dangereux (explosif, poison, etc.)";
 $l_explain_dating="Sites de rencontres en ligne";
 $l_explain_drogue="Sites relatifs aux produits stupéfiants";
 $l_explain_filehosting="Entrepôts de fichiers  (vidéo, images, son, logiciels, etc.)";
 $l_explain_financial="Sites d'informations financières, bourses, etc.";
 $l_explain_forums="Sites d'hébergement de forums de discussion";
 $l_explain_gambling="Sites de jeux d'argent en ligne (casino, grattage virtuel, etc.)";
 $l_explain_games="Sites de jeux en ligne";
 $l_explain_hacking="Sites relatifs au piratage informatique";
 $l_explain_jobsearch="Sites de recherche d'emplois";
 $l_explain_liste_bu="Liste de sites éducatifs pour bibliothèque";
 $l_explain_malware="Site relatifs au logiciels malveillants (virus, vers, trojans, etc.)";
 $l_explain_manga="Site de Mangas";
 $l_explain_marketingware="Sites marchands douteux (X, organes, enfants, etc.)";
 $l_explain_mixed_adult="Sites pour adultes (image-choc, gore, guerre, etc.)";
 $l_explain_mobile_phone="Sites relatifs aux mobiles GSM (sonneries, logos, etc.)";
 $l_explain_ossi="Noms de domaine et URLs que vous ajoutez à la liste noire (voir ci-dessous)";
 $l_explain_phishing="Sites relatifs à l'hammeçonnage (pièges bancaires, redirection, etc.)";
 $l_explain_press="Sites de presse";
 $l_explain_publicite="Sites ou bannières publicitaires";
 $l_explain_radio="Sites de radios en ligne ou de podcast";
 $l_explain_reaffected="Sites connus ayant changé de propriétaire (et donc de contenu)";
 $l_explain_redirector="Sites de redirection, d'anonymisation ou de contournement";
 $l_explain_remote_control="Sites permettant la prise de controle a distance";
 $l_explain_sect="Sites sectaires";
 $l_explain_social_networks="Sites de réseaux sociaux";
 $l_explain_sexual_education="Sites relatifs à l'éducation sexuelle";
 $l_explain_shopping="Sites de vente et d'achat en ligne";
 $l_explain_sport="Sites de sport";
 $l_explain_strict_redirector="URL intentionnellement mal formées";
 $l_explain_strong_redirector="URL mal formées dans une requête « google »";
 $l_explain_tricheur="Sites relatifs aux tricheries (examens, concours, etc.)";
 $l_explain_webmail="Site WEB permettant de consultation son courrier électronique";
 $l_explain_warez="Sites relatifs aux logiciels piratés (crackés), aux générateurs de clés, etc.";

} else {

 $l_title = "Blacklist categories";
 $l_error_open_file="Error opening the file";
 $l_close="Close";
 $l_unknown_cat="This category isn't describe";
 $l_nb_domains="Number of filtered domain names :";
 $l_nb_urls="Number of filtered URL :";
 $l_explain_adult="Sites related to eroticism and pornography";
 $l_explain_agressif="Sites extremist, racist, anti-Semitic or hate";
 $l_explain_arjel="Online gambling sites allowed by the french authority 'ARJEL' (Autorité de Régulation des Jeux En Ligne)";
 $l_explain_astrology="Sites related to astrology";
 $l_explain_audio_video="Sites for downloading audio and video";
 $l_explain_bank="Online bank sites";
 $l_explain_blog="Sites hosting blogs";
 $l_explain_celebrity="Sites « people », stars, etc.";
 $l_explain_chat="Online chat sites";
 $l_explain_child="Sites for children";
 $l_explain_cleaning="Sites related to software update or antiviral";
 $l_explain_dangerous_material="Sites related to the creation of dangerous goods (explosives, poison, etc.)";
 $l_explain_dating="Online dating sites";
 $l_explain_drogue="Sites related to narcotic";
 $l_explain_filehosting="Warehouses of files (video, images, sound, software, etc.)";
 $l_explain_financial="Sites of financial information";
 $l_explain_forums="Sites hosting discussion forums";
 $l_explain_gambling="Online gambling sites (casino, virtual scratching, etc.)";
 $l_explain_games="Online games sites";
 $l_explain_hacking="Sites related to hacking";
 $l_explain_jobsearch="Job search sites";
 $l_explain_liste_bu="List of educational sites for library";
 $l_explain_malware="Malware sites (viruses, worms, trojans, etc.).";
 $l_explain_manga="Manga site";
 $l_explain_marketingware="doubtful commercial sites";
 $l_explain_mixed_adult="Adult sites (shock, gore, war, etc.).";
 $l_explain_mobile_phone="Sites related to GSM mobile (ringtones, logos, etc.)";
 $l_explain_ossi="Domain names and URLs you add to the blacklist (see below)";
 $l_explain_phishing="Phishing sites (traps banking, redirect, etc..)";
 $l_explain_press="News sites";
 $l_explain_publicite="Advertising sites";
 $l_explain_radio="Online radio podcast sites";
 $l_explain_reaffected="Sites that have changed ownership (and therefore content)";
 $l_explain_redirector="redirects, anonymization or bypass sites";
 $l_explain_remote_control="Sites for making remote control";
 $l_explain_sect="Sectarian sites";
 $l_explain_social_networks="Social networks sites";
 $l_explain_sexual_education="Sites related to sex education";
 $l_explain_shopping="Shopping sites and online shopping";
 $l_explain_sport="Sport sites";
 $l_explain_strict_redirector="Intentionally malformed URL";
 $l_explain_strong_redirector="Malformed URL in a 'google' query";
 $l_explain_tricheur="Sites related to cheating (tests, examinations, etc.)";
 $l_explain_webmail="Web sites for e-mail consultation";
 $l_explain_warez="Sites related to cracked softwares";

} if (isset($_GET['cat'])){$categorie=$_GET['cat'];} $bl_categorie_domain_file=$bl_dir.$categorie.".conf"; if (file_exists($bl_categorie_domain_file)) $nb_domains=exec ("wc -w $bl_categorie_domain_file|cut -d' ' -f1"); else $nb_domains=$l_error_openfilei." ".$bl_categorie_domain_file; if (file_exists($bl_categorie_url_file)) $nb_urls=exec ("wc -w $bl_categorie_url_file|cut -d' ' -f1"); else $nb_urls=$l_error_openfile." ".$bl_categorie_url_file; echo "<TITLE>$l_title</TITLE>"; ?> <link rel="stylesheet" href="/CTadmin/css/style.css" type="text/css"> </HEAD> <body>

<?php echo $categorie ;?>
<img src="/images/pix.gif" width="1" height="2">

<?php $compat_categorie=strtr($categorie,"-","_"); if (!empty(${'l_explain_'.$compat_categorie}))

echo "
${'l_explain_'.$compat_categorie}
";

else echo "$l_unknown_cat"; echo "
$l_nb_domains $nb_domains
"; ?>


<a href="javascript:window.close();"><?php echo "$l_close"; ?></a>

</BODY> </HTML>