diff --git a/archive/archives/E-mail_all b/archive/archives/E-mail_all new file mode 100755 index 00000000..2173cd4d --- /dev/null +++ b/archive/archives/E-mail_all @@ -0,0 +1,11 @@ +#!/bin/zsh +./remail $1 $2 > email.tmp +chmod a+x email.tmp +echo maintenant il faut editer ./email.tmp avec pico +echo et virrer les ^M qui apparaissent. +echo apres, on lance ./email.tmp et on l'efface +#./email.tmp +#rm email.tmp +echo Done +# envoie un E-mail a tout le monde +# orthographe : E-mail_all fichier.txt "titre" \ No newline at end of file diff --git a/archive/archives/MiroirConfig b/archive/archives/MiroirConfig new file mode 100755 index 00000000..2057d259 --- /dev/null +++ b/archive/archives/MiroirConfig @@ -0,0 +1,7 @@ +#!/bin/zsh + +#Copie de sauvegarde de toute la config de zamok +#lancé par cron.daily +scp -1BCr /etc/CRANS /etc/genConfs zamok@komaz:/var/zamok +scp -1BCr /etc/CRANS /etc/genConfs zamok@sila:/var/zamok + diff --git a/archive/archives/MiroirFWall b/archive/archives/MiroirFWall new file mode 100755 index 00000000..d8bb9110 --- /dev/null +++ b/archive/archives/MiroirFWall @@ -0,0 +1,8 @@ +#!/bin/zsh +scp -1BCr /etc/CRANS/blacklist.cf zamok@komaz:/var/zamok/CRANS/ +scp -1BCr /etc/CRANS/blacklist.cf zamok@sila:/var/zamok/CRANS/ + +#On n'a pas besoin de tout mirrorer à chaque lanceMake. +#scp -BCr /etc/CRANS /etc/genConfs zamok@komaz:/var/zamok +#scp -BCr /etc/CRANS /etc/genConfs zamok@sila:/var/zamok + diff --git a/archive/archives/SMBMessage b/archive/archives/SMBMessage new file mode 100755 index 00000000..ae90bfa9 --- /dev/null +++ b/archive/archives/SMBMessage @@ -0,0 +1,2 @@ +#!/bin/sh +cat $3 | smbclient -U $1 -M $2 diff --git a/archive/archives/analyse.pl b/archive/archives/analyse.pl new file mode 100755 index 00000000..d4535d32 --- /dev/null +++ b/archive/archives/analyse.pl @@ -0,0 +1,425 @@ +#!/usr/bin/perl -w +## +## Analyse.pl +## +## Made by Vincent HANQUEZ +## +## Started on Tue 09 Oct 2001 01:28:25 AM CEST tab +## Last Update dim 10 fév 2002 16:55:24 CET Nicolas STRANSKY +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; only version 2 of the License +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. +## +## +## AUTEUR: Vincent HANQUEZ +## MAINTAINERS: Vincent HANQUEZ, Nicolas STRANSKY +## +## DESCRIPTION: analyse permet de creer des resumes des fichiers de +## log cree par net-acct. Net-acct est un daemon qui permet de logguer toutes +## les connexions effectues. +## +## SYNOPSIS: analyse [-d] [-h ][-m ][-n ][-f ] +## +## VERSION: 0.35 +## +## + +use strict; +use File::stat; +use POSIX qw(strftime); +use AppConfig qw(:expand :argcount); +require Mail::Send; + +my $ip_interne = "138\.231\.1(3[6-9]|4[0-3])\."; + +## Do not modify after + +my $VERSION = 0.35; +my $AUTEUR = "Vincent HANQUEZ (aka Tab)"; + +my $pattern_ip = + "[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}"; + +my ($opt_download, $opt_upload) = 0; +my $opt_dnsresolve = 1; +my $opt_normalize = 1; +#my $opt_config = 1; +my $opt_config = 0; +my $opt_file = "/var/log/net-acct/net-acct.log.0"; +my $opt_configfile = "/etc/analyse.conf"; +my $opt_host = ""; +my $opt_mail = ""; +my $opt_number = -1; +my $bad_arg = 0; +my $period = 1; +$opt_upload = 1; + +######## ERROR GEST ######## +# USAGE: affiche en cas d'erreur dans les arguments. + +sub usage +{ + print "Usage:\tanalyse (-d) [-h ][-m ][-n ][-f ]\n\n"; + + print "\t-d, --download\tTri la base sur le download\n"; + print "\t-h, --host\tResume des connexions effectues par la machine \n"; + print "\t-n, --nombre\tChoisi le nombre de lignes affichees\n"; + print "\t-m, --mail\tEnvoie la sortie par mail a \n"; + print "\t-f, --file\tSpecifie le fichier qui sera analyse\n"; + print "\t-c, --config\tSpecifie le fichier de configuration\n"; + print "\t --nodns\tNe resout pas les noms DNS\n"; + print "\t --nonorm\tNe transforme pas les nombres en forme plus lisible (Ko, Mo, Go)\n"; + print "\t --today\tChiffres du jour, analyse de /var/log/net-acct/net-acct.log\n"; + print "\t --noconfig\tNe charge pas les options du fichier de config\n"; + print "\t --noperiod\tN'affiche pas la période sur laquelle porte l'analyse\n"; + print "\t --help\tAffiche cette aide\n"; + print "\n"; + print "par defaut si l'option n'est pas utilise:\n"; + print "\tdownload = on tri sur l'upload\n"; + print "\tnombre = tout est affiche\n"; + print "\tfile = analyse de /var/log/net-acct/net-acct.log.0\n"; + print "\tconfig = par defaut /etc/analyse.conf"; + + exit (1); +} + +# SETOPT: gerer les options.. +sub setopt +{ + my ($opt_name, $opt_param) = @_; + if ($opt_name =~ /f/) + { $opt_file = $opt_param; } + elsif ($opt_name =~ /h/) + { $opt_host = $opt_param; } + elsif ($opt_name =~ /n/) + { $opt_number = $opt_param; } + elsif ($opt_name =~ /c/) + { $opt_configfile = $opt_param; } + elsif ($opt_name =~ /m/) + { $opt_mail = $opt_param; } +} + +# Readconfig + +sub read_configfile +{ + my $info = stat($opt_configfile) || die("Unable to open $opt_configfile"); + my $config = AppConfig->new( + 'normalize', + 'dnsresolve', + 'network' => { ARGCOUNT => 1 } + ); + $config->file($opt_configfile); + $opt_normalize = $config->normalize(); + $opt_dnsresolve = $config->dnsresolve(); + $ip_interne = $config->network(); +} + + +########## FCT ########### +# SHOW_ALL: affiche toutes les machines + +sub show_all +{ + my %db; + + my ($nb_to_print, $sort_by_upload) = @_; + +# creation de la base + open (INPUT, $opt_file) || die ("Unable to open $opt_file"); + while (my $line = ) { + my ($src_ip, $dst_ip, $size) = (split "\t", $line)[2,4,6]; + if ($src_ip =~ /$ip_interne/ ) + { $db{$src_ip}->{up} += $size; } + if ($dst_ip =~ /$ip_interne/ ) + { $db{$dst_ip}->{down} += $size; } + } + close(INPUT); + +# Nombre d'entree a afficher + if ($nb_to_print == -1) + { $nb_to_print = (my @nb = (keys %db)); } + + my $max = (keys %db)[0]; + +# tris sur upload ou download + my $way1 = "up"; + my $way2 = "down"; + if ($sort_by_upload == 0) + { $way1 = "down"; $way2 = "up"; } + +# on affiche $nb_to_print entree, en ayant trier les machines +if ($period) +{ + open (INPUT, $opt_file) || die ("Unable to open $opt_file"); + my $line1 = ; + my $firstdate = (split "\t", $line1)[0]; + my $firstdate2 = strftime("Analyse depuis le %d-%m-%Y %H:%M:%S", localtime($firstdate)); + print $firstdate2; + print "\n"; + + seek(INPUT, -90, 2); + my $lastlineX = ; + my $lastline = ; + my $lastdate = (split "\t", $lastline)[0]; + my $lastdate2 = strftime(" jusq'au %d-%m-%Y %H:%M:%S", localtime($lastdate)); + print $lastdate2; + print "\n"; + close(INPUT); + + print "\n";} + + + for (my $dec = $nb_to_print; $dec > 0; $dec--) + { + foreach my $ip (keys %db) + { + if (defined($db{$ip}->{$way1}) && + $db{$max}->{$way1} <= $db{$ip}->{$way1}) + { $max = $ip; } + } + print normalize($db{$max}->{$way1})." (". + normalize($db{$max}->{$way2}).")\t". + ip_to_name($max)."\n" if ($db{$max}->{$way1} > 0); + $db{$max}->{$way1} = 0; + } +} + +############################# +# GET_HOST_INFO: Affiche les informations sur une machine +sub get_host_info +{ + my $total_size; + my %db; + my ($ip_search) = @_; + + $total_size->{UPLOAD} = 0; $total_size->{DOWNLOAD} = 0; + +# Must unresolve name + if (!($ip_search =~ /$pattern_ip/)) + { $ip_search = name_to_ip($ip_search); if ($ip_search eq "0") { return (-1); } } + +# create db + open (INPUT, $opt_file) || die ("Unable to open $opt_file"); + while (my $line = ) { + my ($src_ip, $src_port, $dst_ip, $dst_port, $size) = + (split "\t", $line)[2,3,4,5,6]; + if ($src_ip eq $ip_search) { + $total_size->{UPLOAD} += $size; + $db{$src_port}->{UPLOAD_LOCAL} += $size; + $db{$dst_port}->{UPLOAD_DIST} += $size; + } + if ($dst_ip eq $ip_search) { + $total_size->{DOWNLOAD} += $size; + $db{$dst_port}->{DOWNLOAD_LOCAL} += $size; + $db{$src_port}->{DOWNLOAD_DIST} += $size; + } + } + close (INPUT); + +# printing info +if ($period) +{ + open (INPUT, $opt_file) || die ("Unable to open $opt_file"); + my $line1 = ; + my $firstdate = (split "\t", $line1)[0]; + my $firstdate2 = strftime("Analyse depuis le %d-%m-%Y %H:%M:%S", localtime($firstdate)); + print $firstdate2; + print "\n"; + + seek(INPUT, -90, 2); + my $lastlineX = ; + my $lastline = ; + my $lastdate = (split "\t", $lastline)[0]; + my $lastdate2 = strftime(" jusqu'au %d-%m-%Y %H:%M:%S", localtime($lastdate)); + print $lastdate2; + print "\n"; + close(INPUT); + + print "\n";} + print "--- Info for $ip_search ---"; + print "\n"; + + foreach my $type ("UPLOAD", "DOWNLOAD") + { + print $type.": \t".normalize($total_size->{$type})."\n"; + foreach my $location ("LOCAL", "DIST") + { + print "PORT $location: "; + + my $max = (keys %db)[0]; + for (my $dec=5; $dec > 0; $dec--) { + foreach my $port (keys %db) { + if (defined($db{$port}->{$type."_".$location}) && + (! defined($db{$max}->{$type."_".$location}) || + $db{$max}->{$type."_".$location} <= + $db{$port}->{$type."_".$location})) + { $max = $port; } + } + print "$max(".normalize($db{$max}->{$type."_".$location}).") " + if ($db{$max}->{$type."_".$location} > 0); + $db{$max} ->{$type."_".$location} = 0; + } + print "\n"; + } + print "\n"; + } + + print "--- Calculs ---\n"; + print "Upload pur:\t". + normalize($total_size->{UPLOAD} - $total_size->{DOWNLOAD}/20); + foreach my $type ("UPLOAD", "DOWNLOAD") + { + print "\nTAUX $type:\t"; + print normalize($total_size->{$type}/24)."/h - "; + print normalize($total_size->{$type}/1440)."/min - "; + print normalize($total_size->{$type}/86400)."/s"; + } + print "\n"; +} + +########################### +######### TOOLKIT ######### +# normalize: transforme un nombre, en un nombre suivi d'un prefixe +# Go, Mo, Ko, Octets. + +sub normalize +{ + my ($nb) = @_; + if ($opt_normalize) + { + if (defined $nb) { + if ($nb < 0) + { return ("0o"); } + if ($nb > (1024*1024*1024)) + { return ((int($nb*100/(1024*1024*1024))/100)."Go"); } + elsif ($nb > (1024*1024)) + { return (int($nb/(1024*1024))."Mo"); } + elsif ($nb > 1024) + { return (int($nb/(1024))."Ko"); } + else + { return ($nb."o"); } + } + return ("0"); + } else + { + if (defined $nb) + { return ($nb); } + else + { return (0); } + } +} + +# ip_to_name: resout le nom associe a l'ip donne en argument +sub ip_to_name +{ + my ($ip) = @_; + my $ret; + my $host_name; + my $aliases; + my $addrtype; + my $length; + my @addrs; + + if (!($ip =~ /$pattern_ip/)) + { return ($ip); } + + if ($opt_dnsresolve) { + my $ipaddr = pack("C4", split(/\./, $ip)); + if (($host_name, $aliases, $addrtype, $length, @addrs) + = gethostbyaddr($ipaddr, 2)) + { return ($host_name); } + else + { return ("$ip [lookup failed]"); } + } + return ($ip); +} + +# name_to_ip: deresout le nom +sub name_to_ip +{ + my ($host) = @_; + my $line = ""; + if ($host =~ /$pattern_ip/) + { return ($host); } + open (COM, "host $host | awk '{print \$4}' |"); + $line = ; + close (COM); + if (! ($line =~ /$pattern_ip/)) + { print "host $host don't exist aborting\n"; return ("0");} + chomp($line); + return ($line); +} + +########################################################################## + +# Lit les options de la ligne de commande +use Getopt::Long; +Getopt::Long::config ("bundling"); +Getopt::Long::GetOptions +( + 'v|version' => sub { print "analyse version $VERSION\n$AUTEUR\n"; }, + 'd|download' => sub { $opt_download = 1; $opt_upload = 0; }, + 'u|upload' => sub { $opt_upload = 1; $opt_download = 0; }, + 'c|config=s' => \&setopt, + 'h|host=s' => \&setopt, + 'f|file=s' => \&setopt, + 'm|mail=s' => \&setopt, + 'n|number=s' => \&setopt, + 'help' => \&usage, + 'nodns' => sub { $opt_dnsresolve = 0; }, + 'nonorm' => sub { $opt_normalize = 0; }, + 'noconfig' => sub { $opt_config = 0; }, + 'noperiod' => sub { $period = 0; }, + 'today' => sub { $opt_file = "/var/log/net-acct/net-acct.log"; } +) or $bad_arg = 1; + +if ($bad_arg == 1) +{ usage(); } + +my ($mail_msg, $mail_fh); + +# Lit les options du fichier de config +# sauf si --noconfig est utilise +if ($opt_config) +{ read_configfile(); } + +# Begin Mail ? +if ($opt_mail ne "") +{ + $mail_msg = new Mail::Send; + $mail_msg->to($opt_mail); + $mail_msg->subject("[ANALYSE]"); + $mail_fh = $mail_msg->open(); + close (STDOUT); + open (STDOUT, ">/tmp/analyse_mail"); +} + +# Main Part +if ($opt_host ne "") +{ get_host_info($opt_host); } +else +{ show_all($opt_number, $opt_upload); } + +# Close Mail +if ($opt_mail ne "") +{ + close (STDOUT); + open (FH, "/tmp/analyse_mail") || die ("argh not possible !\n"); + while (my $line = ) + { print $mail_fh $line; } + close (FH); + $mail_fh->close(); +} + +exit (0); diff --git a/archive/archives/analyse_komaz/analyse.cron b/archive/archives/analyse_komaz/analyse.cron new file mode 100755 index 00000000..1cbcdb7a --- /dev/null +++ b/archive/archives/analyse_komaz/analyse.cron @@ -0,0 +1,84 @@ +#!/bin/sh +## +## Analyse +## +## Made by Tab +## +## Started on Tue 09 Oct 2001 01:28:25 AM CEST tab +## MAJ : 06/02/2003 -- Fred + +TEMPFILE="/tmp/analyse.mail" + +# Options pour les stats traffic +PROG="/usr/scripts/analyse_komaz/nacct.py" +OPTIONS="-N 15" +OPTIONS2="-N 15 -c 2" +OPTIONS3="-N 15 -c 5" + +# Divers chemins +BLACKLIST="/var/zamok/CRANS/blacklist.cf" +AUTODISC_LOG="/var/log/autodisconnect.log" +VIRUS_BLACKLIST="/tmp/virus_blacklist" + +################################################################################# +# Machines ayant été disconnectées dans les 24h : +# affichage de leur historique + +echo "Bilan des autodisconnexions des dernières 24h :" >> $TEMPFILE +echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" >> $TEMPFILE + +if [ -e $AUTODISC_LOG ]; then + for host in $(awk -F'[ .]' '/'$(date --date=yesterday +%d-%m-%Y)'-(0[7-9]|1|2)|'$(date +%d-%m-%Y)'-0[0-6]/ {print $2}' $AUTODISC_LOG) + do + echo "$host :" + ( awk -F'-' '/'$host'.crans.org/ {print $3$2"@"$1"/"$2"/"$3" : autodisconnecté"}' $AUTODISC_LOG + awk -F'[:/ ]' '/^'$host'/ || /^#'$host'/ {print $6$5"@"$4"/"$5"/"$6" : déco manuelle (->"$7"/"$8"/"$9")"}' $BLACKLIST ) \ + | sort -r \ + | awk -F@ '{print "\t"$2}' + done >> $TEMPFILE +else + echo -e "Problème avec $AUTODISC_LOG" >> $TEMPFILE +fi + +echo -e "\n" >> $TEMPFILE + +################################################################################# +# Vérolés + +if [ -e $VIRUS_BLACKLIST ]; then + echo "Bilan des bloquages web pour virus :" >> $TEMPFILE + echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" >> $TEMPFILE + + echo "Il y a $(wc -l $VIRUS_BLACKLIST | awk '{print $1}') machines infectées." >> $TEMPFILE + + if [ -e $VIRUS_BLACKLIST.hier ] ; then + diff -U0 -s $VIRUS_BLACKLIST.hier $VIRUS_BLACKLIST \ + | egrep -v '\-\-\-|\+\+\+|@@' >> $TEMPFILE + else + cat $VIRUS_BLACKLIST >> $TEMPFILE + fi + cp -f $VIRUS_BLACKLIST $VIRUS_BLACKLIST.hier + echo -e "\n" >> $TEMPFILE +fi + +################################################################################# +# Statistiques + +echo "Statistiques upload/download :" >> $TEMPFILE +echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" >> $TEMPFILE + +if [ -x $PROG ]; then + echo -e "Upload (Download) pur normal :\n" >> $TEMPFILE + $PROG $OPTIONS | tail -15 | awk -F "|" '{print $1" ("$3")"" "$7}' >> $TEMPFILE + echo -e "\nUpload total normal :\n" >> $TEMPFILE + $PROG $OPTIONS2 | tail -15 | awk -F "|" '{print $2" "$7}' >> $TEMPFILE + echo -e "\nUpload total exempté :\n" >> $TEMPFILE + $PROG $OPTIONS3 | tail -15 | awk -F "|" '{print $5" "$7}' >> $TEMPFILE +else + echo -e "Problème avec $PROG" >> $TEMPFILE +fi + +################################################################################# +# Envoi du mail +cat $TEMPFILE |/usr/bin/mail -s "Stats -- $(date --date=yesterday +%A\ %d\ %B\ %Y)" disconnect@crans.org +rm -f $TEMPFILE diff --git a/archive/archives/analyse_komaz/autodisconnect b/archive/archives/analyse_komaz/autodisconnect new file mode 100755 index 00000000..116342b4 --- /dev/null +++ b/archive/archives/analyse_komaz/autodisconnect @@ -0,0 +1,215 @@ +#!/bin/zsh +## +## autodisconnect +## +## Made by stransky +## Login stransky +## +## Started on ven 25 jan 2002 22:24:26 CEST Nicolas STRANSKY +## Last update lun 03 nov 2003 07:38:51 CET Nicolas STRANSKY +## +## script de surveillance automatique de l'upload. +## à lancer par cron. + +export LANG=fr_FR@euro + +LIMITE_SOFT=100 +LIMITE_HARD=700 +MAIL_INTERVAL=100 +LOG=/var/log/autodisconnect.log +LOGFILE=/var/log/net-acct/net-acct.log +outpF=$(mktemp) +TEMPFILE=/tmp/uploaders +LISTFILE=/tmp/liste +EMPREINTE_NEW=/tmp/empreinte-new +EMPREINTE=/tmp/empreinte +HABITUES=/tmp/habitues # Liste des habitués du système +BLACKLISTES=/tmp/blacklistes +BLACKLISTES_NEW=${BLACKLISTES}-new +BLACKLISTE_ZAMOK=/var/zamok/CRANS/blacklist.cf +VERIF=0 # on envoie un mail à disconnect si VERIF=1 +RENEW=1 # si cette valeur reste à 1 on vide le fichier empreinte. +date=$(date +%A\ %d\ %B\ %Y\ \ %T) +date2=$(date +%A\ %d\ %B\ %Y) +date3=$(date +%d-%m-%Y-%T) +DIR=/usr/scripts/analyse_komaz + +# Si /tmp/exempts.pickle n'existe pas, on relance exempts.py +if [ ! -f /tmp/exempts.pickle ]; then + $DIR/exempts.py +fi + +# On renforce déjà la blacklist (au cas où le firewall a été relancé) +if [ -f $BLACKLISTES ]; then + while read machine ; do + if ! (/sbin/iptables -nL BLACKLIST_SRC | grep -q "^REJECT.*$machine "); then + /sbin/iptables -I BLACKLIST_SRC -s $machine -j REJECT + echo blacklist $machine + fi + done < $BLACKLISTES +fi + +# Retourne l'adresse email correspondant à la machine donnée en paramètre +# Le premier paramètre est le nom de la machine en FQDN (lucas.crans.org) +getAdresseMail() { + # Quel est l'adhérent de la machine ? + aid=$(ldapsearch -LLL -H ldaps://sila.crans.org -x -D "cn=admin,dc=crans,dc=org" \ + -w $(cat /etc/ldap.secret) -b "ou=data,dc=crans,dc=org" \ + host=$1 dn | head -1 | awk -F, '{print $2}') + # On affiche son adresse email + mail=$(ldapsearch -LLL -H ldaps://sila.crans.org -x -D "cn=admin,dc=crans,dc=org" \ + -w $(cat /etc/ldap.secret) -b "ou=data,dc=crans,dc=org" $aid \ + mail | awk -F': ' '($1 ~ /^mail$/) {if ($2 ~ /@/) print $2; else print $2"@crans.org"}') + if [[ -z $mail ]]; then + echo disconnect@crans.org + else + echo $mail + fi +} + +echo $date > $LISTFILE +echo " " >> $LISTFILE + +#/usr/scripts/analyse.pl -u -n 10 -f $LOGFILE --noperiod | egrep -v "zamok|komaz|sila" | \ + #grep -v "Ko" | awk '{print $1" "$3}' | sed 's/Mo/ /g' | sed 's/\.[0-9]*Go/000 /g' > $TEMPFILE + +$DIR/nacct.py -n -N 25| grep -v 'NoDNS_' > $outpF +if [ $? -eq 255 ]; then + echo "Problème avec nacct.py : lock" + exit 1 +fi + +cat $outpF | tail -25 | awk -F "|" '{print $1" "$7}' | egrep -v "136\.(1|2|3|4|6|8|9|10)$" > $TEMPFILE + +# Pour conserver un historique de la sortie de nacct.py +echo -e "\n$date" >> /tmp/nacct_history +cat $outpF >> /tmp/nacct_history + +if ! grep -q "^===========================================================================" $outpF ; then + echo "Pas de données ; problème avec nacct" + exit 1 +fi + +rm $outpF + + while read upload machine ; do # On lit dans $TEMPFILE + if ! (/sbin/iptables -nL BLACKLIST_SRC | grep -q "^REJECT.*$machine ") && [ $( echo $upload | cut -d '.' -f 1 ) -ge $LIMITE_SOFT ] + then # Si la machine dépasse la limite soft et n'est pas déjà blacklistée, + RENEW=0 # on ne vide pas le fichier empreinte + hostname=`host $machine | awk '/Name:/ {print $2}'` + if [ $( echo $upload | cut -d '.' -f 1 ) -ge $LIMITE_HARD ] + then + /sbin/iptables -I BLACKLIST_SRC -s $machine -j REJECT + echo blacklist $hostname + echo "$hostname FIREWALISÉ ! ($upload Mo)" >> $LISTFILE + echo "$date3 $hostname $upload" >> $LOG + echo "$machine" >> $BLACKLISTES + VERIF=1 + # Envoi d'un mail pour prévenir la personne (à modifier pour éventuellement utiliser sendmail) + # On doit tester la variable EMAIL ? + EMAIL=$(getAdresseMail $hostname) + echo $EMAIL + cat <> $LISTFILE + echo "$hostname $upload" >> $EMPREINTE_NEW + VERIF=1 # Pas d'envoi de mail dans ce cas + cat <> $LISTFILE + echo "$hostname $upload" >> $EMPREINTE_NEW + else # sinon on conserve les infos sur la machine + cat $EMPREINTE | grep $hostname >> $EMPREINTE_NEW + fi + fi + done < $TEMPFILE + + +if [ $RENEW -eq 1 ] ; then cat /dev/null > $EMPREINTE ; fi +if [ -f $EMPREINTE_NEW ] ; then mv $EMPREINTE_NEW $EMPREINTE ; fi + +# Reconnexion des machines déconnectées + +rm -f $BLACKLISTES_NEW +if [ -f $BLACKLISTES ]; then + while read machine ; do + # Est-ce que cette machine est toujours dans le TOP 12 ? + + # Juste pour vérifier où se situe le problème -- Nico + echo "$machine firewalisé en est encore à : $(awk '($2 == "'$machine'") {print $1}' $TEMPFILE)" + + if ! (grep -q $machine'$' $TEMPFILE) || \ + [ $LIMITE_SOFT -ge $(awk '($2 == "'$machine'") {print $1}' $TEMPFILE | cut -d '.' -f 1 ) ]; then + VERIF=1 + # On doit la reconnecter : on la vire de BLACKLISTES + grep -v $machine $BLACKLISTES > $BLACKLISTES_NEW + hostname=`host $machine | awk '/Name:/ {print $2}'` + # Reconnexion + if ! (grep -q "^$(echo $hostname | cut -f1 -d.)" $BLACKLISTE_ZAMOK ) + then # Si la machine est blacklistée sur zamok on ne reconnecte pas + /sbin/iptables -D BLACKLIST_SRC -s $machine -j REJECT + echo "La machine $hostname a été reconnectée. ($(awk '($2 == "'$machine'") {print $1}' $TEMPFILE) Mo)" >> $LISTFILE + EMAIL=$(getAdresseMail $hostname) + cat <> $LISTFILE + fi + echo reconnexion $machine + fi + done < $BLACKLISTES +fi + +# Bug, on n'enlève qu'une machine à chaque fois, pas trop grave +if [ -f $BLACKLISTES_NEW ]; then cat $BLACKLISTES_NEW > $BLACKLISTES; fi +# Eventuellement, appel de firewall blacklist si on n'a pas encore reconnecté + +if [ $VERIF -eq 1 ] + then + echo -e "\n-- \ncréé par autodisconnect." >> $LISTFILE + + cat $LISTFILE | /usr/bin/mail -s "upload temps réel - $date2" -a "From: disconnect@crans.org" -a "Reply-To: disconnect@crans.org" pessoles@crans.org +fi + +exit 0 diff --git a/archive/archives/analyse_komaz/exempts.py b/archive/archives/analyse_komaz/exempts.py new file mode 100755 index 00000000..ca2b0428 --- /dev/null +++ b/archive/archives/analyse_komaz/exempts.py @@ -0,0 +1,42 @@ +#! /usr/bin/env python +# -*- encoding: iso-8859-15 -*- + + +import cPickle,re + +exempts = { 'dst' : [], 'src_dst' : {} } + +""" +exempts['dst'] : liste de réseaux (exprimés en regex) vers lesquels le traffic est exempté +exempts['src_dst'] [ IP ] : idem, mais seulement en provenance de IP. + +""" + +exempts['dst'].append( '138\.231\..*' ) # * => *.ens-cachan.fr + +exempts['src_dst']['138.231.149.10'] = ['134\.157\.96\.216'] # rivendell.wifi.crans.org => *.ccr.jussieu.fr +exempts['src_dst']['138.231.141.187'] = ['129\.104\.17\..*', '134\.157\.96\.216' ] # barad-dur.crans => *.polytechnique.fr et *.ccr.jussieu.fr +exempts['src_dst']['138.231.136.7'] = ['195\.221\.21\.36'] # egon => ftp.crihan.fr pour rsync mirroir debian/fedor +exempts['src_dst']['138.231.143.62'] =['193\.49\.25\.152' , '138\.195\.34\..*' ] # ogre => centrale / labo fast (psud) +exempts['src_dst']['138.231.140.173'] =['195\.220\.131\.33' , '195\.220\.133\.98' ] # duckien => rebol.ephe.sorbonne.fr oss.ephe.sorbonne.fr, 28/1/2005 -- Bilou +exempts['src_dst']['138.231.137.230'] =['129\.175\.100\.221' ] # helene => orsay +exempts['src_dst']['138.231.136.7'] =['138\.195\..*' ] # egon => centrale paris +exempts['src_dst']['138.231.139.106'] =['138\.195\.74\..*' ] # schuss => centrale paris +exempts['src_dst']['138.231.139.106'] =['138\.195\.75\..*' ] # schuss => centrale paris +exempts['src_dst']['138.231.150.106'] =['157\.99\.164\.27' ] # sayan-ftp.wifi => chile.sysbio.pasteur.fr + +def compileRegs( exempts) : + L = [] + for s in exempts['dst'] : + L.append( re.compile(s) ) + exempts['dst'] = L + for k in exempts['src_dst'].keys() : + L = [] + for s in exempts['src_dst'] [k] : + L.append( re.compile(s) ) + exempts['src_dst'] [k] = L + + +compileRegs( exempts ) +fd=open("/tmp/exempts.pickle","wb") +cPickle.dump(exempts, fd) diff --git a/archive/archives/analyse_komaz/flood_scan.awk b/archive/archives/analyse_komaz/flood_scan.awk new file mode 100755 index 00000000..3aaaac80 --- /dev/null +++ b/archive/archives/analyse_komaz/flood_scan.awk @@ -0,0 +1,28 @@ +#!/usr/bin/awk -f +#Lecture des logs du firewall pour retourner la liste des machines floodant +# +#Arguments : +# +# Le second fichier contient les IP des machines supplémentaires à sortir. +# +# Format de sortie : Mois jour hh:mm:ss hostname nb_attques +# +# 02/2003 Frédéric Pauget + +{ if (FILENAME~"blacklist") { + if ($0=="") nextfile; + tentatives[$0]=0; + dern_tentative[$0]="Vieux 00 00:00:00"; } +} + +/.*Flood:IN=eth0.*/ { + gsub("SRC=","",$9); + tentatives[$9]++; + dern_tentative[$9]=$1" "$2" "$3; +} + +END{ + for (machine in tentatives){ + system("echo "dern_tentative[machine]" $(host "machine" 2>/dev/null | awk '/^Name/ {print $2}') "tentatives[machine]) + } +} diff --git a/archive/archives/analyse_komaz/keys/reload_squid b/archive/archives/analyse_komaz/keys/reload_squid new file mode 100644 index 00000000..79b42203 --- /dev/null +++ b/archive/archives/analyse_komaz/keys/reload_squid @@ -0,0 +1,12 @@ +-----BEGIN DSA PRIVATE KEY----- +MIIBuwIBAAKBgQDVcolphFz43syoaLG493G6rrZn3Jn6rr/4ur6MkLd1up3/nejW +VRgpJ4YkVQjjFwyPkN+jRE0TTnQrHM2SF8/y4o3FU/IPl2R6VjjCJj4lMTdBzU6B +POuW4VB5UdFE8iUESciCdznQtdQa8V5B8X8M8ONIFfGuVLNwL7TEhimMmwIVAMaQ +gPvdJou3MrXbzJO0LEOk49e7AoGAR1g8pp6HDbLg4aDLfU28JrgL5IJdCEmRg2ro +76wkcFLNNJkRapl2piRkIKF2cYxz80qX8XhidEFF0HV7d6fBQxdhCq/1IP0c1DDd +CeUmf16sG8mNo+yIDcz7TlZO+1pAUmgUJo+p33+tVkYcTrSMhYZuTuLPZQTwsoEo +4YHnftUCgYEAmHVzjTbE8EayE9uhwoIu9FEqV4Cc1LwHeUDFv4bnMx+RDbiNKTSW +AI9BbjhJparm7v40sd4VLlCtMuo1qdjXRxczSCLAGsYADSihNTREXUM0QpF8WGkU +nBYI/Hls1sLosoe1a5LNgdlj7Mcuy6YLRh4E5VlAss2pCpNtsyV7x6gCFD6C4YFb +kpcdKEVsLs4OR0sO6ErH +-----END DSA PRIVATE KEY----- diff --git a/archive/archives/analyse_komaz/keys/synchro_virus b/archive/archives/analyse_komaz/keys/synchro_virus new file mode 100644 index 00000000..4d9403c4 --- /dev/null +++ b/archive/archives/analyse_komaz/keys/synchro_virus @@ -0,0 +1,12 @@ +-----BEGIN DSA PRIVATE KEY----- +MIIBvAIBAAKBgQCpQTAp6QoAFb2S3T2K7MKUlhyON8ffPj8urJH7AuiJ3QhzqCi2 +VTb0YnM7xwZqPfpikVFNk7JX9T52IpHiOzqol/f/O7Gfjb53IqXmVr4fSBCOGsXG +zvJ2cXSuxk5uOewWreMChDYA9FWpjcA5BShHYPEKR332Y7vmyeJb482WbQIVAPsA +VphrX509AFqNbqTo6VdGQ8SxAoGAY87lkq9vVLDId6zy0+JlM8cPCa2ZqQJVnUWo +Wu5laBAoacrkJEAzKGY2zFVKNkiUh+biqQtBFc3a+2DW1zW1fCqUuVhWZcQafRB7 +QiZqYdIQm87lC+UIzQyTRD6Qt2v0WWDYdLgFaekoxAV0NeXQXd9dLRAGFzbwhIFS +7djTZq0CgYEAqAbx6tBT01OZg8w8gq+FCRh2gQYL/XbdDtBAlNHZD75b9BL1ZZwj +NWQccVddsRZ59CxX8BigynGDAW3n/vYEg8oFPtuXtpcg+X4cUe496GttIamLDMkf +nNSQ4O5asJw9yJBElx+DpHsmHmCOKWw+MEDAdmAoomspNQGFiwn0KUgCFQC6XHx7 +k5LurZXoG6YS67wXne9qzA== +-----END DSA PRIVATE KEY----- diff --git a/archive/archives/analyse_komaz/nacct.py b/archive/archives/analyse_komaz/nacct.py new file mode 100755 index 00000000..a0aad3e7 --- /dev/null +++ b/archive/archives/analyse_komaz/nacct.py @@ -0,0 +1,572 @@ +#! /usr/bin/env python +# -*- encoding: iso-8859-15 -*- + +## (C) Samuel Krempp 2001 +## krempp@crans.ens-cachan.fr +## Permission to copy, use, modify, sell and +## distribute this software is granted provided this copyright notice appears +## in all copies. This software is provided "as is" without express or implied +## warranty, and with no claim as to its suitability for any purpose. + +import os,sys,string,re,getopt,time +import cPickle # load/dump python objects +import socket + +""" nacct.py : parse the logs+dump of net-acct, then print a summary of the last 24h + + Usage : nacct.py [-N 20 ] : display the top-20 + [-c 1] : sort by the first column. + [-n] : display numeric IP (instead of resolved hostnames) + [-p nacct.pickle ] : where to put the persistence file + [-f net-acct.log] [-f net.acct.log.0] [-u net-acct.dump] + [-T = 24 ] : analyse data of the last hours + [-T = 2 ] : store data of the last days. + [-h host] : prints details for given host, from the *persistent* file only. + [-t =current time] : choose current time + e.g. : nacct.py -h toto.crans.org -t '2002 12 31 23:59' -T 48 + will print details for toto on the 48 hours before given time. +""" + + + +def isExempt(exempts, src_ip, dst_ip) : + is_exempt=0 + for r in exempts['dst'] : + if r.search(dst_ip) : + is_exempt = 1 + break + if is_exempt ==0 : + if exempts['src_dst'].has_key(src_ip) : + tmp=exempts['src_dst'][src_ip] + for r in tmp : + if r.search(dst_ip) : + is_exempt=1 + break + return is_exempt + + +def parseInputUntil ( f, prevline, conns_DB, exempts, end_time) : + """ reads lines of the file f _until_ the timestamp is >= end_time + data structure : + . exempts [ src ] [ dst ] : if exists, count this traffic separately ('exempted' bytes) + . conns_DB [ IP ] = [ PURE_upload_bytes, upload_bytes, download_bytes # normal bytes + , gPUL, gUL, gDL ] # 'exempted' bytes + (i.e. there are 6 counters, 3 for normal bytes, 3 for exempted bytes) + + optionnally, prev_line is a line to be parsed before processing the file + (used because we read next line's timestamps) + Returns : (nextline, last_time, got_nothing) + . nextLine : similar to prevLine + . last_time : a timestamp such that : . all read timeStamps are <= last_time + . all unread timeStamps are > last_time + in practice, last_time is either the greatest read timeStamp, or (nextline's timestamp) - 1 + . got_nothing : true iff the file was completely empty. + """ + got_nothing = 1 + nextline = "" # in case a line needs to be parsed at next call.. + last_time = 0 + + t=0 + src_ip="" + dst_ip="" + size=0 + + # local variable aliases (optimising lookup..) + lsplit = string.split; llong=long; + lregLAN=regLAN + end_time=repr(end_time) + + (prev_stime, prev_proto, prev_src_ip, prev_src_port, prev_dst_ip, prev_dst_port, prev_size, pd)\ + = ["" ] * 8 + prev_is_symmetric = 1 + prev_m_src = 0 + + lineN=0 + while(1) : + if not prevline : + line = f.readline() + lineN += 1 + else : + line = prevline + prevline="" + + if not line : break + got_nothing = 0 + + (stime, proto, src_ip, src_port, dst_ip, dst_port, size, pd) = lsplit(line, '\t', 7) + + if stime >= end_time : + nextline=line + # if a whole slice is absent in logs, we need to set last_time here : + if last_time =="" : last_time = int(stime) - 1 + break + else : + last_time = stime + + if 1 : # now really PARSE the line : + try: + size=llong(size) + except ValueError: + raise ValueError("INCORRECT size \"%s\" at line %d : %s " % (size, lineN, line) ) + + # Upload : + is_exempt=0 + if isExempt(exempts, src_ip, dst_ip) : + is_exempt = 3 + + try: + conns_DB[src_ip ][is_exempt +1] += size + except KeyError: + conns_DB[src_ip ] = [long(0)]*6 + conns_DB[src_ip ][is_exempt +1] = long(size) + + # PURE Upload : + is_symmetric = ( prev_src_ip == dst_ip and prev_src_port== dst_port and \ + prev_dst_ip == src_ip and prev_dst_port== src_port and \ + prev_stime == stime and prev_proto==proto ) + if is_symmetric : + try : + if prev_size > size : + conns_DB[prev_src_ip ][ prev_is_exempt + 0] += prev_size + else: + conns_DB[src_ip ][ is_exempt +0] += size + except KeyError: + print "proto=%s %s, src_ip=%s %s" % (prev_proto, proto, prev_src_ip, src_ip) + else : + if prev_is_symmetric == 0 : + # previous line has no symetrical transfer, assume PURE upload + conns_DB[prev_src_ip ][ prev_is_exempt + 0] += prev_size + # Download : + #m=lregLAN.search(dst_ip) + if 1: + dst_is_exempt=0 + if isExempt(exempts, dst_ip, src_ip) : + dst_is_exempt = 3 + try: + conns_DB[dst_ip ][dst_is_exempt +2] += size + except KeyError: + conns_DB[dst_ip ] = [long(0)]*6 + conns_DB[dst_ip ][dst_is_exempt +2] = long(size) + + (prev_stime, prev_proto, prev_src_ip, prev_src_port) = (stime, proto, src_ip, src_port) + (prev_dst_ip, prev_dst_port, prev_size) = (dst_ip, dst_port, size) + (prev_is_exempt, prev_is_symmetric) = (is_exempt, is_symmetric) + + return (nextline, int(last_time), got_nothing) + +def readSlices(inFile, db, exempts, slice0) : + """Loop on time slices, and parse the file step by step""" + prevLine=""; last_time=0 + slice= slice0 + while 1 : # loop on time_slice + end_time = (slice+1) * timeStep + u=db[slice] + (prevLine, lTime, got_nothing) = parseInputUntil(inFile, prevLine, db [slice], exempts, end_time) + if got_nothing : + break + + if lTime != 0 : last_time = lTime + + slice = max ( 1+slice, last_time / timeStep) + + if not db.has_key(slice) : + db[slice]={} + + return (last_time) + +def readFile(file_info, db, exempts ) : + """ reads -completely, partially, or not at all- a list of rotated files. + 1/ find the file in the list that is the first that contains new data + 2/ seek the position where we stopped and read the file, and the newer ones. + + file_info fields used here : + ['fnames'] : list of the rotated-files for one log, e.g. ['net-acct.log', 'net-acct.log.0'] + must be in anti-chronological order (else the script aborts) + ['prev_pos'] : offset-position pointig where we stopped reading at previous call + (because of log-rotates, we have to guess for which file this offset is..) + ['last_time'] : timestamp of the last read entry of this log + used to guess which file was opened previously, and which are new. + + + """ + if debug : + print "VeryBeg: lasttime = %d" % file_info.get('last_time', 777) + + file_info.setdefault('last_time',0) + # 1. + # Where did we stop, on the previous execution ? + # in the list of files, find which need update => [0, end_of_new[ : + times = [0]*len(file_info['fnames']) + min_time=0 + i=-1 + for name in file_info['fnames'] : + i += 1 + try : + inFile=open(name,"rb") + s = inFile.readline() + inFile.close() + except IOError : + continue + if not s : + continue + t = int( string.split(s, '\t')[0] ) + assert t > 1 + if min_time != 0 : assert t <= min_time + min_time = t + times[i] = t + + end_of_new=0 + if file_info['last_time']==0 : # first time we read those files + file_info['last_time'] = min_time-1 + end_of_new = len(times) + else : # we have archives about those files, see which files are new/updated + for t in times : + end_of_new += 1 + if t <= file_info['last_time'] : + break # the ones before are old ones. this is last updated one. + + FileNames=file_info['fnames'][0:end_of_new] + + if debug : + print "first data at %s(%d), fileTimes= %s" % \ + (time.asctime(time.localtime(file_info['last_time'])), + file_info['last_time'], times) + print "We need to read/update %s" % (FileNames) + + if file_info['last_time'] < min_time : + file_info['prev_pos'] = 0 + if file_info.get('reset_if_new', 0) : + # erase counters, they are no longer wanted. + for k in db.keys() : + del db[k] + + slice0= file_info['last_time'] / timeStep + + # 2. + # everything's ready, loop on files, and parse them. + FileNames.reverse() # start with the oldest + times=times[0:end_of_new] + Files_and_pos= zip( FileNames, [file_info['prev_pos']] + [0]*(end_of_new-1) ) + last_time=0; last_pos =0 + i=len(FileNames) + for (fname, pos) in Files_and_pos : + i -= 1 + if debug : + print " read %s => Seek to pos %d" % (fname, pos ) + + try: inFile = open(fname, "rb") + except IOError: + continue + inFile.seek(pos) + + db.setdefault(slice0, {} ) + last_time = readSlices(inFile, db, exempts, slice0) + if last_time != 0 : # we advanced in this file. + slice0= last_time / timeStep + elif i>= 1 : # guess an adequate slice0 to start with for next file : + slice0= times[i-1]/timeStep + last_pos = inFile.tell() + assert last_pos >= pos + inFile.close() + + # 3. + # Update file_info variables : + if 1: + if last_time != 0 : + assert file_info.get('last_time', 0) <= last_time + file_info['last_time'] = last_time + if last_pos > 0 : + file_info['prev_pos'] = last_pos + + if debug and file_info.has_key('last_time') : + print "VeryLast: lasttime = %d" % file_info['last_time'] + + +def loadPersist() : + data = {} + try: + data = cPickle.load( open(pickleName, "rb") ) + except IOError: + print "[can not load persistent data. Will need to read all the log-file.]" + return data + +def updateData() : + """ structure of data : + data['counts'] : the actual counters, split in separate databases : + ['dump'] : for bytes read in the dump + ['log'] : for bytes read in the log + each is a 'conns_DB', that holds one database per timeslice : + [] [IP] : 6-uple (see parseInputUntil) + data['files'] + ['ledump'] : is the file_info for the dump files. + ['lelog' ] : is the file_info for the regular log files + each 'file_info' DB has following keys : + 'fnames', 'prev_pos', 'last_time' (see readFile) + 'dbName' (the corresponding key into data['counts']) + 'reset_if_new' (optionnal, designed for the dump file) + """ + data = loadPersist() + + try: + exempts = cPickle.load( open(pickleExemptsName, "rb") ) + except IOError: + print "[can not load exmpts data. assuming no exempt]" + exempts = { 'dst' : [], 'src_dst' : {} } + + # initialise each database if needed : + for k in ['files', 'counts' ]: + data.setdefault(k, {} ) + Files=data['files'] + Files.setdefault('ledump', { 'dbName':'dump', 'fnames': dumpFNames, 'reset_if_new':1 }) + Files.setdefault('lelog', {'dbName':'log', 'fnames': logFNames } ) + + # overwrite the filenames stored in pickle with those from the command-line. + Files['ledump'] ['fnames'] = dumpFNames + Files['lelog'] ['fnames'] = logFNames + + + for k in Files.keys(): + data['counts'].setdefault(Files[k]['dbName'], {} ) + + for key in data['files'].keys() : + file_info = data['files'][key] + if debug: + print "file_info : %s " % file_info + print "Parsing %s into data['counts'][ %s ]" % ( file_info['fnames'], file_info['dbName']) + readFile( file_info, data['counts'] [file_info['dbName'] ], exempts ) + + return data + + +def printCounters(counts, mkHeaders=0) : + unit = 1e3 + if megas : unit = 1e6 + if mkHeaders : + return "%9s|%9s|%9s | %10s|%9s|%9s" % ('Pure UL ', 'Upload ', 'Download', + 'Exempt PUL', 'Exempt U', 'Exempt D' ) + + s="%9.3f|%9.3f|%9.3f | %9.3f|%9.3f|%9.3f" % (counts[0]/(unit), counts[1]/(unit), counts[2]/(unit), + counts[3]/unit, counts[4]/unit, counts[5]/unit) + return s + + +def bilan(DB, dbNames, duree, cur_time, disp_all = 0) : + slice0=int( (cur_time-duree) / timeStep ) + by_host={} + Nslices = {} + for db_key in dbNames : + Nslices[db_key] = 0 + for slice in DB[db_key].keys() : + if slice >= slice0 : + Nslices[db_key] += 1 + for host in DB[db_key][slice].keys() : + if disp_all or regLAN.search(host): + counts=DB[db_key][slice][host] + cur = by_host.setdefault(host, [long(0)] *len(counts) + [host] ) + for i in range(len(counts)): + cur[i] += counts[i] + liste=by_host.values() + liste.sort( lambda x, y: -cmp(x[sort_column], y[sort_column] )) # tri décroissant sur le N° champ + print " %5.1f h stats since %s. %d hour-slices found " % (duree/3600.0, + time.asctime(time.localtime(slice0*timeStep)), + max(Nslices.values()) ) + print printCounters(0, 1) + " | HOST" + print "="*77 + for l in liste[0:top10_length] : + # Test si le DNS de la machine existe (donc si la machine est inscrite au crans) + try: + host = socket.gethostbyaddr( l[-1] ) [0] + bad = 0 + except socket.error : + host = l[-1] + bad = 1 + + if not resolve_names : + # On veut l'IP + host = l[-1] + + if bad : + host = "NoDNS_" + host + + print printCounters(l)+ (" |%s" % host) + + +def detail_bilan(DB, hostName, IP, duree, cur_time) : + slice0 = int( (cur_time-duree) / timeStep ) + slice1 = slice0 + int( duree/timeStep) + slicePrints={} + Nslices = {} + db_key = 'log' + + Nslices[db_key] = 0 + for slice in range(slice0, slice1+1) : + pref = time.strftime("%Hh%M", time.localtime(slice*timeStep) ) + str = " (No record of this time-slice at all)" + if slice in DB[db_key].keys() : + str = " (No activity for this host in this time-slice)" + Nslices[db_key] += 1 + if IP in DB[db_key][slice].keys() : + str = printCounters( DB[db_key][slice][IP]) + + slicePrints[slice] = "%s|%s" %(pref,str) + + print "Comptes par tranches de %ds pour la machine %s" % (timeStep, hostName) + print "début : %s" % (time.asctime(time.localtime( slice0 * timeStep) ) ) + print ("%5s|" % 'time') + printCounters(0,1) + print "="*77 + for slice in range(slice0, slice1+1) : + l=slicePrints[slice] + print l + print "Fin : %s" % (time.asctime(time.localtime( -1 + (slice1+1) * timeStep) ) ) + + +def main(cur_time) : + data=updateData() + bilan(data['counts'], ['log', 'dump'], duree, cur_time, disp_all) + + # make persistent data as small as possible : + del data['counts'][ data['files']['ledump']['dbName'] ] + del data['files']['ledump'] + cur_t = time.time() + del_slices=[] + # -> get rid of old slices + for slice in data['counts']['log'].keys() : + if slice < (cur_t-sduree)/timeStep : + del_slices.append(slice) + for slice in del_slices : + del data['counts']['log'][slice] + + # get rid of useless extern hosts : + + for slice in data['counts']['log'].keys() : + d=data['counts']['log'][slice] + del_hosts=[] + for host in d.keys() : + m= store_all or regLAN.search(host) + # keep extern hosts that were used as big upload targets : download >= 1 Mo + if not m and d[host][2]< 1e6 : + del_hosts.append( host) + for host in del_hosts : + del d[host] + + cPickle.dump(data, open(pickleName,"wb") ) + + +################# +# global vars : +# + +timeStep=3600 # 1h slices +################# + + + +optlist, args = getopt.getopt(sys.argv[1:], "dkDsnc:p:f:h::u:L:N:T:t:") + +lock_name = "/var/lock/nacct.py" # Fichier de lock +store_all = 0 # if false, store only hosts matching regLAN +disp_all = 0 # if false, display only .. .. +sduree = 48*3600 # delete slices when they are that much old +duree = 0 # display the stats over this period +top10_length = 30 +sort_column= 0 # 0 : sort by PURE, 1 : by upload, 2: by download.. up to 6 (cf parseInputUntil) +resolve_names = 1 # resolve hostnames +logFNames= [] +dumpFNames=[] +debug=0 +megas=1 +detail_host="" +cur_time=time.time() +network="" +pickleName="" +pickleExemptsName = "" + +if os.path.isfile(lock_name) : + # Ya le lock + print "Lock existant (%s)" % lock_name + fd = open(lock_name, "r") + msg=fd.readlines() + fd.close() + pid=string.split(msg[0],'\n')[0] + msg=string.strip(string.join(msg[1:], '') ) + q = os.system("ps -o pid,tty,user,etime,command " +pid) + if q==256: + print "PID lock no trouvé => delock" + try : + os.remove(lock_name) + except : + None + else : + print "Script lockant en activité, sortie" + sys.exit(255) + +#Locking +lock_fd=open(lock_name, "w") +lock_comment = "%s" % os.getpid() +lock_fd.write(lock_comment) +lock_fd.close() + +for [key, val] in optlist : + if key == '-f' : + logFNames.append(val) + if key == '-u' : + dumpFNames.append(val) + if key == '-d' : + debug = 1 + if key == '-D' : + disp_all = 1 + if key == '-L' : + network = val + if key == '-h' : + detail_host = val + if key == '-t' : + cur_time = int( time.mktime(time.strptime(val,"%Y %m %d %H:%M")) ) + if key == '-N' : + top10_length = int(val) + if key == '-k' : + megas = 0 # use kilos instead of Megs + if key == '-p' : + pickleName=val + if key == '-s' : + store_all = 1 + if key == '-n' : + resolve_names = 0 + if key == '-T' : + if duree == 0 : + duree = int( float(val) * 3600 ) + else: + sduree = int( float(val) * 3600 * 24 ) + if key == '-c' : + sort_column = int(val) -1 + +if duree == 0: + duree = 24*3600 +if not logFNames : + logFNames = ["/var/log/net-acct/net-acct.log", "/var/log/net-acct/net-acct.log.0" ] +if not dumpFNames : + dumpFNames = ["/var/log/net-acct/dump" ] +if not network : + network = "^138\.231\.1((3[6-9]|4[0-9]|50|51).*)$" +regLAN=re.compile(network) +if not pickleName : + pickleName="/tmp/nacct.pickle" + +if not pickleExemptsName : + pickleExemptsName="/tmp/exempts.pickle" + + + +# launch : +if detail_host : + data=loadPersist() + IP = socket.gethostbyname( detail_host) + detail_bilan(data['counts'], detail_host, IP, duree, cur_time) +else : + data = main(cur_time) + +# Supression du lock +try : + os.remove(lock_name) +except : + None + diff --git a/archive/archives/analyse_komaz/rpc_scan.awk b/archive/archives/analyse_komaz/rpc_scan.awk new file mode 100755 index 00000000..237ab770 --- /dev/null +++ b/archive/archives/analyse_komaz/rpc_scan.awk @@ -0,0 +1,29 @@ +#!/usr/bin/awk -f +#Lecture des logs du firewall pour retourner la liste des machines attaquant +#sur le port 135 ou 6667 +# +#Arguments : +# +# Le second fichier contient les IP des machines supplémentaires à sortir. +# +# Format de sortie : Mois jour hh:mm:ss hostname nb_attques +# +# 02/2003 Frédéric Pauget + +{ if (FILENAME~"blacklist") { + if ($0=="") nextfile; + tentatives[$0]=0; + dern_tentative[$0]="Vieux 00 00:00:00"; } +} + +/.*Virus:IN=eth0.*/{ + gsub("SRC=","",$9); + tentatives[$9]++; + dern_tentative[$9]=$1" "$2" "$3; +} + +END{ + for (machine in tentatives){ + system("echo "dern_tentative[machine]" $(host "machine" 2>/dev/null | awk '/^Name/ {print $2}') "tentatives[machine]) + } +} diff --git a/archive/archives/analyse_komaz/virus_scan.sh b/archive/archives/analyse_komaz/virus_scan.sh new file mode 100755 index 00000000..0b8f65c0 --- /dev/null +++ b/archive/archives/analyse_komaz/virus_scan.sh @@ -0,0 +1,240 @@ +#!/bin/sh +############################################################################# +## Script de déconexion/reconnexion automatique pour virus de type blaster ## +## ## +## Principe : ## +## -> détection des attaques grâce aux logs du firewall ## +## lecture par *_scan.awk ## +## -> à partir du nombre d'attaques et de l'heure de dernière attaque ## +## déconnecte ou reconnecte des machines ## +## ## +## Frédéric Pauget 02/2003 ## +## 07/2004 adaptation pour scan de plusieurs types d'attaques ## +############################################################################# + +is_up() { + # Supression de la machine dans la table arp + /usr/sbin/arp -d $1 2> /dev/null + + # Teste si la machine founie est up + if fping -c1 $1 > /dev/null 2>&1 ; then + # Elle a répondu au ping + return 0 + fi + if /usr/sbin/arp $1 2>/dev/null | egrep -q '(no entry|incomplete)' ; then + # Elle n'est pas dans la table ARP + return 1 + else + # Elle est dans la table ARP + return 0 + fi +} + + +if [[ $1 ]] && [[ $1 = "--real-run" ]]; then + dry=false +else + dry=true +fi + +BLACKLIST_FINAL='/tmp/virus_blacklist' + +# Logs du firewall +FW_LOGS=/var/log/firewall/filtre.log + +# Prétraitement logs +tail -7200 $FW_LOGS > /tmp/fw_logs_light + +# Fonction utile : retourne l'IP d'une machine +ip() { + echo $(host $1 2>/dev/null | awk '{print $3}') +} + +# Fonction principale +scan() { +# signification des arguments : +# 1 : nombre d'attaques pour être considéré infecté +# 2 : nombre de secondes sans attaques pour être considéré sain +# 3 : script de scan +# 4 : repertoire de stockage fichiers +nb_att=$1 +nb_sec=$2 +SCRIPT=$3 + +# Liste des attaques +INFECTES=$4/infectes +# Machines décontaminées +RECO=$4/reconectes + +# Machines blacklistées +BLACKLIST=$4/blacklist + +# Fichiers temporaires supplémentaires +DIFF=/tmp/virus_diff +TMPFILE=/tmp/virus_scan + +# Doit exister, même vides +touch $RECO +touch $BLACKLIST + +if ! [[ -e $INFECTES ]]; then + dry=true + echo "dry-run mode forcé (fichier absent)" + touch $INFECTES +fi + +# Test préliminaire +if [[ ! -e $SCRIPT ]] ; then + echo "Erreur : $SCRIPT non trouvé" + exit 255 +fi + +# Conversion blacklist hostname -> IPs +if [[ "$(head -1 $BLACKLIST)" == "komaz" ]]; then + echo "Ancienne blackliste vide" + touch $BLACKLIST.ip +else + echo "Conversion blackliste..." + for i in $(cat $BLACKLIST | sort | uniq) + do + ip $i + done > $BLACKLIST.ip +fi + +echo "Détection des infectés..." +$SCRIPT $BLACKLIST.ip /tmp/fw_logs_light > $TMPFILE +# sort un fichier du type : +# Mois Jour Heure hostname nb d'attaques depuis les dernier logrotate + +echo "Traitement..." +mv $INFECTES $INFECTES.old +sort -r $TMPFILE > $INFECTES +echo -n "" > $TMPFILE + +# Différencee entre le fichier obtenu la au dernier lancement et le nouveau +diff -U 1000 $INFECTES.old $INFECTES | egrep -v '\-\-\-|\+\+\+|@@' > $DIFF + +if ! [[ -s $DIFF ]]; then + echo "Aucun changement par rapport au dernier scan." + cp $INFECTES $DIFF +fi + +# Traitement par host +for host in $(awk '{print $4}' $DIFF | sort | uniq) +do + if grep -q "\+.* $host " $DIFF && grep -q "\-.* $host " $DIFF ; then + # En + et - : variation + nb=$(echo $(awk '$4=="'$host'" {print $5}' $INFECTES) - $(awk '$4=="'$host'" {print $5}' $INFECTES.old) | bc) + echo -ne "Variation ($nb) " + if grep -q "^$host$" $BLACKLIST ; then + # Déja blacklisté, on remet + echo -ne "\033[1;31m(RESTE) " + echo $host >> $TMPFILE + elif [[ $nb -gt $nb_att ]] ; then + # Nouveau + echo -ne "\033[1;31m(NOUVEAU) " + echo $host >> $TMPFILE + else + # Pas assez de tentatives + echo -n "(PASSE) " + fi + + + elif grep -q "\+.* $host " $DIFF ; then + # Que en + donc c'est un nouveau + nb=$(awk '$4=="'$host'" {print $5}' $INFECTES) + if [[ $nb -gt $nb_att ]] ; then + echo -ne "\033[1;31mNOUVEAU ($nb) " + echo $host >> $TMPFILE + else + echo -ne "PASSE ($nb) " + fi + + elif grep -q "\-.* $host " $DIFF ; then + # Que en -, c'est un coup de logrotate, on remet les blacklistés. + if grep -q "^$host$" $BLACKLIST ; then + echo "RESTE : $host" + echo $host >> $TMPFILE + else + echo "Vieux : $host" + fi + + else + # Pas de variation + if grep -q "^$host$" $BLACKLIST ; then + echo -n "Pas de variation " + # UP or not ? + if is_up $host ; then + # UP + last=$(date -d "$(awk '$4=="'$host'" {print $1" "$2" "$3}' $INFECTES)" +%s 2>/dev/null) + # Cas ou c'est vraiment trop vieux + if [[ -z $last ]] ; then + last=0 + fi + now=$(date +%s) + t=$(echo "$now-$last" | bc) + if [[ $t -gt $nb_sec ]] ; then + # Reconexions automatique + echo -n " reconnexion" + echo $host >> $RECO + else + echo $host >> $TMPFILE + fi + + else + # Down + echo -ne "\033[1;41m(NO_PING)" + echo $host >> $TMPFILE + fi + + echo -ne "\033[0m : " + else + echo -n "Reste connecté " + fi + fi + echo -ne "\033[0m" + awk '$4=="'$host'" {print $1" "$2" "$3" "$4}' $INFECTES +done + +# Opérations finales +sort $TMPFILE > $BLACKLIST +} + +####################################################################### + +# Scan des attaques sur le 135 : +# 10 tentatives pour être considéré infecté +# 1h sans attaque pour être considéré désinfecté +echo -e "\033[1;33m###############################\nScan attaques port 135 ou 6667\033[1;0m" +scan 10 3600 /usr/scripts/analyse_komaz/rpc_scan.awk /var/tmp/rpc + +# Scan des floods : +# 100 tentatives pour être considéré infecté +# 1h sans attaque pour être considéré désinfecté +echo -e "\033[1;33m###############################\nScan floods\033[1;0m" +scan 100 3600 /usr/scripts/analyse_komaz/flood_scan.awk /var/tmp/flood + +# Constitution de la blackliste finale +cat /var/tmp/rpc/blacklist /var/tmp/flood/blacklist | sort | uniq > $BLACKLIST_FINAL.new + +if ! [[ -s $BLACKLIST_FINAL.new ]]; then + # Il n'y a personne, il faut au moins une machine sinon squid aime pas. + echo 'komaz' > $BLACKLIST_FINAL.new +fi + +if ! $dry ; then + if diff -q $BLACKLIST_FINAL $BLACKLIST_FINAL.new ; then + echo "Pas de changement dans la blackliste" + else + # Synchro blacklist + /usr/bin/rsync -C -a -e "ssh -i /usr/scripts/analyse_komaz/keys/synchro_virus" $BLACKLIST_FINAL.new root@sila.crans.org:/etc/squid/blacklist_infectes + # Reload de squid + /usr/bin/ssh -o StrictHostKeyChecking=no -i /usr/scripts/analyse_komaz/keys/reload_squid root@sila.crans.org squid reload + fi +else + echo "Dry mode : blackliste non copiée sur sila et squid non relancé" + echo "Utiliser l'option --real-run pour tout faire." +fi + +# On ne garde que la dernière version de la blacklist +mv $BLACKLIST_FINAL.new $BLACKLIST_FINAL diff --git a/archive/archives/arpanoid b/archive/archives/arpanoid new file mode 100755 index 00000000..0ba3b99c --- /dev/null +++ b/archive/archives/arpanoid @@ -0,0 +1,93 @@ +#!/usr/bin/python +# Dis, emacs, c'est du -*- python -*-, ça ! +# +# C.Chépélov, 19 janvier 1999. Suite à discussion avec Olivier DALOY, et +# des trucs louches dans ses logs. Merci, merci ARP !! + +import config +import pickle,string,os + +# Phase 1 : lire les données théoriques, les retrier pour être exploitables. + +ZONEDB = pickle.load(open(config.CFG_FILE_ROOT+"Zone.db","r")) + +THicn_by_mac = {} # ip, comment, name by MAC (théorique) +THncm_by_ip = {} # name, comment, MAC by IP (théorique) + +for name in ZONEDB.keys(): + (IP,comment,MAC) = ZONEDB[name] + THicn_by_mac[MAC] = (IP,comment,name) + THncm_by_ip[IP] = (name,comment,MAC) + +# Phase 2 : Lire les données réelles, les mettres dans des dicos pour être +# exploitables. + +arp = os.popen("arp -n","r") +arp.readline() + +ip_by_mac = {} +mac_by_ip = {} +while 1: + s = arp.readline() + if not s: break + sl = string.split(s) + try: + ip = sl[0] + + mac = "" + if (sl[1] != "ether") or (sl[2] == "(incomplete)"): raise "incomplete" + for c in string.lower(sl[2]): + if c in "0123456789abcdef": + mac = mac + c + if not ip or not mac: break + ip_by_mac[mac] = ip + mac_by_ip[ip] = mac + + except: + pass + +# Phase 3 : en fonction des gens qu'on a vus, faire une comparaison... +# d'abord, par IP vues : + +try: + problems = open("/var/log/arpanoid","r").readlines() +except: + problems = [] + # la liste des problèmes. Sera triée par ordre alphabétique + # et les problèmes rendus uniques. + # note: on récupère les vieux problèmes, on génèrera le même message + # plusieurs fois (pas grave, on virera les messages identiques) + +def log(s): + s = s + '\n' + if not s in problems: problems.append(s) + +for ip,mac in mac_by_ip.items(): + + if THicn_by_mac.has_key(mac): + thIP,comment,name = THicn_by_mac[mac] + if thIP == ip: pass # print name,' est clair (IP by MAC)' + else: + if THncm_by_ip.has_key(ip): victim,t1,t2 = THncm_by_ip[ip] + else: victim = "(inconnu)" + log("%s (%s) usurpe une adresse IP !!! (normal=%s,actuel=%s[%s])" % (name,comment,thIP,ip,victim)) + else: + log("MACHINE INCONNUE (intruse ?) MAC=%s !" % mac) + + if THncm_by_ip.has_key(ip): + name,comment,thMAC = THncm_by_ip[ip] + if thMAC == mac: pass # print name,' est clair (MAC by IP)' + else: + if THicn_by_mac.has_key(mac): t1,t2,name = THicn_by_mac[mac] + else: victim = "(inconnu)" + log("%s (%s) utilise une autre carte réseau !!! (normal=%s,actuel=%s[%s]" % (name,comment,thMAC,mac,victim)) + else: + diag = "(intruse ?)" + if THicn_by_mac.has_key(mac): + THip,comment,name = THicn_by_mac[mac] + diag = "%s de %s" % (name,comment) + log("MACHINE AVEC FAUX IP=%s (%s)!" % (ip,diag)) +problems.sort() + +print string.join(problems,"") + diff --git a/archive/archives/arpanoid-daily b/archive/archives/arpanoid-daily new file mode 100755 index 00000000..ee5a27aa --- /dev/null +++ b/archive/archives/arpanoid-daily @@ -0,0 +1,17 @@ +#!/bin/sh + +subject="logs ARPanoid `date` " +dest="root@crans.ens-cachan.fr" + +cat < /var/log/arpanoid 2>/dev/null diff --git a/archive/archives/arpanoid-frequently b/archive/archives/arpanoid-frequently new file mode 100755 index 00000000..5363d05b --- /dev/null +++ b/archive/archives/arpanoid-frequently @@ -0,0 +1,2 @@ +#!/bin/sh +/etc/CRANS/code/arpanoid > /var/log/arpanoid 2>/dev/null diff --git a/archive/archives/auto-claque b/archive/archives/auto-claque new file mode 100755 index 00000000..431d5c7d --- /dev/null +++ b/archive/archives/auto-claque @@ -0,0 +1,21 @@ +#!/bin/sh +# CC 2/2/1999 horrible kludge +# +# +# Pour des raisons bizarres (bug driver SMC ? matériel ?), les interfaces +# eth1 et eth2 bloquent régulièrement. +# en général, un claquage suffit à les relancer. Par ailleurs, un claquage +# ne bloque pas les communications -- on peut donc jouer à le faire +# régulièrement. +# + +#a enlever les commentaires! 19.02 +# 20/01/2000 jerome reactive le script + +echo "Claquage des interfaces" | /usr/bin/logger -t "AutoClaque" -p user.warn + +ifconfig eth0 down; ifconfig eth0 up; route add default gw 138.231.136.2 + +ifconfig eth1 down; ifconfig eth1 up +ifconfig eth2 down; ifconfig eth2 up 138.231.137.2 netmask 255.255.255.0 broadcast 138.231.137.255 +ifconfig eth3 down; ifconfig eth3 up diff --git a/archive/archives/beastie.c b/archive/archives/beastie.c new file mode 100644 index 00000000..add640af --- /dev/null +++ b/archive/archives/beastie.c @@ -0,0 +1,186 @@ +/* + * Un faux daemon. + * + * Copyright (c) 1999 Association CRANS. + * + * Auteur: Olivier Saut + * + * + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifndef LINUX +#include +#endif + + +#define kZamok_Tourne 1 +#define kPORT 514 /* Port de rshd */ +#define kMaxDaemonChildren 10 + +int nbrFils; + + +int daemon_init(void) { + pid_t pid; + + if((pid = fork())<0) + return (-1); + else if (pid !=0) { + (void)fprintf(stdout,"beastie launched : %d\n",pid); + exit(0); + } + setsid(); + chdir("/"); + umask(0); + return(0); +} + +/* Attention subtil (waitpid plutot que wait) :-) */ +void zombie(int signo) { + pid_t pid; + int stat; + + while ((pid = waitpid(-1, &stat, WNOHANG)) > 0) + nbrFils--; + + return; +} + +void sigterm(int signo) { + syslog(LOG_NOTICE,"beastie killed by SIGTERM."); + closelog(); + exit(EXIT_SUCCESS); +} + + +int main(int argc, char *argv[]){ +int serv_sock, client_sock, cli_len; +struct sockaddr_in serv_addr, cli_addr; +struct hostent *cli_ent; +char *clientname,*message; +int PORT; +pid_t pid; +sig_t previous_handler; +char buffer[1024]; + + if(argc>1) + PORT=atoi(argv[1]); + else + PORT=kPORT; + + if(setuid(getuid())) { + perror("Setuid."); + exit(EXIT_FAILURE); + } + + /* On se daemonize */ + if(daemon_init()) { + perror("Initialize as daemon."); + exit(EXIT_FAILURE); + } + + /* Pour éviter les zombies (vade retro...) */ + previous_handler = signal(SIGCHLD,(sig_t)zombie); + if(previous_handler==SIG_ERR) { + perror("Installing SIGCHLD handler"); + exit(EXIT_FAILURE); + } + + /* Pour détecter le SIGTERM */ + previous_handler = signal(SIGTERM,(sig_t)sigterm); + if(previous_handler==SIG_ERR) { + perror("Installing SIGTERM handler"); + exit(EXIT_FAILURE); + } + + nbrFils=0; + +#ifndef LINUX + setproctitle("ecoute le port %d",PORT); +#endif + + openlog("beastie", LOG_PID|LOG_CONS,LOG_LOCAL2); + + serv_sock = socket(AF_INET, SOCK_STREAM, 0); + if (serv_sock < 0) + { + perror("Creating server socket."); + exit(EXIT_FAILURE); + } + + /* On remplit la structure */ + bzero((char *) &serv_addr, sizeof (serv_addr)); + serv_addr.sin_family = AF_INET; + serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); + serv_addr.sin_port = htons(PORT); + + /* Et on lie la socket au port */ + if (bind(serv_sock, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < 0) + { + perror("Binding server socket."); + exit(EXIT_FAILURE); + } + + listen(serv_sock,5); + + while(kZamok_Tourne) { + + cli_len = sizeof (cli_addr); + bzero((char *) &cli_addr, sizeof (cli_addr)); + + client_sock = accept(serv_sock, (struct sockaddr *) &cli_addr, &cli_len); + if (client_sock < 0) + { + perror("Accepting connection on server socket."); + break; + } + + /* On forke, on traite la requete dans le fils */ + /* Evaluation paresseuse */ + if((nbrFils++ < kMaxDaemonChildren) && ((pid=fork())==0) ) { + close(serv_sock); + clientname=inet_ntoa(cli_addr.sin_addr); /* On recupere le nom */ + /* Hehe t'es loggue mon pote */ + if(strcmp(clientname, "127.0.0.1")) { + if (!((cli_ent= gethostbyaddr((char *)&cli_addr.sin_addr.s_addr, + sizeof (u_long), AF_INET)) == (struct hostent *)0)) { + snprintf(buffer,1023, "Tentative de connexion de %s au port %d.",cli_ent->h_name,PORT); + syslog(LOG_NOTICE,buffer ); + } + else { + snprintf(buffer,1023, "Tentative de connexion de %s au port %d.",clientname,PORT); + syslog(LOG_NOTICE,buffer); + } + } + close(client_sock); + exit(0); + } + /* Fin du fork */ + + close(client_sock); + + } + + closelog(); + close(serv_sock); + exit( 0); +} diff --git a/archive/archives/cdecode b/archive/archives/cdecode new file mode 100755 index 00000000..e4ae4df8 --- /dev/null +++ b/archive/archives/cdecode @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# Dis, emacs, c'est du -*- python -*- +# +""" +Programme fait pour encoder les chambres suivant le cryptage standard +pour le bâtiment G (le F peut aussi s'en servir). Inutile au B, il y a déjà un +autre mapping (les prises réseau sont numérotées différemment des chambres) + +Ceci ne résistera évidemment pas à une attaque cryptographique en règle. + +L'algorithme étant réellement trivial, il est raisonnable de laisser ce +script "chmod 700" et "chown root:root" ! + +C.Chepelov 5 novembre 1998 (présente implémentation), mise au point de +l'algorithme et première implémentation en Reverse Polish Lisp (HP48) à +l'automne 1997. + +Note : l'implémentation de référence est "cencode". L'algo est symétriqe... +""" + +import sys + +if len(sys.argv) != 2: + print "usage : %s " % sys.argv[0] + print "exemple : %s 9378 --> 126 " % sys.argv[0] + print + sys.exit(1) + +s_arg = sys.argv[1] +try: + arg = int(s_arg) + if arg >= 10000: raise "pas bon." +except: + print "L'argument doit être un nombre inférieur à 10000 !" + sys.exit(2) + +# C'est pas du tout optimal, mais on s'en fout ! +c1 = int(arg / 100) % 10 +c2 = int(arg / 10) % 10 +c3 = arg % 10 +s = int(arg / 1000) % 10 + +f3 = t1 = (10 - c1 + s) % 10 +f2 = t2 = (10 - c2 + s) % 10 +f1 = t3 = (10 - c3 + s) % 10 + +res = f1 * 100 + f2 * 10 + f3 +print "Chambre = %d " % res + + + + diff --git a/archive/archives/cencode b/archive/archives/cencode new file mode 100755 index 00000000..a54402f4 --- /dev/null +++ b/archive/archives/cencode @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# Dis, emacs, c'est du -*- python -*- +# +""" +Programme fait pour encoder les chambres suivant le cryptage standard +pour le bâtiment G (le F peut aussi s'en servir). Inutile au B, il y a déjà un +autre mapping (les prises réseau sont numérotées différemment des chambres) + +Ceci ne résistera évidemment pas à une attaque cryptographique en règle. + +L'algorithme étant réellement trivial, il est raisonnable de laisser ce +script "chmod 700" et "chown root:root" ! + +C.Chepelov 5 novembre 1998 (présente implémentation), mise au point de +l'algorithme et première implémentation en Reverse Polish Lisp (HP48) à +l'automne 1997. + +""" + +import sys + +if len(sys.argv) != 2: + print "usage : %s " % sys.argv[0] + print "exemple : %s 126 --> 9378 " % sys.argv[0] + print "Ajouter G ou F selon bâtiment, W ou B selon gaine technique. " + print + sys.exit(1) + +s_arg = sys.argv[1] +try: + arg = int(s_arg) + if arg >= 1000: raise "pas bon." +except: + print "L'argument doit être un nombre inférieur à 1000 !" + sys.exit(2) + +# C'est pas du tout optimal, mais on s'en fout ! +c1 = int(arg / 100) % 10 +c2 = int(arg / 10) % 10 +c3 = arg % 10 + +s = (c1 + c2 + c3) % 10 + +f3 = t1 = (10 - c1 + s) % 10 +f2 = t2 = (10 - c2 + s) % 10 +f1 = t3 = (10 - c3 + s) % 10 + +res = s * 1000 + f1 * 100 + f2 * 10 + f3 +print "Code = %d " % res + + + + diff --git a/archive/archives/chmodwww b/archive/archives/chmodwww new file mode 100755 index 00000000..726ecd65 --- /dev/null +++ b/archive/archives/chmodwww @@ -0,0 +1,3 @@ +#!/bin/sh +chmod a+rx $HOME $HOME/www +chmod -R a+r $HOME/www/* diff --git a/archive/archives/claque-interfaces b/archive/archives/claque-interfaces new file mode 100755 index 00000000..e1ec8842 --- /dev/null +++ b/archive/archives/claque-interfaces @@ -0,0 +1,26 @@ +#!/bin/sh +# CC 2/2/1999 horrible kludge +# +# +# Pour des raisons bizarres (bug driver SMC ? matériel ?), les interfaces +# eth1 et eth2 bloquent régulièrement. +# en général, un claquage suffit à les relancer. Par ailleurs, un claquage +# ne bloque pas les communications -- on peut donc jouer à le faire +# régulièrement. +# + +#a enlever les commentaires! 19.02 +# 20/01/2000 jerome reactive le script + +echo "Claquage des interfaces" | /usr/bin/logger -t "Claque" -p user.warn + +ifconfig eth0 down; ifconfig eth0 up; route add default gw 138.231.136.2 + +ifconfig eth1 down; ifconfig eth1 up 138.231.136.130 netmask 255.255.252.0 broadcast 138.231.139.255 +#ifconfig eth2 down; ifconfig eth2 up +#ifconfig eth3 down; ifconfig eth3 up + +#ifconfig eth2 up 138.231.138.2 netmask 255.255.255.0 broadcast 138.231.138.255 +#ifconfig eth2:1 up 138.231.138.2 netmask 255.255.255.0 broadcast 138.231.138.255 +#ifconfig eth1:1 down 138.231.139.2 netmask 255.255.255.0 broadcast 138.231.139.255 +#ifconfig eth1 up diff --git a/archive/archives/configure_bornes_installparty b/archive/archives/configure_bornes_installparty new file mode 100755 index 00000000..b83d15d5 --- /dev/null +++ b/archive/archives/configure_bornes_installparty @@ -0,0 +1,144 @@ + +#! /bin/sh + +################################### +## Reconfigure une borne wifi ## +## du CR@NS en temps que routeur ## +################################### + +# Ce scipt est à utiliser une fois que les interfaces de la bornes +# sont configurées + +BORNE="install-party.crans.org" +DIR="/usr/scripts/install-party" +MACS="$DIR/MACS-install-party" + +######################################################################### + +CLEF="/usr/scripts/gestion/clef-wifi" +SSH="ssh -i $CLEF -o StrictHostKeyChecking=no $BORNE" +SCP="scp -i $CLEF -o StrictHostKeyChecking=no" + +usage () { + echo "Usage : " + echo " $0 --macs Modifie les MACS authorisées" + echo " $0 --services Relance les services" + echo " $0 --firewall Relance le firewall" +} + +error=1 + +######################################################################### + +# Edition du fichier de MACS + +if [[ "$1" == "--macs" ]] +then + /usr/bin/jed $MACS + error=0 +fi + +######################################################################### + +# Reconfiguration des services + +if [[ "$1" == "--services" ]] +then + # génération du script + echo "Création du script de reconfiguration" + cat > $DIR/boot.sh < /tmp/resolv.conf +echo "nameserver 138.231.136.6" >> /tmp/resolv.conf +echo "nameserver 138.231.136.10" >> /tmp/resolv.conf + +# alias pour le dns +echo "127.0.0.1 localhost" > /etc/hosts +echo "138.231.136.7 debian.ens-cachan.fr ftp.crihan.fr" >> /etc/hosts + +# dns +killall dnsmasq 2> /dev/null +/usr/sbin/dnsmasq + +# dhcp filaire +echo "start 192.168.0.10" > /tmp/udhcpd.conf +echo "end 192.168.0.254" >> /tmp/udhcpd.conf +echo "interface vlan1" >> /tmp/udhcpd.conf +echo "opt dns 192.168.0.1 138.231.136.6" >> /tmp/udhcpd.conf +echo "option subnet 255.255.255.0" >> /tmp/udhcpd.conf +echo "option dns 138.231.136.10" >> /tmp/udhcpd.conf +echo "opt router 192.168.0.1" >> /tmp/udhcpd.conf +killall udhcpd 2> /dev/null +/usr/sbin/udhcpd /tmp/udhcpd.conf + +EOF + + # envoi du fichier et execution + chmod 744 $DIR/boot.sh + echo "Envoi du script" + $SCP $DIR/boot.sh $BORNE:/tmp/boot.sh > /dev/null + + # execution du script + echo "Execution du script" + $SSH /tmp/boot.sh + + # destruction du fichier + rm -f $DIR/boot.sh + + error=0 +fi + +######################################################################### + +# Reconfiguration du firewall + +if [[ "$1" == "--firewall" ]] || [[ "$1" == "--macs" ]] +then + # génération du firewall + echo "Génération du firewall" + cat > $DIR/firewall.sh <> $DIR/firewall.sh + done + + echo "iptables -A POSTROUTING -t nat -o vlan0 -j MASQUERADE" >> $DIR/firewall.sh + + # envoi du fichier et execution + chmod 744 $DIR/firewall.sh + echo "Envoi du firewall" + $SCP $DIR/firewall.sh $BORNE:/tmp/firewall.sh > /dev/null + + # execution du script + echo "Lancement du firewall" + $SSH /tmp/firewall.sh + + # destruction du fichier + rm -f $DIR/firewall.sh + + error=0 +fi + +######################################################################### + +if [ "$error" = "1" ] +then + usage + exit 2 +fi diff --git a/archive/archives/cvsweb/commit-news.py b/archive/archives/cvsweb/commit-news.py new file mode 100755 index 00000000..7cf96ca9 --- /dev/null +++ b/archive/archives/cvsweb/commit-news.py @@ -0,0 +1,97 @@ +#!/usr/bin/python +# -*- coding: iso-8859-1 -*- +# +# Hack par CC 13/07/1999 pour envoyer sur crans.cvs-checkins un +# compte-rendu d'activité de ce qui se passe... +# +# modif par SamK 22/11/99: splitter les lignes, sinon nntplib refuse le message +# si ya des lignes trop longues.. +# +# modif par OS 15/05/00 ajout d'un Reply-To... +# +# Ajouts par NS 13/02/03 : signature qui explique un peu ce qui se passe, et +# création automatique d'un lien vers la page webcvs qui présente le diff. +# +# Modif par Benoit 11/12/04 : changement du repertoire ou sont loggue les +# commits et fermeture du fichier +# +# Intimement lié à CVSROOT/loginfo +# + +import nntplib,string,os,StringIO + +def LFsplit(s): + res="" + while len(s)>80 : + pos=string.find(s,' ',65,80) + if pos < 0 : + res=res+s[0:75]+'\n' + s=s[75:len(s)+1] + else : + res=res+s[0:pos]+'\n' + s=s[pos+1:len(s)+1] + if len(s)>0: + res=res+s + return res + +for uid in os.listdir('/var/local/cvsweb/checkins/'): + try: + so = [] + fi = open('/var/local/cvsweb/checkins/'+uid,'r') + + so.append("From: CVS admin \n" + \ + ("Subject: CVS Commit par %s\n" % uid)+ \ + "Organization: Crans Internet Site\n" + \ + "Newsgroups: crans.cvs-checkins\n" + \ + "Reply-To: Nounous \n" + \ + "Followup-To: crans.informatique\n" ) + + so.append("MIME-Version: 1.0\n" + \ + "Content-Type: text/plain\n") + so.append("\n") + envoie = 0 + links_base="http://www.crans.org/cgi-bin/cvsweb" + while 1: + s = fi.readline() + if not s: break + envoie = 1 + links=['Liens vers les diffs sur cvsweb :\n'] + diffok = 0 + + # On essaye de créer les liens vers cvsweb automatiquement. + try: + if s[0:3]=="web": + link=string.split(s) + for file in link[1:]: + file=string.split(file,",") + if not string.split(file[0],".")[-1] in ['jpg','jpeg','gif','png']: + links.append("%s/%s/%s.diff?r1=%s&r2=%s\n" % (links_base,link[0],file[0],file[1],file[2])) + diffok = 1 + # S'il y a au moins un diff affichable, on donne le lien. + if diffok: + links.append('\n') + s=string.join(links,'') + else: + s=LFsplit(s) + so.append(s) + except: + so.append(s) + # Avec une signature c'est plus propre. + so.append("\n" + \ + "-- \n" + \ + "Notification automatique des CVS commits sur le site du CR@NS.\n"+ \ + "Voir http://www.crans.org/cgi-bin/cvsweb/web/ pour accéder aux archives CVS complètes.") + + + # maintenant, on envoie : + + if envoie: + sso = string.join(so,'') + fso = StringIO.StringIO(sso) + nntplib.NNTP('news.crans.org').post(fso) + #print sso + fi.close() + os.unlink('/var/local/cvsweb/checkins/'+uid) + except: + raise + diff --git a/archive/archives/cvsweb/update.sh b/archive/archives/cvsweb/update.sh new file mode 100755 index 00000000..37b391e3 --- /dev/null +++ b/archive/archives/cvsweb/update.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# Mise à jour de l'arborescence du site web +# Execute toutes les minutes (par root). + +OQP=/var/lock/cvsweb +CHEMIN=/var/local/cvsweb +REPOSITORY=/home/httpd/CVS-Repository/ + +if [ $CHEMIN/commit.todo -nt $CHEMIN/commit.ok ]; then + if ! [[ -f $OQP ]]; then + chown -R www-data:webcvs $REPOSITORY + chmod -R o-rwx $REPOSITORY + touch $OQP + cd /home/httpd/web + su www-data -c "/usr/bin/cvs -d $REPOSITORY update -P -d" >/dev/null 2>&1 + test -s $OQP || rm -f $OQP + su www-data -c "touch $CHEMIN/commit.ok" + fi +fi diff --git a/archive/archives/fan-speed b/archive/archives/fan-speed new file mode 100755 index 00000000..bca489a2 --- /dev/null +++ b/archive/archives/fan-speed @@ -0,0 +1,16 @@ +#!/bin/sh +#donne la vitesse du ventilateur CPU +echo 0 +#allez, on met 1000 au pif, ça nous rappellera que ce chiffre est bidon. --nico +#echo 1000 +#en attendant de remettre i2c sensors, cette ligne est commentée : +cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/fan2 | tail -c 5 +# +#| head -c 4 +#echo $(cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/temp2 | tail -c 5 | head -c 2 )"/1-30"|bc +#cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/temp1 | sed -e 's/.*60.0 50.0 //' | sed -e's/\0//' -e 's/\.//' +#cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/temp2 | sed -e 's/.*57.0 50.0 //' | sed -e's/\0//' -e 's/\.//' +#echo 10 +#echo 10 +echo +echo "Ventilation" diff --git a/archive/archives/mailCRANS b/archive/archives/mailCRANS new file mode 100755 index 00000000..eb9ce787 Binary files /dev/null and b/archive/archives/mailCRANS differ diff --git a/archive/archives/mailCRANS.c b/archive/archives/mailCRANS.c new file mode 100644 index 00000000..41562df5 --- /dev/null +++ b/archive/archives/mailCRANS.c @@ -0,0 +1,280 @@ +/* + * Mail a tous les adherents de CRANS. + * + * Copyright (c) 1999 Association CRANS. + * + * Auteur: Olivier Saut + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define kPCGuestUID 502 +#define kCorbeauUID 536 +#define kNobodyUID 65534 +#define kRealUsers 500 + +/* Prototypes */ +int mk_tmpfile(); +void edit(); +int sendmail(char *name); +void help(); +int isValidUID(uid_t uid); +void mySig_handler(int iInt); + +/* Variables globales */ +char *gTempname; +uid_t gCurrent_UID; +uid_t gUid_start; +uid_t gUid_stop; +int gVerbose; +int gSimulate; + +/* Programme principal */ +int main(int argc, char *argv[]) +{ + + struct passwd *passwd_ent; + struct passwd *user; + char buf[1024]; + extern char *optarg; + extern int optind; + int ch ; + struct stat begin, end; + sig_t previous_handler; + char tildefn[MAXPATHLEN]; + int fd=-1; + + + gUid_start=kRealUsers; + gUid_stop=kNobodyUID; + gVerbose=0; + gSimulate=0; + while ((ch = getopt(argc, argv, "svhf:d:a:")) != -1) + switch (ch) { + case 'h': + help(); + break; + case 'v': + gVerbose=1; + break; + case 's': + gVerbose=1; + gSimulate=1; + break; + case 'f': + gTempname=optarg; + if ((fd = open(optarg, O_RDONLY, 0)) < 0) { + (void)fprintf(stderr, + "myname: %s: %s\n", optarg, strerror(errno)); + exit(1); + } + break; + case 'd': + gUid_start=atoi(optarg); + break; + case 'a': + gUid_stop=atoi(optarg); + break; + + } + argc -= optind; + argv += optind; + + previous_handler = signal(SIGTERM & SIGINT,(sig_t) mySig_handler); + if(previous_handler==SIG_ERR) { + (void)fprintf(stderr,"Erreur lors de l'installation du sighandler."); + exit(EXIT_FAILURE); + } + + + if(gVerbose) + fprintf(stdout,"mailCRANS by OS. Version 0.1\n"); + + if(fd==-1) { + fd=mk_tmpfile(); + user=getpwuid(getuid()); + sprintf(buf,"From: %s\nSubject: \nReply-To: \nContent-Type: text/plain; charset=iso-8859-1", user->pw_name); + + if (write (fd,(void *)buf,strlen(buf)) < 0) { + close(fd); + fprintf(stderr, "Erreur en écriture."); + exit(EXIT_FAILURE); + } + + (void) fsync(fd); + if(fstat(fd,&begin)) { + perror("Erreur stat(1)"); + close(fd); + exit(EXIT_FAILURE); + } + + + (void) edit(); + + if(stat(gTempname,&end)) { + perror("Erreur stat(2)"); + close(fd); + exit(EXIT_FAILURE); + } + + if (begin.st_mtime == end.st_mtime) { + warnx("No changes made : exiting"); + close(fd); + (void)unlink(gTempname); + exit(EXIT_FAILURE); + } + } + + + + setpwent(); + + while((int)(passwd_ent=(struct passwd *)getpwent())) { + gCurrent_UID=passwd_ent->pw_uid; + + if(isValidUID(gCurrent_UID)) + if(sendmail(passwd_ent->pw_name )) { + exit(EXIT_FAILURE); + } + else + usleep(250000); + } + + endpwent(); + + (void)unlink(gTempname); + /* Bon on efface le fichier parasite */ + (void)strcpy((char *)tildefn,gTempname); + (void)strcat((char *)tildefn,"~"); + + if(!access(tildefn,F_OK)) + (void)unlink(tildefn); + + return 0; +} + +int isValidUID(uid_t uid) { + if(uidgUid_stop) + return 0; + + if((uid==kPCGuestUID)|| (uid==kCorbeauUID) || (uid==kNobodyUID)) + return 0; + + return 1; +} + +void mySig_handler(int iInt) { + (void) fprintf(stdout,"\n Signal %d intercepté.\n",iInt); + (void) fprintf(stderr,"Le programme s'est arreté sur l'uid : %d\n",gCurrent_UID); + exit(EXIT_SUCCESS); +} + +int mk_tmpfile() +{ + int fd; + char p[MAXPATHLEN]; + p[MAXPATHLEN-1]='\0'; + + strcpy(p, "/tmp/EAll.XXXXXX"); + if ((fd = mkstemp(p)) == -1) + err(1, "%s", p); + gTempname = malloc(strlen(p)); + (void)strncpy(gTempname,p,strlen(p)); + if(gVerbose) + fprintf(stdout,"Tempfile name : %s\n",gTempname); + return (fd); +} + +void edit() +{ + int pstat; + int editpid; + char *p, *editor; + + if (!(editor = getenv("EDITOR"))) + editor = _PATH_VI; + if ((p = strrchr(editor, '/'))) + ++p; + else + p = editor; + + if (!(editpid = fork())) { + errno = 0; + execlp(editor, p, gTempname, NULL); + _exit(errno); + } + for (;;) { + editpid = waitpid(editpid, (int *)&pstat, WUNTRACED); + errno = WEXITSTATUS(pstat); + (void) fprintf(stderr,"\n *** %d ***\n",WEXITSTATUS(pstat)); + if (editpid == -1) + exit(EXIT_FAILURE); + else if (WIFSTOPPED(pstat)) + raise(WSTOPSIG(pstat)); + else if (WIFEXITED(pstat) && errno == 0) + break; + else + exit(EXIT_FAILURE); + } + editpid = -1; +} + + + +int sendmail(char *pw_name) { + int res=0; + char *buff; + int length; + buff=malloc(1024); + + buff[1023]='\0'; + buff[0]='\0'; + + (void)strcat((char *)buff,(const char *)"cat "); + (void)strcat(buff,(const char *) gTempname); + (void)strcat(buff, " | sendmail "); + (void)strcat(buff, pw_name); + if(gVerbose) + fprintf(stdout,"\n ** %s ** \n", buff); + if(!gSimulate) + res=system(buff); + return res; +} + +void help() { + fprintf(stdout,"usage: mailCRANS [-v] [-s] [-f filename] [-{d,a} uid]\n"); + fprintf(stdout," -v : mode bavard\n"); + fprintf(stdout," -f filename : envoie le fichier en argument\n"); + fprintf(stdout," (rajouter une ligne Subject: en première ligne du fichier pour avoir un sujet\n"); + fprintf(stdout," -d uid : envoie à partir de l'UID argument\n"); + fprintf(stdout," -a uid : arrete après l'UID argument\n"); + fprintf(stdout," -s : mode simulation."); + exit(EXIT_SUCCESS); + +} + + diff --git a/archive/archives/mailvirus b/archive/archives/mailvirus new file mode 100644 index 00000000..e05277d3 --- /dev/null +++ b/archive/archives/mailvirus @@ -0,0 +1,21 @@ +Bonjour, + +Suite à la récente multiplication d'un virus nommé 'Klez' sur le réseau +CRANS, nous avons décidé de faire en sorte temporairement que tous les mails +contenant un fichier attaché nommé .exe, .pif, .bat ou .scr soient +automatiquement rejetés par notre serveur, sans autre forme d'avertissement. +La situation restera ainsi jusqu'à mise à jour des antivirus communément +répandus. + +Pendant cette période, si vous attendez effectivement un mail contenant une +pièce jointe nommé de la sorte, essayez de faire en sorte que l'expéditeur +en change l'extension (par exemple en en faisant un .zip). + +En raison de la rapidité extrême avec laquelle se répand ce virus, nous +serons éventuellement amenés à déconnecter du réseau les machines infectées. + +http://www.sarc.com/avcenter/venc/data/w32.klez.e@mm.html + + +-- +Nicolas Stransky diff --git a/archive/archives/netrestart b/archive/archives/netrestart new file mode 100755 index 00000000..b00b99be --- /dev/null +++ b/archive/archives/netrestart @@ -0,0 +1,7 @@ +#! /bin/sh +# 5 retries (6 en tout), quiet. +if ! fping 138.231.136.2 -r 5 -q; +then + echo "irts AUTOTEST failed" | logger -s -p daemon.err -t "/id/netrestart" + /id/network reload +fi diff --git a/archive/archives/news-cancel b/archive/archives/news-cancel new file mode 100755 index 00000000..0a288877 --- /dev/null +++ b/archive/archives/news-cancel @@ -0,0 +1,128 @@ +#!/bin/sh +## +## news-cancel +## +## Made by stransky +## Login stransky +## +## Started on dim 13 jan 2002 02:30:56 CET Nicolas STRANSKY +## Last update ven 19 sep 2003 14:21:27 CEST Nicolas STRANSKY +## +## Script pour annuler ou modérer un message de news. +## +## V 1.0 : utilisation de la commande ctlinnd cancel. +## V 2.0 : utilisation des commandes control cancel et supersede pour assurer +## la propagation des modifications effectuées. + + +if [[ "${ORIG_LOGNAME-$SUDO_USER}" = "" ]] + then moderateur=`who am i | awk '{print $1}'` + else moderateur=${ORIG_LOGNAME-$SUDO_USER} +fi + +ovfiles=$(grep "^[[:digit:]]" /etc/news/buffindexed.conf | cut -d ':' -f 2 | tr "\n" " ") +groupe=adm +tempF=$(tempfile -d /tmp -p "newscancel") +tempF2=$(tempfile -d /tmp -p "newscancelcommentaire") +tempF3=$(tempfile -d /tmp -p "newscancelmessage") + +VERIF () { + ligne=`grep -h --binary-files=text " $1 " $ovfiles | head -n 1 | awk -F "\t" '{print $1"~"$2"~"$3"~"$9}'` + auteur=`echo $ligne | awk -F "~" '{print $3}'` + titre=`echo $ligne | awk -F "~" '{print $2}'` + newsgroup=`echo $ligne | awk -F "~" '{print $4}' | awk '{print $3}' | awk -F : '{print $1}'` + #numero=`echo $ligne | awk -F "~" '{print $1}'` + numero=`echo $ligne | awk -F "~" '{print $4}' |awk -v VAR1=$newsgroup 'BEGIN {RS = " "} ; $0 ~ VAR1 {print $1}' | awk -F ":" '{print strtonum($2)}'` + + if [[ $ligne != "" ]] ; then + echo "il s'agit du message \"$titre\", numéro $numero, posté par $auteur dans $newsgroup" + echo "" + echo -n "exact ? [o/n] " + read confirmation + case $confirmation in + o*|O*) + ;; + + *) + echo "On ne fait rien." + exit 0 + ;; + esac + else + echo "Aucun message ne correspond à cette ID" + exit 1 + fi + + } + +SAUVEGARDE () { + echo "Sauvegarde du message dans /root/moderes/..." + sleep 1 + rep=`echo $newsgroup | sed 's/\./\//g'` + cp /var/spool/news/articles/$rep/$numero /root/moderes/$newsgroup'.'$numero.nws + echo "$1 de $newsgroup.$numero" > $tempF + echo " " >> $tempF + echo "modérateur : $moderateur" >> $tempF + echo "commentaires : " > $tempF2 + chown $moderateur.$groupe $tempF2 + /bin/su $moderateur -c "$EDITOR $tempF2" + cat $tempF2 >> $tempF + echo "Envoi du mail aux modérateurs..." + cat $tempF | mutt -nx -a /root/moderes/$newsgroup'.'$numero.nws -s "moderation de $newsgroup.$numero par $moderateur" moderateurs@crans.org + rm -f $tempF $tempF2 + echo " " + } + + +EDITION () { + cp /var/spool/news/articles/$rep/$numero $tempF3 + chown $moderateur.$groupe $tempF3 + /bin/su $moderateur -c "$EDITOR $tempF3" + (sleep 1 ; echo "mode reader" ; sleep 1 ; echo "group $newsgroup" ; sleep 1 ; echo post ; sleep 1 ; echo "Supersedes: $1" ; cat $tempF3 | egrep -v "^Message-ID:|^NNTP-Posting|^Path:|^X-Trace:|^X-Complaints-To:|^Xref:" ; echo '.' ; sleep 1 ; echo quit) | nc 138.231.136.3 119 + rm -f $tempF3 + } + +CANCEL () { +# echo -n 'throttling inn... ' +# /bin/su news -c "/usr/lib/news/bin/ctlinnd throttle 'article canceling'" +# echo "canceling article $1" +# /bin/su news -c "/usr/lib/news/bin/ctlinnd cancel $1" +# +# echo -n 'starting inn... ' +# /bin/su news -c "/usr/lib/news/bin/ctlinnd go ''" + + (sleep 1 ; echo "mode reader" ; sleep 1 ; echo "group $newsgroup" ; sleep 1 ; echo post ; sleep 1 ; echo "Control: cancel $1" ; echo "From: $moderateur@crans.org" ; echo "Subject: Moderation" ; echo "Newsgroups: $newsgroup" ; echo -e "\n" ; echo "This post has been moderated with news-cancel." ; echo '.' ; sleep 1 ; echo quit) | nc news.crans.org 119 + } + + + +if [ $UID -eq 0 ] +then + case $1 in + \<*@*\>) + VERIF $1 + echo "Edition ou Annulation du message ? [E/A] " + read action + case $action in + e*|E*) + SAUVEGARDE Edition + EDITION $1 + ;; + a*|A*) + SAUVEGARDE Annulation + CANCEL $1 + ;; + *) + echo "attention, il n'y a eu ni édition ni annulation. relancer le script" + ;; + esac + ;; + *) + echo "usage : news-cancel ''" + ;; + esac + +else + echo "You must be root to launch this command." + exit 1 +fi diff --git a/archive/archives/pop3s-restart b/archive/archives/pop3s-restart new file mode 100755 index 00000000..2db5a51b --- /dev/null +++ b/archive/archives/pop3s-restart @@ -0,0 +1,7 @@ +#/bin/sh +PIFILE="/var/run/stunnel.tunnel-pop.pid" +OPTIONS="-d 995 -r 110 tunnel-pop -p /etc/ssl/certs/stunnel-ptt.pem" + +if [ $(netstat -l --tcp | grep -c ' \*:pop3s') -eq 0 ]; then + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec /usr/sbin/stunnel -- $OPTIONS ; +fi diff --git a/archive/archives/redpopup b/archive/archives/redpopup new file mode 100755 index 00000000..d6e5f7ee --- /dev/null +++ b/archive/archives/redpopup @@ -0,0 +1,9 @@ +#!/bin/sh +PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin +PYTHONPATH=/usr/lib/python-1.5/ + +cd /etc/CRANS +echo $1 $2 $3 $4 $5 > /tmp/last.popup.log +exec python /etc/CRANS/code/redpopup.py $1 $2 $3 $4 $5 >&2 2>/tmp/last.popup.err + + diff --git a/archive/archives/redpopup.py b/archive/archives/redpopup.py new file mode 100755 index 00000000..07856db6 --- /dev/null +++ b/archive/archives/redpopup.py @@ -0,0 +1,76 @@ +#!/usr/bin/python +# -*- python -*- +import sys,time,os,pickle,string,popen2,random + +FORKLEN = 5 +TIMEOUT = 15 # une machine a 15 secondes pour recevoir un popup ! + +def do_bomb(Machines): + time.sleep(random.random()) + if len(Machines) < FORKLEN: + for mach in Machines: + begin = time.time() + print "ré-expédition SMBpopup à ",mach + fd = popen2.Popen3("/etc/CRANS/code/SMBMessage %s %s %s" % (from_whom,mach,msgfile)) + while 1: + time.sleep(1) + if fd.poll() != -1: break # fini ! (cool) + if (time.time() - begin) > TIMEOUT: break + del fd + else: + Half = len(Machines) / 2 + + pid = os.fork() + if pid == 0: + # child + do_bomb(Machines[:Half]) + else: + # parent + do_bomb(Machines[Half:]) + try: + os.waitpid(pid,0) + except: + pass + # à ce stade, on a éliminé toute récursion, tant pile que process... + # croisons les doigts !!! + + +if len(sys.argv) < 4: + sys.stderr.write('Attend 3 arguments !\n') + sys.exit(1) + +Zone = pickle.load(open(CFG_READ_DIR+"Zone.db","r")) + +from_whom = sys.argv[1] +from_where = sys.argv[2] +msgfile = sys.argv[3]+"-red" +message = open(sys.argv[3],"r").readlines() + +message.insert(0,("Message de %s (@%s) à ALL : \n-----\n" % (from_whom,from_where))) +open(msgfile,"w").writelines(message) + + +# pour gagner du temps, on n'envoie le message qu'aux machines qui sont +# (probablement) vivantes. Pour gagner encore plus de temps, on fait +# confiance au cache ARP (15 minutes) + +Alive = [] +arp = os.popen("arp -a","r") +while 1: + s = arp.readline() + if not s: break + mach = string.split(string.split(s)[0],'.')[0] + if mach[:5] == 'zamok': continue # évitons les boucles infininies... + if Zone.has_key(mach): Alive.append(mach) +print Alive + +arp.close() + +#maintenant, au boulot... +do_bomb(Alive) +unlink(msgfile) +unlink(sys.argv[3]) + + + + diff --git a/archive/archives/restart-all b/archive/archives/restart-all new file mode 100755 index 00000000..f76196f9 --- /dev/null +++ b/archive/archives/restart-all @@ -0,0 +1,12 @@ +#!/bin/zsh -p +# suid !! + +id + +echo "restarting the named (DNS) :" +kill -HUP `cat /var/run/named.pid` + +echo "restarting the DHCP : " +#kill -TERM `cat /var/run/dhcpd.pid` || true +#/usr/sbin/dhcpd +/etc/init.d/dhcp reload diff --git a/archive/archives/save-etc b/archive/archives/save-etc new file mode 100755 index 00000000..8d821dc3 --- /dev/null +++ b/archive/archives/save-etc @@ -0,0 +1,15 @@ +#!/bin/sh + +freq="$1" +nb=$2 + +pref="/backups/tars/etc${freq}-" +suff=`date +"%Y-%m-%d--%H-%M-%S.tgz"` +tarball="${pref}${suff}" + +umask 077 +cd / +tar zcf ${tarball} etc usr/lib/cgi-bin usr/scripts root/scripts home/corbeau/scripts +rm `ls -t ${pref}* | tail +$nb` + +#df diff --git a/archive/archives/sendmail-vit-il b/archive/archives/sendmail-vit-il new file mode 100755 index 00000000..a5e24a7d --- /dev/null +++ b/archive/archives/sendmail-vit-il @@ -0,0 +1,24 @@ +#!/usr/bin/env python +# -*- Python -*- + +# teste si notre sendmail fonctionne encore. + +from socket import * +import sys + +OK = 0 + +host = "localhost" +if len(sys.argv) > 1: + host = sys.argv[1] + +s = socket(AF_INET,SOCK_STREAM) +try: + s.connect(host,25) + data = s.recv(3) + OK = ("220" == data) + s.close() +except: + OK = 0 + +sys.exit(not OK) diff --git a/archive/archives/snmp/Des5200.mib b/archive/archives/snmp/Des5200.mib new file mode 100644 index 00000000..b86012d8 --- /dev/null +++ b/archive/archives/snmp/Des5200.mib @@ -0,0 +1,1277 @@ +-- DES-3216 SWITCH HUB MIB V0.02 08/02/97 + + DES3216-MIB + + DEFINITIONS ::= BEGIN + + IMPORTS + enterprises, IpAddress, + TimeTicks,Counter + FROM RFC1155-SMI + DisplayString, PhysAddress + FROM RFC1213-MIB + TRAP-TYPE + FROM RFC-1215 + OBJECT-TYPE + FROM RFC-1212; + + -- OwnerString ::= DisplayString + -- This data type is used to model an administratively + -- assigned name of the owner of a resource. This + -- information is taken from the NVT ASCII character set. + -- It is suggested that this name contain one or more + -- of the following: + -- IP address, management station name, network manager's + -- name, location, or phone number. + -- SIZE (0..xx) + + + dlink OBJECT IDENTIFIER ::= { enterprises 171 } + dlink-products OBJECT IDENTIFIER ::= { dlink 10 } + dlink-Des3216Prod OBJECT IDENTIFIER ::= { dlink-products 9 } + dlink-Des3216ProdId OBJECT IDENTIFIER ::= { dlink-Des3216Prod 1 } + des3216SwHub OBJECT IDENTIFIER ::= { dlink-Des3216Prod 2 } + + + dlink-mgmt OBJECT IDENTIFIER ::= { dlink 11 } + + agentConfigInfo OBJECT IDENTIFIER ::= { dlink-mgmt 1 } + des3216series OBJECT IDENTIFIER ::= { dlink-mgmt 9 } + + -- agentBasicInfo + + agentBasicInfo OBJECT IDENTIFIER ::= { agentConfigInfo 1 } + + agentRuntimeSwVersion OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..12)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This is a textual description of the runtime software version + and revision. If the version number is one and revision number is + zero agentRuntimeSwVersion would be 'Ver. 1.0'" + ::= { agentBasicInfo 1 } + + agentPromFwVersion OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..12)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This is a textual description of the agent PROM firmware version + and revision. If the version number is one and revision number is + zero agentPromFwVersion would be 'Ver. 1.0'" + ::= { agentBasicInfo 2 } + + agentHwRevision OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..12)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This is a textual description of the hardware revision. + The display string should look like 'Rev. A1'" + ::= { agentBasicInfo 3 } + + agentMgmtProtocolCapability OBJECT-TYPE + SYNTAX INTEGER { + other(1), + snmp-ip(2), + snmp-ipx(3), + snmp-ip-ipx(4) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The network management protocol(s) supported by this agent." + ::= { agentBasicInfo 4 } + + -- agentMibcapabilityTable + + agentMibCapabilityTable OBJECT-TYPE + SYNTAX SEQUENCE OF AgentMibCapabilityEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of MIB capability entries supported by this agent." + ::= { agentBasicInfo 5 } + + agentMibCapabilityEntry OBJECT-TYPE + SYNTAX AgentMibCapabilityEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A MIB capability entry contains objects describing a particular MIB + supported by this agent." + INDEX { agentMibCapabilityIndex } + ::= { agentMibCapabilityTable 1 } + + AgentMibCapabilityEntry ::= SEQUENCE { + agentMibCapabilityIndex + INTEGER, + agentMibCapabilityDescr + DisplayString, + agentMibCapabilityVersion + INTEGER, + agentMibCapabilityType + INTEGER + } + + agentMibCapabilityIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A list of agentMibCapabilityDescr entries." + ::= { agentMibCapabilityEntry 1 } + + agentMibCapabilityDescr OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..16)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The name of the MIB supported by the agent." + + ::= { agentMibCapabilityEntry 2 } + + agentMibCapabilityVersion OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The version of the MIB specified in this entry." + ::= { agentMibCapabilityEntry 3 } + + agentMibCapabilityType OBJECT-TYPE + SYNTAX INTEGER { + other(1), + standard(2), + proprietary(3), + experiment(4) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The type of the MIB specified in this entry." + ::= { agentMibCapabilityEntry 4 } + + -- agentMgmtRole OBJECT-TYPE + -- SYNTAX INTEGER { + -- other(1), + -- primary-master(2), + -- backup-master(3) + -- } + -- ACCESS read-only + -- STATUS mandatory + -- DESCRIPTION + -- "The role of this agent within this particular hub stack" + -- ::= { agentBasicInfo 6 } + + + -- agentBasicConfig + + agentBasicConfig OBJECT IDENTIFIER ::= { agentConfigInfo 2 } + + agentSwUpdateMode OBJECT-TYPE + SYNTAX INTEGER { + other(1), + network-load(2), + out-of-band-load(3) + } + ACCESS read-write + STATUS + mandatory + DESCRIPTION + "The download media used by the system to download the + runtime software." + ::= { agentBasicConfig 1 } + + agentSwUpdateCtrl OBJECT-TYPE + SYNTAX INTEGER { + other(1), + disabled(2), + enabled(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Current status of software download control. The setting + is effective the next time you reset or power on the hub." + ::= { agentBasicConfig 2 } + + agentBootFile OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The name of the file to be downloaded from the TFTP server when + software update is enabled." + ::= { agentBasicConfig 3 } + + agentSystemReset OBJECT-TYPE + SYNTAX INTEGER { + other(1), + reset(2), + no-reset(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "This object indicates the agent system reset state. + Setting this object to no-reset(3) has no effect. + Setting this object to reset(2) will reset the agent. + The agent always returns no-reset(3) when this object is read." + ::= { agentBasicConfig 4 } + + agentRs232PortConfig OBJECT-TYPE + SYNTAX INTEGER { + other(1), + console(2), + out-of-band(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The current setting of RS-232C port. + The RS-232C port can be configured as the console port or + used for out-of-band connection." + ::= { agentBasicConfig 5 } + + agentOutOfBandBaudRateConfig OBJECT-TYPE + SYNTAX INTEGER { + other(1), + baudRate-1200 (2), + baudRate-2400 (3), + baudRate-9600 (4), + baudRate-19200(5) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The baud rate setting for out of band connection. + The baud rate for the console interface is always 9600." + ::= { agentBasicConfig 6 } + + agentOutOfBandDialNumber OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..32)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The dial out phone number for out of band to establish + a connection. This entry is used for reference only." + ::= { agentBasicConfig 7 } + + + + -- agentIpProtocolConfig + + agentIpProtoConfig OBJECT IDENTIFIER ::= { agentConfigInfo 3 } + + agentIpNumOfIf OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The total number of IP interfaces supported by this agent." + ::= { agentIpProtoConfig 1 } + + agentIpIfTable OBJECT-TYPE + SYNTAX SEQUENCE OF AgentIpIfEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of IP interface entries supported by the agent." + ::= { agentIpProtoConfig 2 } + + agentIpIfEntry OBJECT-TYPE + SYNTAX AgentIpIfEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "An agentIPIfEntry contains information about a particular + IP interface." + INDEX { agentIpIfIndex } + ::= { agentIpIfTable 1 } + + AgentIpIfEntry ::= SEQUENCE { + agentIpIfIndex + INTEGER, + agentIpIfAddress + IpAddress, + agentIpIfNetMask + IpAddress, + agentIpIfDefaultRouter + IpAddress, + agentIpIfMacAddr + PhysAddress, + agentIpIfType + INTEGER + } + + agentIpIfIndex OBJECT-TYPE + SYNTAX INTEGER (1..255) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This object uniquely identifies the IP interface number + in agentIpIfTable. + This value should never greater than agentIpNumOfIf" + ::= { agentIpIfEntry 1 } + + agentIpIfAddress OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The IP address of the interface." + ::= { agentIpIfEntry 2 } + + agentIpIfNetMask OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The IP net mask for this interface." + ::= { agentIpIfEntry 3 } + + agentIpIfDefaultRouter OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The default gateway for this IP interface." + ::= { agentIpIfEntry 4 } + + agentIpIfMacAddr OBJECT-TYPE + SYNTAX PhysAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The MAC address of this IP interface. + For interfaces which do not have such an address + (e.g., a serial line), this object should contain + an octet string of zero length." + ::= { agentIpIfEntry 5 } + + agentIpIfType OBJECT-TYPE + SYNTAX INTEGER { + other(1), -- none of the following + ethernet-csmacd(6), + slip(28) -- generic SLIP + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The physical layer interface of the IP interface." + ::= { agentIpIfEntry 6 } + + agentIpBootServerAddr OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The IP Address of Boot Server." + ::= { agentIpProtoConfig 3 } + + agentIpBootProtocol OBJECT-TYPE + SYNTAX INTEGER { + other(1), + bootp-tftp(2), + tftp(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The software download protocol used for software update." + ::= { agentIpProtoConfig 4 } + + agentIpGetIpFromBootpServer OBJECT-TYPE + SYNTAX INTEGER { + other(1), + disabled(2), + enabled(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "This object indicates whether the agent get its system IP address + from BootP server at start up." + ::= { agentIpProtoConfig 5 } + + agentIpUnauthAddr OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The IP address of an unauthorized SNMP packet." + ::= { agentIpProtoConfig 6 } + + agentIpUnauthComm OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..20)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The community string of an unauthorized SNMP packet." + ::= { agentIpProtoConfig 7 } + + agentIpLastBootServerAddr OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The last IP address used as Boot server IP address." + ::= { agentIpProtoConfig 8 } + + agentIpLastIpAddr OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The last IP address used as the agent system IP address." + ::= { agentIpProtoConfig 9 } + + -- agentIptrapMangerTable + + agentIpTrapManagerTable OBJECT-TYPE + SYNTAX SEQUENCE OF AgentIpTrapManagerEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of trap manager entries to which to send SNMP traps ." + ::= { agentIpProtoConfig 10 } + + agentIpTrapManagerEntry OBJECT-TYPE + SYNTAX AgentIpTrapManagerEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "This entry contains the particular trap manager settings." + INDEX { agentIpTrapManagerIpAddr } + ::= { agentIpTrapManagerTable 1 } + + AgentIpTrapManagerEntry ::= SEQUENCE { + agentIpTrapManagerIpAddr + IpAddress, + agentIpTrapManagerComm + DisplayString, + agentIpTrapManagerStatus + INTEGER + } + + agentIpTrapManagerIpAddr OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The IP address to receive SNMP traps from this device." + ::= { agentIpTrapManagerEntry 1 } + + agentIpTrapManagerComm OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..20)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The community string of the SNMP trap packet sent to + the trap manager." + ::= { agentIpTrapManagerEntry 2 } + + agentIpTrapManagerStatus OBJECT-TYPE + SYNTAX INTEGER { + other(1), + disabled(2), + enabled(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "This object indicates whether or not the trap should be send to this + trap manager." + ::= { agentIpTrapManagerEntry 3 } + + + + des3216MIB OBJECT IDENTIFIER ::= { des3216series 1 } + swDevicePackage OBJECT IDENTIFIER ::= { des3216MIB 1 } + swPortPackage OBJECT IDENTIFIER ::= { des3216MIB 2 } + + swDeviceInfo OBJECT IDENTIFIER ::= { swDevicePackage 1 } + + swDevInfoTotalNumOfPort OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ports within this switch hub. This value + is the sum of the ports of each group within this + switch hub." + ::= { swDeviceInfo 1 } + + swDevInfoNumOfPortOnUse OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of ports in this switch hub connected to the + segment or end stations." + ::= { swDeviceInfo 2 } + + -- swDevInfoSerialNum OBJECT-TYPE + -- SYNTAX INTEGER + -- ACCESS read-only + -- STATUS mandatory + -- DESCRIPTION + -- "The serial number of this switch hub." + -- ::= { swDeviceInfo 3 } + + swDevInfoDesc OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..64)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual description of this switch hub." + ::= { swDeviceInfo 3 } + + -- swDevInfoRepeaterType OBJECT-TYPE + -- SYNTAX INTEGER { + -- other(1), + -- baseband-10-Mb(2), + -- baseband-100-Mb-class-I(3), + -- baseband-100-Mb-class-II(4) + -- } + -- ACCESS read-only + -- STATUS mandatory + -- DESCRIPTION + -- "This objects indicates the CSMA/CD repeater type. The type + -- value matches the clause number of the standard that specifies + -- the particular repeater, with further numerical identification + -- for the repeater classes within the same clause." + -- ::= { swDeviceInfo 5 } + + swDevInfoPortType OBJECT-TYPE + SYNTAX INTEGER { + other(1), + portType-UTP(2), + portType-AUI(3), + portType-Fiber(4), + portType-BNC(5), + portType-Option-module-RAS(6), + portType-Option-module-100Bridge(7) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The connector type of this port." + ::= { swDeviceInfo 4 } + + swDevInfoHwRev OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..12)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "A textual description of the hardware revision of + this switch bub." + ::= { swDeviceInfo 5 } + + swDevInfoSystemUpTime OBJECT-TYPE + SYNTAX TimeTicks + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The value of sysUpTime at the time the switch + entered its current operational state. If the + current state was entered prior to the last re- + initialization, then this object contains a zero + value." + ::= { swDeviceInfo 6 } + + swDevInfoFrontPanelLedStatus OBJECT-TYPE + SYNTAX OCTET STRING (SIZE (0..127)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The current status of front panel LED." + ::= { swDeviceInfo 7 } + + -- swDevInfoMdiSwitch OBJECT-TYPE + -- SYNTAX INTEGER { + -- other(1), + -- mdi(2), + -- mdi-x(3) + -- } + -- ACCESS read-only + -- STATUS mandatory + -- DESCRIPTION + -- "The current setting of the MDI switch." + -- ::= { swDeviceInfo 9 } + + swDevInfoDramSize OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The DRAM size of the switch hub" + ::= { swDeviceInfo 8 } + + swDevInfoGroupTypeTable OBJECT-TYPE + SYNTAX SEQUENCE OF SwDevInfoGroupTypeEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of MIB capability entries supported by this agent." + ::= { swDeviceInfo 9 } + + swDevInfoGroupTypeEntry OBJECT-TYPE + SYNTAX SwDevInfoGroupTypeEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A MIB capability entry contains objects describing a particular MIB + supported by this agent." + INDEX { swDevInfoGroupIndex } + ::= { swDevInfoGroupTypeTable 1 } + + SwDevInfoGroupTypeEntry ::= SEQUENCE { + swDevInfoGroupIndex + INTEGER, + swDevInfoGroupMediaType + INTEGER + } + + swDevInfoGroupIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + ::= { swDevInfoGroupTypeEntry 1 } + + swDevInfoGroupMediaType OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + ::= { swDevInfoGroupTypeEntry 2 } + + + + + swDeviceCtl OBJECT IDENTIFIER ::= { swDevicePackage 2 } + + swDevCtrlDisableLearningState OBJECT-TYPE + SYNTAX INTEGER { + other(1), + disabled(2), + enabled(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "This Object indicate the switch hub wether or not learn any + new addresses from the Ethernet ports." + ::= { swDeviceCtl 1 } + + swDevCtrlReset OBJECT-TYPE + SYNTAX INTEGER { + other(1), + reset(2), + no-reset(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "This object indicates the switch hub reset state. + Setting this object to no-reset(3) has no effect. + Setting this object to reset(2) will reset the agent. + The agent always returns no-reset(3) when this object is read." + ::= { swDeviceCtl 2 } + + swPortInfoTable OBJECT-TYPE + SYNTAX SEQUENCE OF SwPortInfoEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of port information entries." + ::= { swPortPackage 1 } + + swPortInfoEntry OBJECT-TYPE + SYNTAX SwPortInfoEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "This entry contains the port information, like porttype, + linkstatus..." + INDEX { swPortInfoGroupIndex,swPortInfoIndex } + ::= { swPortInfoTable 1 } + + SwPortInfoEntry ::= SEQUENCE { + swPortInfoGroupIndex + INTEGER, + swPortInfoIndex + INTEGER, + swPortInfoType + INTEGER, + swPortInfoPartitionStatus + INTEGER, + swPortInfoLinkStatus + INTEGER, + swPortInfoDuplexMode + INTEGER, + swPortInfoNegotiationStatus + INTEGER, + swPortInfoSpeedStatus + INTEGER + } + + swPortInfoGroupIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This object identifies the port within the group for + which this entry contains infomation." + ::= { swPortInfoEntry 1 } + + swPortInfoIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This object indicate switch hub port number." + ::= { swPortInfoEntry 2 } + + swPortInfoType OBJECT-TYPE + SYNTAX INTEGER { + other(1), + portType-UTP(2), + portType-AUI(3), + portType-Fiber(4), + portType-BNC(5), + portType-Option-module-RAS(6), + portType-Option-module-100Bridge(7) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The connector type of this port." + ::= { swPortInfoEntry 3 } + + swPortInfoPartitionStatus OBJECT-TYPE + SYNTAX INTEGER { + other(1), + no-partion(2), + partion(3) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This Object indicate the port partition status." + ::= { swPortInfoEntry 4 } + + swPortInfoLinkStatus OBJECT-TYPE + SYNTAX INTEGER { + other(1), + link-pass(2), + link-fail(3) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This Object indicate the port link test status." + ::= { swPortInfoEntry 5 } + + swPortInfoDuplexMode OBJECT-TYPE + SYNTAX INTEGER { + other(1), + half(2), + full(3) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This Object indicate the port work in which duplex mode." + ::= { swPortInfoEntry 6 } + + swPortInfoNegotiationStatus OBJECT-TYPE + SYNTAX INTEGER { + other(1), + disabled(2), + enabled(3) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This Object indicate the port work in auto negotiation + enabled or disabled." + ::= { swPortInfoEntry 7 } + + swPortInfoSpeedStatus OBJECT-TYPE + SYNTAX INTEGER { + other(1), + speed-10M(2), + speed-100M(3) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This Object indicate the port trasmit rate is in 10M bps + or 100M bps ." + ::= { swPortInfoEntry 8 } + + swPortCtrlTable OBJECT-TYPE + SYNTAX SEQUENCE OF SwPortCtrlEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of port state control entries." + ::= { swPortPackage 2 } + + swPortCtrlEntry OBJECT-TYPE + SYNTAX SwPortCtrlEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "This entry control the port state, like filter broadcast, + linkstatus..." + INDEX { swPortCtrlGroupIndex,swPortCtrlIndex } + ::= { swPortCtrlTable 1 } + + SwPortCtrlEntry ::= SEQUENCE { + swPortCtrlGroupIndex + INTEGER, + swPortCtrlIndex + INTEGER, + swPortCtrlAdminState + INTEGER, + swPortCtrlDuplexState + INTEGER, + swPortCtrlLinkStatusAlarmState + INTEGER, + swPortCtrlFilterBcastState + INTEGER, + swPortCtrlForwardUnknowState + INTEGER, + swPortCtrlPartitionStatus + INTEGER, + swPortCtrlNegotiationStatus + INTEGER, + swPortCtrlSpeedStatus + INTEGER + } + + swPortCtrlGroupIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This object identifies the port within the group for + which this entry contains infomation." + ::= { swPortCtrlEntry 1 } + + swPortCtrlIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This object indicate switch hub port number." + ::= { swPortCtrlEntry 2 } + + swPortCtrlAdminState OBJECT-TYPE + SYNTAX INTEGER { + other(1), + disabled(2), + enabled(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Port control administration state." + ::= { swPortCtrlEntry 3 } + + swPortCtrlDuplexState OBJECT-TYPE + SYNTAX INTEGER { + other(1), + half(2), + full(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Indicating the port work in half/full duplex mode." + ::= { swPortCtrlEntry 4 } + + swPortCtrlLinkStatusAlarmState OBJECT-TYPE + SYNTAX INTEGER { + other(1), + disabled(2), + enabled(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Depending on this object to determine wether send a trap or + not when link status change ." + ::= { swPortCtrlEntry 5 } + + swPortCtrlFilterBcastState OBJECT-TYPE + SYNTAX INTEGER { + other(1), + forward(2), + discard(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Port control filter broadcast to all port or discard." + ::= { swPortCtrlEntry 6 } + + swPortCtrlForwardUnknowState OBJECT-TYPE + SYNTAX INTEGER { + other(1), + disabled(2), + enabled(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Port control forward unknow packet state." + ::= { swPortCtrlEntry 7 } + + swPortCtrlPartitionStatus OBJECT-TYPE + SYNTAX INTEGER { + other(1), + disabled(2), + enabled(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Depending on this object determine to send a trap or not when + the port was partition." + ::= { swPortCtrlEntry 8 } + + swPortCtrlNegotiationStatus OBJECT-TYPE + SYNTAX INTEGER { + other(1), + disabled(2), + enabled(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Depending on this object determine to enable NWAY or disable." + ::= { swPortCtrlEntry 9 } + + swPortCtrlSpeedStatus OBJECT-TYPE + SYNTAX INTEGER { + other(1), + speed-10M(2), + speed-100M(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Depending on this object to determining this port transmit + rate is 10M bps or 100M bps." + ::= { swPortCtrlEntry 10} + + swPortCounterTable OBJECT-TYPE + SYNTAX SEQUENCE OF SwPortCounterEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of port MIB statistic Counter entries." + ::= { swPortPackage 3 } + + swPortCounterEntry OBJECT-TYPE + SYNTAX SwPortCounterEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "This entry include all the port Counter which support by + DES3216, like Bytes received, Bytes Sent ..." + INDEX { swPortCounterGroupIndex,swPortCounterIndex } + ::= { swPortCounterTable 1 } + + SwPortCounterEntry ::= SEQUENCE { + swPortCounterGroupIndex + INTEGER, + swPortCounterIndex + INTEGER, + swPortBytesReceived + Counter, + swPortBytesSent + Counter, + swPortFramesReceived + Counter, + swPortFramesSent + Counter, + swPortTotalBytesReceived + Counter, + swPortTotalFramesReceived + Counter, + swPortBroadcastFramesReceived + Counter, + swPortMulticastFramesReceived + Counter, + swPortCRCError + Counter, + swPortOversizeFrames + Counter, + swPortFragments + Counter, + swPortJabber + Counter, + swPortCollision + Counter, + swPortLateCollision + Counter, + swPortFrames64Bytes + Counter, + swPortFrames65To127Bytes + Counter, + swPortFrames128To255Bytes + Counter, + swPortFrames256To511Bytes + Counter, + swPortFrames512To1023Bytes + Counter, + swPortFrames1024To1522Bytes + Counter, + swPortMACRxError + Counter + } + + swPortCounterGroupIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This object identifies the port within the group for + which this entry contains infomation." + ::= { swPortCounterEntry 1 } + + swPortCounterIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "This object indicate switch hub port number." + ::= { swPortCounterEntry 2 } + + swPortBytesReceived OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good bytes received. Local and dropped packets + increment the counter as well." + ::= { swPortCounterEntry 3 } + + swPortBytesSent OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good bytes sent." + ::= { swPortCounterEntry 4 } + + swPortFramesReceived OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good frames received. Local and dropped packets + increment the counter as well." + ::= { swPortCounterEntry 5 } + + swPortFramesSent OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good frames sent." + ::= { swPortCounterEntry 6 } + + swPortTotalBytesReceived OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of bytes received(good and bad)." + ::= { swPortCounterEntry 7 } + + swPortTotalFramesReceived OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of frames bytes received(good and bad)." + ::= { swPortCounterEntry 8 } + + swPortBroadcastFramesReceived OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good broadcast frames received. Local and dropped + packets increment the counter as well." + ::= { swPortCounterEntry 9 } + + swPortMulticastFramesReceived OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good multicast frames received. Local and dropped + packets increment the counter as well." + ::= { swPortCounterEntry 10 } + + swPortCRCError OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of frames with valid packet length and CRC error or + misaligned(odd number of nibbles) + increment the counter as well." + ::= { swPortCounterEntry 11 } + + swPortOversizeFrames OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good frames with length more than 1518 bytes ( + or 1522 bytes for LongEn = 1)." + ::= { swPortCounterEntry 12 } + + swPortFragments OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good bytes received. Local and dropped packets + increment the counter as well." + ::= { swPortCounterEntry 13 } + + swPortJabber OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of frames with length more than 1518 bytes and with + CRC error or misaligned." + ::= { swPortCounterEntry 14 } + + swPortCollision OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of Collisions" + ::= { swPortCounterEntry 15 } + + swPortLateCollision OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of Late Collision(collision occurring later than + 576th transmitted bit" + ::= { swPortCounterEntry 16 } + + swPortFrames64Bytes OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good packets with length of 64 bytes " + ::= { swPortCounterEntry 17 } + + swPortFrames65To127Bytes OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good packets with length between 65 to 127 bytes " + ::= { swPortCounterEntry 18 } + + swPortFrames128To255Bytes OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good packets with length between 128 to 255 bytes " + ::= { swPortCounterEntry 19 } + + swPortFrames256To511Bytes OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good packets with length between 256 to 511 bytes " + ::= { swPortCounterEntry 20 } + + swPortFrames512To1023Bytes OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good packets with length between 512 to 1023 bytes " + ::= { swPortCounterEntry 21 } + + swPortFrames1024To1522Bytes OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of good packets with length between 1024 to 1522 bytes " + ::= { swPortCounterEntry 22 } + + swPortMACRxError OBJECT-TYPE + SYNTAX Counter + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The number of frames with RX MAC Error " + ::= { swPortCounterEntry 23 } + + -- swPortDroppedFrames OBJECT-TYPE + -- SYNTAX Counter + -- ACCESS read-only + -- STATUS mandatory + -- DESCRIPTION + -- "The number of dropped frames.Dropped packets are those which a + -- receive buffer could not be allocated." + -- ::= { swPortCounterEntry 24 } + + + + -- link up/down Trap + + linkChangeEvent TRAP-TYPE + ENTERPRISE dlink + VARIABLES { + swPortInfoIndex, + swPortInfoType, + swPortInfoPartitionStatus, + swPortInfoLinkStatus, + swPortInfoDuplexMode + } + DESCRIPTION + "The trap is sent whenever the link state of a port changes + from link up to link down or from link down to link up" + ::= 1 + + + portPartition TRAP-TYPE + ENTERPRISE dlink + VARIABLES { + swPortInfoIndex, + swPortInfoType, + swPortInfoPartitionStatus, + swPortInfoLinkStatus, + swPortInfoDuplexMode + } + DESCRIPTION + "The trap is sent whenever the port state enter the Partion + mode when more than 32 collisions occur while trasmitting." + ::= 2 + + END + \ No newline at end of file diff --git a/archive/archives/snmp/iog-crans b/archive/archives/snmp/iog-crans new file mode 100755 index 00000000..acf37a8a --- /dev/null +++ b/archive/archives/snmp/iog-crans @@ -0,0 +1,804 @@ +#!/usr/bin/perl +# +# IOG v1.0 - Input/Output Grapher +# Copyright (c) 2000-2002 James Dogopoulos +# +# Please read the "Artistic" license included. +# +# E-mail iog@dynw.com with any bug reports, +# fixes or comments. +# + +BEGIN{ +if ($ARGV[0] eq "NT") { $main::OS = 'NT'; } else { $main::OS = 'UNIX'; } + +$main::SL = { UNIX=>'/', NT=>'\\' }->{$main::OS}; +$main::PS = { UNIX=>':', NT=>';' }->{$main::OS}; + +$main::binpath =""; + if ($0 =~ /^(.+\Q${main::SL}\E)/) { $main::binpath="$1"; + } + else { + foreach $pathname ( split ${main::PS}, $ENV{'PATH'}) { + if ((($main::OS eq 'NT') && (-e "$pathname${main::SL}$0")) || + (-x "$pathname${main::SL}$0")) { + $main::binpath=$pathname; + last; + } + } + } +unshift (@INC,$main::binpath); +} + +use SDBM_File; +use BER; +use SNMP_Session; +use Fcntl; + +my($inoid,$outoid,$host,$community,$snmpget,$datafile,$cfgfile,%inf); +my($inoctets,$outoctets,$path,$iogver,$hostreset,$kbsize,$mbsize,$gbsize); + +$cfgfile="/etc/iog.cfg"; +$iogver="v1.0"; + +# Default Byte Sizes + +$kbsize="1024"; +$mbsize="1048576"; +$gbsize="1073"; + +# Date/Time stuff +# + +my @weekdays = qw(Sunday Monday Tuesday Wednesday Thursday Friday Saturday); + +my @months = qw(January February March April May June July August September +October November December); + +my %days = (1 => "1st", 2 => "2nd", 3 => "3rd", 21 => "21st", 22 => "22nd", +23 => "23rd", 31 => "31st"); + +my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); +$lday = $mday - 1; + +sub last_mday { +my ($month, $year) = @_; +( qw(31 0 31 30 31 30 31 31 30 31 30 31) )[$month] || +28 + (($year % 100 && !($year % 4))|| !($year % 400)); +} + +if ($days{$mday}) { $pday = $days{$mday}; $nday = $days{$lday}; } +else { $pday = $mday."th"; $nday = $lday."th"; } + +# Read config file. +# + +open(CONFIG,$cfgfile) || die("Cannot open $cfgfile!"); + + while () { + s/\s+$//g; # remove whitespace at the end of the line + s/\s/ /g; # replace whitespace by space + next if /^\s*\#/; # ignore comment lines + next if /^\s*$/; # ignore empty lines + if ($_ =~ /\[.*.\]/) { chkuptime($_); next; } + my($name,$host,$community,$inoid,$outoid,$path) = split(/:/, $_); + $path =~ s/\n//; + $datafile = "$name".".dat"; + my @results = snmpget2($host,$community,$inoid,$outoid); + next if ($results[0] eq "error"); + $inoctets = $results[0]; + $outoctets = $results[1]; + main($name,$host,$community,$inoid,$outoid,$path,$datafile); + } + +close(CONFIG); + + +# SNMP Get routine. Thanks to Simon Leinen for the SNMP module. +# http://www.switch.ch/misc/leinen/snmp/perl/ +# + +sub snmpget { + my($host, $community, $inoid, $outoid) = @_; + my($response, $bindings, $binding, $value, $oid, $session, @results); + + my %oidnames = qw(ifInOctets 1.3.6.1.2.1.2.2.1.10 + ifOutOctets 1.3.6.1.2.1.2.2.1.16 + ifHCInOctets 1.3.6.1.2.1.31.1.1.1.6 + ifHCOutOctets 1.3.6.1.2.1.31.1.1.1.10); + + my ($inoidname,$inoidport) = split(/\./, $inoid); + my ($outoidname,$outoidport) = split(/\./, $outoid); + + $inoid = encode_oid(split(/\./, ($oidnames{$inoidname} . ".$inoidport"))); + $outoid = encode_oid(split(/\./, ($oidnames{$outoidname} . ".$outoidport"))); + + my @oids = ($inoid,$outoid); + + if ($inoidname =~ /HC/i or $outoidname =~ /HC/i) { + $session = SNMPv2c_Session->open($host, $community, 161) or return "error"; + } else { + $session = SNMP_Session->open($host, $community, 161) or return "error"; + }; + + if ($session->get_request_response (@oids)) { + $response = $session->pdu_buffer; + ($bindings) = $session->decode_get_response ($response); + + while ($bindings ne '') { + ($binding,$bindings) = decode_sequence ($bindings); + ($oid,$value) = decode_by_template ($binding, "%O%@"); + push (@results, pretty_print($value)); + } + return @results; + } else { warn "SNMP Error: $SNMP_Session::errmsg\n"; + return "error"; } +} + +sub snmpgetup { + my($host, $community, $inoid) = @_; + my($response, $bindings, $binding, $value, $oid, $result); + + my %oidnames = qw(sysUpTime 1.3.6.1.2.1.1.3 + sysUpTime.0 1.3.6.1.2.1.1.3.0); + + $inoid = encode_oid(split(/\./, $oidnames{$inoid})); + + my $session = SNMP_Session->open($host, $community, 161) or return "0"; + + if ($session->get_request_response ($inoid)) { + $response = $session->pdu_buffer; + ($bindings) = $session->decode_get_response ($response); + + while ($bindings ne '') { + ($binding,$bindings) = decode_sequence ($bindings); + ($oid,$value) = decode_by_template ($binding, "%O%@"); + $result = pretty_print($value); + } + return $result; + } else { warn "SNMP Error: $SNMP_Session::errmsg\n"; + return 0; } + +} + + +##################################################################################### +# Section personnalisée pour faire du SNMP en TCP. +# NS 22/02/03 +##################################################################################### +sub snmpget2 { + my($host, $community, $inoid, $outoid) = @_; + + open IN, "snmpget -T TCP $host $community interfaces.ifTable.ifEntry.$inoid |"; + my $inresult = ; + chomp($inresult); + close(IN); + + open OUT, "snmpget -T TCP $host $community interfaces.ifTable.ifEntry.$outoid |"; + my $outresult = ; + chomp($outresult); + close(OUT); + + my @intable = split(/ /,$inresult ); + my @outtable = split(/ /,$outresult ); + + my @results = ($intable[-1],$outtable[-1]); + + return @results; +} + +sub snmpgetup2 { + my($host, $community, $upoid) = @_; + + open UP, "snmpget -T TCP $host $community $upoid |"; + my $uptimeresult = ; + chomp($uptimeresult); + close(UP); + + $uptimeresult =~ s/^.*\) //; + $uptimeresult =~ s/...$//; + + return $uptimeresult; +} +#################################################################################### + + +sub chkuptime { + + $_ =~ s/\[|\]//g; + my($uphost,$upip,$upcommunity,$upoid,$upfile) = split (/:/, $_); + my $upresult = snmpgetup2($upip,$upcommunity,$upoid); + + tie(%inf, 'SDBM_File', ($upfile."$main::SL"."uptimes"), O_RDWR|O_CREAT, 0640) + or print "WARNING: Error opening uptime database file!\n"; + + if ($upresult < $inf{$uphost} && $upresult > "1") { $hostreset = "1"; } + else { $hostreset = "0"; } + + if ($upresult > "1") { $inf{$uphost} = $upresult; } + + untie(%inf); + +} + +sub main { +my($name,$host,$community,$inoid,$outoid,$path,$datafile) = @_; + +tie(%inf, 'SDBM_File', ($path."$main::SL".$datafile), O_RDWR|O_CREAT, 0640) or +print "Error opening database file for $name at $host\n"; + + if (-s (($path."$main::SL".$datafile) . ".pag")) { + + if ($inf{day} != $mday && $hour > "0") { newday(); + dailyhtml($name,$host,$path); } + + if ($inf{month} != $mon) { + $newmon = "1"; + newday(); + dailyhtml($name,$host,$path); + newmonth($name,$path); + monthlyhtml($name,$host,$path); + } + + if ($inf{year} != ($year + "1900")) { newyear($name,$path); } + + if (!$newmon) { updatedata(); } + + if ($inf{day} != $mday) { $newday = "1"; } else { $newday = "0"; } + + hourlyhtml($name,$host,$path,$newday); + + } else { createdata(); hourlyhtml($name,$host,$path); } + +untie(%inf); +} + +# create data file if ! exist +# + +sub createdata { +%inf = (lastin => $inoctets, lastout => $outoctets, + month => $mon, day => $mday, year => ($year + "1900")); +} + +# +# + +sub newyear { + +my($name,$path) = @_; +my($count); + +$count = 0; + + while ($count <= "11") { + delete $inf{"m" . $count}; + $count++; + } + + # move yearly html file. + + $oldfile="$path"."$main::SL"."$name"."-months".".html"; + $newfile="$path"."$main::SL"."$name"."-year".($year).".html"; + + if ($main::OS eq "NT") { system("move /Y $oldfile $newfile"); } + else { system("mv $oldfile $newfile"); } + +$inf{year} = ($year + "1900"); +} + +# +# + +sub newmonth { + +my($name,$path) = @_; +my($count,$intotal,$outtotal,$inoct,$outoct); + + # get MB total for the month and store it. + + $count = 1; + while ($count <= "31") { + if ($inf{"d" . $count}) { + ($inoct,$outoct) = split(/:/, $inf{"d" . $count}); + $intotal += $inoct; + $outtotal += $outoct; + } + $count++; + } + +$intotal = ($intotal / $mbsize); +$outtotal = ($outtotal / $mbsize); + +$inf{"m" . $inf{month}} = "$intotal:$outtotal"; + + # clear days + + $count = 1; + while ($count <= "31") { + delete $inf{"d" . $count}; + $count++; + } + + # move monthly html file. + + $oldfile="$path"."$main::SL"."$name"."-days".".html"; + $newfile="$path"."$main::SL"."$name"."-month".($mon).".html"; + + if ($main::OS eq "NT") { system("move /Y $oldfile $newfile"); } + else { system("mv $oldfile $newfile"); } + +# set $inf{month} to the new month. +$inf{month} = $mon; +} + + +# newday: +# run every time the day of the month changes on the system. +# + +sub newday { + +my($count,$nmday,$intotal,$outtotal,$inoct,$outoct); + + # get megabyte total for the day and store it. + # + + $count = 0; + while ($count <= "23") { + if ($inf{$count}) { + ($inoct,$outoct) = split(/:/, $inf{$count}); + $intotal += $inoct; + $outtotal += $outoct; + } + $count++; + } + +if ($newmon) { $nmday = last_mday($inf{month}, $inf{year}); } +else { $nmday = ($mday - 1); } + +$inf{"d" . $nmday} = "$intotal:$outtotal:" . ($intotal + $outtotal); + + # clear hours + # + + $count = 0; + while ($count <= "23") { + delete $inf{$count}; + $count++; + } + +$inf{day} = $mday; +} + + +# update DBM file. +# + +sub updatedata { +my ($lasthour,$wrapin,$wrapout); +my $intwrap="4294967296"; + + if ($hour eq "0") { $lasthour = "23"; } else { $lasthour = ($hour - "1"); } + + if ($hostreset == "1") { $inf{lastin} = $inf{lastout} = "0"; } + + # detect if a counter has wrapped and adjust. + # + if ($inoctets < $inf{lastin}) { + $wrapin = $inoctets; + $inoctets = ($intwrap - $inf{lastin}) + $inoctets; + $inf{lastin} = "0"; + } + + if ($outoctets < $inf{lastout}) { + $wrapout = $outoctets; + $outoctets = ($intwrap - $inf{lastout}) + $outoctets; + $inf{lastout} = "0"; + } + +$inf{$lasthour} = (($inoctets - $inf{lastin}).":".($outoctets - $inf{lastout})); +if ($wrapin) { $inf{lastin} = $wrapin } else { $inf{lastin} = $inoctets } +if ($wrapout) { $inf{lastout} = $wrapout } else { $inf{lastout} = $outoctets } +} + +sub footer { +print DHTML "


+ +
IOG $iogver - Input Output Grapher
+-
James Dogopoulos <jd\@dynw.com>
+Questions or comments to iog\@dynw.com +

"; +} + +# make the hourly html +# + +sub hourlyhtml { + +my($name,$host,$path,$newday) = @_; + +# make todays graph +# + +my $enddays = last_mday($mon, ($year + "1900")); + +my $count = "0"; +my ($besthour,$bestday,$inoct,$outoct) = "0"; + + # find busiest hour + # + while ($count <= "23") { + if ($inf{$count}) { ($inoct,$outoct) = split(/:/, $inf{$count}); } + else { $inoct = $outoct = "0"; } + if ($inoct > $besthour) { $besthour = $inoct; } + if ($outoct > $besthour) { $besthour = $outoct; } + $count++; + } + +my $hscalemax = ($besthour / "1000000"); +my ($hscaleunit,$intotal,$outtotal) = 0; + +if ($hscalemax > "0") { $hscaleunit = ("450" / $hscalemax); } + + open(DHTML, ">>$path".$main::SL."$name".".html") or print "can't open in $name $host $!"; + flock(DHTML, 2) or print "can't flock $name $host: $!"; + truncate(DHTML, 0); + + print DHTML "IOG $iogver - $host + +
"; + + my $dexist = (-f "$path".$main::SL."$name"."-days.html"); + my $mexist = (-f "$path".$main::SL."$name"."-months.html"); + + if ($newday != "1") { + if ($dexist && $mexist) { + print DHTML " [ Today | This Month + | Previous Months ]

"; + } else { + if ($dexist && !$mexist) { + print DHTML " [ Today | This + Month | Previous Months ]

"; + } else { + if (!$dexist && $mexist) { + print DHTML " [ Today | This Month + | Previous Months ]

"; + } else { print DHTML "[ Today | This Month | Previous Months ]"; } + } + } + } + else { + if ($dexist && $mexist) { + print DHTML " [ This Month + | Previous Months ]

"; + } else { + if ($dexist && !$mexist) { + print DHTML " [ This + Month | Previous Months ]

"; + } else { + if (!$dexist && $mexist) { + print DHTML " [ This Month + | Previous Months ]

"; + } + } + } + + } + + if ($newday eq "1") { $tday = "$nday"; } else { $tday = "$pday"; } + + print DHTML "

$months[$mon] $tday - Network I/O for $name ($host)

"; + print DHTML ""; + + $count = "0"; + + while ($count <= "23") { + my($inwidth,$outwidth); + + if ($inf{$count}) { + ($inoct,$outoct) = split(/:/, $inf{$count}); + $intotal += $inoct; + $outtotal += $outoct; + $inwidth = ($inoct / "1000000" * $hscaleunit); + $outwidth = ($outoct / "1000000" * $hscaleunit); + } else { $count++; next; } + + # if day is over 1gb, switch to GB/MB display. + # + my($gstring,$gbin,$gbout,$mbin,$mbout); + + $mbin = sprintf("%.1f", $inoct / $mbsize); + $mbout = sprintf("%.1f", $outoct / $mbsize); + + if ($mbin > $gbsize or $mbout > $gbsize) { + $gbin = sprintf("%.1f", $mbin / $gbsize); + $gbout = sprintf("%.1f", $mbout / $gbsize); + + $gstring = ""; + } + else { + $gstring = "\n"; + + print DHTML $gstring; + + $count++; + } + +$intotal = sprintf("%.f", ($intotal / $mbsize)); +$outtotal = sprintf("%.f", ($outtotal / $mbsize)); + +print DHTML "
In: $gbin GB + ($mbin MB)
Out: $gbout GB ($mbout MB) +
In: $mbin MB (". + sprintf("%.f", $inoct / $kbsize)." KB)
Out: $mbout + MB (".sprintf("%.f", $outoct / $kbsize)." KB)"; + } + + $inwidth = (sprintf("%.f", $inwidth) + 1); + $outwidth = (sprintf("%.f", $outwidth) + 1); + + print DHTML "
"."$count".":00
\n"; + print DHTML "

"; + + if ($intotal > $gbsize or $outtotal > $gbsize) { + my $gbtotal = sprintf("%.1f", ($intotal + $outtotal) / $gbsize); + print DHTML "Today's Total: $gbtotal GB
+In: $intotal MB - Out: + $outtotal MB
"; + } + else { + print DHTML "Today's Total: ".($intotal + $outtotal)." MB
+In: $intotal MB - Out: + $outtotal MB
"; + } + +footer(); + +flock(DHTML, 8); +close(DHTML); +} + +sub monthlyhtml { + +my ($name,$host,$path) = @_; +my ($bestmonth,$m_intotal,$m_outtotal,$m_total); +my $count = 0; + + # find busiest month + + while ($count <= "11") { + if ($inf{"m" . $count}) { + ($m_intotal,$m_outtotal) = split(/:/, $inf{"m" . $count}); + if ($m_intotal > $bestmonth) { $bestmonth = $m_intotal; } + if ($m_outtotal > $bestmonth) { $bestmonth = $m_outtotal; } + } + $count++; + } + +my $mscalemax = $bestmonth; +my ($mscaleunit,$intotal,$outtotal) = 0; + +if ($mscalemax > "0") { $mscaleunit = ("450" / $mscalemax); } + +open(DHTML, ">>$path".$main::SL."$name"."-months.html") or print "can't open $name $host $!"; +flock(DHTML, 2) or print "can't flock $name $host : $!"; +truncate(DHTML, 0); + +print DHTML "IOG $iogver - $host +
"; + +my $dexist = (-f "$path".$main::SL."$name"."-days.html"); + +if ($dexist) { +print DHTML "[ Today | +This Month | Previous Months ]

"; +} else { +print DHTML "[ Today | +This Month | Previous Months ]

"; +} + +print DHTML "

Monthly Network I/O for $name ($host)

"; +print DHTML ""; + + $count = "0"; + + while ($count <= "11") { + my($inwidth,$outwidth,$intotal,$outtotal,$inoct,$outoct,$mtotal); + + if ($inf{"m" . $count}) { + ($inoct,$outoct,$mtotal) = split(/:/, $inf{"m" . $count}); + $intotal += $inoct; + $outtotal += $outoct; + $inwidth = ($inoct * $mscaleunit); + $outwidth = ($outoct * $mscaleunit); + } else { $count++; next; } + + # if day is over 1gb, switch to GB/MB display. + # + my($gstring,$gbin,$gbout,$gbtotal,$mbin,$mbout); + + $mbin = sprintf("%.f", $inoct); + $mbout = sprintf("%.f", $outoct); + + $gbin = sprintf("%.1f", $mbin / $gbsize); + $gbout = sprintf("%.1f", $mbout / $gbsize); + $gbtotal = sprintf("%.1f", ($gbin + $gbout)); + + $gstring = ""; + + $inwidth = (sprintf("%.f", $inwidth) + 1); + $outwidth = (sprintf("%.f", $outwidth) + 1); + + if (-f "$path".$main::SL."$name"."-month".($count + "1").".html") { + $mlink = "$months[$count]"; + } else { $mlink = "$months[$count]"; } + + print DHTML "\n"; + + print DHTML $gstring; + + $count++ + } + +print DHTML "
In: $gbin GB + ($mbin MB)
Out: $gbout GB ($mbout MB) +
$mlink
$gbtotal GB
+
\n"; + print DHTML "

"; + +footer(); + +flock(DHTML, 8); +close(DHTML); +} + +sub dailyhtml { + +my ($bestday,$d_intotal,$d_outtotal) = 0; +my ($name,$host,$path) = @_; +my $count = 1; +my $endday = last_mday($inf{month}, $inf{year}); + + if ($endday eq $mday) { $lastday="1"; } else { $lastday="0"; } + + # fix math errors from previous sub + if ($newmon) { $mon--; } + + # move Today's html file unless it's a new month. + + if (!$newmon) { + $oldfile="$path"."$main::SL"."$name".".html"; + $newfile="$path"."$main::SL"."$name"."-day".($mday - "1").".html"; + if ($main::OS eq "NT") { system("move /Y $oldfile $newfile"); } + else { system("mv $oldfile $newfile"); } + } + + # find busiest day (should be merged with totals) + + while ($count <= $endday) { + if ($inf{"d" . $count}) { + ($d_intotal,$d_outtotal) = split(/:/, $inf{"d" . $count}); + if ($d_intotal > $bestday) { $bestday = $d_intotal; } + if ($d_outtotal > $bestday) { $bestday = $d_outtotal; } + } + $count++; + } + +my $dscalemax = ($bestday / "1000000"); +my ($dscaleunit,$intotal,$outtotal) = 0; + +if ($dscalemax > "0") { $dscaleunit = ("450" / $dscalemax); } + +open(DHTML, ">>$path".$main::SL."$name"."-days.html") or print "can't open $name $host $!"; +flock(DHTML, 2) or print "can't flock $name $host : $!"; +truncate(DHTML, 0); + +print DHTML "IOG $iogver - $host +
"; + + if (-f "$path".$main::SL."$name"."-months.html") { + print DHTML "[ Today | + This Month | Previous Months ]

"; + } else { + print DHTML "[ Today | This Month + | Previous Months ]

"; + } + +print DHTML "

$months[$mon] - Network I/O for $name ($host)

"; +print DHTML ""; + + $count = "1"; + + while ($count <= $endday) { + my($inwidth,$outwidth,$inoct,$outoct,$pday); + + if ($inf{"d" . $count}) { + ($inoct,$outoct) = split(/:/, $inf{"d" . $count}); + $intotal += $inoct; + $outtotal += $outoct; + $inwidth = ($inoct / "1000000" * $dscaleunit); + $outwidth = ($outoct / "1000000" * $dscaleunit); + } else { $count++; next; } + + # if day is over 1gb, switch to GB/MB display. + # + my($gstring,$gbin,$gbout,$mbin,$mbout); + + $mbin = sprintf("%.f", $inoct / $mbsize); + $mbout = sprintf("%.f", $outoct / $mbsize); + + if ($mbin > $gbsize or $mbout > $gbsize) { + $gbin = sprintf("%.1f", $mbin / $gbsize); + $gbout = sprintf("%.1f", $mbout / $gbsize); + + $gstring = ""; + } + else { + $gstring = "\n"; + print DHTML $gstring; + + $count++; + } + +$intotal = sprintf("%.f", ($intotal / $mbsize)); +$outtotal = sprintf("%.f", ($outtotal / $mbsize)); + +my $gbtotal = sprintf("%.1f", (($intotal + $outtotal) / $gbsize)); + +print DHTML "
In: $gbin GB + ($mbin MB)
Out: $gbout GB ($mbout MB) +
In: $mbin MB (". + sprintf("%.f", $inoct / $kbsize)." KB)
Out: $mbout + MB (".sprintf("%.f", $outoct / $kbsize)." KB)"; + } + + $inwidth = (sprintf("%.f", $inwidth) + 1); + $outwidth = (sprintf("%.f", $outwidth) + 1); + + if ($days{$count}) { $pday = $days{$count}; } else { $pday = $count."th"; } + + if (-f "$path".$main::SL."$name"."-day".$count.".html" && $lastday eq "0" + && ($newmon ne "1")) { + $pday = "$pday"; + } + + print DHTML "
$pday +
\n"; + print DHTML "

"; +print DHTML "Monthly Total: $gbtotal GB
+In: $intotal MB - Out: $outtotal MB
"; + +footer(); + +flock(DHTML, 8); +close(DHTML); + + # reverse math errors + if ($newmon) { $mon++; } + +} + + +# END + + + + + + + + + + + + + + + +# +# IOG v1.0 - Input/Output Grapher +# Copyright 2000-2002 (c) James Dogopoulos +# + + diff --git a/archive/archives/spamassassin-anti-block b/archive/archives/spamassassin-anti-block new file mode 100755 index 00000000..ca596c75 --- /dev/null +++ b/archive/archives/spamassassin-anti-block @@ -0,0 +1,11 @@ +#! /bin/sh + +MBOX=/var/tmp/mbox +TMP=$(mktemp) +spamc -t 60 < $MBOX > $TMP +if diff $TMP $MBOX > /dev/null; then + /etc/init.d/spamassassin restart + echo "Spam Assassin a été relancé." | mail roots@crans.org -s "Spam Assassin" +fi + +rm -f $TMP diff --git a/archive/archives/squid-vit-il b/archive/archives/squid-vit-il new file mode 100755 index 00000000..fee257af --- /dev/null +++ b/archive/archives/squid-vit-il @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# -*- Python -*- + +# teste si notre squid fonctionne encore (sortof). + +from socket import * +import sys + +OK = 0 + +host = "localhost" +if len(sys.argv) > 1: + host = sys.argv[1] + +s = socket(AF_INET,SOCK_STREAM) +try: + s.connect(host,3128) + s.send("GET squid-vit-il") + data = s.recv(4) + OK = ("HTTP" == data) + s.close() +except: + OK = 0 + +sys.exit(not OK) + diff --git a/archive/archives/supers/apt-get b/archive/archives/supers/apt-get new file mode 100755 index 00000000..377c38a3 --- /dev/null +++ b/archive/archives/supers/apt-get @@ -0,0 +1,19 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# juste etendre le path, et lancer le prog +# /supers n'est plus ds le path, +# donc 'exec prog' lance le vrai prog. + export PATH=/usr/local/sbin:/usr/sbin:/sbin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin + exec $prog ${1+"$@"} diff --git a/archive/archives/supers/apt-getinstall b/archive/archives/supers/apt-getinstall new file mode 100755 index 00000000..0ec0c9fd --- /dev/null +++ b/archive/archives/supers/apt-getinstall @@ -0,0 +1,13 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. +#Attention: pour lanceMake, il faut explicitement donné les options +# à make, sinon en passant "-f /home/bidule/Makefile", a super make, +# tout serait faisable en root.. +prog=`basename $0` +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} +PATH=/usr/sbin:/sbin:$PATH + +/usr/bin/apt-get install ${1+"$@"} diff --git a/archive/archives/supers/apt-getupgrade b/archive/archives/supers/apt-getupgrade new file mode 100755 index 00000000..452ef445 --- /dev/null +++ b/archive/archives/supers/apt-getupgrade @@ -0,0 +1,14 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. +#Attention: pour lanceMake, il faut explicitement donné les options +# à make, sinon en passant "-f /home/bidule/Makefile", a super make, +# tout serait faisable en root.. +prog=`basename $0` +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} +PATH=/usr/sbin:/sbin:$PATH + +/usr/bin/apt-get update +/usr/bin/apt-get dist-upgrade ${1+"$@"} diff --git a/archive/archives/supers/aptitude b/archive/archives/supers/aptitude new file mode 100755 index 00000000..377c38a3 --- /dev/null +++ b/archive/archives/supers/aptitude @@ -0,0 +1,19 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# juste etendre le path, et lancer le prog +# /supers n'est plus ds le path, +# donc 'exec prog' lance le vrai prog. + export PATH=/usr/local/sbin:/usr/sbin:/sbin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin + exec $prog ${1+"$@"} diff --git a/archive/archives/supers/chowncore b/archive/archives/supers/chowncore new file mode 100755 index 00000000..f9934407 --- /dev/null +++ b/archive/archives/supers/chowncore @@ -0,0 +1,20 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : + +coreF=$ORIG_HOME/debug/ +chown -R $ORIG_LOGNAME $coreF && echo "chown debug dir DONE." + + + diff --git a/archive/archives/supers/dpkg b/archive/archives/supers/dpkg new file mode 100755 index 00000000..377c38a3 --- /dev/null +++ b/archive/archives/supers/dpkg @@ -0,0 +1,19 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# juste etendre le path, et lancer le prog +# /supers n'est plus ds le path, +# donc 'exec prog' lance le vrai prog. + export PATH=/usr/local/sbin:/usr/sbin:/sbin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin + exec $prog ${1+"$@"} diff --git a/archive/archives/supers/etccommit b/archive/archives/supers/etccommit new file mode 100755 index 00000000..0be454c7 --- /dev/null +++ b/archive/archives/supers/etccommit @@ -0,0 +1,30 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. +prog=`basename $0` +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +USER=$ORIG_USER +USERNAME=$USER +LOGNAME=$ORIG_LOGNAME + +cur=$(pwd) +echo $cur +if test "X${cur//etc/TOTO}" = "X$cur" && test "X${cur//scripts/TOTO}" = "X$cur"; +then #il ya pas 'etc' ou 'scripts' ds le rep courant. + echo switching dir to /etc + cd /etc +fi + +#echo "logname : " $LOGNAME +echo "who am i :" `who am i` +# en fait j'ai l'impression que ttes les variables sont ignorées par cvs. +# qd on est root, il récupere le vrai user par "who am i", ie par le owner du TTY.. +/usr/bin/cvs -q -d /usr/cvs-rep commit ${1+"$@"} + diff --git a/archive/archives/supers/extendPath b/archive/archives/supers/extendPath new file mode 100755 index 00000000..377c38a3 --- /dev/null +++ b/archive/archives/supers/extendPath @@ -0,0 +1,19 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# juste etendre le path, et lancer le prog +# /supers n'est plus ds le path, +# donc 'exec prog' lance le vrai prog. + export PATH=/usr/local/sbin:/usr/sbin:/sbin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin + exec $prog ${1+"$@"} diff --git a/archive/archives/supers/hide/less b/archive/archives/supers/hide/less new file mode 100755 index 00000000..f3195cbc --- /dev/null +++ b/archive/archives/supers/hide/less @@ -0,0 +1,21 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : + +if test "X$UID" = "X0"; then + echo "uid=root. setting LESSSECURE=1. " + export LESSSECURE=1 + export LANG=fr_FR # c'est chiant less en locale=C .. + exec /usr/bin/less ${1+"$@"} +fi diff --git a/archive/archives/supers/id/apache-ssl b/archive/archives/supers/id/apache-ssl new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/apache-ssl @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/arp b/archive/archives/supers/id/arp new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/arp @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/arpd b/archive/archives/supers/id/arpd new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/arpd @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/arpwatch b/archive/archives/supers/id/arpwatch new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/arpwatch @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/bind b/archive/archives/supers/id/bind new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/bind @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/bootmisc.sh b/archive/archives/supers/id/bootmisc.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/bootmisc.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/checkfs.sh b/archive/archives/supers/id/checkfs.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/checkfs.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/checkroot.sh b/archive/archives/supers/id/checkroot.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/checkroot.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/console-screen.kbd.sh b/archive/archives/supers/id/console-screen.kbd.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/console-screen.kbd.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/console-screen.sh b/archive/archives/supers/id/console-screen.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/console-screen.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/cron b/archive/archives/supers/id/cron new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/cron @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/cucipop b/archive/archives/supers/id/cucipop new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/cucipop @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/devpts.sh b/archive/archives/supers/id/devpts.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/devpts.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/devpts.sh.dpkg-old b/archive/archives/supers/id/devpts.sh.dpkg-old new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/devpts.sh.dpkg-old @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/dhcp b/archive/archives/supers/id/dhcp new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/dhcp @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/dhcp.dpkg-dist b/archive/archives/supers/id/dhcp.dpkg-dist new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/dhcp.dpkg-dist @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/dns-clean b/archive/archives/supers/id/dns-clean new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/dns-clean @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/exim b/archive/archives/supers/id/exim new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/exim @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/firewall b/archive/archives/supers/id/firewall new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/firewall @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/gnu-pop3d b/archive/archives/supers/id/gnu-pop3d new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/gnu-pop3d @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/halt b/archive/archives/supers/id/halt new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/halt @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/hdSettings b/archive/archives/supers/id/hdSettings new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/hdSettings @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/hostname.sh b/archive/archives/supers/id/hostname.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/hostname.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/hwclock.sh b/archive/archives/supers/id/hwclock.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/hwclock.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/inetd b/archive/archives/supers/id/inetd new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/inetd @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/inn2 b/archive/archives/supers/id/inn2 new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/inn2 @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/isapnp b/archive/archives/supers/id/isapnp new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/isapnp @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/kerneld b/archive/archives/supers/id/kerneld new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/kerneld @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/keymaps-lct.sh b/archive/archives/supers/id/keymaps-lct.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/keymaps-lct.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/keymaps.sh b/archive/archives/supers/id/keymaps.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/keymaps.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/logoutd b/archive/archives/supers/id/logoutd new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/logoutd @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/lpd b/archive/archives/supers/id/lpd new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/lpd @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/makedev b/archive/archives/supers/id/makedev new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/makedev @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/modutils b/archive/archives/supers/id/modutils new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/modutils @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/mountall.sh b/archive/archives/supers/id/mountall.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/mountall.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/mountnfs.sh b/archive/archives/supers/id/mountnfs.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/mountnfs.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/netbase.old b/archive/archives/supers/id/netbase.old new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/netbase.old @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/network b/archive/archives/supers/id/network new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/network @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/network2 b/archive/archives/supers/id/network2 new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/network2 @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/networking b/archive/archives/supers/id/networking new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/networking @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/ntp b/archive/archives/supers/id/ntp new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/ntp @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/ntpdate b/archive/archives/supers/id/ntpdate new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/ntpdate @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/portmap b/archive/archives/supers/id/portmap new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/portmap @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/postfix b/archive/archives/supers/id/postfix new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/postfix @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/ppp b/archive/archives/supers/id/ppp new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/ppp @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/procps.sh b/archive/archives/supers/id/procps.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/procps.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/rc b/archive/archives/supers/id/rc new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/rc @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/rcS b/archive/archives/supers/id/rcS new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/rcS @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/reboot b/archive/archives/supers/id/reboot new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/reboot @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/rmnologin b/archive/archives/supers/id/rmnologin new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/rmnologin @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/samba b/archive/archives/supers/id/samba new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/samba @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/sendsigs b/archive/archives/supers/id/sendsigs new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/sendsigs @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/setserial b/archive/archives/supers/id/setserial new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/setserial @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/single b/archive/archives/supers/id/single new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/single @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/skeleton b/archive/archives/supers/id/skeleton new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/skeleton @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/socks b/archive/archives/supers/id/socks new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/socks @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/squid b/archive/archives/supers/id/squid new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/squid @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/ssh b/archive/archives/supers/id/ssh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/ssh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/ssh-nonfree b/archive/archives/supers/id/ssh-nonfree new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/ssh-nonfree @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/stunnel b/archive/archives/supers/id/stunnel new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/stunnel @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/sysklogd b/archive/archives/supers/id/sysklogd new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/sysklogd @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/syslog-ng b/archive/archives/supers/id/syslog-ng new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/syslog-ng @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/tc.sh b/archive/archives/supers/id/tc.sh new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/tc.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/umountfs b/archive/archives/supers/id/umountfs new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/umountfs @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/urandom b/archive/archives/supers/id/urandom new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/urandom @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/wu-ftpd b/archive/archives/supers/id/wu-ftpd new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/wu-ftpd @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/id/xinetd b/archive/archives/supers/id/xinetd new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/id/xinetd @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/intop b/archive/archives/supers/intop new file mode 100755 index 00000000..40efe6b9 --- /dev/null +++ b/archive/archives/supers/intop @@ -0,0 +1,18 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : + +rep=${ORIG_HOME-$HOME} +/usr/local/bin/intop ${1+"$@"} + diff --git a/archive/archives/supers/iptraf b/archive/archives/supers/iptraf new file mode 100755 index 00000000..e52864f2 --- /dev/null +++ b/archive/archives/supers/iptraf @@ -0,0 +1,19 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# ici c'est vide car "super $prog" va en fait éxécuter un autre script, celui ci étant juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + +test "X$UID" = "X0" && echo "uid=root -> on fait rien. lancez le prog directement, cf _where _." + diff --git a/archive/archives/supers/killntop b/archive/archives/supers/killntop new file mode 100755 index 00000000..fe2fa195 --- /dev/null +++ b/archive/archives/supers/killntop @@ -0,0 +1,16 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +killall ${1+"$@"} ntop + diff --git a/archive/archives/supers/lisJournal b/archive/archives/supers/lisJournal new file mode 100755 index 00000000..8e93f249 --- /dev/null +++ b/archive/archives/supers/lisJournal @@ -0,0 +1 @@ +mutt -f /home/admdiary/all-messages -F /home/admdiary/diary.muttrc diff --git a/archive/archives/supers/mklogin b/archive/archives/supers/mklogin new file mode 100755 index 00000000..41db15d0 --- /dev/null +++ b/archive/archives/supers/mklogin @@ -0,0 +1,16 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# juste etendre le path, et lancer le prog +# /supers n'est plus ds le path, +# donc 'exec prog' lance le vrai prog. + export PATH=/usr/local/sbin:/usr/sbin:/sbin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin + exec /etc/CRANS/code/mklogin.py ${1+"$@"} diff --git a/archive/archives/supers/mknewlogin b/archive/archives/supers/mknewlogin new file mode 100755 index 00000000..e52864f2 --- /dev/null +++ b/archive/archives/supers/mknewlogin @@ -0,0 +1,19 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# ici c'est vide car "super $prog" va en fait éxécuter un autre script, celui ci étant juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + +test "X$UID" = "X0" && echo "uid=root -> on fait rien. lancez le prog directement, cf _where _." + diff --git a/archive/archives/supers/news/actmerge b/archive/archives/supers/news/actmerge new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/actmerge @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/actsync b/archive/archives/supers/news/actsync new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/actsync @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/actsyncd b/archive/archives/supers/news/actsyncd new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/actsyncd @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/archive b/archive/archives/supers/news/archive new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/archive @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/auth b/archive/archives/supers/news/auth new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/auth @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/batcher b/archive/archives/supers/news/batcher new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/batcher @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/buffchan b/archive/archives/supers/news/buffchan new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/buffchan @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/cnfsheadconf b/archive/archives/supers/news/cnfsheadconf new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/cnfsheadconf @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/cnfsstat b/archive/archives/supers/news/cnfsstat new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/cnfsstat @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/control b/archive/archives/supers/news/control new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/control @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/controlbatch b/archive/archives/supers/news/controlbatch new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/controlbatch @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/controlchan b/archive/archives/supers/news/controlchan new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/controlchan @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/convdate b/archive/archives/supers/news/convdate new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/convdate @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/ctlinnd b/archive/archives/supers/news/ctlinnd new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/ctlinnd @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/cvtbatch b/archive/archives/supers/news/cvtbatch new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/cvtbatch @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/dbprocs b/archive/archives/supers/news/dbprocs new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/dbprocs @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/expire b/archive/archives/supers/news/expire new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/expire @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/expireover b/archive/archives/supers/news/expireover new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/expireover @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/expirerm b/archive/archives/supers/news/expirerm new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/expirerm @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/fastrm b/archive/archives/supers/news/fastrm new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/fastrm @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/filechan b/archive/archives/supers/news/filechan new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/filechan @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/getlist b/archive/archives/supers/news/getlist new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/getlist @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/gpgverify b/archive/archives/supers/news/gpgverify new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/gpgverify @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/grephistory b/archive/archives/supers/news/grephistory new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/grephistory @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/inews b/archive/archives/supers/news/inews new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/inews @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/inncheck b/archive/archives/supers/news/inncheck new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/inncheck @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/innconfval b/archive/archives/supers/news/innconfval new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/innconfval @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/innd b/archive/archives/supers/news/innd new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/innd @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/inndf b/archive/archives/supers/news/inndf new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/inndf @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/inndstart b/archive/archives/supers/news/inndstart new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/inndstart @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/innfeed b/archive/archives/supers/news/innfeed new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/innfeed @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/innmail b/archive/archives/supers/news/innmail new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/innmail @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/innreport b/archive/archives/supers/news/innreport new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/innreport @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/innstat b/archive/archives/supers/news/innstat new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/innstat @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/innwatch b/archive/archives/supers/news/innwatch new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/innwatch @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/innxbatch b/archive/archives/supers/news/innxbatch new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/innxbatch @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/innxmit b/archive/archives/supers/news/innxmit new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/innxmit @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/mailpost b/archive/archives/supers/news/mailpost new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/mailpost @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/makedbz b/archive/archives/supers/news/makedbz new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/makedbz @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/makehistory b/archive/archives/supers/news/makehistory new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/makehistory @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/mod-active b/archive/archives/supers/news/mod-active new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/mod-active @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/news.daily b/archive/archives/supers/news/news.daily new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/news.daily @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/news2mail b/archive/archives/supers/news/news2mail new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/news2mail @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/newsrequeue b/archive/archives/supers/news/newsrequeue new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/newsrequeue @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/nnrpd b/archive/archives/supers/news/nnrpd new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/nnrpd @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/nntpget b/archive/archives/supers/news/nntpget new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/nntpget @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/nntpsend b/archive/archives/supers/news/nntpsend new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/nntpsend @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/ovdb_recover b/archive/archives/supers/news/ovdb_recover new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/ovdb_recover @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/ovdb_upgrade b/archive/archives/supers/news/ovdb_upgrade new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/ovdb_upgrade @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/overchan b/archive/archives/supers/news/overchan new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/overchan @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/parsecontrol b/archive/archives/supers/news/parsecontrol new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/parsecontrol @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/pgpverify b/archive/archives/supers/news/pgpverify new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/pgpverify @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/procbatch b/archive/archives/supers/news/procbatch new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/procbatch @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/prunehistory b/archive/archives/supers/news/prunehistory new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/prunehistory @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/pullnews b/archive/archives/supers/news/pullnews new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/pullnews @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/rc.news b/archive/archives/supers/news/rc.news new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/rc.news @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/rnews b/archive/archives/supers/news/rnews new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/rnews @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/rnews.libexec b/archive/archives/supers/news/rnews.libexec new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/rnews.libexec @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/scanlogs b/archive/archives/supers/news/scanlogs new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/scanlogs @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/scanspool b/archive/archives/supers/news/scanspool new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/scanspool @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/send-ihave b/archive/archives/supers/news/send-ihave new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/send-ihave @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/send-nntp b/archive/archives/supers/news/send-nntp new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/send-nntp @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/send-uucp b/archive/archives/supers/news/send-uucp new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/send-uucp @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/send-uucp.pl b/archive/archives/supers/news/send-uucp.pl new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/send-uucp.pl @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/sendbatch b/archive/archives/supers/news/sendbatch new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/sendbatch @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/sendxbatches b/archive/archives/supers/news/sendxbatches new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/sendxbatches @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/shlock b/archive/archives/supers/news/shlock new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/shlock @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/shrinkfile b/archive/archives/supers/news/shrinkfile new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/shrinkfile @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/signcontrol b/archive/archives/supers/news/signcontrol new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/signcontrol @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/sm b/archive/archives/supers/news/sm new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/sm @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/startinnfeed b/archive/archives/supers/news/startinnfeed new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/startinnfeed @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/tally.control b/archive/archives/supers/news/tally.control new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/tally.control @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/news/writelog b/archive/archives/supers/news/writelog new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/news/writelog @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/ntop b/archive/archives/supers/ntop new file mode 100755 index 00000000..b950c76e --- /dev/null +++ b/archive/archives/supers/ntop @@ -0,0 +1,20 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : + +user=${ORIG_LOGNAME-$USER} +rep=${ORIG_HOME-$HOME} +echo Putting ntop DBs in $rep +/usr/local/bin/ntop -P $rep -a $rep/access.log -u $user ${1+"$@"} #-l 300 + diff --git a/archive/archives/supers/rdf b/archive/archives/supers/rdf new file mode 100755 index 00000000..cb665873 --- /dev/null +++ b/archive/archives/supers/rdf @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# ici c'est vide car "super $prog" va en fait éxécuter un autre script, celui ci étant juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + +# enfin, pour éviter de lancer super inutilement ds le cas où on est déja root, +# il reste le cas UID=0 : on essaye de lancer le prog, sans passer par super. +# -> on restreint le PATH au minimum. + +if test "X$UID" = "X0"; then + echo "uid=root -> on lance direct le prog, sans super (essayez where $prog) " + export PATH=/usr/local/sbin:/usr/sbin:/sbin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin + exec $prog ${1+"$@"} +fi diff --git a/archive/archives/supers/rmlogin b/archive/archives/supers/rmlogin new file mode 100755 index 00000000..e52864f2 --- /dev/null +++ b/archive/archives/supers/rmlogin @@ -0,0 +1,19 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# ici c'est vide car "super $prog" va en fait éxécuter un autre script, celui ci étant juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + +test "X$UID" = "X0" && echo "uid=root -> on fait rien. lancez le prog directement, cf _where _." + diff --git a/archive/archives/supers/superTest b/archive/archives/supers/superTest new file mode 100755 index 00000000..e52864f2 --- /dev/null +++ b/archive/archives/supers/superTest @@ -0,0 +1,19 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# ici c'est vide car "super $prog" va en fait éxécuter un autre script, celui ci étant juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + +test "X$UID" = "X0" && echo "uid=root -> on fait rien. lancez le prog directement, cf _where _." + diff --git a/archive/archives/supers/template b/archive/archives/supers/template new file mode 100755 index 00000000..cb665873 --- /dev/null +++ b/archive/archives/supers/template @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# ici c'est vide car "super $prog" va en fait éxécuter un autre script, celui ci étant juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + +# enfin, pour éviter de lancer super inutilement ds le cas où on est déja root, +# il reste le cas UID=0 : on essaye de lancer le prog, sans passer par super. +# -> on restreint le PATH au minimum. + +if test "X$UID" = "X0"; then + echo "uid=root -> on lance direct le prog, sans super (essayez where $prog) " + export PATH=/usr/local/sbin:/usr/sbin:/sbin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin + exec $prog ${1+"$@"} +fi diff --git a/archive/archives/supers/template_court b/archive/archives/supers/template_court new file mode 100755 index 00000000..e52864f2 --- /dev/null +++ b/archive/archives/supers/template_court @@ -0,0 +1,19 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +test "X$SUPERCMD" = "X$prog" || test "X$UID" = "X0" || + exec /usr/bin/super $prog ${1+"$@"} # le script s'arrete ici ds ce cas. + +# Contenu du script : +# ici c'est vide car "super $prog" va en fait éxécuter un autre script, celui ci étant juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + +test "X$UID" = "X0" && echo "uid=root -> on fait rien. lancez le prog directement, cf _where _." + diff --git a/archive/archives/supers/template_id b/archive/archives/supers/template_id new file mode 100755 index 00000000..f2eb86f6 --- /dev/null +++ b/archive/archives/supers/template_id @@ -0,0 +1,25 @@ +#! /bin/sh +# Sam K, Jan 2000 +# sert Doublement de wrapper: +# d'abord autolance super sur /id/(basename $0), +# Et aussi, qd appelé via super, lance un scipt de /id en modifiant le apth au prealable. + +prog=`basename $0` +supcmd=`basename ${SUPERCMD=_NILL_}` + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$supcmd" = "X$prog"; then + echo "calling super, $supcmd $prog" + exec /usr/bin/super /id/$prog ${1+"$@"} + exit 0; +fi + +# Si le script continue, c'est qu'on est lancé par super. + + +PATH=/sbin:/usr/sbin:/usr/bin:$PATH + +echo "Path set to: $PATH by id_wrapper" +exec /etc/init.d/$prog ${1+"$@"} diff --git a/archive/archives/supers/template_news b/archive/archives/supers/template_news new file mode 100755 index 00000000..c98f967b --- /dev/null +++ b/archive/archives/supers/template_news @@ -0,0 +1,26 @@ +#! /bin/sh +# Sam K, déc 99 +# magie: le script lance super sur son propre nom +# et ca lance le bon programme.. + +prog=`basename $0` + +# Si le script courant est lancé par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on éxécute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +if ! test "X$SUPERCMD" = "X$prog"; then + exec /usr/bin/super /usr/lib/news/bin/$prog ${1+"$@"} + exit 0; +fi + +# Si le script courant est lanc par super, $SUPERCMD permet de le voir. +# et alors on continue gentiment le script, sinon on xcute super sur le prog. +# ca permet de faire des scripts qui lancent super sur eux-memes.. +# Contenu du script : + +# ici c'est vide car "super $prog" va en fait éxécuter un autre script (ou lien), comme +# configuré dans /etc/super.tab. +# celui ci est juste un "wrapper". +# pour lanceMake et autre, c'est là qu'est mis le script à éxécuter. + + diff --git a/archive/archives/supers/update-links b/archive/archives/supers/update-links new file mode 100755 index 00000000..a5ecd6ec --- /dev/null +++ b/archive/archives/supers/update-links @@ -0,0 +1,10 @@ +#! /usr/bin/zsh +if test -z "$2"; then +echo "euhh, vérifiez que vous avez compris le script avant de le lancer.." +echo " il est basique, mais avec des arguments qcques, il pourrait faire mal." +exit 0 +fi + +mkdir $2 +cd $2 +for f in $1/*(*); do ln -s ../template_$2 `basename $f`; done diff --git a/archive/archives/surveille b/archive/archives/surveille new file mode 100755 index 00000000..ff24ae1f --- /dev/null +++ b/archive/archives/surveille @@ -0,0 +1,26 @@ +#!/bin/zsh +# si le process $1 est mort, le relance + +unset res + +arg=$1 +res=`ps xeaf | grep $arg | grep -v surveille | grep -v grep` +#res=`/etc/rc.d/init.d/$arg status | grep "running"` + +if [ -z $res ]; then + if [ -f /var/run/dead.$arg ]; then + # waouh, on peut rien -- on a déjà essayé de relancer ce truc + # et il est déjà mort -- y'a sûrement un problème dans les fichiers + # de config ! + # faudrait faire un "ls" quotidien de /var/run/dead.* ... + true + else + /etc/rc.d/init.d/$arg stop 2>/dev/null >/dev/null + /etc/rc.d/init.d/$arg start 2>/dev/null >/dev/null + logger "surveille a du relancer $1 !" 2>/dev/null >/dev/null + touch /var/run/dead.$arg + fi +else + rm -f /var/run/dead.$arg 2>/dev/null >/dev/null + +fi diff --git a/archive/archives/surveille-reseau b/archive/archives/surveille-reseau new file mode 100755 index 00000000..5d9abed7 --- /dev/null +++ b/archive/archives/surveille-reseau @@ -0,0 +1,36 @@ +#!/bin/sh + +ipx=false + +function teste_ou_claque() { + if ! ping -c 1 $1 2>&1 >/dev/null + then + ifconfig $2 down 2>/dev/null >/dev/null + /usr/local/bin/mii-diag -R $2 2>/dev/null >/dev/null + ifconfig $2 up 2>/dev/null >/dev/null + if [ ! -z "$3" ] + then + route add default gw $3 + fi + ipx=true + logger "surveille-reseau a du claquer $2 !" 2>&1 >/dev/null + fi +} + +# pour l'instant, on n'a qu'un seul réseau (eth0) où se trouve de façon sûre +# une machine partenaire, toujours présente. +# les autres réseaux peuvent être ajoutés dès que l'on aura une victime à +# pinger (par exemple, une vieille sun ou un vieux 386sx/Linux de réserve, +# ne servant à rien sauf à faire du RC5.distributed.net (pour l'ego du root) +# et répondre aux pings) + + +teste_ou_claque 138.231.176.65 eth0 138.231.136.2 +#teste_ou_claque zagadka eth1 +#teste_ou_claque gandalf eth2 +#teste_ou_claque bigouden eth3 + +$ipx && /etc/CRANS/rc.ipx >/dev/null 2>/dev/null + + + diff --git a/archive/archives/surveille-sendmail b/archive/archives/surveille-sendmail new file mode 100755 index 00000000..15134e45 --- /dev/null +++ b/archive/archives/surveille-sendmail @@ -0,0 +1,10 @@ +#!/bin/sh + +/etc/CRANS/sendmail-vit-il $1 && exit + +killall -9 sendmail 2>/dev/null >/dev/null +echo "surveille-sendmail relance sendmail !!!" >> /var/log/messages +/usr/lib/sendmail -bd + + + diff --git a/archive/archives/surveille-squid b/archive/archives/surveille-squid new file mode 100755 index 00000000..6b9d9ba6 --- /dev/null +++ b/archive/archives/surveille-squid @@ -0,0 +1,10 @@ +#!/bin/sh + +/etc/CRANS/squid-vit-il $1 && exit + +echo "surveille-squid relance Squid !!!" >> /var/log/messages +squid-new >/dev/null 2>/dev/null + + + + diff --git a/archive/archives/surveille.tout b/archive/archives/surveille.tout new file mode 100755 index 00000000..8ff86afa --- /dev/null +++ b/archive/archives/surveille.tout @@ -0,0 +1,18 @@ +#!/bin/sh + +/etc/CRANS/surveille-sendmail $HOST +/etc/CRANS/surveille-squid +/etc/CRANS/surveille httpd +/etc/CRANS/surveille smb +/etc/CRANS/surveille dhcpd +/etc/CRANS/surveille sshd2 +/etc/CRANS/surveille ntpd + +/etc/CRANS/surveille-reseau +# Et bientot +# /etc/CRANS/surveille-reseau.pl + + +killall -9 nwbind 2>/dev/null >/dev/null + #goret goret goret :-) mais on n'a pas besoin de la + #bindery[usine à gaz] NetWare diff --git a/archive/archives/temp-avg b/archive/archives/temp-avg new file mode 100755 index 00000000..95efc524 --- /dev/null +++ b/archive/archives/temp-avg @@ -0,0 +1,14 @@ +#!/bin/sh +# je pipe vers calculatrice pour enlever 30 °, ça donne plus de précision. Sam. (/1 fait truncate.) + +#echo $(cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/temp2 | tail -c 5 | head -c 2 )"/1-20"|bc +#echo $(cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/temp1 | tail -c 5 | head -c 2 )"/1-20"|bc +#echo 10 +#echo 12 + +echo $(cat /proc/sys/dev/sensors/w83781d*/temp1 | tail -c 5 | head -c 2 ) + +echo $(cat /proc/sys/dev/sensors/w83781d*/temp2 | tail -c 5 | head -c 2 ) +echo +echo "Température°" +# passage de -30 a -20 le 3 Oct 23:30 car nouveau local -> nouvelle temperature.. diff --git a/archive/archives/temperature b/archive/archives/temperature new file mode 100755 index 00000000..e89956dc --- /dev/null +++ b/archive/archives/temperature @@ -0,0 +1,11 @@ +#!/bin/sh +# je pipe vers calculatrice pour enlever 30 °, ça donne plus de précision. Sam. (/1 fait truncate.) + +#echo $(cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/temp1 | tail -c 5 | head -c 2 )"*10.0"|bc +echo $(cat /proc/sys/dev/sensors/w83781d-i2c-0-2d/temp2 | tail -c 5 | head -c 4 )"*10/1"|bc +#echo 10 +#echo 12 + +#echo +#echo "Température*10 en °C" +# passage de -30 a -20 le 3 Oct 23:30 car nouveau local -> nouvelle temperature.. diff --git a/archive/archives/test-squid-taille-cache.pl b/archive/archives/test-squid-taille-cache.pl new file mode 100755 index 00000000..a380a899 --- /dev/null +++ b/archive/archives/test-squid-taille-cache.pl @@ -0,0 +1,25 @@ +#!/usr/bin/perl +$squidCacheDir = "/var/squid"; +$squidCacheDirMaxSize = 1700000; + +open(STDIN, "du -s $squidCacheDir |"); + +$line = ; +chop($line); + +#$line est sous la forme 12345678 $squidCacheDir + +if ($line =~ /([\d]+)/){ + if ($1 > $squidCacheDirMaxSize){ + + system("echo \"testSquid.pl relance squid \" >> /var/log/messages"); + + # ajoute par Aymeric pour essayer de comprendre ce qui se passe + system("df -k /var/squid >> /var/log/messages"); + + system("squid-new >/dev/null 2&>/dev/null &"); + # J'ai rajouté un sujet pour filtrage par procmail OS :-) + system("echo \"[TEST] j'ai du relancer le squid qui +bouffait trop d'espace\"| mail -s \"testSquid\" root "); + } +} diff --git a/archive/archives/verifie_ipforward b/archive/archives/verifie_ipforward new file mode 100755 index 00000000..6bf86f0c --- /dev/null +++ b/archive/archives/verifie_ipforward @@ -0,0 +1,7 @@ +#!/bin/sh +# fait le 11/12/99 par Jerome KIEFFER +#retablie l'ipforwarding entre les interfaces de zamok si c'est descactive. +if [ `cat /proc/sys/net/ipv4/ip_forward` -eq `expr 0` ] +then + echo 1 >/proc/sys/net/ipv4/ip_forward +fi \ No newline at end of file diff --git a/archive/archives/watchdog b/archive/archives/watchdog new file mode 100755 index 00000000..a0ca2675 --- /dev/null +++ b/archive/archives/watchdog @@ -0,0 +1,13 @@ +#!/usr/bin/env python +# oui emacs c'est bien du -*- python -*- + + +# c'est fait pour le "software watchdog".... + +from time import sleep + +fd = open("/dev/watchdog","w+") +while 1: + fd.write('z') + sleep(15) + diff --git a/archive/auto-reply/mailbatX b/archive/auto-reply/mailbatX new file mode 100644 index 00000000..0091ae36 --- /dev/null +++ b/archive/auto-reply/mailbatX @@ -0,0 +1,14 @@ +/!\ Ce mail est une réponse automatique ! + +Bonjour, + +Suite à un changement d'organisation, l'adresse à laquelle vous venez +d'envoyer un mail (batX@crans.org) n'est plus valide. Si vous souhaitez +rencontrer un câbleur, vous pouvez aller à la Kfet lors des permanences +effectuées par ceux-ci ; sinon, vous pouvez aussi les contacter comme +indiqué sur la page . + +Désolé pour le désagrément rencontré. + +-- +Les responsables bâtiments diff --git a/archive/auto-reply/procmailbatXrc b/archive/auto-reply/procmailbatXrc new file mode 100644 index 00000000..c69515b3 --- /dev/null +++ b/archive/auto-reply/procmailbatXrc @@ -0,0 +1,35 @@ +# Repondeur automatique pour batX et all-bureau +# 14/09/2004 version 1 Benoit R. + +# Pour vérifier que ca marche bien +VERBOSE=no +LOGFILE=/var/tmp/autoreply-procmail.log + +# Pour éviter les doublons (spams ou boulets qui envoient à tous les batX) +:0 Wh: msgid.lock +|formail -D 8192 /var/tmp/autoreply-msgid.cache + +# On pipe par le client de spamassassin +:0 Whbf +* < 256000 +| spamc + +# rejet du spam : +:0 : +* ^X-Spam-Status: Yes +/dev/null +:0 : +* ^X-Reject: 554 +/dev/null + +# ne réponds pas au mailings-lists et démons : +# et pas de boucles : +:0 h +* !^FROM_DAEMON +* !^X-Loop: batX@crans.org +|(formail -r -I "From: nobody@crans.org" \ + -A "X-Loop: batX@crans.org" ;\ + cat /usr/scripts/auto-reply/mailbatX)| /usr/sbin/sendmail -oi -t + +:0 +/dev/null diff --git a/archive/bdd/cles b/archive/bdd/cles new file mode 100644 index 00000000..c8f04a67 --- /dev/null +++ b/archive/bdd/cles @@ -0,0 +1,37 @@ +['mailAlias', + 'tel', + 'cn', + 'objectClass', + 'uidNumber', + 'etudes', + 'shadowMax', + 'shadowLastChange', + 'uid', + 'canonicalAlias', + 'historique', + 'userPassword', + 'derniereConnexion', + 'mail', + 'paiement', + 'nom', + 'loginShell', + 'gidNumber', + 'chbre', + 'rewriteMailHeaders', + 'shadowWarning', + 'info', + 'prenom', + 'gecos', + 'homeDirectory', + 'aid', + 'carteEtudiant', + 'controle', + 'mailInvalide', + 'blacklist', + 'postalAddress', + 'solde', + 'droits', + 'contourneGreylist', + 'charteMA', + 'homepageAlias'] + \ No newline at end of file diff --git a/archive/bdd/comptes.py b/archive/bdd/comptes.py new file mode 100644 index 00000000..d63ae9f2 --- /dev/null +++ b/archive/bdd/comptes.py @@ -0,0 +1,34 @@ +from sqlobject import * +#from comptes import CompteUnix + +class Attribut(SQLObject): + nom = UnicodeCol() + url_desc = StringCol(default=None) + permissions = RelatedJoin('Permission') + groupes_unix = RelatedJoin('GroupeUnix') + comptes = RelatedJoin('CompteUnix') + +class Permission(SQLObject): + nom = UnicodeCol() + attributs = RelatedJoin('Attribut') + +class CompteUnix(SQLObject): + proprio = ForeignKey('Proprio') + solde = FloatCol() + attributs = RelatedJoin('Attribut') + + # Champs standards + username = StringCol(unique=True) + passwd = UnicodeCol() + uid = IntCol(unique=True) + homedir = StringCol() + shell = StringCol() + gecos = StringCol() + pwdexpire = DateTimeCol(default=None) + gid = IntCol() + +class GroupeUnix(SQLObject): + gid = IntCol(unique=True) + nom = StringCol(unique=True) + descr = UnicodeCol() + passwd = StringCol(default='!') diff --git a/archive/bdd/connection.py b/archive/bdd/connection.py new file mode 100644 index 00000000..7c0a0299 --- /dev/null +++ b/archive/bdd/connection.py @@ -0,0 +1,9 @@ +from sqlobject import * +import sys, os +sys.path.append('/usr/scripts/bdd/secret') +from mdp import mdp + +connection_string = 'postgres://respbats:%s@localhost/gestion2?debug=False&cache=True' % mdp +connection = connectionForURI(connection_string) +sqlhub.processConnection = connection + diff --git a/archive/bdd/controle.py b/archive/bdd/controle.py new file mode 100644 index 00000000..8560d122 --- /dev/null +++ b/archive/bdd/controle.py @@ -0,0 +1,7 @@ +from sqlobject import * + +class Controle(SQLObject): + Proprio = ForeignKey('Proprio') + nom = Strincol() + date = DateCol() + diff --git a/archive/bdd/local.py b/archive/bdd/local.py new file mode 100644 index 00000000..57f3474e --- /dev/null +++ b/archive/bdd/local.py @@ -0,0 +1,12 @@ +from sqlobject import * + +class Local(SQLObject): + + nom = StringCol(unique=True) + proprio = ForeignKey('Proprio') + batiment = ForeignKey('Batiment') + +class Batiment(SQLObject): + + nom = StringCol(unique=True) + diff --git a/archive/bdd/migration.py b/archive/bdd/migration.py new file mode 100755 index 00000000..40c03ebc --- /dev/null +++ b/archive/bdd/migration.py @@ -0,0 +1,160 @@ +#! /usr/bin/python + +if __name__ == '__main__': + import sys + sys.path.append('/usr/scripts/gestion') + from ldap_crans import crans_ldap + ldap = crans_ldap() + + import connection + from proprio import Proprio + from comptes import CompteUnix + from local import Local + from comptes import Attribut + from comptes import GroupeUnix + + + adherents_ldap = ldap.search('nom=*')['adherent'] # Pour les tests, on ne selectionne que les nounous + #adherents_ldap = [] + for adherent_ldap in adherents_ldap: + + data = adherent_ldap._data + + args = {} + + args['categorie'] = u'adherent' + args['id_ldap'] = int(adherent_ldap.id()) + args['nom'] = adherent_ldap.nom() + args['prenom'] = adherent_ldap.prenom() + args['titre'] = None + args['naissance'] = None + + + args['adresse1'] = adherent_ldap.adresse()[0] + args['adresse2'] = adherent_ldap.adresse()[1] + args['code_postal'] = adherent_ldap.adresse()[2] + args['ville'] = adherent_ldap.adresse()[3] + args['pays'] = None + + args['telephone'] = adherent_ldap.tel() + args['email'] = adherent_ldap.email() + + args['etablissement'] = adherent_ldap.etudes(0) + args['annee_etudes'] = adherent_ldap.etudes(1) + args['filiere'] = adherent_ldap.etudes(2) + + args['remarques'] = '\n'.join(adherent_ldap.info()) + args['fictif'] = False + args['responsableID'] = None + + selection = Proprio.select(Proprio.q.id_ldap == adherent_ldap.id()) + if selection.count() == 0: + proprio_pg = Proprio(**args) + else: + proprio_pg = selection[0] + proprio_pg.set(**args) + + if 'uid' in adherent_ldap._data: + args = {} + args['proprioID'] = proprio_pg.id + args['username'] = adherent_ldap.mail() + args['passwd'] = '!' + args['uid'] = int(adherent_ldap._data['uidNumber'][0]) + args['homedir'] = adherent_ldap._data['homeDirectory'][0] + args['shell'] = adherent_ldap._data['loginShell'][0] + args['gecos'] = adherent_ldap._data['gecos'][0] + args['gid'] = 3 + args['solde'] = adherent_ldap.solde() + + selection = CompteUnix.select(CompteUnix.q.proprioID == proprio_pg.id) + if selection.count() == 0: + compte_pg = CompteUnix(**args) + else: + compte_pg = selection[0] + compte_pg.set(**args) + + + for droit in adherent_ldap.droits(): + selection = Attribut.select(Attribut.q.nom == droit) + if selection.count() == 0: + attribut = Attribut(nom=droit) + else: + attribut = selection[0] + if attribut not in compte_pg.attributs: + compte_pg.addAttribut(attribut) + + + print adherent_ldap.nom() + + clubs_ldap = ldap.search('cid=*')['club'] # Pour les tests, on ne selectionne que les nounous + for club_ldap in clubs_ldap: + + data = club_ldap._data + + args = {} + + args['categorie'] = u'club' + args['id_ldap'] = int(club_ldap.id()) + args['nom'] = club_ldap.nom() + args['prenom'] = None + args['titre'] = None + args['naissance'] = None + + + args['adresse1'] = None + args['adresse2'] = None + args['code_postal'] = None + args['ville'] = None + args['pays'] = None + + args['telephone'] = None + args['email'] = None + + args['etablissement'] = None + args['annee_etudes'] = None + args['filiere'] = None + + args['remarques'] = '\n'.join(club_ldap.info()) + args['fictif'] = False + args['responsableID'] = Proprio.select(Proprio.q.id_ldap == club_ldap._data['responsable'][0])[0].id + + selection = Proprio.select(Proprio.q.id_ldap == club_ldap.id()) + if selection.count() == 0: + proprio_pg = Proprio(**args) + else: + proprio_pg = selection[0] + proprio_pg.set(**args) + + if 'uid' in club_ldap._data: + args = {} + args['proprioID'] = proprio_pg.id + args['username'] = club_ldap._data['uid'] + args['passwd'] = '!' + args['uid'] = int(club_ldap._data['uidNumber'][0]) + args['homedir'] = club_ldap._data['homeDirectory'][0] + args['shell'] = club_ldap._data['loginShell'][0] + args['gecos'] = None + args['gid'] = 3 + args['solde'] = club_ldap.solde() + + selection = CompteUnix.select(CompteUnix.q.proprioID == proprio_pg.id) + if selection.count() == 0: + compte_pg = CompteUnix(**args) + else: + compte_pg = selection[0] + compte_pg.set(**args) + + + print club_ldap.nom() + + + + nounou = Attribut.select(Attribut.q.nom == u'Nounou')[0] + selection = GroupeUnix.select(GroupeUnix.q.nom == 'ssh_partout') + if selection.count() == 0: + ssh_partout = GroupeUnix(nom='ssh_partout', gid=200, descr='Groupes des utilisateur autorises a se logger partout') + else: + ssh_partout = selection[0] + if ssh_partout not in nounou.groupes_unix: + nounou.addGroupeUnix(ssh_partout) + diff --git a/archive/bdd/proprio.py b/archive/bdd/proprio.py new file mode 100644 index 00000000..bd0bd5c6 --- /dev/null +++ b/archive/bdd/proprio.py @@ -0,0 +1,57 @@ +from sqlobject import * +from datetime import datetime + +from local import Local + +class Proprio(SQLObject): + + id_ldap = IntCol(unique=True) + """ L'aid/cid est uniquement la pour la retrocompatibilite avec LDAP + Attention : dans LDAP, le meme aid peut etre utilise par deux adherents successivement """ + categorie = UnicodeCol() + """ Categorie : club ou adherent """ + + nom = UnicodeCol() + prenom = UnicodeCol() + titre = StringCol() + """ M, Mmme, Mlle """ + naissance = DateCol() + + adresse1 = UnicodeCol() + adresse2 = UnicodeCol() + code_postal = StringCol() + ville = UnicodeCol() + pays = UnicodeCol() + + telephone = StringCol() + email = StringCol() + + etablissement = UnicodeCol() + annee_etudes = UnicodeCol() + filiere = UnicodeCol() + + responsable = ForeignKey('Proprio') + + fictif = BoolCol() + remarques = UnicodeCol() + + + #A faire plutot en SQL ? + #def sync(self): + # if not self._SO_createValues: + # return + #for champ in self._SO_createValues.keys(): + # diff = '%s -> %s' + # hist = HistProprio(responsable = None, date = datetime.now(), \ + # cible = self, champ = champ, \ + # valeur = self._SO_createValues[champ]) + # SQLObject.sync(self) + + +class HistProprio(SQLObject): + date = DateTimeCol() + responsable = ForeignKey('Proprio', notNone=False) + cible = ForeignKey('Proprio') + champ = StringCol() + valeur = StringCol() + \ No newline at end of file diff --git a/archive/bdd/reset.py b/archive/bdd/reset.py new file mode 100755 index 00000000..2d1faaf3 --- /dev/null +++ b/archive/bdd/reset.py @@ -0,0 +1,54 @@ +#!/usr/bin/python + +import connection + +from proprio import Proprio +from proprio import HistProprio +from comptes import CompteUnix +from comptes import GroupeUnix +from comptes import Attribut +from comptes import Permission + +erreurs = 0 + +try: + Proprio.dropTable(cascade=True) +except: + erreurs += 1 + +Proprio.createTable() + +try: + HistProprio.dropTable(cascade=True) +except: + erreurs += 1 +HistProprio.createTable() + +try: + CompteUnix.dropTable(cascade=True) +except: + erreurs += 1 +CompteUnix.createTable() + + + +try: + GroupeUnix.dropTable(cascade=True) +except: + erreurs += 1 +GroupeUnix.createTable() + + +try: + Attribut.dropTable(cascade=True) +except: + erreurs += 1 +Attribut.createTable() + +try: + Permission.dropTable(cascade=True) +except: + erreurs += 1 +Permission.createTable() + +print 'erreurs : ', erreurs \ No newline at end of file diff --git a/archive/bdd/secret/mdp.py b/archive/bdd/secret/mdp.py new file mode 100644 index 00000000..bd126611 --- /dev/null +++ b/archive/bdd/secret/mdp.py @@ -0,0 +1 @@ +mdp = 'AspIrAtEUr' \ No newline at end of file diff --git a/archive/bdd/sql/transitivite b/archive/bdd/sql/transitivite new file mode 100644 index 00000000..7b6fa750 --- /dev/null +++ b/archive/bdd/sql/transitivite @@ -0,0 +1,6 @@ +CREATE OR REPLACE VIEW compte_unix_groupe_unix AS SELECT attribut_compte_unix.compte_unix_id, attribut_groupe_unix.groupe_unix_id FROM attribut_compte_unix, attribut_groupe_unix WHERE attribut_compte_unix.attribut_id = attribut_groupe_unix.attribut_id; + +SELECT C.uid, G.gid; FROM compte_unix C JOIN attribut_compte_unix AC ON (AC.compte_unix_id = C.id) JOIN attribut A ON (A.id = AC.attribut_id) JOIN attribut_groupe_unix AG ON (AG.attribut_id = A.id) JOIN groupe_unix G ON (G.id = AG.groupe_unix_id) GROUP BY C.uid, G.gid; + +CRETAE OR REPLACE VIEW groupmember AS SELECT C.uid, C.username, G.gid +FROM compte_unix C JOIN attribut_compte_unix AC ON (AC.compte_unix_id = C.id) JOIN attribut A ON (A.id = AC.attribut_id) JOIN attribut_groupe_unix AG ON (AG.attribut_id = A.id) JOIN groupe_unix G ON (G.id = AG.groupe_unix_id) GROUP BY C.uid, G.gid, C.username; diff --git a/archive/bdd/temp.py b/archive/bdd/temp.py new file mode 100755 index 00000000..25ea16cb --- /dev/null +++ b/archive/bdd/temp.py @@ -0,0 +1,6 @@ +#!/usr/bin/python + +import hub + +from chambre import Chambre +Chambre.createTable() diff --git a/archive/cranslib/README b/archive/cranslib/README new file mode 100644 index 00000000..a3453629 --- /dev/null +++ b/archive/cranslib/README @@ -0,0 +1,2 @@ +/usr/scripts/lib pointait à une époque vers /usr/scripts/lib jusqu'à ce que 20-100 décide que +faire du ducktape à coup de symlinks pour les import, c'était mal diff --git a/archive/cransnews/__init__.py b/archive/cransnews/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/archive/cransnews/base.db b/archive/cransnews/base.db new file mode 100644 index 00000000..8e6a744b Binary files /dev/null and b/archive/cransnews/base.db differ diff --git a/archive/cransnews/feeds/annonces_description.html b/archive/cransnews/feeds/annonces_description.html new file mode 100644 index 00000000..f4bd1730 --- /dev/null +++ b/archive/cransnews/feeds/annonces_description.html @@ -0,0 +1 @@ +{{ obj.body }} diff --git a/archive/cransnews/feeds/annonces_title.html b/archive/cransnews/feeds/annonces_title.html new file mode 100644 index 00000000..d355de5b --- /dev/null +++ b/archive/cransnews/feeds/annonces_title.html @@ -0,0 +1 @@ +{{ obj.title }} diff --git a/archive/cransnews/manage.py b/archive/cransnews/manage.py new file mode 100755 index 00000000..5e78ea97 --- /dev/null +++ b/archive/cransnews/manage.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python +from django.core.management import execute_manager +try: + import settings # Assumed to be in the same directory. +except ImportError: + import sys + sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) + sys.exit(1) + +if __name__ == "__main__": + execute_manager(settings) diff --git a/archive/cransnews/news2rss/__init__.py b/archive/cransnews/news2rss/__init__.py new file mode 100644 index 00000000..ded5ac30 --- /dev/null +++ b/archive/cransnews/news2rss/__init__.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +from django.contrib.syndication.feeds import Feed +from email.Parser import Parser +import email.Utils +import nntplib, datetime +from email.Header import decode_header +p = Parser() + +def unicode_header( h ): + h = decode_header( h ) + h = map(lambda x: x[0].decode(x[1] or "ascii"), h) + return u" ".join( h ) + +class Message(object): + def __init__(self, raw_message): + ## parsing message + emailMessage = p.parsestr(raw_message) + ## getting subject right + subject = emailMessage['Subject'].replace("\n", "") + subject = unicode_header( subject ) + self.title = subject + print subject + ## getting body right + body = None + if emailMessage.is_multipart(): + body = "No text found" + for part in emailMessage.get_payload(): + print part.get_content_type() + if part.get_content_type() == "text/plain": + print part.get_payload() + body = part.get_payload() + body = body.decode("quopri_codec") + body = body.decode(part.get_content_charset() or "ascii") + break + else: + body = emailMessage.get_payload() + body = body.decode("quopri_codec") + body = body.decode(emailMessage.get_content_charset() or "ascii") + + self.body = body + self.date = datetime.datetime( *email.Utils.parsedate( emailMessage.get('Date'))[:-2] ) + + def get_absolute_url(self): + return "http://www.crans.org" + def __unicode__(self): + return self.title + +def getMessages(group, n=10): + messages = [] + news = nntplib.NNTP('news.crans.org') + resp, count, first, last, name = news.group(group) + ## faire: renvoyer 404 si existe pas NNTPTemporaryError + subs = news.xhdr('subject', str(int(last)-10) + '-' + last)[1] + for id, sub in subs[-10:]: + info, id, kd, article = news.article( id ) + msg = Message( u"\n".join(article) ) + messages.append( msg ) + messages.reverse() + return messages + +class DernieresAnnonces(Feed): + title = "Annonces cr@ns" + link = "/" + description = "Annonces officielles de l'association cr@ns (Cachan Réseau @ Normal' Sup)" + + def items(self): + return getMessages("crans.crans.annonces", 10) + + def item_pubdate(self, item): + """ + Takes an item, as returned by items(), and returns the item's + pubdate. + """ + return item.date + +class LatestMessages(Feed): + title = "Annonces cr@ns" + link = "/" + description = "Annonces officielles de l'association cr@ns (Cachan Réseau @ Normal' Sup)" + + def get_object(self, bits): + # In case of "/rss/beats/0613/foo/bar/baz/", or other such clutter, + # check that bits has only one member. + if len(bits) != 1: + raise ObjectDoesNotExist + return bits[0] + def items( self, obj ): + return getMessages(obj, 10) + + def item_pubdate(self, item): + """ + Takes an item, as returned by items(), and returns the item's + pubdate. + """ + return item.date + diff --git a/archive/cransnews/news2rss/models.py b/archive/cransnews/news2rss/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/archive/cransnews/news2rss/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/archive/cransnews/news2rss/views.py b/archive/cransnews/news2rss/views.py new file mode 100644 index 00000000..55a35100 --- /dev/null +++ b/archive/cransnews/news2rss/views.py @@ -0,0 +1,15 @@ +# Create your views here. +from django.http import HttpResponse, HttpResponseRedirect +import nntplib +import email + +def news2rss(request, group): + news = nntplib.NNTP('news.crans.org') + resp, count, first, last, name = news.group(group) + ## faire: renvoyer 404 si existe pas NNTPTemporaryError + subs = news.xhdr('subject', str(int(last)-10) + '-' + last)[1] + response = "" + for id, sub in subs[-10:]: + response += sub + message = news.xhdr(group, last) + return HttpResponse(response) diff --git a/archive/cransnews/settings.py b/archive/cransnews/settings.py new file mode 100644 index 00000000..57993c5c --- /dev/null +++ b/archive/cransnews/settings.py @@ -0,0 +1,82 @@ +# Django settings for cransnews project. + +DEBUG = True +TEMPLATE_DEBUG = DEBUG + +ADMINS = ( + # ('Your Name', 'your_email@domain.com'), +) + +MANAGERS = ADMINS + +DATABASE_ENGINE = 'sqlite3' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. +DATABASE_NAME = '/usr/scripts/cransnews/base.db' # Or path to database file if using sqlite3. +DATABASE_USER = '' # Not used with sqlite3. +DATABASE_PASSWORD = '' # Not used with sqlite3. +DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3. +DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3. + +# Local time zone for this installation. Choices can be found here: +# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name +# although not all choices may be available on all operating systems. +# If running in a Windows environment this must be set to the same as your +# system time zone. +TIME_ZONE = 'America/Chicago' + +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = 'en-us' + +SITE_ID = 1 + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True + +# Absolute path to the directory that holds media. +# Example: "/home/media/media.lawrence.com/" +MEDIA_ROOT = '' + +# URL that handles the media served from MEDIA_ROOT. Make sure to use a +# trailing slash if there is a path component (optional in other cases). +# Examples: "http://media.lawrence.com", "http://example.com/media/" +MEDIA_URL = '' + +# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a +# trailing slash. +# Examples: "http://foo.com/media/", "/media/". +ADMIN_MEDIA_PREFIX = '/media/' + +# Make this unique, and don't share it with anybody. +SECRET_KEY = 'jrsj4g%%)6xk86z+snji%f3t270q2+0a^nhag4$tm0r50fvhdy' + +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = ( + 'django.template.loaders.filesystem.load_template_source', + 'django.template.loaders.app_directories.load_template_source', +# 'django.template.loaders.eggs.load_template_source', +) + +MIDDLEWARE_CLASSES = ( + 'django.middleware.common.CommonMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.middleware.doc.XViewMiddleware', +) + +ROOT_URLCONF = 'cransnews.urls' + +TEMPLATE_DIRS = ( + # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. + "/Users/gdetrez/Development/django-projects/cransnews/templates/" +) + +INSTALLED_APPS = ( + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'cransnews.news2rss', +) diff --git a/archive/cransnews/templates/feeds/annonces_description.html b/archive/cransnews/templates/feeds/annonces_description.html new file mode 100644 index 00000000..ff587862 --- /dev/null +++ b/archive/cransnews/templates/feeds/annonces_description.html @@ -0,0 +1 @@ +{{ obj.body|safe }} diff --git a/archive/cransnews/templates/feeds/annonces_title.html b/archive/cransnews/templates/feeds/annonces_title.html new file mode 100644 index 00000000..91b32ca8 --- /dev/null +++ b/archive/cransnews/templates/feeds/annonces_title.html @@ -0,0 +1 @@ +{{ obj.title|safe }} diff --git a/archive/cransnews/templates/feeds/group_description.html b/archive/cransnews/templates/feeds/group_description.html new file mode 100644 index 00000000..dd6447cb --- /dev/null +++ b/archive/cransnews/templates/feeds/group_description.html @@ -0,0 +1 @@ +
{{ obj.body }}
diff --git a/archive/cransnews/templates/feeds/group_title.html b/archive/cransnews/templates/feeds/group_title.html new file mode 100644 index 00000000..91b32ca8 --- /dev/null +++ b/archive/cransnews/templates/feeds/group_title.html @@ -0,0 +1 @@ +{{ obj.title|safe }} diff --git a/archive/cransnews/urls.py b/archive/cransnews/urls.py new file mode 100644 index 00000000..305a6e62 --- /dev/null +++ b/archive/cransnews/urls.py @@ -0,0 +1,18 @@ +from django.conf.urls.defaults import * +from cransnews.news2rss import DernieresAnnonces, LatestMessages + +feeds = { + 'group': LatestMessages, + 'annonces': DernieresAnnonces, +} + + +urlpatterns = patterns('', + # Example: + # (r'^cransnews/', include('cransnews.foo.urls')), + #(r'^rss/(?P[\.\w]+)', 'news2rss.views.news2rss'), + (r'^rss/(?P.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict': feeds}), + + # Uncomment this for admin: +# (r'^admin/', include('django.contrib.admin.urls')), +) diff --git a/archive/diffusion-news b/archive/diffusion-news new file mode 100755 index 00000000..0703cb1d --- /dev/null +++ b/archive/diffusion-news @@ -0,0 +1,19 @@ +#! /bin/sh + +sed -e 1d | \ +formail -b -f -I "Received" \ + -I "Sender" \ + -I "DKIM-Signature" \ + -I "DomainKey-Signature" \ + -I "X-Google-Sender-Auth" \ + -I "X-Original-To" \ + -I "Delivered-To" \ + -I "Date" \ + -I "To" \ + -I "Message-ID" \ + -I "X-Newsreader" \ + -I "Organization" \ + -I "Return-Path" \ + -A "Newsgroups: crans.general" \ + -A "Path: diffusion-news" | \ + postnews news.crans.org diff --git a/archive/dumpudp b/archive/dumpudp new file mode 100755 index 00000000..4df9a2b8 Binary files /dev/null and b/archive/dumpudp differ diff --git a/archive/ftp_public/sync-ftp.sh b/archive/ftp_public/sync-ftp.sh new file mode 100644 index 00000000..e68fbf3b --- /dev/null +++ b/archive/ftp_public/sync-ftp.sh @@ -0,0 +1,197 @@ +#! /bin/sh +# +# Script de mise à jour automatique du FTP public du Cr@ns. +# +# Copyright (C) Augustin Parret-Fréaud +# Licence : GPLv2 +# + +# TODO : * creer un fichier de logs journalier (modifier la config de rsync +# devrait suffire) +# * intéger Chronomium, Dynebolic et Kaella (ie. trouver un +# serveur rsync qui le fasse ou utiliser autre chose (ftpmirror ?) + +# Chemin du FTP +PATHFTP="/pubftp/august/" + +# Distributions à gérer (nb : le nom du répertoire doit être +# le même que celui indiqué dans la liste ci-après). +# Debian, Fedora, Gentoo, Knoppix, Ubuntu +DISTRIB="Knoppix" +#DISTRIB="Debian Fedora Gentoo Knoppix Ubuntu" + +# Variables diverses +LOGFILE="sync-ftp.log" +LOGRSYNC="/localhome/parret-freaud/log/rsync" +LOGTEMP="/localhome/parret-freaud/log/temp" +LOGMAIL="/localhome/parret-freaud/log/mail" +RSYNCOPT="--recursive --links --hard-links --times --verbose --delete-after" +ENTMAIL1="Liste des fichiers mis à jour sur le ftp public\n\ +===============================================\n\n" +ENTMAIL3="-- \nMessage généré par sync-ftp.sh" + +# Fichiers en écriture pour le groupe (ça ne fonctionne pas, à creuser ...) +cd $PATHFTP +umask 002 + +# Boucle principale + +echo -e $ENTMAIL1 > $LOGMAIL + +for DIST in $DISTRIB; do + + case $DIST in + + Debian) + # Adresse du miroir + MIRROR="rsync://ftp.de.debian.org/debian-cd" + # Architectures à exclure (à choisir parmi : + # alpha arm hppa i386 ia64 m68k mips mipsel powerpc s390 sparc) + ARCH_EXCLUDE="alpha arm hppa ia64 m68k mips mipsel s390" + # Fichiers/repertoires à exclude pour ces architectures + # de la forme "--exclude foo1$ARCH/ --exclude foo2$ARCH/ ... " + #ARCH_FR_EXCL="--exclude ${ARCH} " + # Exclusions supplémentaires + EXCLUDE="--exclude project --exclude bt-cd --exclude jigdo-cd \ + --exclude jigdo-dvd --exclude bt-dvd --exclude source \ + --exclude HEADER.html --exclude trace --exclude mkimage.log " + # A virer une fois les tests finis + for ARCH in $ARCH_EXCLUDE; do + EXCLUDE=$EXCLUDE"--exclude $ARCH " + done + PATHLOCAL=$PATHFTP"$DIST/" + ENTMAIL2="$DIST ($PATHLOCAL)\n======\n" + TAIL=15 # Pour le formattage du mail + ;; + + Fedora) + # Adresse du miroir + MIRROR="rsync://ftp.uvsq.fr/fedora/" + # Architectures à exclure (à choisir parmi : + # i386, x86-64) + ARCH_EXCLUDE="" + # Exclusions supplémentaires + EXCLUDE="--exclude development --exclude test --exclude updates \ + --exclude source --exclude debug --exclude os --exclude SRPMS \ + --exclude *-rescuecd.iso --exclude *-disc* " + for ARCH in $ARCH_EXCLUDE; do + EXCLUDE=$EXCLUDE"--exclude $ARCH " + done + PATHLOCAL=$PATHFTP"$DIST/" + ENTMAIL2="$DIST ($PATHLOCAL)\n======\n" + TAIL=3 + ;; + + Gentoo) + # Adresse du miroir + MIRROR="rsync://ftp.belnet.be/gentoo/releases/" + # Architectures à exclure (à choisir parmi : + # alpha, amd64, hppa, ia64, ppc, ppc64, sparc, x86) + ARCH_EXCLUDE="alpha hppa ia64 ppc ppc64 sparc" + # Exclusions supplémentaires + EXCLUDE="--exclude historical --exclude mips --exclude stages \ + --exclude packagecd --exclude snapshots --exclude livecd " + for ARCH in $ARCH_EXCLUDE; do + EXCLUDE=$EXCLUDE"--exclude $ARCH " + done + PATHLOCAL=$PATHFTP"$DIST/" + ENTMAIL2="$DIST ($PATHLOCAL)\n======\n" + TAIL=21 + ;; + + Knoppix) + # Adresse du miroir + MIRROR="rsync://ftp.belnet.be/packages/knoppix/" + # Architectures à exclure (à choisir parmi : + # alpha, amd64, hppa, ia64, ppc, ppc64, sparc, x86) + ARCH_EXCLUDE="" + # Exclusions supplémentaires + EXCLUDE="--exclude contrib --exclude docs --exclude dvd \ + --exclude knoppix-cover --exclude knoppix-customize \ + --exclude knoppix-dvd --exclude packages-dvd.txt \ + --exclude knoppix-vortrag-als2000 --exclude md5-old --exclude qemu-0.8.1 \ + --exclude qemu-0.8.1-windows-README.txt --exclude *DE* " + for ARCH in $ARCH_EXCLUDE; do + EXCLUDE=$EXCLUDE"--exclude $ARCH " + done + PATHLOCAL=$PATHFTP"$DIST/" + ENTMAIL2="$DIST ($PATHLOCAL)\n=======\n" + TAIL=21 + ;; + + Ubuntu) + # Adresse du miroir + MIRROR="rsync://ftp.oleane.net/ubuntu-cd/" + # Architectures à exclure (à choisir parmi : + # amd64 i386 powerpc sparc) + ARCH_EXCLUDE="amd64 powerpc sparc" + # Fichiers/repertoires à exclude pour ces architectures + # de la forme "--exclude foo1$ARCH/ --exclude foo2$ARCH/ ... " + #ARCH_FR_EXCL="--exclude ${ARCH} " + # Exclusions supplémentaires + EXCLUDE="--exclude cdicons --exclude edubuntu --exclude favicon.ico \ + --exclude FOOTER.html --exclude HEADER.html --exclude jigit \ + --exclude releases --exclude ubuntu-server --exclude .trace \ + --exclude .htaccess --exclude .manifest " + # A virer une fois les tests finis + EXCLUDE=$EXCLUDE"--exclude kubuntu* --exclude xubuntu* --exclude ubuntu* " + for ARCH in $ARCH_EXCLUDE; do + EXCLUDE=$EXCLUDE"--exclude *-$ARCH.* " + done + PATHLOCAL=$PATHFTP"$DIST/" + ENTMAIL2="$DIST ($PATHLOCAL)\n======\n" + TAIL=8 + ;; + + esac + + umask 002 + rsync $RSYNCOPT $EXCLUDE $MIRROR $PATHLOCAL > $LOGRSYNC + ERRC=$? + cat $LOGRSYNC + # En cas d'erreur, on notifie avec le code de sortie. + if [ $ERRC != 0 ]; then + echo "Erreur $ERRC" + echo -e $ENTMAIL2 >> $LOGMAIL + echo -e "Erreur, le processus rsync a retourné le code $ERRC.\n\n" >> $LOGMAIL + else + # Si une mise à jour a été effectuée, on notifie. + tail -n +$TAIL $LOGRSYNC > $LOGTEMP + # Sortie de test + cat $LOGTEMP + STATUS=$(cat $LOGTEMP | wc -l) + if (($STATUS > 2)); then + echo -e $ENTMAIL2 >> $LOGMAIL + cat $LOGTEMP >> $LOGMAIL + echo -e "\n" >> $LOGMAIL + fi + fi + +#echo $STATUS + +done + +# Fonction d'envoi du mail de notification +mail_ftp() { + local FROM="From:FTP Public (Sila)" + local SUBJECT="Notification de synchronisation du FTP" + local RECIPIENT="" + local XMAILER="X-Mailer:Bash sync-ftp (by August')" + echo $1 | mail -a "$FROM" -a "$XMAILER" -s "$SUBJECT" $RECIPIENT < $1 +} + +# Envoi du mail de notification +LENGTH_MAIL=$(cat $LOGMAIL | wc -l) +if (($LENGTH_MAIL > 4)); then + echo -e $ENTMAIL3 >> $LOGMAIL + mail_ftp $LOGMAIL +fi + +echo $LENGTH_MAIL + +# Nettoyage des fichiers temporaires +rm -f $LOGRSYNC +rm -f $LOGTEMP +rm -f $LOGMAIL + +exit 0 diff --git a/archive/gestion/whos_pg.py b/archive/gestion/whos_pg.py new file mode 100755 index 00000000..8a02d3af --- /dev/null +++ b/archive/gestion/whos_pg.py @@ -0,0 +1,1305 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (C) Frédéric Pauget +# Licence : GPLv2 + +u"""Ce script permet de recherche et d'afficher le détail d'une machine ou +d'un adhérent. + +Usage: %(prog)s [options] + +La chaine de recherche peut être : + * soit un terme unique, dans ce cas la recherche sera effectuée sur les +champs en bleu ci-dessous. + * soit du type "champ1=valeur1&champ2!=valeur2 ...", les résultats seront +alors limités aux entrées correspondantes à tous les critères. + +Les champs de recherche possibles sont : +%(champs_rech)s + +Recherche sur prise possible (utiliser uniquement ce champ dans ce cas). + +Les options de recherches sont : + * limitations sur l'affichage : + -a ou --adherent : limitation de l'affichage aux adhérents + -m ou --machine : limitation de l'affichage aux machines + -c ou --club : limitation de l'affichage aux clubs + -b ou --bornes : limitation de l'affichage aux bornes wifi + --crans : recherche uniquement les machines du crans + * options d'affichage : + -t ou --tech : affichages des infos techniques des machines +à la place des infos administratives dans les résumés. + -i ou --ipsec : montre la clef wifi (anciennement ipsec) des machines wifi + -l ou --limit= : limite du nombre de résultats pour utiliser +le mode d'affichage condensé au lieu du mode détaillé (défaut %(limit_aff_details)i) + -L ou --limit-historique= : limitation du nombre de lignes +d'historique affichées (défaut %(limit_aff_historique)i) + -d ou --limit-blacklist= : limitation du nombre de lignes +d'historique des déconnexions affichées (défaut %(limit_aff_blacklist)i) +""" + +try: + import sys,locale + + loc = locale.getdefaultlocale() + if loc[1]: + sys.reallysetdefaultencoding(loc[1]) +except: + pass + +base = None + +from time import strftime, localtime, time +from ldap_crans import is_actif, crans_ldap, ann_scol, AssociationCrans, hostname +from ldap_crans import MachineCrans, MachineWifi, BorneWifi +from ldap_crans import Adherent +from affich_tools import * +import user_tests +import subprocess, commands + +limit_aff_details = 1 +limit_aff_machines = 15 +limit_aff_historique = 4 +limit_aff_blacklist = 4 +aff_ipsec = 0 + +################################################################################ +### Fonctions utiles + +def indicatif (num): + """ + Sépare l'indicatif de nationalité du reste d'un numéro de téléphone + """ + if num[0:2] != '00': + return ('', num) + if num[2] == '1': + return ('1 '+num[3:6], num[6:]) + if num[2] in ['0','7']: + return (num[2], num[3:]) + # indicatifs nationaux à 2 chiffres + ids = [20, 27, 36, 86, 98] + ids.extend(range(30,35)) + ids.extend(range(39,42)) + ids.extend(range(43,50)) + ids.extend(range(51,59)) + ids.extend(range(60,67)) + ids.extend(range(81,85)) + ids.extend(range(90,96)) + if int(num[2:4]) in ids: + return (num[2:4], num[4:]) + return (num[2:5], num[5:]) + +def format_tel (num): + """ + Formate un numéro de téléphone + * Remplace un éventuel "00" au début par un "+" + * Insère des espaces pour que ce soit lisible + """ + res = '' + (indic, reste) = indicatif(num) + if indic != '': + res += '+' + indic + ' ' + l = len(reste) + if l%2 == 1: + res += reste[0] + ' ' + for i in range(l%2,l,2): + res += reste[i:i+2] + ' ' + return res + +################################################################################ + +def aff(qqch,mtech=0) : + """ Affichage de qqch. + qqch peut être une liste d'instances des classes adhérent ou machine + (un seul type dans la liste) dans ce cas : + * si la longueur de la liste est inférieure à limit_aff_details + affiche les propriétés détaillées de chaque élément. + * sinon résume dans un tabeau des principales propriétés + si qqch est une instance seul la traité comme une liste à une élément + Si mtech = 1 affiches les infomations techniques des machines plutot + qu'administratives dans le tableau des propriétés + """ + if type(qqch) != list : + qqch = [ qqch ] + + if len(qqch) > limit_aff_details : + t = qqch[0].idn + if t == 'aid': + cprint(adhers_brief(qqch)) + elif t == 'mid': + if mtech: + cprint(list_machines(qqch)) + else: + cprint(machines_brief(qqch)) + elif t == 'cid': + cprint(clubs_brief(qqch)) + else : + i = 0 + for c in qqch : + t = c.idn + if i: cprint(u'='*80, 'cyan') + i = 1 + if t == 'aid': + cprint(adher_details(c).strip()) + elif t == 'mid': + cprint(machine_details(c).strip()) + elif t == 'cid': + cprint(club_details(c).strip()) + + # affiche le nombre de résultats + if len(qqch) > 1: + cprint(u"Total: %d" % len(qqch)) + +def adhers_brief(adhers) : + """ + Formatage sous forme de tableau des infos sur la liste d'adhérent fournie : + * aid + * prénom nom + * chambre + * machines + """ + data = [] + + # Copie locale triée par (nom, prenom) + adhers = adhers[:] + adhers.sort(lambda x, y: cmp((x.nom(), x.prenom()), (y.nom(), y.prenom()))) + + for a in adhers: + ## État administratif + ok = u'\x1b[1;32mo\x1b[1;0m' + ook = u'\x1b[1;32mO\x1b[1;0m' + nok = u'\x1b[1;31mn\x1b[1;0m' + # Paiement + if ann_scol in a.paiement(): + if 'p' in a.controle(): paid = ook + else: paid = ok + elif isinstance(a,Adherent) and not a.adherentPayant(): paid = coul('G', 'bleu') + else: paid = nok + + # Précablage + if ann_scol+1 in a.paiement() : paid = coul(paid,'f_vert') + + # Carte d'étudiant + if ann_scol in a.carteEtudiant(): + if 'c' in a.controle(): carte = ook + else: carte = ok + else : carte = nok + + machines = '' + # Récupération des machines + if len(adhers) <= limit_aff_machines: + for machine in a.machines() : + nom = machine.nom().split('.')[0] + if machine.blacklist_actif() : k = 'rouge' + elif isinstance(machine, MachineWifi): k = 'cyan' + else : k= '' + if machines : machines += ', ' + coul(nom,k) + else : machines = coul(nom,k) + else: + machines = None + # Données + if len(adhers) <= limit_aff_machines: + data.append([a.id(), a.Nom(), a.chbre(), paid, carte, machines]) + else: + data.append([a.id(), a.Nom(), a.chbre(), paid, carte]) + + if len(adhers) <= limit_aff_machines: + return u"Machines en rouge = machines avec limitation de services\n" + \ + u"P : paiement année en cours, le fond vert indique le précâblage (G bleu = inscription gratuite)\n" + \ + u"C : carte d'étudiant année en cours\n" + \ + tableau(data, + titre = [u'aid', u'Prénom Nom', u'Chbre', u'P', u'C', u'Machines'], + largeur = [5, 30, 5, 1, 1, '*'], + alignement = ['d', 'c', 'g', 'c', 'c', 'c']) + else: + return u"Machines en rouge = machines avec limitation de services\n" + \ + u"P : paiement année en cours, le fond vert indique le précâblage (G bleu = inscription gratuite)\n" + \ + u"C : carte d'étudiant année en cours\n" + \ + tableau(data, + titre = [u'aid', u'Prénom Nom', u'Chbre', u'P', u'C'], + largeur = [5, '*', 5, 1, 1], + alignement = ['d', 'c', 'g', 'c', 'c']) + +def machines_brief(machines) : + """ + Formatage sous forme d'un tableau des propriétés de la liste de machine : + * mid + * type (fixe ou wifi, born) + * nom + * adresse IP + * adresse MAC + * si blacklistée + """ + data = [] + + # Copie locale triée par nom + machines = machines[:] + machines.sort(lambda x, y: cmp(x.nom(), y.nom())) + + for m in machines : + t, bl = __bases_machines(m) + + # Propriétaire + a = m.proprietaire() + p = a.Nom() + + # A jour administrativement + if ann_scol not in a.paiement() or ann_scol not in a.carteEtudiant(): + if isinstance(a, Adherent) and not a.adherentPayant(): + p = coul(p, 'bleu') + else: + p = coul(p,'rouge') + + # Données + data.append([m.id() , t, m.nom().split('.')[0], p, a.chbre(), bl]) + + return u"Le propriétaire en rouge signale un problème administratif, en bleu une inscription gratuite\n" + \ + tableau(data, + titre = [u'mid', u'Type', u'Nom de machine', u'Propriétaire', u'Chbre', u'Limitation'], + largeur = [5, 4, 18, '*', 5, 10], + alignement = ['d', 'c', 'c', 'c', 'g', 'c']) + +def clubs_brief(clubs) : + """ + Formatage sous forme de tableau des infos sur la liste de clubs fournie : + * cid + * nom + * local + * machines + """ + data = [] + + # Copie locale triée par Nom + clubs = clubs[:] + clubs.sort(lambda x, y: cmp(x.Nom(), y.Nom())) + + for c in clubs : + ## État administratif + ok = u'\x1b[1;32mo\x1b[1;0m' + ook = u'\x1b[1;32mO\x1b[1;0m' + nok = u'\x1b[1;31mn\x1b[1;0m' + # Paiement + if ann_scol in c.paiement(): + if 'p' in c.controle(): paid = ook + else: paid = ok + else : paid = nok + + # Précablage + if ann_scol+1 in c.paiement() : paid = coul(paid,'f_vert') + + machines = '' + # Récupération des machines + for machine in c.machines() : + nom = machine.nom().split('.')[0] + if machine.blacklist_actif() : k = 'rouge' + else : k= '' + if machines : machines += ', ' + coul(nom,k) + else : machines = coul(nom,k) + + # Responsable + try: + resp = c.responsable().Nom() + except ValueError, e: + resp = e + + # Données + data.append([c.id() , c.Nom(), c.local(), paid, resp, machines]) + + return u"Machines en rouge = machines avec limitation de services\n" + \ + u"P : signature charte année en cours, le fond vert indique le précâblage\n" + \ + tableau(data, + titre = [u'cid', u'Nom ', u'Local', u'P', u'Responsable', u'Machines'], + largeur = [5, '*', 6, 1, 21, 15], + alignement = ['d', 'c', 'g', 'c', 'c', 'c']) + + +def list_machines(machines) : + """ + Formatage sous forme d'un tableau des propriétés de la liste de machine : + * mid + * type (fixe ou wifi) + * nom + * adresse IP + * adresse MAC + * si blacklistée + """ + data = [] + + # Copie locale triée par nom + machines = machines[:] + machines.sort(lambda x, y: cmp(x.nom(), y.nom())) + + for m in machines : + t, bl = __bases_machines(m) + + # Données + data.append([m.id(), t, m.nom().split('.')[0], m.ip(), m.mac(), bl]) + + return tableau(data, + titre = [u'mid', u'Type', u'Nom de machine', u'Adresse IP', u'Adresse MAC', u'Limitation'], + largeur = [5, 4, '*', 17, 19, 10], + alignement = ['d', 'c', 'c', 'c', 'c', 'c']) + +def list_bornes(bornes) : + """ + Formatage sous forme d'un tableau des propriétés de la liste de bornes wifi : + * mid + * nom + * adresse IP + * adresse MAC + * État + * puissance + * canal + * lieu (la première remarque en fait) + """ + data = [] + + # Copie locale triée par nom + bornes = bornes[:] + bornes.sort(lambda x, y: cmp(x.nom(), y.nom())) + + ok = u'\x1b[1;32mu\x1b[1;0m' + nok = u'\x1b[1;31md\x1b[1;0m' + for b in bornes : + t, bl = __bases_machines(b) + if t != 'born' : continue + + # Données + try : + l = [x for x in b.info() if not x[0]=='<'][0] + if len(l) > 11 : + l = l[0:11] + except : + l = u'????' + + if borne_etat(b.nom()): + etat = ok + else: + etat = nok + + if '-' in b.puissance() : + puiss = coul(b.puissance(),'rouge') + else : + puiss = b.puissance() + + data.append([b.id(), b.nom().split('.')[0], b.ip(), b.mac(), etat, b.canal(), puiss, b.prise(), l]) + + return u"Can=canaux, P=puissance, E=état\n" + \ + tableau(data, + titre = [u'mid', u'Nom', u'Adresse IP', u'Adresse MAC', u'E', u'Can', u'P', u'Pris', u'Lieu'], + largeur = [5, 13, 15, 17, 1, 5, 3, 4, '*'], + alignement = ['d', 'c', 'c', 'c', 'c', 'c', 'c', 'g', 'c']) + +def adher_details(adher) : + """ + Affichage du détail des propriétés d'un adhérent + """ + f=u'' + # Aid + f+= coul(u'aid=%s ' % adher.id() ,'bleu') + # Nom, prenom + f += coul(u'Nom : ','gras') + "%s\n" % adher.Nom() + + # Mail + GL = RMH = u'' + if adher.mail().find(u'@')!=-1 or adher.mail() == '': + f += coul(u'Adresse mail : ','gras') + if adher.mail() == '': + f += coul('INCONNUE','rouge') + elif adher.mail_invalide(): + f += coul(adher.mail(),'rouge') + else: + f += adher.mail() + f += "\n" + else : + f += coul(u'Login : ','gras') + if adher.mail_invalide(): + f += coul(adher.mail(),'rouge') + else: + f += adher.mail() + f += "\t" + # controurneGreylisting + if not adher.contourneGreylist(): + GL = u' (%s)'%coul(u'GreyList','gris') + if adher.rewriteMailHeaders(): + RMH = u' (%s)'%coul(u'réécriture en-têtes mail','gris') + + alias = u', '.join([adher.canonical_alias()] + adher.alias()) + if alias: + if alias[0] == u',': + # Canonical étéait vide + alias = alias[2:] + f += coul(u'Alias : ','gras') + alias + f += GL + f += RMH + f += u'\n' + try: + forward = file("/home/%s/.forward" % adher.compte()).readlines() + if len(forward) > 1: + forward = forward[0].strip() + u" ...\n" + elif len(forward) == 1: + forward = forward[0].strip() + u"\n" + if forward: + f += coul(u'Redirection : ', 'gras') + forward + except IOError, e: + # Pas de .forward, ou .forward privé... on laisse tomber + pass + f += coul(u'Dernière connexion : ', 'gras') + timestamp = adher.derniereConnexion() + if timestamp == 0: + f += coul(u'Jamais', 'rouge') + else: + f += coul(strftime('%d/%m/%Y %H:%M', localtime(timestamp)), + time()-timestamp > 32*24*3600 and 'rouge' or '') + f += u"\n" + + # État administratif + f += coul("Date d'inscription : ", "gras") + f += strftime('%d/%m/%Y %H:%M', localtime(adher.dateInscription())) + f += coul(u'\nÉtat administratif : ','gras') + jour=1 + if ann_scol not in adher.carteEtudiant() : + f += coul(u"manque carte d'étudiant",'violet') + jour = 0 + if ann_scol not in adher.paiement() : + if not jour : f += ' et ' + if isinstance(adher, Adherent) and not adher.adherentPayant(): + f += coul(u"inscription gratuite ", 'bleu') + else: + f += coul(u"cotisation %s/%d non réglée"% (ann_scol, ann_scol+1 ),'violet') + jour = 0 + + if jour : + f += coul(u"à jour",'vert') + f += '\n' + + # Telephone + tel = adher.tel() + if tel != 'inconnu' : + f += coul(u'Numéro de téléphone : ','gras') + "%s\n" % format_tel(tel).ljust(12) + + # Adresse + chbre = adher.chbre() + if chbre == 'EXT' : + # Adhérent extérieur + addr = adher.adresse() + if addr[0] : + f += coul(u'Adresse : ','gras') + f += addr[0] + u'\n' + if addr[1] != ' ' : f += u' ' + addr[1] + u'\n' + f+= u' ' + addr[2] + u' ' + addr[3] + '\n' + elif chbre == '????' : + f += coul(u'Chambre invalide\n','violet') + else : + # Chambre + prise (d'après annuaire) + etat, vlans, cablage = prise_etat(adher.chbre()) + f += coul(u'Chambre : ','gras') + u"%s " % chbre + f += u'(%s)' % etat + f += u'\n' + f += coul(u'Brassage : ','gras') + f += cablage + f += u'\n' + # VLAN + if vlans : + f += coul(u'VLAN : ','gras') + u'%s' % vlans + f += u'\n' + + # Études + if adher.etudes(1).isdigit() : + f += coul(u'Études : ','gras')+ "%s %s%s\n" % \ + ( adher.etudes(0), adher.etudes(1), adher.etudes(2) ) + elif adher.etudes(0) : + f += coul(u'Études : ','gras')+ "%s %s %s\n" % \ + ( adher.etudes(0), adher.etudes(1), adher.etudes(2) ) + + # Solde + solde = adher.solde() + if solde : + f += coul(u'Solde : ','gras') + if solde < 0 : + f+= coul(str(solde).replace('.',','),'rouge') + else : + f += str(solde).replace('.',',') + f += u" Euros\n" + + # Role dans l'assoce + d = adher.droits() + if d : + f += coul(u"Droits sur les serveurs : ",'gras') + ', '.join(d) + if adher.droitsGeles(): + f += coul(u" (droits gelés car pas cotisé cette année)",'bleu') + f += u'\n' + + # Paiement + if adher.paiement() : + if len(adher.paiement()) == 1 : + f += coul(u'Cotisation payée pour l\'année scolaire :','gras') + else : + f += coul(u'Cotisation payée pour les années scolaires :','gras') + g = u'' + for an in adher.paiement() : g += u" %i-%i" % ( an, an+1 ) + if len(g) > 35 : f += '\n\t' + f += g + if 'p' in adher.controle(): f += coul(u' (OK)', 'vert') + f += u'\n' + + # Cartes d'étudiant fournie + if adher.carteEtudiant() : + if len(adher.carteEtudiant()) == 1 : + f += coul(u"Carte d'étudiant fournie pour l'année scolaire :",'gras') + else : + f += coul(u"Carte d'étudiant fournie pour les années scolaires :",'gras') + g = u'' + for an in adher.carteEtudiant() : g += u" %i-%i" % ( an, an+1 ) + if len(g) > 25 : f += '\n\t' + f += g + if 'c' in adher.controle(): f += coul(u' (OK)', 'vert') + f += u'\n' + + f += _blacklist(adher) + f += _info(adher) + f += _hist(adher) + + # Formatage des machines aussi + f += coul(u'Machine(s) : ','gras') + m = adher.machines() + if m : + f += u'\n' + list_machines(m) + else : + f += u'aucune' + + return f + +clients_ipsec = None +def ipsec_ok(machine) : + """Indique si une machine est correctement authentifiée""" + return False + +def machine_details(machine) : + """ + Formatage du détail des propriétés d'une machine + """ + f = '' + f+= coul(u'mid=%s ' % machine.id(),'bleu') + + # Type de machine + if isinstance(machine, MachineWifi): a = 'Machine wifi' + elif isinstance(machine, BorneWifi): a = 'Borne wifi' + else: a = 'Machine fixe' + f += coul(a + ' : ', 'gras') + + f+= "%s\n" % machine.nom() + + # Alias ? + alias = machine.alias() + if alias : + f += coul(u'Alias : ' ,'gras') + ', '.join(alias) + f+= '\n' + + f+= coul(u'IP : ','gras') + "%s\t\t" %machine.ip() + f+= coul(u'MAC : ','gras') + "%s\n" %machine.mac() + + # Propriétaire + f+= coul(u'Propriétaire : ','gras') + try : + f += machine.proprio + coul(' (adhérent détruit)', 'jaune') + a = AssociationCrans() + except : + a = machine.proprietaire() + f += "%s" % a.Nom() + if a.chbre() in ['EXT', '????']: + f += ' (%s = %s)' % (a.idn, a.id()) + elif a.chbre() != 'CRA': + f += " (%s)" % a.chbre() + else : + f += coul(u'\t\tPrise : ','gras') + machine.prise() + f+= '\n' + + if isinstance(machine, MachineCrans): + n = machine.nombrePrises() + if n >= 0: + f += coul(u'Nombre de prises : ', 'gras') + f += "%d\n" % n + + # Adhérent blacklisté ? + bl = a.blacklist_actif() + if bl : + f += coul(u'Restrictions sur adhérent : ','gras') + f += coul(u', '.join(bl),'rouge') + f += '\n' + + # Borne wifi + if isinstance(machine, BorneWifi): + f += coul(u'Hotspot : ', 'gras') + f += machine.hotspot() and 'oui' or 'non' + position = machine.position() + if position: + f += coul(u'\t\t\tCoordonnées : ', 'gras') + f += u'%s°N, %s°E\n' % position + else: + f += '\n' + + if (machine.prise() != 'N/A'): + try: + f += coul(u'VLANs : ', 'gras') + from hptools import sw_prise + f += ', '.join(sw_prise(machine.prise()).vlans()) + f += '\n' + except: + pass + + f += coul(u'Puissance : ','gras') + u"%4.d" % int(machine.puissance()) + f += coul(u'\tCanaux : ', 'gras') + machine.canal() + f += coul(u'\tÉtat : ', 'gras') + if borne_etat(machine.nom()): + f += coul(u'borne active', 'vert') + f += '\n' + canal_clients = borne_clients_canal(machine.nom()) + clients = canal_clients["mac-rssi"] + canal = canal_clients["canal"] + f += coul(u'\t Canal courant : ', 'gras') + u"%d" % canal + f += "\n" + # S'il y a des clients, on les liste + if clients and base: + f += coul(u'Clients : \n','gras') + for (client, rssi) in clients: + # On va chercher le nom correspondant à l'adresse MAC + res = base.search("mac=%s" % client)['machine'] + authentification="" + if not res: + client_nom = '????' + client_chbre = '????' + else: + client_nom = ", ".join(["%s [%s]" % (x.nom().split(".")[0], + x.proprietaire().Nom()) for x in res]) + # On va regarder si le client est authentifié + auth_ok = ipsec_ok(x) + if auth_ok != None: + if auth_ok: + authentification = "; IPSec: %s" % OK + else: + authentification = "; IPSec: %s" % ERREUR + client_chbre = " ".join(["%s " % (x.proprietaire().chbre()) for x in res]) + # On va choisir la bonne couleur pour le RSSI + if rssi > -88: + coul_rssi = 'vert' + elif rssi > -93: + coul_rssi = 'jaune' + else: + coul_rssi = 'rouge' + f += u' %s (%s Chbre : %s) (RSSI: %s%s)\n' % (client, client_nom, client_chbre, + coul("%d" % rssi, coul_rssi), + authentification) + else: + f += coul(u'borne éteinte','rouge') + f += '\n' + if machine.nvram(): + f += coul(u'NVRAM : ', 'gras') + f += ', '.join(machine.nvram()) + '\n' + + if aff_ipsec and isinstance(machine, MachineWifi): + f += coul(u'Clef WiFi : ','gras') + machine.ipsec() + f += '\n' + + # Ports spéciaux + if machine.portTCPin(): + f += coul(u'Ports TCP ouvert ext->machine : ','gras') + ' '.join(machine.portTCPin()) + '\n' + if machine.portTCPout(): + f += coul(u'Ports TCP ouvert machine->ext : ','gras') + ' '.join(machine.portTCPout()) + '\n' + if machine.portUDPin(): + f += coul(u'Ports UDP ouvert ext->machine : ','gras') + ' '.join(machine.portUDPin()) + '\n' + if machine.portUDPout(): + f += coul(u'Ports UDP ouvert machine->ext : ','gras') + ' '.join(machine.portUDPout()) + '\n' + + # Exemption d'upload + if machine.exempt() : + f += coul(u'Upload exempté vers : ','gras') + ', '.join(machine.exempt()) + '\n' + + f += _blacklist(machine) + f += _info(machine) + f += _hist(machine) + + return f + +def club_details(club) : + """ + Affichage du détail des propriétés d'un club + """ + f='' + # Cid + f+= coul(u'cid=%s ' % club.id() ,'bleu') + # Nom + f += coul(u'Nom : ','gras') + "%s\n" % club.Nom() + + # responsale + f += coul(u'Responsable : ','gras') + "%s\n" % club.responsable().Nom() + + # Imprimeurs + if len(club.imprimeurs()) > 0: + f += (coul(u'Imprimeurs : ', 'gras') + "%s\n" % ', '.join(map(lambda x: + club.search("aid=%s" % x)['adherent'][0].Nom(), club.imprimeurs()))) + + # État administratif + f += coul(u'État administratif : ','gras') + jour=1 + if ann_scol not in club.paiement() : + if not jour : f += ' et ' + f += coul(u"charte %s/%d non signée"% (ann_scol, ann_scol+1 ),'violet') + jour = 0 + + if jour : + f += coul(u"à jour",'vert') + f += '\n' + + # Chambre + prise + etat, vlans, cablage = prise_etat(club.chbre()) + f += coul(u'Local : ','gras') + u"%s " % club.local() + f += u'(%s)' % etat + f += u'\n' + f += coul(u'Brassage : ','gras') + f += cablage + f += u'\n' + # VLAN + if vlans : + f += coul(u'VLAN : ','gras') + u'%s' % vlans + f += u'\n' + + # Paiement + if club.paiement() : + f += coul(u'Charte signée pour les années scolaires :','gras') + g = '' + for an in club.paiement() : g += " %i-%i" % ( an, an+1 ) + if len(g) > 35 : f += '\n\t' + f += g + if 'p' in club.controle(): f += coul(u' (OK)', 'vert') + f += '\n' + + login = club.compte() + if login : + f += coul(u'Login : ','gras') + login + alias = club.alias() + if alias : + f += coul(u'\tAlias : ','gras') + ', '.join(alias) + f+= u'\n' + + # Solde + solde = club.solde() + if solde: + f += coul(u'Solde : ', 'gras') + if solde < 0: + f+= coul(str(solde).replace('.', ','), 'rouge') + else: + f += str(solde).replace('.', ',') + f += u" Euros\n" + + f += _blacklist(club) + f += _info(club) + f += _hist(club) + + # Formatage des machines aussi + f += coul(u'Machine(s) : ','gras') + m = club.machines() + if m : + f += '\n' + list_machines(m) + else : + f += 'aucune' + + return f + +########################################### +# Fonctions annexes de formatage de données + +def _blacklist(clas): + """ Formatage blackliste de la classe fournie """ + if limit_aff_blacklist == 0: return '' + f = u'' + bl = clas.blacklist() + bl.reverse() + nb = 0 + for event in bl: + nb += 1 + if nb > limit_aff_blacklist: break + if is_actif(event): + # Colorisation si sanction en cours + c = 'rouge' + else : + c = 'blanc' + event = event.split('$') + dates = strftime('%d/%m/%Y %H:%M', localtime(int(event[0]))) + if event[1] == '-': + dates = u'à partir du %s' % dates + else: + dates = u'du %s au ' % dates + dates += strftime('%d/%m/%Y %H:%M', localtime(int(event[1]))) + f += u"%s\n\t " % coul(u'%s : %s [%s]' % (dates, event[2], event[3]), c) + + f = f[:-6] # suppression des espaces superflus + + if len(bl) > limit_aff_blacklist: + f += ' [...]\n' + + if f: + return coul(u'Blackliste : ', 'gras') + f + else: + return '' + +def _info(clas) : + """ Formatage des remarques de la classe fournie """ + f= u'' + c = clas.info() + if c : + f += coul(u'Remarque :\n ' ,'gras') + f += u'\n '.join(c) + f += u'\n' + return f + +def _hist(clas) : + """ Formatage de l'historique de la classe fournie """ + if limit_aff_historique==0 : return '' + f=u'' + h = clas.historique() + h.reverse() + if h : + f += coul(u'Historique : ','gras') + for i in range(0,limit_aff_historique) : + try : + a = h[i] # Produit une erreur si i trop grand + if i !=0 : f += ' ' + try: + # on force l'encodage ici sinon il est fait au moment de l'impression a + # l'ecran et il empeche l'affichage de toutes les infos + f += u'%s\n' % a + except Exception, e: + if debug: + f += coul(u'*** non affichable [%s] ***\n' % str(e), 'rouge') + else: + f += coul(u'*** non affichable ***\n', 'rouge') + except : + break + try : + if h[i+1] : f += ' [...]\n' + except : + None + + return f + +def __bases_machines(m) : + """ Retourne [ type de la machines, blacklist ] """ + #Type + if isinstance(m, MachineWifi): t = 'wifi' + elif isinstance(m, BorneWifi): t = 'born' + else : t='fixe' + + # Déconnectée ? + b = m.blacklist_actif() + if not b : + bl = '-' + elif len(b) == 1 : + bl = coul(b[0],'rouge') + else : + bl = coul(u'cf détails','rouge') + + return t , bl + +def borne_etat(borne) : + """Renvoie vrai si la borne est up, faux sinon""" + # On utilise fping, en cas d'erreur, on considere + # que la borne est down (alors qu'elle peut simplement + # ne pas exister) + try: + retour = os.system("fping -q -c 1 %s > /dev/null 2> /dev/null" % borne) + return (retour == 0) + except: + return False + +def borne_clients_canal(borne) : + """Renvoie la liste des adresses MAC associées à la borne ainsi que le canal. + + Chaque adresse MAC est en fait contenue dans un couple comprenant + l'adresse MAC et le RSSI du client associé. + + On en profite pour renvoyer également le canal en cours de la + borne. On fait cela dans la même fonction car cela évite de faire + deux connexions ssh (ce qui est fort coûteux). + + Au final, on renvoie un dictionnaire + - mac-rssi: une liste de couples (MAC, RSSI) + - canal: le canal en cours + """ + macs = [] + canal = -1 + return {"canal": canal, "mac-rssi": macs} # Suite à réimplémenter + # Uniquement possible pour les admins et si on a la clef + for clef in ["/etc/wifi/ssh/wifi","/usr/scripts/gestion/clef-wifi"]: + if os.path.isfile(clef) and user_tests.isadm(): + try: + wl = subprocess.Popen("ssh -o StrictHostKeyChecking=no -i %s root@%s 'cat /tmp/auth-mac.dump ; echo -n \"CANAL \" ; /usr/sbin/nvram get wl0_channel'" % (clef, borne), shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) + wl.stdin.close() + for line in wl.stdout.readlines(): + print 'coucou' + print line + # Chaque ligne est de la forme + # 00:11:22:33:44:55 -20 + line = line.strip().split() + if line[0] == "CANAL": + canal = int(line[-1]) + else: + macs.append((line[0].strip(), int(line[1].strip()))) + except: + pass + break # Pas la peine d'essayer une autre clef + return {"canal": canal, "mac-rssi": macs} + +def prise_etat(chbre) : + """ + Retoune un triplet contenant l'état de la prise associée à la [chbre], + les VLANs activés ainsi que l'état du brassage. + """ + f = u'' + vlans = u'' + cablage = u'' + try: + # On met aussi l'état + from hptools import sw_chbre, ConversationError + import annuaires_pg + prise = sw_chbre(chbre) + vlans += ', '.join(prise.vlans()) + if annuaires_pg.is_crans(chbre[0],chbre[1:]) : + cablage += coul(u'Cr@ns','bleu') + else : + cablage += coul(u'CROUS','jaune') + if annuaires_pg.is_connected(chbre[0],chbre[1:]) : + cablage += u'.' + else : + cablage += u', ' + coul(u'cablage non effectué !','rouge') + f += u'prise %s' % prise.prise_brute + rows, cols = get_screen_size() + if prise.is_up() : + f += u', ' + coul(u'machine branchée','vert') + reste_cols = cols - 45 + f+=', ' + macs = prise.show_prise_mac() + if len(macs) == 0: + if reste_cols < 20 : + # Faut aller à la ligne + f += u'\n ' + f += coul(u'aucune MAC détectée', 'jaune') + else: + if len(macs) == 1 and reste_cols > 25 : + # Une seule mac et on a assez de place + f += u"MAC: %s" % macs[0] + else : + # On va à la ligne + # Combien d'adresses MAC peut-on mettre par ligne ? + # Une adresse MAC =~ 20 caracteres + cols -= 17 # On met 15espaces devant chaque ligne + parligne = int(cols/20) + count = 0 + while len(macs) > 0: + if count % parligne == 0: + f += u'\n MACs: ' + else: + f += u', ' + f += u"%s" % macs.pop() + count += 1 + elif not prise.is_enable() : + f+= u', ' + coul(u'prise désactivée','rouge') + else : + f+= u', activée, lien non détecté' + try: + import annuaires_pg + extra_info = annuaires_pg.chbre_commentaire(chbre[0],chbre[1:]).decode('utf-8') + if extra_info: + f += u'\n' + ' '*10 + extra_info + except ValueError: + raise + except ConversationError, r: + # Switch non manageable ou down + f += ', ' + f+= {'Unknown host (No such file or directory)' : + u'switch non manageable', + 'Failure in sendto (Operation not permitted)' : + u'infos prise non dispo : filtre vers adm par fw', + 'sh: line 1: command not found' : + u'infos prise non dispo depuis cette machine' + }.get(r.args[0],r.args[0]) + except ValueError, r : + f = r + except : + f = u'infos prise non dispo : erreur interne' + return f, vlans, cablage + +############################################################################## +## Partie dévolue au système de recherche + +def __usage_brief(err='') : + """ Message d'erreur """ + if err : cprint(err,'gras') + cprint(u"Pour obtenir de l'aide sur l'utilisation de ce programme utilisez l'option -h") + sys.exit(2) + +def __usage() : + """ Comment ca marche ? """ + liste = [] + accu = "" + longueur = 0 + + # Champs automatiques + champs = [] + for c in base.auto_search_champs.values(): + for champ in c: + if champ not in champs: + champs.append(champ) + for champ in champs: + coul_champ = coul(champ, "bleu") + if accu == "": + accu = coul_champ + longueur = len(champ) + elif longueur + 2 + len(champ) < 80: + longueur += 2 + len(champ) + accu += ", " + coul_champ + else: + liste.append(accu) + accu = coul_champ + longueur = len(champ) + + # Champs manuels + champs = [] + for c in base.non_auto_search_champs.values(): + for champ in c: + if champ not in champs: + champs.append(champ) + for champ in champs: + if longueur + 2 + len(champ) < 80: + longueur += 2 + len(champ) + accu += ", " + champ + else: + liste.append(accu) + accu = champ + longueur = len(champ) + + # Dernière ligne + liste.append(accu) + + cprint(__doc__ % { 'prog': sys.argv[0].split('/')[-1].split('.')[0], + 'champs_rech': '\n'.join(liste), + 'limit_aff_details': limit_aff_details, + 'limit_aff_historique': limit_aff_historique, + 'limit_aff_blacklist': limit_aff_blacklist }) + sys.exit(0) + +def __recherche() : + """ + Recherche et affichage des résultats à partir des options founies (sys.argv) + """ + global aff_ipsec, limit_aff_details, limit_aff_historique, limit_aff_blacklist, debug + + # Récupération des options + if len(sys.argv) == 1 : + # Pas d'option fournie + __usage_brief() + + try : + options, arg = getopt.getopt(sys.argv[1:], 'hamctbil:L:d:', [ 'debug', 'help', 'adherent', 'machine', 'club' , 'tech', 'bornes', 'limit=', 'limit-historique=', 'limit-blacklist=', 'ipsec', 'crans' ]) + except getopt.error, msg : + __usage_brief(unicode(msg)) + + + # Traitement des options + only_adh=0 + only_mac=0 + only_club=0 + only_bornes=0 + only_crans=0 + mtech = 0 + + for opt, val in options : + if opt == '-h' or opt=='--help' : + __usage() + elif opt =='--debug' : + # Mode debug + debug = 1 + elif opt == '-l' or opt =='--limit': + # Passage mode condensé, mode détaillé + try : limit_aff_details = int(val) + except : + __usage_brief(u'Valeur du paramètre %s incorrect (doit être un entier positif)' % opt) + elif opt == '-L' or opt =='--limit-historique': + # Limitation du nombre de lignes d'historique + try : limit_aff_historique = int(val) + except : + __usage_brief(u'Valeur du paramètre %s incorrect (doit être un entier positif)' % opt) + elif opt == '-d' or opt =='--limit-blacklist': + # Limitation du nombre de lignes d'historique + try : limit_aff_blacklist = int(val) + except : + __usage_brief(u'Valeur du paramètre %s incorrect (doit être un entier positif)' % opt) + elif opt in [ '-a', '--adherent' ] : + only_adh = 1 + cprint(u"Affichage limité aux adhérents.") + elif opt in [ '-m', '--machine' ] : + only_mac = 1 + cprint(u"Affichage limité aux machines.") + elif opt in [ '-c', '--club' ] : + only_club = 1 + cprint(u"Affichage limité aux clubs.") + elif opt == '--crans' : + only_crans = 1 + mtech = 1 + cprint(u"Affichage limité aux machines du crans.") + elif opt in [ '-b', '--bornes' ] : + only_bornes = 1 + cprint(u"Affichage limité aux bornes wifi.") + # On va tenter de limiter un peu la recherche + if not arg : + # Recherche initiale sans critère + arg = [ 'canal=*&host=*.crans.org'] + elif arg[0].find('=')!=-1 : + # Recherche avec critères + arg += [ '&canal=*' ] + elif opt in [ '-t', '--tech' ] : + # Format affichage des machines + mtech = 1 + elif opt in [ '-i', '--ipsec' ] : + # Affichage des clefs ipsec + aff_ipsec = 1 + + if only_adh + only_mac + only_club + only_bornes > 1 : + __usage_brief(u'Options utilisées incompatibles') + + arg = ' '.join(arg) + # Cas particulier de recherche sur prise + if arg.count('=') == 1 and arg.split('=')[0] == 'prise' : + prise = arg.split('=')[1] + # Récupération de la chambre + try: + from annuaires_pg import reverse + chbre = reverse(prise[0].lower(), prise[1:]) + except KeyError: + chbre=None + + if chbre: + if len(chbre) != 1 : + cprint(u"Prise correspondante à plusieurs chambres %s" % ' '.join(chbre)) + return + # On fait la recherche sur la chambre + chbre= prise[0] + chbre[0] + #cprint(u"Recherche sur chambre %s" % chbre) + arg = u'chbre=%s' % chbre + # sinon on ne fait rien et on recherche sur le champ prise + + try: + if only_crans : + res = { 'machine' : AssociationCrans().machines() , 'adherent' : [] , 'club' : [] } + else : + if not arg : + # Pas de chaine de recherche fournie + __usage_brief(u'Chaine de recherche incorrecte.') + res = base.search(arg) + except ValueError, c : + __usage_brief(c.args[0]) + + # Traitement du résultat + if not res['adherent'] and not res['machine'] and not res['club']: + # Pas de résultat dans la base + # Recherche sur chambre ? + if arg.count('=') == 1 and arg.split('=')[0] == 'chbre' : + # Affichage des infos de la chambre + chbre = arg.split('=')[1] + cprint(u"Chambre %s inoccupée ou invalide (%s)" % (chbre,prise_etat(chbre)[0])) + else : + cprint(u"Aucun résultat trouvé.") + sys.exit(3) + # L'affichage souhaité a été précisé ? + elif only_bornes : + if not res['machine'] : + cprint(u'Aucun résultat à afficher') + sys.exit(4) + else : + if len(res['machine']) > limit_aff_details : + cprint(list_bornes(res['machine'])) + else : + aff(res['machine']) + elif only_adh : + if res['adherent'] : aff(res['adherent']) + elif res['machine'] : + to_aff=[] + traite =[] + for m in res['machine'] : + a = m.proprietaire() + if a.idn != 'aid' or a.id() in traite : continue + traite.append(a.id()) + to_aff.append(m.proprietaire()) + if not(to_aff) : + cprint(u'Aucun résultat à afficher') + sys.exit(4) + aff(to_aff) + elif res['club'] : + cprint(u'Aucun résultat à afficher') + sys.exit(4) + elif only_mac : + if res['machine'] : aff(res['machine'],mtech) + else : + to_aff = [] + for a in res['adherent'] + res['club'] : + to_aff += a.machines() + aff(to_aff) + elif only_club : + if res['club'] : aff(res['club']) + elif res['machine'] : + to_aff=[] + traite =[] + for m in res['machine'] : + a = m.proprietaire() + if a.idn != 'cid' or a.id() in traite : continue + if a.id() in traite : continue + traite.append(a.id()) + to_aff.append(m.proprietaire()) + if not(to_aff) : + cprint(u'Aucun résultat à afficher') + sys.exit(4) + aff(to_aff) + elif res['adherent'] : + cprint(u'Aucun résultat à afficher') + sys.exit(4) + # Non : on affiche tout. + else : + if res['adherent'] : + cprint(u"Résultats trouvés parmi les adhérents :", 'cyan') + aff(res['adherent']) + if res['machine'] : + cprint(u"Résultats trouvés parmi les machines :", 'cyan') + aff(res['machine'],mtech) + if res['club']: + cprint(u"Résultats trouvés parmi les clubs :", 'cyan') + aff(res['club']) + +if __name__ == '__main__' : + global debug + debug = 0 + + import sys, getopt + + base = crans_ldap() + + try : + __recherche() + except KeyboardInterrupt : + cprint(u"Recherche interrompue par l'utilisateur.") + sys.exit(255) + except SystemExit, c : + # Fin + sys.exit(c) + except : + cprint(u"""Une erreur fatale s'est produite durant l'exécution. +Pour l'amélioration de ce programme merci de prévenir nounou en spécifiant la +marche à suivre pour reproduire cette erreur.""") + if debug : + cprint('-'*40) + cprint(u'Détails techniques :') + import traceback + # On veut le traceback sur la sortie standard + sys.stderr = sys.stdout + traceback.print_exc() + sys.exit(1) diff --git a/archive/lib b/archive/lib new file mode 120000 index 00000000..3c8e14b4 --- /dev/null +++ b/archive/lib @@ -0,0 +1 @@ +cranslib \ No newline at end of file diff --git a/archive/openvpn/ovh.conf b/archive/openvpn/ovh.conf new file mode 100644 index 00000000..4d57928e --- /dev/null +++ b/archive/openvpn/ovh.conf @@ -0,0 +1,24 @@ +daemon server-ovh +dev tun-ovh + +up /etc/openvpn/ovh.up +down /etc/openvp/ovh.down + +tls-server +log-append /var/log/openvpn/ovh.log + +dh /etc/openvpn/dh1024.pem +ca /etc/ssl/certs/cacert.org.pem +cert /etc/ssl/certs/vpn.pem +key /etc/ssl/private/vpn.pem +tls-verify "/usr/share/openvpn/verify-cn ovh.vpn.crans.org" + +port 1194 + +persist-tun +ping 15 +ping-restart 45 +ping-timer-rem +persist-key + +verb 3 diff --git a/archive/openvpn/ovh.down b/archive/openvpn/ovh.down new file mode 100755 index 00000000..4f65a044 --- /dev/null +++ b/archive/openvpn/ovh.down @@ -0,0 +1,3 @@ +#!/bin/bash +IP_OVH=138.231.144.8 +ip neigh del proxy ${IP_OVH} dev crans.2 diff --git a/archive/openvpn/ovh.up b/archive/openvpn/ovh.up new file mode 100755 index 00000000..f1b79610 --- /dev/null +++ b/archive/openvpn/ovh.up @@ -0,0 +1,19 @@ +#!/bin/bash + +set -e + +IP_KOMAZ=138.231.144.4 +IP_OVH=138.231.144.8 + +INTERFACE=$1; shift; +TUN_MTU=$1; shift; +UDP_MTU=$1; shift; + +ip link set ${INTERFACE} up +ip link set mtu ${TUN_MTU} dev ${INTERFACE} + +ip addr add ${IP_KOMAZ}/32 dev ${INTERFACE} +ip route add ${IP_OVH} dev ${INTERFACE} +ip neigh add proxy ${IP_OVH} dev crans.2 + +exit 0 diff --git a/archive/pjl_comm.py b/archive/pjl_comm.py new file mode 100755 index 00000000..ebb6fdb0 --- /dev/null +++ b/archive/pjl_comm.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-15 -*- + +"""Classe de communication avec l'imprimante +HP9500""" + +import socket + +class hp9500: + "Classe de communication avec la HP9500" + #\x1B est le caractere d'échappement échap. + UEL="\x1b%-12345X" + __douille=None + def __init__(self,hostname="laserjet.adm.crans.org",port=9100): + """Appelle à l'initalisation + hostname : nom d'hôte de l'imprimante + port : le port de communication avec l'imprimante + """ + self.hostname=hostname + self.port=port + + def cx_open(self): + """Ouvre la connexion vers l'imprimante""" + + if not self.__douille: + self.__douille = socket.socket(socket.AF_INET, socket.SOCK_STREAM,socket.IPPROTO_TCP) + self.__douille.connect((self.hostname, self.port)) + #delai d'attente pour la réception des données + self.__douille.settimeout(10) + self.__douille.sendall(self.UEL+"@PJL\n") + + def cx_close(self): + """Ferme la connexion vers l'imprimante""" + + if self.__douille: + self.__douille.sendall(self.UEL+"\n") + self.__douille.close() + self.__douille=None + + def pjl_command(self,command): + """Cette fonction envoie la commande command à l'imprimante + Elle doit être une commande pjl sans @PJL devant + + Paramètres : + command : la commande à envoyer à l'imprimante + + """ + + if not self.__douille: + self.cx_open() + + command=str(command) + command="@PJL " + command + "\n" + self.__douille.sendall(command) + + #debug + print command + + def pjl_read(self, display=0): + """Cette fonction lit le retour donné par l'imprimante + Elle retourne un message commençant par \"ERREUR :\" en + cas d'échec + Elle affiche le message si la variable display est vraie + """ + + if not self.__douille: + return "ERREUR : la connexion vers l'imprimante n'est pas ouverte" + message="" + caract=' ' + while caract: + try: + caract=self.__douille.recv(1) + message+=caract + except: + caract='' + message+='\n' + if display: + print message + return message + + def write_file(self,filename): + """Cette fonction envoie un fichier à l'imprimante. + Elle est utile pour envoyer une série de commande ou un fichier + postscript. + + Arguments : + filename : nom du fichier à envoyer + """ + + if not self.__douille: + return "ERREUR : la connexion vers l'imprimante n'est pas ouverte" + + fichier=open(filename) + self.__douille.sendall(fichier.read()) + fichier.close() + + def write_postscript(self,filename, name, display): + """Cette fonction envoie un fichier postscript à l'imprimante. + Elle envoie avant le ENTER LANGUAGE et le EOJ a la fin. + + Arguments : + filename : nom du fichier à envoyer + name : le nom du job + display : ce qu'on met sur l'afficheur + """ + if not self.__douille: + return "ERREUR : la connexion vers l'imprimante n'est pas ouverte" + self.pjl_command('JOB DISPLAY=\"%s\" NAME=\"%s\"' % (display,name)) + self.pjl_command('ENTER LANGUAGE = POSTSCRIPT ') + self.write_file(filename) + self.__douille.sendall(self.UEL+"@PJL EOJ NAME=\"%s\"\n" % (name)) + + + def __del__(self): + """Destructeur : ferme la connexion""" + self.cx_close() + diff --git a/archive/python-lib/affich_tools.py b/archive/python-lib/affich_tools.py new file mode 100644 index 00000000..8e44cfbc --- /dev/null +++ b/archive/python-lib/affich_tools.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-15 -*- + +""" Collection de fonction/classe pour avoir un bel affichage + +Copyright (C) Frédéric Pauget +Licence : GPLv2 +""" + +import sys, sre, os, tempfile + +if 'TERM' in os.environ: + el = os.popen('tput cr ; tput el').read() +else: + el = os.popen('tput -Tvt100 cr ; tput -Tvt100 el').read() + +def dialog(backtitle,arg) : + """ Affiche la boite de dialogue défine avec les arguments fournis + (cf man dialog) + si tout se déroule bien retourne : + [ 0, [ reponse(s) ] ] + si annulatin retourne : + [ 1, [] ] + si appui sur ESC demande confirmation de l'abandon et exécute sys.exit(0) + si erreur dans les arguments raise RuntimeError + """ + f = tempfile.NamedTemporaryFile() + cmd = u'/usr/bin/dialog --backtitle "%s" --cancel-label "Retour" %s 2>%s' % (backtitle,arg,f.name) + res = os.system(cmd.encode('iso-8859-15','ignore')) + + if res == 256 : + # Annuler + f.close() + return [ 1, [] ] + + # Lecture du fichier de résultat et effacement + try: + result=f.readlines() + f.close() + except : + result = [ "n'importe quoi", ''] + res = 65280 + + # Traitement + if res==65280 and result: + # Erreur dans les arguments + raise RuntimeError( arg, result[1].strip() ) + elif res==65280 : + # Appui sur ESC + arg1 = u'--title "Annulation" --yesno "Quitter ?\nLes dernières modifications seront perdues." 6 48' + print backtitle + cmd = u'/usr/bin/dialog --backtitle "%s" %s' % (backtitle,arg1) + res = os.system(cmd.encode('iso-8859-15','ignore') ) + if res==0 : sys.exit(0) + else : return dialog(backtitle,arg) + elif not result : result=[''] + + return [ 0, result ] + +def coul(txt,col): + """ + Retourne la chaine donnée encadrée des séquences qui + vont bien pour obtenir la couleur souhaitée + Les couleur sont celles de codecol + Il est possible de changer la couleur de fond grace aux couleur f_ + """ + codecol={'rouge' : 31 , 'vert' : 32 , 'jaune' : 33 , 'bleu': 34 , 'violet' : 35 , 'cyan' : 36 , 'gras' : 50} + try : + if col[:2]=='f_' : add=10; col=col[2:] + else : add=0 + txt = "\033[1;%sm%s\033[1;0m" % (codecol[col]+add,txt) + finally : + return txt + +OK = coul('OK','vert') +WARNING = coul('WARNING','jaune') +ERREUR = coul('ERREUR','rouge') + +def cprint(txt,col): + print coul(txt,col) + +def tableau(largeurs,data) : + """ + retourne une chaine formatée repésentant un tableau + largeur est la liste des largeurs des colones + data est une liste de tuples : + [ ( données entète), (données ligne1), .... ] + """ + sep_col = u'|' + + # Si l'une des largeurs est '*', alors on la met la plus grande possible + if '*' in largeurs: + rows, cols = get_screen_size() + nlargeurs = [] + for n in largeurs: + if n != '*': + nlargeurs.append(n) + else: + nlargeurs.append(max(cols - sum(filter(lambda x:x!='*',largeurs)) - len(largeurs) - 1, 3)) + largeurs = nlargeurs + + # Ligne de séparation entète corps + s=u'\n' + for l in largeurs : + s+= sep_col + u'-'*l + s += sep_col + u'\n' + + nb_cols = len(largeurs) + + # Remplissage tableau + f=u'' + for ligne in data : + for i in range(0, nb_cols) : + f+= sep_col + # Centrage + l = len(sre.sub('\x1b\[1;([0-9]|[0-9][0-9])m','',ligne[i])) # Longeur sans les chaines de formatage + if l >= largeurs[i] : + f += ligne[i] + else : + n = largeurs[i] - l + f += u' '*(n/2) + ligne[i] + u' '*(n/2 + n%2) + f+= sep_col + u'\n' + + # Final + f = f.replace(u'\n',s,1) # Insertion du séparateur entète - corps + return f[:-1] # Supression du \n final + +def get_screen_size(): + """Retourne la taille de l'écran. + + Sous la forme d'un tuble (colonnes, lignes)""" + try: + from termios import TIOCGWINSZ + from struct import pack, unpack + from fcntl import ioctl + s = pack("HHHH", 0, 0, 0, 0) + rows, cols = unpack("HHHH", ioctl(sys.stdout.fileno(), TIOCGWINSZ, s))[:2] + return (rows, cols) + except: + return (80, 24) + +def prompt(prompt, defaut=''): + """ Pose la question prompt, retourne la réponse """ + sys.stdout.write(coul(prompt,'gras')) + if defaut : + sys.stdout.write(" ["+defaut+"]") + sys.stdout.write(" ") + v=sys.stdin.readline().strip() + if not v : v = defaut + return v + +class anim : + """ Permet de créer une animation : + truc................./ + truc.................- + truc.................\ + truc.................| + ou une barre de progression si le nombre total d'itérations est founi. + """ + def __init__(self,truc,iter=0) : + """ Affichage de : + truc.................""" + self.txt = truc + '.'*(50-len(truc)) + self.c = 1 + self.iter = iter + sys.stdout.write(self.txt) + sys.stdout.flush() + + def reinit(self) : + """ Efface la ligne courrante et + affiche : truc................. """ + sys.stdout.write(el + self.txt) + if self.iter : + sys.stdout.write(' '*28) + sys.stdout.write(el + self.txt) + sys.stdout.flush() + + def cycle(self) : + """ Efface la ligne courrante et + affiche : truc..................? + ? caratère variant à chaque appel """ + sys.stdout.write(el + self.txt) + if self.iter!=0 : + sys.stdout.write('[') + av = float(self.c) / float(self.iter) + n = int(20 * av) + sys.stdout.write('='*n) + sys.stdout.write('>') + sys.stdout.write(' '*(20 - n)) + sys.stdout.write('] %3i%%' % int(100 * av) ) + else : + sys.stdout.write('/-\|'[self.c%4]) + sys.stdout.flush() + self.c += 1 diff --git a/archive/python-lib/daemon.py b/archive/python-lib/daemon.py new file mode 100644 index 00000000..23ec71de --- /dev/null +++ b/archive/python-lib/daemon.py @@ -0,0 +1,47 @@ +# -*- python -*- +# -*- coding: iso-8859-15 -*- + +import sys,os + +def daemonize (stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'): + '''This forks the current process into a daemon. + The stdin, stdout, and stderr arguments are file names that + will be opened and be used to replace the standard file descriptors + in sys.stdin, sys.stdout, and sys.stderr. + These arguments are optional and default to /dev/null. + Note that stderr is opened unbuffered, so + if it shares a file with stdout then interleaved output + may not appear in the order that you expect. + ''' + # Do first fork. + try: + pid = os.fork() + if pid > 0: + sys.exit(0) # Exit first parent. + except OSError, e: + sys.stderr.write ("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror) ) + sys.exit(1) + + # Decouple from parent environment. + os.chdir("/") + os.umask(022) + os.setsid() + + # Do second fork. + try: + pid = os.fork() + if pid > 0: + sys.exit(0) # Exit second parent. + except OSError, e: + sys.stderr.write ("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror) ) + sys.exit(1) + + # Now I am a daemon! + + # Redirect standard file descriptors. + si = file(stdin, 'r') + so = file(stdout, 'a+') + se = file(stderr, 'a+', 0) + os.dup2(si.fileno(), sys.stdin.fileno()) + os.dup2(so.fileno(), sys.stdout.fileno()) + os.dup2(se.fileno(), sys.stderr.fileno()) diff --git a/archive/python-lib/lock.py b/archive/python-lib/lock.py new file mode 100644 index 00000000..5ad26154 --- /dev/null +++ b/archive/python-lib/lock.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-15 -*- + +""" Gestion de lock + +Copyright (C) Frédéric Pauget +Licence : GPLv2 +""" + +import os,string,time,sys, affich_tools +from commands import getoutput +from user_tests import getuser + +def make_lock(lock_file, lock_comment='',nowait=1) : + """ Création d'un lock + si nowait=0 fait un sys.exit(254) quand un ancien lock actif est rencontré + """ + if os.path.isfile(lock_file) : + ### Lock existant + + # Lecture du lock + fd = open(lock_file, "r") + pid= fd.readline().strip() + user = fd.readline().strip() + fd.close() + + # Informations sur le processus lockant + if os.system( "ps %s > /dev/null 2>&1" % pid ) : + # Le script lockant ne tourne plus + os.remove(lock_file) + elif nowait : + sys.stderr.write('Lock : %s\n' % lock_file) + l=getoutput('ps -o etime --no-headers %s' % pid) + data = [ user , pid , l.strip() ] + + # Formatate de etime + s = data[-1].split('-') + if len(s)==2 : + txt = '%s jour(s) ' % s[0] + s=s[1] + else : + txt = '' + s=s[0] + + s = s.split(':') + if len(s) == 3 : + txt = '%sh%smin%ss' % tuple(s) + elif len(s) == 2 : + txt = '%smin%ss' % tuple(s) + else : + txt = '???' + + data[-1]=txt + + sys.stderr.write('\tpropriétaire : %s\n\tpid : %s\n\tdémarré depuis %s\n' % tuple(data) ) + sys.exit(254) + else : + # Il faut attendre + a = affich_tools.anim('\tattente du lock') + for i in range(8) : + time.sleep(1) + a.cycle() + sys.stdout.write('\r') + return make_lock(lock_name, lock_comment) + + ### Prise du lock + lock_fd=open(lock_file, "w") + lock_fd.write("%s\n%s\n%s" % (os.getpid(), getuser(), lock_comment) ) + lock_fd.close() + +def remove_lock( lock_file ) : + """ Destruction du lock """ + try : + fd = open(lock_file, "r") + if fd.readline().strip()=="%s" % os.getpid(): + os.remove(lock_file) + fd.close() + except : + None diff --git a/archive/python-lib/user_tests.py b/archive/python-lib/user_tests.py new file mode 100644 index 00000000..4cd36be5 --- /dev/null +++ b/archive/python-lib/user_tests.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-15 -*- + +""" Fonctions de tests sur l'utilisateur + +Copyright (C) Frédéric Pauget +Licence : GPLv2 +""" + +import os, commands, pwd + +def getuser() : + """ Retourne l'utilisateur lancant les scripts """ + user = os.getenv('SUDO_USER') + if not user : + user = pwd.getpwuid(os.getuid())[0] + return user + +def groups(login='') : + """ Retourne liste des groupes (gid) auquels appartient l'utilisateur + fourni, si aucun utilisateur est founit prend l'utilisateur loggué """ + if login == '' : login = getuser() + return commands.getoutput('id -G %s' % login).split() + +def isadm(login='') : + """ Retourne True si l'utilisateur est dans le groupe 4 (adm) + Si login='', prend l'utilisateur loggué """ + return '4' in groups(login) + +def isdeconnecteur(login='') : + """ Retourne True si l'utilisateur est dans le groupe 610 (disconnect) + Si login='', prend l'utilisateur loggué """ + return isadm(login) or '610' in groups(login) + +def iscableur(login='') : + """ Retourne True si l'utilisateur est dans le groupe 604 (respbat) + Si login='', prend l'utilisateur loggué """ + return isadm(login) or '604' in groups(login) diff --git a/archive/surveillance/demenagement.py b/archive/surveillance/demenagement.py new file mode 100644 index 00000000..fb62b799 --- /dev/null +++ b/archive/surveillance/demenagement.py @@ -0,0 +1,140 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Détection des déménagements non signalés + +Auteur : Étienne Chové +""" + +import sys, os +sys.path.append('/usr/scripts/gestion') +from hptools import hpswitch +from annuaires_pg import all_switchs, bat_switchs, reverse, uplink_prises +from ldap_crans import crans_ldap +from affich_tools import anim, OK +from email_tools import send_email +import sqlite +import time + +# On redirige les sorties si invoqué via cron +if 'cron' in sys.argv[0]: + so = file('/dev/null', 'a+', 0) + os.dup2(so.fileno(), sys.stdout.fileno()) + os.dup2(so.fileno(), sys.stderr.fileno()) + +conn = sqlite.connect('/var/lib/misc/demenagement') +conn.autocommit = True +curs = conn.cursor() +try: + curs.execute("CREATE TABLE machines (host TEXT(128), debut INTEGER);") + print "SQL : Table machines recrée" +except: + pass + +if '--list' in sys.argv: + curs.execute("SELECT * FROM machines ORDER BY debut;") + for r in curs.fetchall(): + print '%25s %s' % (r[0], time.strftime('%d/%m/%Y %H:%M',time.localtime(r[1]))) + sys.exit(0) + +# exemptions : +# liste de tuple à deux éléments : +# - la machine concernée +# - la chambre(local) *en minuscules* dans laquelle peut se trouver la machine +# sans envoyer de mail +# exemple : exempt = [ ("shosur.crans.org", "b511d"), ("blabla.crans.org","bcl2") ] +exempt = [] + +# nombre minimal de jours pour dire que quelqu'un a déménagé +min_jours = 7 +# envoie un mail tous les X jours +re_mail = 7 + +# construction de rev = { bat : { prise : chbre } } +rev = {} +for bat in bat_switchs: + rev[bat] = reverse(bat) + +# remplissage de l'annuaire chambre = { mac : prise } en interrogeant les switchs +switchs = all_switchs() +progression = anim('Interrogation des switchs',len(switchs)) +chambre = {} +for host in switchs: + progression.cycle() + switch = hpswitch(host) + try: + nb_prises = switch.nb_prises() + except: + continue + for prise in range(1, nb_prises+1): + if prise < 10: + prise = '0%d'%prise + else : + prise = str(prise) + + for mac in switch.show_prise_mac(prise): + try: + chambre[mac] = [ host[3] + x for x in rev[host[3]][ host[5] + prise ] ] + except: + pass +progression.reinit() +print OK + +# interrogation de la base ldap +progression = anim('Interrogation de la base LDAP') +base = crans_ldap().search('paiement=ok') +progression.reinit() +proprios = base['adherent'] +print OK + +# recherche des erreurs +progression = anim('Recherche des erreurs',len(proprios)) + +now = int(time.time()) +msg=u'' +for proprio in proprios: + if proprio.chbre()=='EXT': + continue + progression.cycle() + for machine in proprio.machines_fixes(): + if not chambre.has_key(machine.mac()): + # mac non trouvée sur switch + continue + + if proprio.chbre().lower() in chambre[machine.mac()]: + # la machine est dans sa chambre + curs.execute("DELETE FROM machines WHERE host='%s';"%machine.nom()) + + else: + # on regarde la chambre dans la base + curs.execute("SELECT debut FROM machines WHERE host='%s';" % machine.nom()) + result = curs.fetchall() + + if result: + # mise à jour de l'entrée, si vu il y a au moins une semaine + if result[0][0] < now-86400*min_jours: + if (machine.nom(),'/'.join(chambre[machine.mac()])) not in exempt: + print type(machine.nom()) + print type(u'/'.join(chambre[machine.mac()])) + print type(proprio.chbre()) + msg += u'%s vu en chambre %s mais déclaré en %s\n' % ( + machine.nom(), + '/'.join(chambre[machine.mac()]), + proprio.chbre().lower()) + # prochain rappel dans 1 semaine + curs.execute("UPDATE machines SET debut = '%d' WHERE host = '%s';" % (now+(re_mail-min_jours)*86400, machine.nom())) + else: + # nouvelle entrée + curs.execute("INSERT INTO machines (host,debut) VALUES ('%s', '%d');" % (machine.nom(),now)) + +progression.reinit() +print OK + +# sys.stderr.write(msg.encode('iso8859-15')) +# sys.stderr.flush() +if msg: + print "Envoi du mail... ", + send_email('disconnect@crans.org', 'disconnect@crans.org', u'Déménagement(s) non déclaré(s)', + msg + u'\n\n-- \nGénéré par demenagement.py\n') + print OK diff --git a/archive/tv/old/launch_sat.py b/archive/tv/old/launch_sat.py new file mode 100755 index 00000000..382a639a --- /dev/null +++ b/archive/tv/old/launch_sat.py @@ -0,0 +1,117 @@ +#! /usr/bin/env python +# -*- coding: iso8859-15 -*- + +""" Script de lancement de mumudvb + +Auteur : Frédéric Pauget +Licence : GPLv2 +""" +import sys, getopt, os +from sat_base import NotRunning, CarteOqp + +if os.getuid() == 0 : + os.system("su tv -c %s" % " ".join(sys.argv)) + sys.exit(0) +elif os.getuid() != 101 : + print "Ce programme doit être lancé par l'utilisateur tv (uid=101)" + print "Astuce : sudo -u tv %s" % sys.argv[0] + sys.exit(1) + +def usage(erreur=None) : + if erreur : + print erreur + print """Usage : + %(p)s start [ []]: + démarrage le transpondeur donné sur la carte donnée, + si le transpondeur est omis démarre celui défini dans la conf + si seul démarre des flux définis dans la conf + %(p)s stop [numero carte] : + arrête tous les flux des cartes spécifiées, + si aucune carte est fournie arrète tous les flux + %(p)s restart [numero carte] : + démarre tous les flux des cartes spécifiées + si aucune carte est fournie redémarre tous les flux + +Les options possibles sont : + -d ou --debug : affiche tous les messages + et ne daemonize pas mumudvb + -v ou --verbose : affiche les messages de debuggage + -q ou --quiet : affiche rien + --timeout_accord= : nb de secondes données pour l'accord""" \ + % { 'p' : sys.argv[0].split('/')[-1] + ' [options]'} + if not erreur : sys.exit(0) + else : sys.exit(-1) + +# Arguments +try : + options, args = getopt.getopt(sys.argv[1:], 'hdvq', [ 'help', 'debug' , 'quiet' , 'verbose', 'timeout_accord='] ) +except getopt.error, msg : + sys.stderr.write('%s\n' % msg) + sys.exit(255) + +verbose = 1 +timeout_accord = 20 +for opt, val in options : + if opt in [ '-v' , '--verbose' ] : + verbose = 2 + elif opt in [ '-d' , '--debug' ] : + verbose = 3 + elif opt == [ '-q' , '--quiet' ] : + verbose = 0 + elif opt == '--timeout_accord' : + try: + timeout_accord = int(val) + except: + usage("Valeur de timeout_accord (%s) incorrecte" % val) + elif opt in [ '-h', '--help' ] : + usage() + +if not args : + usage('Argument requis') + +elif args[0] not in [ 'start', 'stop' , 'restart' ] : + usage("Commande %s incorrecte" % args[0]) + + +# Carte fournie ? +try : + cartes = [ int(args[1]) ] +except ValueError : + usage("Argument %s incorrect (doit être le numéro de carte)." % args[1]) +except : + # Toutes les cartes + cartes = range(6) + if verbose > 2 : + print "Mode debug non permis avec le lancement automatique" + verbose = 3 + +if args[0] in ( 'start', 'restart' ) : + if cartes == range(6) : + from sat_conf import conf + cartes = conf + else : + transpondeur = args[2] + from sat_base import * + try : + carte = eval(transpondeur) + cartes = [ carte(cartes[0]) ] + except NameError: + usage('Transpondeur %s inconnu.' % transpondeur) + + +elif args[0] == 'stop' : + from sat_base import carte + cartes = map(carte,cartes) + +# On effectue l'opération demandée +for carte in cartes : + carte.verbose = verbose + carte.timeout_accord = timeout_accord + try : + eval('carte.%s()' % args[0]) + except CarteOqp : + print "Carte %i occupée, abandon" % carte.card + except NotRunning : + # Pas réussi à lancer, TODO + pass + diff --git a/archive/tv/old/sap.py b/archive/tv/old/sap.py new file mode 100755 index 00000000..39e69f10 --- /dev/null +++ b/archive/tv/old/sap.py @@ -0,0 +1,140 @@ +#! /usr/bin/env python +# -*- coding: iso-8859-15 -*- + +""" Génération de la configuration sap à partir des données de mumudvb + Lancement du serveur sap. + + Option -d pour que le programme ne se lance pas en daemon. """ + +import os, sys, signal +from socket import getfqdn +from time import sleep +from commands import getoutput + +sys.path.append('/usr/scripts/python-lib') +import lock +from daemon import daemonize + + +################CONFIG + +SAP_CONF = '/etc/sap.cfg' +LOCK='/var/run/mumudvb/sap' +CHAINES_DIFFUSES = '/var/run/mumudvb/chaines_diffusees_carte%d' +base_conf = """################################## +# Fichier généré automatiquement # +# NE PAS EDITER # +################################## +[global] +sap_ttl=4 +sap_ipversion=4 +sap_delay=10 +ipv6_scope=8 +""" + +chaine_template=""" +[program] +name=%s +user=crans +machine=%s +site=http://www.crans.org +address=%s +port=%s +program_ttl=4 +program_ipversion=4 +playlist_group=%s +""" % ( '%(nom)s', getfqdn(), '%(ip)s', '%(port)s', '%(langue)s' ) + +################FIN CONFIG + +# Variables globales, ne pas toucher +sap_pid = 0 +sum = 0 +class no_data(Exception): + pass + +def gen_sap() : + """ Génération du ficher de conf du sap """ + data = [] + for i in range(0,6) : + try : + data.append(open(CHAINES_DIFFUSES % i).readlines()) + except IOError : + continue + + file = open(SAP_CONF,'w') + file.write(base_conf) + ok=0 + for fichier in data : + for line in fichier : + ip, port, nom_chaine = line.strip().split(':') + file.write(chaine_template % { + 'nom' : nom_chaine, + 'langue': nom_chaine.split()[0], + 'ip' : ip, + 'port' : port} ) + ok=1 + file.close() + if not ok : raise no_data + +def is_alive(child_pid) : + """ Vérifie si le processus fils tourne """ + try : + if os.waitpid(child_pid,1) != (0,0) : + raise OSError + return True + except OSError : + return False + +def term(a=None,b=None) : + """ Tue le serveur sap puis quitte """ + kill() + lock.remove_lock(LOCK) + sys.exit(0) + +def kill() : + """ Tue le serveur sap """ + if not is_alive(sap_pid) : + return + print "Kill sap" + os.kill(sap_pid,15) + sleep(1) + if is_alive(sap_pid) : + # Salloperie + print "WARNING : sap résitant" + os.kill(sap_pid,9) + sleep(1) + +if __name__ == '__main__' : + sys.exit(0) + # Arguments + if '-d' not in sys.argv : + daemonize() + + # Lock + lock.make_lock(LOCK,"Serveur SAP") + + # Signal handler + signal.signal(signal.SIGTERM,term) + signal.signal(signal.SIGINT,term) + + while 1 : + try : + gen_sap() + except no_data : + # Rien n'est diffusé + kill() + else : + # Changent de config ? + new_sum = getoutput('md5sum %s' % SAP_CONF).split()[0] + if new_sum != sum : + print "Reconfiguration" + sum = new_sum + if sap_pid>1 and is_alive(sap_pid) : + kill() + if not is_alive(sap_pid) : + # Ne tourne pas, on relance + sap_pid = os.spawnl(os.P_NOWAIT,'/usr/local/bin/sapserver','sap','-f',SAP_CONF) + print "Lancement serveur, pid=%s" % sap_pid + + sleep(60) diff --git a/archive/tv/old/sat_base.py b/archive/tv/old/sat_base.py new file mode 100644 index 00000000..f92beeae --- /dev/null +++ b/archive/tv/old/sat_base.py @@ -0,0 +1,463 @@ +#! /usr/bin/env python +# -*- coding: iso8859-15 -*- + +""" +Configuration de base des différents transpondeurs disponibles +Ce fichier contient la liste des chaines pour chaque transpondeur. + +Pour chaque chaine, on doit indiquer le nom de la chaine et au minimum : +- Le pid audio +- Le pid video +- Le pid PMT, ce pid contient la liste des differents flux associes a une chaine +VLC a besoin de ce PID pour lire le flux + +Les pids facultatifs sont les suivants : +- Le PID PCR qui indique la base de temps (Program Clock Reference) +et permet de mieux reconstituer les flux un peu defecteux, et sert +aussi pour synchroniser les informations teletexte. +Il est conseille de le mettre, et il est souvent present avec le +flux video (cas de la TNT) +- Les PIDs de teletexte +""" + +#Auteur : Frédéric Pauget +#Maintenance et adaptations : DUBOST Brice +#Licence : GPLv2 + +from commands import getoutput +from time import sleep +import os, socket + +IP = socket.gethostbyaddr(socket.gethostname())[-1][0] + +class CarteOqp(Exception) : + """ La carte est déja utilisée """ + +class NotRunning(Exception) : + """ La carte ne diffuse rien """ + +class carte : + """ Classe parent de toute classe de transpondeur """ + # Niveux de verbosite : + # 0 : ne dit rien + # 1 : messages à caractères informatifs + # 2 : messages de debug + # 3 : ne permet pas à mumudvb de daemonizer + verbose = 3 + + CONF_FILE = "/etc/sat/carte%i.conf" # %i : numero de la carte + + timeout_accord=20 #en secondes + timeout_no_diff=60 #en secondes + + entete_conf = """### Fichier généré, NE PAS EDITER +autoconfiguration=1 +sap=1 +sap_organisation=crans +common_port=1234 +freq=%(freq)i +pol=%(pol)s +srate=%(srate)i +card=%(card)i +timeout_accord=%(timeout_accord)i +timeout_no_diff=%(timeout_no_diff)i +#----- +""" + + entete_conf_TNT = """### Fichier généré, NE PAS EDITER +autoconfiguration=1 +sap=1 +sap_organisation=crans +common_port=1234 +freq=%(freq)i +qam=%(qam)s +trans_mode=%(trans_mode)s +bandwidth=%(bandwidth)s +guardinterval=%(guardinterval)s +coderate=%(coderate)s +card=%(card)i +timeout_accord=%(timeout_accord)i +timeout_no_diff=%(timeout_no_diff)i +""" + + chaine_template = """ip=%(ip)s +sap_group=%(sap_group)s +name=%(name)s +pids=%(pids)s +#----- +""" + + autoconf2_template = """common_port=1234 +autoconfiguration=2 +autoconf_ip_header=%(ip)s +sap_default_group=various +#----- +""" + + pid_file = "/var/run/mumudvb/mumudvb_carte%i.pid" # % num carte + mumudvb = "/usr/local/bin/mumudvb_sap " + + def __cmp__(a,b) : + for attr in ( 'card', 'freq', 'chaines' ) : + if getattr(a,attr) != getattr(b,attr) : + return -2 + return 0 + + def __init__(self,card) : + """ Initalisation card est le numéro (entier) de la carte + correspondante """ + try : + self.freq = int(str(self.__class__).split('_')[-1]) + except : + # On ne pourra pas faire grand chose à part killer le flux de la carte + self.freq = '' + pass + self.card = card + + def gen_conf(self) : + """ Génère le fichier de conf """ + if not self.freq : + if self.verbose > 1 : print "Instance ne permettant pas la génération de la conf" + return + + fd = open(self.CONF_FILE % self.card,'w') + # Entète du fichier + try: + fd.write( self.entete_conf_TNT % + { 'qam' : self.qam, 'trans_mode' : self.trans_mode , + 'bandwidth' : self.bandwidth, 'guardinterval' : self.guardinterval , + 'coderate' : self.coderate, + 'freq' : self.freq , 'card' : self.card , + 'timeout_accord' : self.timeout_accord , + 'timeout_no_diff' : self.timeout_no_diff } ) + except: + fd.write( self.entete_conf % + { 'pol' : self.pol, 'srate' : self.srate , + 'freq' : self.freq , 'card' : self.card , + 'timeout_accord' : self.timeout_accord , + 'timeout_no_diff' : self.timeout_no_diff } ) + + # Chaines + n = 0 + for pids, (sap_group, name) in self.chaines.items() : + ip = '239.%s.20%i.2%02i' % ( IP.split('.')[-1], self.card, n) + n += 1 + fd.write(self.chaine_template % vars()) + + #Si pas de chaines, on passe en autoconfiguration=2 + if not n : + ip = '239.%s' % ( IP.split('.')[-1]) + fd.write(self.autoconf2_template % { "ip" : ip}) + + fd.close() + + def get_pid(self) : + """ Retourne le pid associé à la carte """ + try: + pid = int(open(self.pid_file % self.card).readline().strip()) + if self.verbose > 1 : + print 'pid : %i' % pid , + return pid + except : + raise NotRunning + + def is_running(self) : + """ Vérifie si le process correspondant à la carte toune """ + if self.verbose > 1 : + redir = '' + else : + redir = '>/dev/null 2>&1' + try : + if not os.system('ps %i %s' % (self.get_pid() , redir) ) : + # Il tourne + return True + except NotRunning : + pass + return False + + def start(self) : + """ Lance la diffusion """ + if not self.freq : + if self.verbose > 1 : print "Instance ne permettant pas le lancement d'un flux" + return + + if self.verbose >0 : + print "Lancement de %s sur la carte %i" % (str(self.__class__).split('.')[-1], self.card) + + if self.is_running() : + raise CarteOqp + + if self.verbose >0 : print "\tGénération de la conf...", + self.gen_conf() + if self.verbose >0 : print "OK" + + cmd = '%s -c %s' % ( self.mumudvb, self.CONF_FILE % self.card ) + if self.verbose > 2 : cmd += ' -v -v -d -s' + if self.verbose > 1 : + print "\tCommande : %s" % cmd + for i in range(2*self.timeout_accord) : + if not i%5 and i <= self.timeout_accord : + if self.verbose > 0 and i : print "ATTENTE/ERREUR" + # On fait une tentative de lancement toutes les 5s (en cas de pb de diseq) + if self.verbose > 0 : print "\tTentative %i" %(i/5+1) , + os.system(cmd) + sleep(1) + if self.is_running() : + if self.verbose > 0 : print 'OK' + break + sleep(1) + if not self.is_running() : + if self.verbose > 0 : print 'ABANDON' + raise NotRunning + + def stop(self) : + """ Arrète la diffusion de la carte """ + if self.verbose >0 : + print "Arret diffusion carte %i..." % self.card , + + try : + # Ca tourne au moins ? + if not self.is_running() : + if self.verbose >0 : print "carte déja arrétée" + return + + os.kill(self.get_pid(),15) + sleep(1) + if not self.is_running() : + if self.verbose >0 : print "OK" + return + + # Crève !! + if not self.is_running() : + if self.verbose >0 : print "SIGKILL" + return + + os.kill(self.get_pid(),9) + # Salloperie + raise CarteOqp + except NotRunning : + # Parfait, c'était le but + pass + + def restart(self) : + """ Redémarre le flux """ + self.stop() + self.start() + +#class Hotbird_10796(carte) : +# pol='v' +# srate=27500 +# chaines = { +# '3336 3306' : 'radios' : 'rad fra Radio FG'), +# '3534 1001' : 'radios' : 'rad fra France Inter'), +# '3535 1002' : 'radios' : 'rad fra France Info' } + +#Format : "'pids' : ( 'groupe sap' : 'nom' )," + +class Hotbird_10853(carte) : + pol='h' + srate=27500 + chaines = {} + +class Hotbird_11137(carte) : + pol='h' + srate=27500 + chaines = { + '717' : ('fra' , 'fra TV5MONDE FBS'), + '719' : ('fra' , 'fra TV5MONDE Europe'), + '262' : ('ara' , 'ara ANN'), + '263' : ('ara' , 'ara Kurdistan TV'), + '264' : ('ita' , 'ita Videolina')} + +class Hotbird_11200(carte) : #A mettre a jour + pol='V' + srate=27500 + chaines = { + '366 367 2560' : ('ita' , 'ita Elite shopping TV'), + '386 387 512' : ('x-ero' , 'x-ero All Sex'), + '397 398 399' : ('ita' , 'ita StarSat'), + '394 395 4864' : ('ita' , 'ita Play TV'), + '400 404 402' : ('ita' , 'ita People TV'), + '405 406 407' : ('ita' , 'ita Roma Sat')} + +class Hotbird_11240(carte) : + pol='v' + srate=27500 + chaines = { + '244' : ('fra' , 'fra France 24'), + '247' : ('eng' , 'eng France 24'), + '401' : ('fra' , 'fra RTBF sat')} + +class Hotbird_11604(carte) : + pol='h' + srate=27500 + chaines = { + '500' : ('ita' , 'ita TLA'), + '600' : ('ger' , 'ger Das Erste'), + '700' : ('ger' , 'ger DW TV'), + '800' : ('divers' , 'divers DW tv arabic (ara eng ger)'), + '900' : ('ger' , 'ger RTL2 Schweiz'), + '3500' : ('eng' , 'eng Cool TV'), + '2600' : ('ger' , 'ger Erde Mensch'), + '1600' : ('x-ero' , 'x-ero hot arab tv'), + '3200' : ('x-ero' , 'x-ero xxx Action TV')} + +class Hotbird_11623(carte) : + pol='v' + srate=27500 + chaines = {} + +class Hotbird_11642(carte) : + pol='h' + srate=27500 + chaines = { + '1360 1320 5003' : ('eng' , 'eng Bloomberg Europe'), + '1460 1420 5004' : ('ger' , 'ger Bloomberg TV Deutschland'), + '1560 1520 5005' : ('eng' , 'eng Bloomberg U.K.'), + '2101 2111 256 128 2121' : ('gr' , 'gr ERT Sat')} + +class Hotbird_11727(carte) : + pol='v' + srate=27500 + chaines = { + '2711 2712 257 2710' : ('fra' , 'fra La Locale'), + '2791 2792 269' : ('ita' , 'ita Sicilia International (SET)'), + '2751 2752 266' : ('ita' , 'ita Sardegna Uno Sat'), + '6507 6662' : ('radios' , 'rad eng BBC English (Europe)'), + '6510 6692' : ('radios' , 'rad eng BBC English News'), + '7302 6571' : ('radios' , 'rad eng BBC Feed 1'), + '7312 6572' : ('radios' , 'rad eng BBC Feed 2'), + '7322 6573' : ('radios' , 'rad eng BBC Feed 3'), + '7332 6574' : ('radios' , 'rad eng BBC Feed 4'), + '7342 6575' : ('radios' , 'rad eng BBC Feed 5'), + '7352 6576' : ('radios' , 'rad eng BBC Feed 6')} + +# Pour remplacer 10796 +class Hotbird_11766(carte) : + pol='v' + srate=27500 + chaines = { + '1104' : ('ita' , 'ita Rai Uno'), + '1105' : ('ita' , 'ita Rai Duo'), + '1106' : ('ita' , 'ita Rai Tre'), + '260' : ('ita' , 'ita Rai Med'), + '1107' : ('ita' , 'ita eng Senato italiano'), + '1107' : ('eng' , 'eng ita Senato italiano'), + '261' : ('ita' , 'ita Rai Edu2')} + +class Hotbird_11727(carte) : + pol='v' + srate=27500 + chaines = {} + +class Hotbird_11054(carte) : + pol='h' + srate=27500 + chaines = {} + +class Hotbird_12111(carte) : + pol='v' + srate=27500 + chaines = { + '1028' : ('ara' , 'ara Al Jazeera Documentary'), + '1029' : ('ara' , 'ara Al Jazeera Mubasher'), + '1030' : ('ita' , 'ita ACM - Architecture Construction Materials'), + '1031' : ('ara' , 'ara Al Jazeera Satellite Channel'), + '1032' : ('ita' , 'ita Silicia Channel'), + '1034' : ('ita' , 'ita High life TV'), + '1040' : ('ita' , 'ita Radio Radio TV'), + '1042' : ('ita' , 'ita MediterraneoSat 1')} + +class Hotbird_12476(carte) : + pol='h' + srate=27500 + chaines = { + #2M don't support autoconfiguration + '600 601 602' : ('ara' , 'ara fra 2M'), + '600 603' : ('ara' , 'ara radio 2M'), + '550' : ('x-ero' , 'x-ero X Stream')} + +class Hotbird_12558(carte) : #outdated + pol='v' + srate=27500 + chaines = { + '6660 6661 6659' : ('ita' , 'ita Administra.it'), + '6916 6917 6915 6930' : ('ita' , 'ita 24 Ore')} + +class Hotbird_12597(carte) : + pol='v' + srate=27500 + chaines = { + '1024' : ('rus' , 'rus sport planeta'), + '1027' : ('eng' , 'eng BBC World'), + '1031' : ('rus' , 'rus ORT International'), + '1032' : ('eng' , 'eng CNN'), + '1034' : ('fra' , 'fra autres Euronews'), + '1034 2221 2232 768' : ('eng' , 'eng Euronews')} + +class Hotbird_12673(carte) : #outdated + pol='v' + srate=27500 + chaines = { + '308 309 306 307' : ('ara' , 'ara Al Maghribiyah'), + '35 36 33 34 38' : ('ara' , 'ara TVM inter l'), + '46 47 44 45' : ('ara' , 'ara Arabiaa')} + +class TNT_base(carte) : + qam="auto" + trans_mode="auto" + guardinterval="auto" + coderate="auto" + bandwidth="8MHz" + +class TNT_R1_586000(TNT_base) : + chaines = { + '110' : ('fra' , 'fra TNT02 France 2'), + '210' : ('fra' , 'fra TNT03 France 3'), + '310' : ('fra' , 'fra TNT05 France 5'), + '510' : ('fra' , 'fra TNT07 Arte'), + '510 520 531 542' : ('ger' , 'ger Arte'), + '610' : ('fra' , 'fra TNT13 LCP Public Senat'), + '710' : ('fra' , 'fra TNT20 France O')} + +class TNT_R2_474000(TNT_base) : + chaines = { + '1280' : ('fra' , 'fra TNT08 Direct 8'), + '1282' : ('fra' , 'fra TNT15 BFM TV'), + '1283' : ('fra' , 'fra TNT16 i tele'), + '1284' : ('fra' , 'fra TNT17 Virgin17'), + '1286' : ('fra' , 'fra TNT14 France 4'), + '1285' : ('fra' , 'fra TNT18 Gulli')} + +#les pids ont tendance a changer souvent pour canal, on en met le plus possible +class TNT_R3_522000(TNT_base) : + chaines = { + '1280 80 81 83 32 33 170 120 121 123 62 52' : ('fra' , 'fra TNT04 Canal')} + +class TNT_R4_498000(TNT_base) : + chaines = { + '110' : ('fra' , 'fra TNT06 M6'), + '210' : ('fra' , 'fra TNT09 W9'), + '310' : ('fra' , 'fra TNT11 NT1'), + '710' : ('fra' , 'fra TNT57 Arte HD')} + +class TNT_R5_538000(TNT_base) : + chaines = { + '110' : ('fra' , 'fra TNT51 TF1 HD'), + '210' : ('fra' , 'fra TNT52 France 2 HD'), + '310' : ('fra' , 'fra TNT56 M6 HD')} + +class TNT_R6_562000(TNT_base) : + chaines = { + '100' : ('fra' , 'fra TNT01 TF1'), + '600' : ('fra' , 'fra TNT10 TMC'), + '200' : ('fra' , 'fra TNT12 NRJ12')} + +class TNT_R7_490000(TNT_base) : + chaines = { + '4321' : ('fra' , 'fra TNT21 Canal 21 : Cinaps TV, BDM TV, Bocal TV, Demain TV'), + '4322' : ('fra' , 'fra TNT22 IDF1'), + '4323' : ('fra' , 'fra TNT23 NRJ Paris'), + '4324' : ('fra' , 'fra TNT24 Cap 24')} + + diff --git a/archive/tv/old/sat_conf.py b/archive/tv/old/sat_conf.py new file mode 100644 index 00000000..690376b5 --- /dev/null +++ b/archive/tv/old/sat_conf.py @@ -0,0 +1,39 @@ +#! /usr/bin/env python +# -*- coding: iso-8859-15 -*- + +""" Défini les transpondeurs à associer à chacune des cartes """ + +from sat_base import * +from socket import gethostname + +host = gethostname() + +transpondeurs = { 'canard' : [ Hotbird_12476(0) , + Hotbird_11240(1) , + Hotbird_12597(2) , + TNT_R4_498000(4) , + Hotbird_11604(3) ], + 'lapin' : [ Hotbird_11727(0) , +# Hotbird_11623(1) , #Cette carte capte tres mal + TNT_R1_586000(2) , + TNT_R6_562000(3) , + TNT_R2_474000(4) ], + 'oie' : [ Hotbird_10853(0) , + Hotbird_11766(1) , + Hotbird_12111(2) , + Hotbird_11137(3) , + TNT_R7_490000(4) , +# TNT_R5_538000(4) , + TNT_R3_522000(5) ] + } + +conf = transpondeurs.get(host,[]) + +if __name__ == '__main__' : + import sys + if len(sys.argv) == 2 : + conf = transpondeurs.get(sys.argv[1],[]) + for t in conf : + print t, "sur la carte", t.card + for (sap_group, chaine) in t.chaines.values() : + print '\t%s\t: \t%s' % (sap_group,chaine) diff --git a/archive/uname_bornes.sh_ b/archive/uname_bornes.sh_ new file mode 100755 index 00000000..a6f3cbf2 --- /dev/null +++ b/archive/uname_bornes.sh_ @@ -0,0 +1,27 @@ +#!/bin/bash +# copyright 2009: Antoine Durand-Gasselin +# license: BSD 3-clauses + +if [[ $# -lt 1 ]]; then + cat < +# Licence : BSD3 + +"""Script qui fait un uname sur toute les bornes à la fois. + +La sortie est la sortie de `uname -v` sur chaque borne.""" + +import sys, os, commands +from optparse import OptionParser + +def bornes(): + """Renvoie la liste des bornes + + Moyen rapide, mais peut-être un peu crade pour récupérer la liste des bornes: + on regarde les machines présentes dans 138.231.148.1/24""" + names = [] + for line in commands.getoutput("host -l wifi.crans.org").splitlines(): + # Chaque ligne est de la forme: + # "truc.wifi.crans.org has address 138.231.148.42" + fields = line.split() + name = fields[0].split(".")[0] + ip = fields[3] + network = ip.rsplit(".", 1)[0] + # On ne prend que les machines du réseau 138.231.148.0/24, à part + # ragnarok: + if network == "138.231.148" and ip != "138.231.148.1": + names.append(name) + return names + +def ssh_exec(host, cmd): + """Execute une commande en ssh sur une machine et renvoie le résultat""" + (stdin, stdout, stderr) = os.popen3("ssh -T -x -o BatchMode=yes -o ConnectTimeout=5 %(host)s exec %(cmd)s" % locals()) + stdin.close() + stderr.close() + return stdout + +def munin(config, cmd, process=(lambda x: x)): + """plugin munin""" + + if 'autoconf' in sys.argv: + print 'yes' + sys.exit(0) + + names = bornes() + + if 'config' in sys.argv: + print config + for borne in names: + print "%s.label %s"% (borne, borne) + sys.exit(0) + + outputs = {} + for name in names: + outputs[name] = ssh_exec(name+".wifi", cmd) + + for name, res in outputs.iteritems(): + value = process(res.read()).split('\n', 1)[0].strip() + print '%s.value %s' % (name, value) + +def main(): + parser = OptionParser(usage=usage) + + parser.add_option('-v', '--uname', help=u"renvoie le uname -v", + action='store_const', const='uname -v', dest='cmd', default='uname -v') + parser.add_option('-u', '--uptime', help=u"renvoie l'uptime", + action='store_const', const='uptime', dest='cmd') + (options, args) = parser.parse_args() + + names = bornes() + outputs = {} + for name in names: + outputs[name] = ssh_exec(name+".wifi", options.cmd) + + # On attend que tous les fils qu'on a lancé terminent, avec une petite + # animation si la sortie est un terminal: + count = 0 + total = len(names) + show_anim = sys.stderr.isatty() + message = "Réception des résultats: %d/%d" + if show_anim: sys.stderr.write(message % (count, total)) + while count < total: + try: os.wait() + except OSError: break + count += 1 + if show_anim: sys.stderr.write("\r" + message % (count, total)) + if show_anim: sys.stderr.write("\n") + + # On lit tout les résultats: + results = {} + for name, output in outputs.iteritems(): + results[name] = output.read().strip() + output.close() + + results = results.items() + results.sort(key=lambda x: x[0]) + + for name, result in results: + if not result: + print "%-15s failure" % (name + ":") + + for name, result in results: + if result: + print "%-15s %s" % (name + ":", result) + + +if __name__ == "__main__": + usage = u"""usage: %prog [OPTION] +Récupère la liste des bornes et récupère le résultat d'une commande sur +toutes les bornes""" + if len(sys.argv[0].split('_', 1)) > 1: + plugin = sys.argv[0].split('_', 1)[0] + if plugin == 'uptime': + config = """graph_title Uptime Bornes +graph_args --base 1000 -l 0 +graph_vlabel uptime in days""" + def process(uptime): + if uptime: +# print (int (uptime.split()[1]) / (24 * 3600)) + return str(float (uptime.split()[1]) / (24 * 3600)) + else: return '0' + munin(config, 'cat /proc/uptime', process=process) + else: raise NotImplementedError + + else: + main() diff --git a/archive/utils/chambre.py b/archive/utils/chambre.py new file mode 100755 index 00000000..bce32f72 --- /dev/null +++ b/archive/utils/chambre.py @@ -0,0 +1,7 @@ +#! /usr/bin/env python +# -*- coding: iso-8859-15 -*- + +import sys +sys.path.append('/usr/scripts/gestion') +from gen_confs.switchs import switch +switch(sys.argv[1:]).reconfigure() diff --git a/archive/utils/chambre_on_off.py b/archive/utils/chambre_on_off.py new file mode 100755 index 00000000..b0eddca4 --- /dev/null +++ b/archive/utils/chambre_on_off.py @@ -0,0 +1,58 @@ +#! /usr/bin/env python +# -*- coding: iso-8859-15 -*- +"""chambre_on_off.py: Affiche le statut, active ou désactive une prise + + syntaxe : chambre-on-off.py chbre + chbre de la forme A101d + peut être : + - on : activer la prise + - off : désactiver la prise + - absent : affiche le statut de la prise + +""" + +import sys +sys.path.append("/usr/scripts/gestion/") + +import hptools + +def chambre_on_off(chambre, cmd = None): + """Active ou désactive une prise + + chambre: numéro de chambre + cmd: si fourni, "on" ou "off" pour activer ou désactiver la prise + si cmd n'est pas fourni, ne fait qu'afficher le statut de la prise + """ + # connexion au switch + chbre_sw = hptools.sw_chbre(chambre) + + # affichage des infos + print "chbre : %s" % chambre + print "switch : %s" % chbre_sw.switch + print "prise : %s" % chbre_sw.prise + + print "statut : %s" % (chbre_sw.is_enable() and "on" or "off") + + if cmd: + cmd = cmd.lower() + + # modification du statut + if cmd == "off": + print "action : disable" + chbre_sw.disable() + elif cmd == "on": + print "action : enable" + chbre_sw.enable() + + # affichage du nouveau statut + print "statut : %s" % (chbre_sw.is_enable() and "on" or "off") + +if __name__ == '__main__': + if len(sys.argv) == 2: + chambre_on_off(sys.argv[1]) + elif len(sys.argv) == 3: + chambre_on_off(sys.argv[1], sys.argv[2]) + else: + print __doc__ + sys.exit(0) + diff --git a/archive/utils/checkMidIp.py b/archive/utils/checkMidIp.py new file mode 100644 index 00000000..f1be3fb7 --- /dev/null +++ b/archive/utils/checkMidIp.py @@ -0,0 +1,34 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# © Olivier Huber, 2010 +# Licence MIT +""" Ce script vérifie la cohérence entre le mid et l'adresse ip de toutes les +machines """ + +# Depuis la modification de la sémantique du mid et la création du rid, +# ceci n'a plus de raison d'être +# -- +# 20-100, 08/02/13 + +import sys + +sys.path.append('/usr/scripts/gestion') + +from ldap_crans import crans_ldap +import midtools + +db = crans_ldap() + +machines = db.all_machines() + +for machine in machines: + try: + mid_calc = midtools.Mid(None, machine.ip()).mid + except ValueError, e: + print e + else: + if mid_calc != int(machine.id()): + print "La machine associée à l'ip %s a le mid %s alors qu'elle \ + devrait avoir %d" % (machine.ip(), machine.id(), mid_calc) + +exit(0) diff --git a/archive/utils/syslog-summary b/archive/utils/syslog-summary new file mode 100755 index 00000000..f924b87b --- /dev/null +++ b/archive/utils/syslog-summary @@ -0,0 +1,183 @@ +#!/usr/bin/python + +"""Summarize the contents of a syslog log file. + +The syslog(3) service writes system log messages in a certain format: + + Jan 17 19:21:50 zeus kernel: klogd 1.3-3, log source = /proc/kmsg started. + +This program summarizes the contents of such a file, by displaying each +unique (except for the time) line once, and also the number of times such +a line occurs in the input. The lines are displayed in the order they occur +in the input. + +Lars Wirzenius """ + +IGNORE_FILENAME = "/etc/syslog-summary/ignore" +STATE_FILENAME = None +REPEAT = 0 +QUIET = 0 + +import sys, re, getopt, string, md5 + +datepats = [ + re.compile(r"^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [ 0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] "), + re.compile(r"^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [ 0-9][0-9][0-9][0-9]:[0-9][0-9] "), + re.compile(r"^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [ 0-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9] "), +] +pidpat = re.compile(r"^([^ ]* [^ ]*)\[[0-9][0-9]*\]: ") +repeatpat = re.compile(r"^[^ ]* last message repeated (\d+) times$") + +ignore_pats = [] + +def read_patterns(filename): + pats = [] + try: + f = open(filename, "r") + except IOError: + return [] + for line in f.xreadlines(): + if line[-1:] == "\n": + line = line[:-1] + pats.append(re.compile(line)) + f.close() + return pats + +def read_states(filename): + states = {} + if not filename: + return states + try: + f = open(filename, "r") + except IOError: + return states + for line in f.xreadlines(): + fields = string.split(line) + states[fields[0]] = (string.atoi(fields[1]), fields[2]) + f.close() + return states + +def save_states(filename, states): + if not filename: + return + try: + f = open(filename, "w") + except IOError: + return + for filename in states.keys(): + value = states[filename] + f.write("%s %d %s\n" % (filename, value[0], value[1])) + f.close() + +def should_be_ignored(line): + for pat in ignore_pats: + if pat.search(line): + return 1 + return 0 + +def printable_md5(str): + chars = [] + for char in str: + chars.append("%02x" % (ord(char))) + return string.join(chars, "") + +def split_date(line): + for pat in datepats: + m = pat.match(line) + if m: + return line[:m.end()], line[m.end():] + print "line has bad date", "<" + string.rstrip(line) + ">" + return None, line + +def summarize(filename, states): + counts = {} + order = [] + ignored_count = 0 + if not QUIET: + print "Summarizing %s" % filename + file = open(filename, "r") + linecount = 0 + + md5obj = md5.new() + if states.has_key(filename): + oldlines, oldmd5 = states[filename] + for i in xrange(oldlines): + line = file.readline() + md5obj.update(line) + if printable_md5(md5obj.digest()) != oldmd5: + file.seek(0, 0) + md5obj = md5.new() + else: + linecount = oldlines + if not QUIET: + print "%8d Lines skipped (already processed)" % linecount + + line = file.readline() + previous = None + while line: + md5obj.update(line) + linecount = linecount + 1 + date, rest = split_date(line) + if date: + found = pidpat.search(rest) + if found: + rest = found.group(1)+": "+rest[found.end():] + + count = 1 + repeated = None + if REPEAT: + repeated=repeatpat.search(rest) + if repeated and previous: + count = int(repeated.group(1)) + rest = previous + + if should_be_ignored(rest): + ignored_count = ignored_count + count + else: + if counts.has_key(rest): + counts[rest] = counts[rest] + count + else: + assert count==1 + counts[rest] = count + order.append(rest) + + if not repeated: + previous = rest + line = file.readline() + file.close() + md5new = printable_md5(md5obj.digest()) + states[filename] = (linecount, md5new) + if QUIET and order: + print "Summarizing %s" % filename + if not QUIET or order: + print "%8d Patterns to ignore" % len(ignore_pats) + print "%8d Ignored lines" % ignored_count + for rest in order: + print "%8d %s" % (counts[rest], rest), + if not QUIET or order: + print + +def main(): + global ignore_pats, IGNORE_FILENAME, STATE_FILENAME, REPEAT, QUIET + + opts, args = getopt.getopt(sys.argv[1:], "i:qs:r", [ + "ignore=", "quiet", "state=", "repeat" ]) + + for opt, optarg in opts: + if opt == "-i" or opt == "--ignore": + IGNORE_FILENAME = optarg + elif opt == "-s" or opt == "--state": + STATE_FILENAME = optarg + elif opt == "-r" or opt == "--repeat": + REPEAT = 1 + elif opt == "-q" or opt == "--quiet": + QUIET = 1 + + ignore_pats = read_patterns(IGNORE_FILENAME) + states = read_states(STATE_FILENAME) + for filename in args: + summarize(filename, states) + save_states(STATE_FILENAME, states) + +if __name__ == "__main__": + main() diff --git a/archive/vieux/_cranspasswords b/archive/vieux/_cranspasswords new file mode 100644 index 00000000..f1b76bf5 --- /dev/null +++ b/archive/vieux/_cranspasswords @@ -0,0 +1,13 @@ +#compdef cranspasswords + +_fichiers () { + compadd "$@" - $(cranspasswords --list) +} + +_arguments -C -s \ + '--re-encrypt-all[rechiffre tous les fichiers]:Fichiers:_fichiers' \ + '--edit[edite un fichier chiffre]:Fichiers:_fichiers' \ + '--remove[suppression d''un fichier chiffre]:Fichiers:_fichiers' \ + '--view[voir un fichier chiffre]:Fichiers:_fichiers' \ + '--list[liste des fichiers chiffres]' \ + '*::Fichiers:_fichiers' diff --git a/archive/vieux/accounts/README b/archive/vieux/accounts/README new file mode 100644 index 00000000..fb9678f4 --- /dev/null +++ b/archive/vieux/accounts/README @@ -0,0 +1,4 @@ +Accounts : application web de login centraliÃsé avec django +Phase initial, ne pas utiliser ! + +Auteur : GrégoireDétrez \ No newline at end of file diff --git a/archive/vieux/accounts/__init__.py b/archive/vieux/accounts/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/archive/vieux/accounts/adm/__init__.py b/archive/vieux/accounts/adm/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/archive/vieux/accounts/adm/views.py b/archive/vieux/accounts/adm/views.py new file mode 100644 index 00000000..ca0d1f1b --- /dev/null +++ b/archive/vieux/accounts/adm/views.py @@ -0,0 +1,28 @@ +# Create your views here. +from accounts.cransaccounts.models import Credential +from django.http import HttpResponse, HttpResponseRedirect +import datetime +from django.contrib.auth.decorators import login_required +from django.shortcuts import render_to_response +from django.template import RequestContext + +def check_credential( request ): + cred = request.GET['cred'] + service = request.GET['service'] + response = HttpResponse("INVALID") + # retreive credential in db + try: + cred = Credential.objects.get(token=cred, service=service) + ## if not to old, accept + if cred.date.today() - cred.date < datetime.timedelta( minutes=10 ): + response = HttpResponse("VALID") + response['username'] = cred.user.username + response['fullname'] = cred.user.get_full_name() + response['email'] = cred.user.email + else: + response = HttpResponse("INVALID") + except Credential.DoesNotExist: + response = HttpResponse("INVALID") + response["content-type"] = "text/plain" + return response + ## else, or if not exist reject diff --git a/archive/vieux/accounts/adm_settings.py b/archive/vieux/accounts/adm_settings.py new file mode 100644 index 00000000..ba93d762 --- /dev/null +++ b/archive/vieux/accounts/adm_settings.py @@ -0,0 +1,83 @@ +# Django settings for accounts project. +# -*- coding: utf-8 -*- + +from settings import * +#DEBUG = True +#TEMPLATE_DEBUG = DEBUG + +#ADMINS = ( + # ('Your Name', 'your_email@domain.com'), +#) + +# MANAGERS = ADMINS + +# DATABASE_ENGINE = 'mysql' # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'. +# DATABASE_NAME = 'webaccounts' # Or path to database file if using sqlite3. +# DATABASE_USER = 'djangoaccounts' # Not used with sqlite3. +# DATABASE_PASSWORD = '' # Not used with sqlite3. +# DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3. +# DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3. + +# # Local time zone for this installation. All choices can be found here: +# # http://www.postgresql.org/docs/current/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE +# TIME_ZONE = 'America/Chicago' + +# # Language code for this installation. All choices can be found here: +# # http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes +# # http://blogs.law.harvard.edu/tech/stories/storyReader$15 +# LANGUAGE_CODE = 'en-us' + +# SITE_ID = 1 + +# # Absolute path to the directory that holds media. +# # Example: "/home/media/media.lawrence.com/" +# MEDIA_ROOT = '' + +# # URL that handles the media served from MEDIA_ROOT. +# # Example: "http://media.lawrence.com" +# MEDIA_URL = '' + +# # URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a +# # trailing slash. +# # Examples: "http://foo.com/media/", "/media/". +# ADMIN_MEDIA_PREFIX = '/media/' + +# # Make this unique, and don't share it with anybody. +# SECRET_KEY = 'lk5§8¨Â§(rfghurdffg$¹^dfg§t"arefzgudsrtgyat' + +# # List of callables that know how to import templates from various sources. +# TEMPLATE_LOADERS = ( +# 'django.template.loaders.filesystem.load_template_source', +# 'django.template.loaders.app_directories.load_template_source', +# # 'django.template.loaders.eggs.load_template_source', +# ) + +# MIDDLEWARE_CLASSES = ( +# 'django.middleware.common.CommonMiddleware', +# 'django.contrib.sessions.middleware.SessionMiddleware', +# 'django.contrib.auth.middleware.AuthenticationMiddleware', +# 'django.middleware.doc.XViewMiddleware', +# ) + +ROOT_URLCONF = 'accounts.adm_urls' + +#TEMPLATE_DIRS = ( +# # Put strings here, like "/home/html/django_templates". +# # Always use forward slashes, even on Windows. +# "/usr/scripts/accounts/templates/", +#) + +INSTALLED_APPS = ( + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', +# 'django.contrib.admin', + 'accounts.adm', +) + + +AUTHENTICATION_BACKENDS = ( +# 'django.contrib.auth.backends.ModelBackend', +# 'accounts.backend.LdapBackend', +) diff --git a/archive/vieux/accounts/adm_urls.py b/archive/vieux/accounts/adm_urls.py new file mode 100644 index 00000000..e79c4713 --- /dev/null +++ b/archive/vieux/accounts/adm_urls.py @@ -0,0 +1,7 @@ +from django.conf.urls.defaults import * + +urlpatterns = patterns('', + # Example: + # (r'^test/', include('accounts.apps.foo.urls.foo')), + (r'^verify/$', 'accounts.adm.views.check_credential'), +) diff --git a/archive/vieux/accounts/conf_apache b/archive/vieux/accounts/conf_apache new file mode 100644 index 00000000..6b43827c --- /dev/null +++ b/archive/vieux/accounts/conf_apache @@ -0,0 +1,44 @@ + + # Tous les alias + ServerName accounts.adm + ServerAlias accounts.adm.crans.org + + + SetHandler python-program + PythonPath "['/usr/scripts/'] + sys.path" + PythonHandler django.core.handlers.modpython + SetEnv DJANGO_SETTINGS_MODULE accounts.adm_settings + #PythonOption django.root / + PythonDebug On + + CustomLog /var/log/apache2/accounts.adm.log combined + + + + # Tous les alias + ServerName accounts + ServerAlias accounts.crans.org + + RedirectMatch /.* https://accounts.crans.org/$1 + TransferLog /dev/null + + + + + + ServerName accounts.crans.org + SSLEngine on + + + + SetHandler python-program + PythonPath "['/usr/scripts/'] + sys.path" + PythonHandler django.core.handlers.modpython + SetEnv DJANGO_SETTINGS_MODULE accounts.settings + #PythonOption django.root / + PythonDebug On + + CustomLog /var/log/apache2/accounts.log combined + + + diff --git a/archive/vieux/accounts/cransaccounts/__init__.py b/archive/vieux/accounts/cransaccounts/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/archive/vieux/accounts/cransaccounts/backend.py b/archive/vieux/accounts/cransaccounts/backend.py new file mode 100644 index 00000000..63af6d12 --- /dev/null +++ b/archive/vieux/accounts/cransaccounts/backend.py @@ -0,0 +1,42 @@ +from django.conf import settings +from django.contrib.auth.models import User, check_password +import cranslib.gestion.authentification as auth +import cranslib.utils.logs as logs +LOGGER = logs.getFileLogger( "accounts" ) + +class LdapBackend: + """ + Authenticate against the cr@ns API + """ + def authenticate(self, username=None, password=None): + try: + crans_user = auth.login( username, password ) + LOGGER.info( "user %s logged in" % username ) + try: + user = User.objects.get(username=username) + except User.DoesNotExist: + # Create a new user. Note that we can set password + # to anything, because it won't be checked; + user = User(username=username, password="") + user.first_name = crans_user.prenom + user.last_name = crans_user.nom + user.email = crans_user.mail + if crans_user.is_nounou(): + user.is_staff = True + user.is_superuser = True + user.save() + return user + except auth.AuthentificationFailed, e: + print "Auth failed" + LOGGER.warning("authentification Failed [%s]" % str(e) ) + except Exception, e: + LOGGER.critical( str( e ) ) + raise e + + + + def get_user(self, user_id): + try: + return User.objects.get(pk=user_id) + except User.DoesNotExist: + return None diff --git a/archive/vieux/accounts/cransaccounts/models.py b/archive/vieux/accounts/cransaccounts/models.py new file mode 100644 index 00000000..1c9e2c55 --- /dev/null +++ b/archive/vieux/accounts/cransaccounts/models.py @@ -0,0 +1,11 @@ +from django.db import models +from django.contrib.auth.models import User + +# Create your models here. +class Credential(models.Model): + service = models.CharField("Service", max_length=200) + user = models.ForeignKey(User) + token = models.CharField("Credential", max_length=1000, unique=True) + date = models.DateTimeField(auto_now_add=True) + class Admin: + list_display = ('user', 'token', 'service', 'date') \ No newline at end of file diff --git a/archive/vieux/accounts/cransaccounts/uuid.py b/archive/vieux/accounts/cransaccounts/uuid.py new file mode 100644 index 00000000..8cdbb80c --- /dev/null +++ b/archive/vieux/accounts/cransaccounts/uuid.py @@ -0,0 +1,234 @@ +"""UUID (universally unique identifiers) as specified in RFC 4122. + +This module provides the UUID class and the functions uuid1(), uuid3(), +uuid4(), uuid5() for generating version 1, 3, 4, and 5 UUIDs respectively. + +This module works with Python 2.3 or higher.""" + +__author__ = 'Ka-Ping Yee ' +__date__ = '$Date: 2005/11/30 11:51:58 $'.split()[1].replace('/', '-') +__version__ = '$Revision: 1.10 $' + +RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE = [ + 'reserved for NCS compatibility', 'specified in RFC 4122', + 'reserved for Microsoft compatibility', 'reserved for future definition'] + +class UUID(object): + """Instances of the UUID class represent UUIDs as specified in RFC 4122. + Converting a UUID to a string using str() produces a string in the form + "{12345678-1234-1234-1234-123456789abc}". The UUID constructor accepts + a similar string (braces and hyphens optional), or six integer arguments + (with 32-bit, 16-bit, 16-bit, 8-bit, 8-bit, and 48-bit values + respectively). UUID objects have the following attributes: + + bytes gets or sets the UUID as a 16-byte string + + urn gets the UUID as a URN as specified in RFC 4122 + + variant gets or sets the UUID variant as one of the constants + RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE + + version gets or sets the UUID version number (1 through 5) + """ + + def __init__(self, *args): + """Create a UUID either from a string representation in hexadecimal + or from six integers (32-bit time_low, 16-bit time_mid, 16-bit + time_hi_ver, 8-bit clock_hi_res, 8-bit clock_low, 48-bit node).""" + if len(args) == 1: + digits = args[0].replace('urn:', '').replace('uuid:', '') + digits = digits.replace('{', '').replace('}', '').replace('-', '') + assert len(digits) == 32, ValueError('badly formed UUID string') + time_low = int(digits[:8], 16) + time_mid = int(digits[8:12], 16) + time_hi_ver = int(digits[12:16], 16) + clock_hi_res = int(digits[16:18], 16) + clock_low = int(digits[18:20], 16) + node = int(digits[20:32], 16) + else: + (time_low, time_mid, time_hi_ver, + clock_hi_res, clock_low, node) = args + assert 0 <= time_low < 0x100000000, ValueError('time_low out of range') + assert 0 <= time_mid < 1<<16, ValueError('time_mid out of range') + assert 0 <= time_hi_ver < 1<<16, ValueError('time_hi_ver out of range') + assert 0 <= clock_hi_res < 1<<8, ValueError('clock_hi_res out of range') + assert 0 <= clock_low < 1<<8, ValueError('clock_low out of range') + assert 0 <= node < 0x1000000000000, ValueError('node out of range') + self.time_low = time_low + self.time_mid = time_mid + self.time_hi_ver = time_hi_ver + self.clock_hi_res = clock_hi_res + self.clock_low = clock_low + self.node = node + + def __cmp__(self, other): + return cmp(self.bytes, getattr(other, 'bytes', other)) + + def __str__(self): + return '{%08x-%04x-%04x-%02x%02x-%012x}' % ( + self.time_low, self.time_mid, self.time_hi_ver, + self.clock_hi_res, self.clock_low, self.node) + + def __repr__(self): + return 'UUID(%r)' % str(self) + + def get_bytes(self): + def byte(n): + return chr(n & 0xff) + + return (byte(self.time_low >> 24) + byte(self.time_low >> 16) + + byte(self.time_low >> 8) + byte(self.time_low) + + byte(self.time_mid >> 8) + byte(self.time_mid) + + byte(self.time_hi_ver >> 8) + byte(self.time_hi_ver) + + byte(self.clock_hi_res) + byte(self.clock_low) + + byte(self.node >> 40) + byte(self.node >> 32) + + byte(self.node >> 24) + byte(self.node >> 16) + + byte(self.node >> 8) + byte(self.node)) + + def set_bytes(self, bytes): + values = map(ord, bytes) + self.time_low = ((values[0] << 24) + (values[1] << 16) + + (values[2] << 8) + values[3]) + self.time_mid = (values[4] << 8) + values[5] + self.time_hi_ver = (values[6] << 8) + values[7] + self.clock_hi_res = values[8] + self.clock_low = values[9] + self.node = ((values[10] << 40) + (values[11] << 32) + + (values[12] << 24) + (values[13] << 16) + + (values[14] << 8) + values[15]) + + bytes = property(get_bytes, set_bytes) + + def get_urn(self): + return 'urn:uuid:%08x-%04x-%04x-%02x%02x-%012x' % ( + self.time_low, self.time_mid, self.time_hi_ver, + self.clock_hi_res, self.clock_low, self.node) + + urn = property(get_urn) + + def get_variant(self): + if not self.clock_hi_res & 0x80: + return RESERVED_NCS + elif not self.clock_hi_res & 0x40: + return RFC_4122 + elif not self.clock_hi_res & 0x20: + return RESERVED_MICROSOFT + else: + return RESERVED_FUTURE + + def set_variant(self, variant): + if variant == RESERVED_NCS: + self.clock_hi_res &= 0x7f + elif variant == RFC_4122: + self.clock_hi_res &= 0x3f + self.clock_hi_res |= 0x80 + elif variant == RESERVED_MICROSOFT: + self.clock_hi_res &= 0x1f + self.clock_hi_res |= 0xc0 + elif variant == RESERVED_FUTURE: + self.clock_hi_res &= 0x1f + self.clock_hi_res |= 0xe0 + else: + raise ValueError('illegal variant identifier') + + variant = property(get_variant, set_variant) + + def get_version(self): + return self.time_hi_ver >> 12 + + def set_version(self, version): + assert 1 <= version <= 5, ValueError('illegal version number') + self.time_hi_ver &= 0x0fff + self.time_hi_ver |= (version << 12) + + version = property(get_version, set_version) + +def unixgetaddr(program): + """Get the hardware address on a Unix machine.""" + from os import popen + for line in popen(program): + words = line.lower().split() + if 'hwaddr' in words: + addr = words[words.index('hwaddr') + 1] + return int(addr.replace(':', ''), 16) + if 'ether' in words: + addr = words[words.index('ether') + 1] + return int(addr.replace(':', ''), 16) + +def wingetaddr(program): + """Get the hardware address on a Windows machine.""" + from os import popen + for line in popen(program + ' /all'): + if line.strip().lower().startswith('physical address'): + addr = line.split(':')[-1].strip() + return int(addr.replace('-', ''), 16) + +def getaddr(): + """Get the hardware address as a 48-bit integer.""" + from os.path import join, isfile + for dir in ['/sbin', '/usr/sbin', r'c:\windows', + r'c:\windows\system', r'c:\windows\system32']: + if isfile(join(dir, 'ifconfig')): + return unixgetaddr(join(dir, 'ifconfig')) + if isfile(join(dir, 'ipconfig.exe')): + return wingetaddr(join(dir, 'ipconfig.exe')) + +def uuid1(): + """Generate a UUID based on the time and hardware address.""" + from time import time + from random import randrange + nanoseconds = int(time() * 1e9) + # 0x01b21dd213814000 is the number of 100-ns intervals between the + # UUID epoch 1582-10-15 00:00:00 and the Unix epoch 1970-01-01 00:00:00. + timestamp = int(nanoseconds/100) + 0x01b21dd213814000 + clock = randrange(1<<16) # don't use stable storage + time_low = timestamp & (0x100000000 - 1) + time_mid = (timestamp >> 32) & 0xffff + time_hi_ver = (timestamp >> 48) & 0x0fff + clock_low = clock & 0xff + clock_hi_res = (clock >> 8) & 0x3f + node = getaddr() + uuid = UUID(time_low, time_mid, time_hi_ver, clock_low, clock_hi_res, node) + uuid.variant = RFC_4122 + uuid.version = 1 + return uuid + +def uuid3(namespace, name): + """Generate a UUID from the MD5 hash of a namespace UUID and a name.""" + from md5 import md5 + uuid = UUID(0, 0, 0, 0, 0, 0) + uuid.bytes = md5(namespace.bytes + name).digest()[:16] + uuid.variant = RFC_4122 + uuid.version = 3 + return uuid + +def uuid4(): + """Generate a random UUID.""" + try: + from os import urandom + except: + from random import randrange + uuid = UUID(randrange(1<<32), randrange(1<<16), randrange(1<<16), + randrange(1<<8), randrange(1<<8), randrange(1<<48)) + else: + uuid = UUID(0, 0, 0, 0, 0, 0) + uuid.bytes = urandom(16) + uuid.variant = RFC_4122 + uuid.version = 4 + return uuid + +def uuid5(namespace, name): + """Generate a UUID from the SHA-1 hash of a namespace UUID and a name.""" + from sha import sha + uuid = UUID(0, 0, 0, 0, 0, 0) + uuid.bytes = sha(namespace.bytes + name).digest()[:16] + uuid.variant = RFC_4122 + uuid.version = 5 + return uuid + +NAMESPACE_DNS = UUID('{6ba7b810-9dad-11d1-80b4-00c04fd430c8}') +NAMESPACE_URL = UUID('{6ba7b811-9dad-11d1-80b4-00c04fd430c8}') +NAMESPACE_OID = UUID('{6ba7b812-9dad-11d1-80b4-00c04fd430c8}') +NAMESPACE_X500 = UUID('{6ba7b814-9dad-11d1-80b4-00c04fd430c8}') + + diff --git a/archive/vieux/accounts/cransaccounts/views.py b/archive/vieux/accounts/cransaccounts/views.py new file mode 100644 index 00000000..d54c5c58 --- /dev/null +++ b/archive/vieux/accounts/cransaccounts/views.py @@ -0,0 +1,53 @@ +# Create your views here. +from models import Credential +from django.http import HttpResponse, HttpResponseRedirect +import datetime +import uuid +from django.contrib.auth.decorators import login_required +from django.shortcuts import render_to_response +from django.template import RequestContext + +def index( request ): + return render_to_response('account_index.html', context_instance=RequestContext(request) ) +index = login_required(index) + +def auth( request ): + service = request.GET['service'] + # create credential + ## generat token + token = str( uuid.uuid4() ) + ## save in db + cred = Credential( service=service, token=token, user=request.user ) + cred.save() + # redirect + ## by service... + if service == "blogs": + return callbacks.blogs_callback( cred ) + return HttpResponse("cred=%s" % cred.token) +auth = login_required(auth) + + +def check_credential( request ): + cred = request.GET['cred'] + service = request.GET['service'] + # retreive credential in db + try: + cred = Credential.objects.get(token=cred, service=service) + ## if not to old, accept + if cred.date.today() - cred.date < datetime.timedelta( minutes=10 ): + response = HttpResponse("VALID") + response['username'] = cred.user.username + response['fullname'] = cred.user.get_full_name() + response['email'] = cred.user.email + return response + return HttpResponse("INVALID") + except Credential.DoesNotExist: + return HttpResponse("INVALID") + ## else, or if not exist reject + + +class callbacks: + def blogs_callback( cred ): + url="http://blogtest.crans.org/actions/auth/return?cred=" + cred.token + return HttpResponseRedirect(url) + blogs_callback = staticmethod(blogs_callback) \ No newline at end of file diff --git a/archive/vieux/accounts/manage.py b/archive/vieux/accounts/manage.py new file mode 100755 index 00000000..bcdd55e2 --- /dev/null +++ b/archive/vieux/accounts/manage.py @@ -0,0 +1,11 @@ +#!/usr/bin/python +from django.core.management import execute_manager +try: + import settings # Assumed to be in the same directory. +except ImportError: + import sys + sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) + sys.exit(1) + +if __name__ == "__main__": + execute_manager(settings) diff --git a/archive/vieux/accounts/media/logo.png b/archive/vieux/accounts/media/logo.png new file mode 100644 index 00000000..73c42a60 Binary files /dev/null and b/archive/vieux/accounts/media/logo.png differ diff --git a/archive/vieux/accounts/media/style.css b/archive/vieux/accounts/media/style.css new file mode 100644 index 00000000..81fc1f2b --- /dev/null +++ b/archive/vieux/accounts/media/style.css @@ -0,0 +1,39 @@ +body { + padding:0;margin:0; + background: white url("/mymedia/logo.png") no-repeat top left;); + padding: 140px 0 0 0; + } + +.login-text { + width: 60%; float:left; + margin:1em ; + } +.login-box { + background:#EFFFEF none repeat scroll 0 0; + border:7px solid #007900; + float:left; + font-family:arial,sans-serif; + font-size:.8em; + font-weight:bold; + width:20em; + } + .login-box h2 { + margin: .5em; + text-align: center; } + .login-box p.error { + background: #FFEFEF; + border: thin #E90000 solid; + margin:1em; + padding:.2em; } +form { margin: 1em;} + +input[type=text], input[type=password] { + width:14em; + margin: .1em .2em .8em;} +input[type=submit] { + float:right } + +label { + display: block; + } +form:after { content: " "; display:block; height:0; clear:both; diff --git a/archive/vieux/accounts/settings.py b/archive/vieux/accounts/settings.py new file mode 100644 index 00000000..618d90ea --- /dev/null +++ b/archive/vieux/accounts/settings.py @@ -0,0 +1,85 @@ +# Django settings for accounts project. +# -*- coding: utf-8 -*- + +DEBUG = True +TEMPLATE_DEBUG = DEBUG + +ADMINS = ( + # ('Your Name', 'your_email@domain.com'), +) + +MANAGERS = ADMINS + +DATABASE_ENGINE = 'mysql' # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'. +DATABASE_NAME = 'webaccounts' # Or path to database file if using sqlite3. +DATABASE_USER = 'djangoaccounts' # Not used with sqlite3. +DATABASE_PASSWORD = '' # Not used with sqlite3. +DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3. +DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3. + +# Local time zone for this installation. All choices can be found here: +# http://www.postgresql.org/docs/current/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE +TIME_ZONE = 'America/Chicago' + +# Language code for this installation. All choices can be found here: +# http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes +# http://blogs.law.harvard.edu/tech/stories/storyReader$15 +LANGUAGE_CODE = 'en-us' + +SITE_ID = 1 + +# Absolute path to the directory that holds media. +# Example: "/home/media/media.lawrence.com/" +MEDIA_ROOT = '' + +# URL that handles the media served from MEDIA_ROOT. +# Example: "http://media.lawrence.com" +MEDIA_URL = '' + +# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a +# trailing slash. +# Examples: "http://foo.com/media/", "/media/". +ADMIN_MEDIA_PREFIX = '/media/' + +# Make this unique, and don't share it with anybody. +SECRET_KEY = 'lk5§8¨Â§(rfghurdffg$¹^dfg§t"arefzgudsrtgyat' + +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = ( + 'django.template.loaders.filesystem.load_template_source', + 'django.template.loaders.app_directories.load_template_source', +# 'django.template.loaders.eggs.load_template_source', +) + +MIDDLEWARE_CLASSES = ( + 'django.middleware.common.CommonMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.middleware.doc.XViewMiddleware', +) + +ROOT_URLCONF = 'accounts.urls' + +TEMPLATE_DIRS = ( + # Put strings here, like "/home/html/django_templates". + # Always use forward slashes, even on Windows. + "/usr/scripts/accounts/templates/", +) + +INSTALLED_APPS = ( + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.admin', + 'accounts.cransaccounts', +) + + +AUTHENTICATION_BACKENDS = ( +#'django.contrib.auth.backends.ModelBackend', + 'accounts.cransaccounts.backend.LdapBackend', +) + +LOGIN_URL="/login/" +LOGIN_REDIRECT_URL="/" \ No newline at end of file diff --git a/archive/vieux/accounts/templates/account_index.html b/archive/vieux/accounts/templates/account_index.html new file mode 100644 index 00000000..df8915e9 --- /dev/null +++ b/archive/vieux/accounts/templates/account_index.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} +{% block content %} + +{% endblock %} diff --git a/archive/vieux/accounts/templates/base.html b/archive/vieux/accounts/templates/base.html new file mode 100644 index 00000000..829dec52 --- /dev/null +++ b/archive/vieux/accounts/templates/base.html @@ -0,0 +1,13 @@ + + + + + {% block head-title %}cr@ns | login{% endblock %} + + + + + +{% block content %}{% endblock %} + + diff --git a/archive/vieux/accounts/templates/index.html b/archive/vieux/accounts/templates/index.html new file mode 100644 index 00000000..d744e31f --- /dev/null +++ b/archive/vieux/accounts/templates/index.html @@ -0,0 +1,4 @@ +{% extends "base.html" %} + {% block content %} +{{ user }} +{% endblock %} diff --git a/archive/vieux/accounts/templates/login.html b/archive/vieux/accounts/templates/login.html new file mode 100644 index 00000000..69813c2c --- /dev/null +++ b/archive/vieux/accounts/templates/login.html @@ -0,0 +1,32 @@ +{% extends "base.html" %} + {% block content %} + + +{% endblock %} diff --git a/archive/vieux/accounts/test/__init__.py b/archive/vieux/accounts/test/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/archive/vieux/accounts/test/models.py b/archive/vieux/accounts/test/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/archive/vieux/accounts/test/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/archive/vieux/accounts/test/views.py b/archive/vieux/accounts/test/views.py new file mode 100644 index 00000000..20839532 --- /dev/null +++ b/archive/vieux/accounts/test/views.py @@ -0,0 +1,10 @@ +# Create your views here. +from django.contrib.auth.decorators import login_required +from django.http import HttpResponse + +def index(request): + return HttpResponse("Hello, world. You're at the poll index.") + +def my_view(request): + return HttpResponse("youpla ! (you're logged in ;-))") +my_view = login_required(my_view) \ No newline at end of file diff --git a/archive/vieux/accounts/urls.py b/archive/vieux/accounts/urls.py new file mode 100644 index 00000000..a8089739 --- /dev/null +++ b/archive/vieux/accounts/urls.py @@ -0,0 +1,18 @@ +from django.conf.urls.defaults import * + +urlpatterns = patterns('', + # Example: + # (r'^test/', include('accounts.apps.foo.urls.foo')), + (r'^$', 'accounts.cransaccounts.views.index'), + (r'^test/$', 'accounts.test.views.my_view'), + (r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}), + (r'^auth/$', 'accounts.cransaccounts.views.auth'), + + (r'^logout/$', 'django.contrib.auth.views.logout_then_login'), + # Uncomment this for admin: + (r'^accounts/admin/', include('django.contrib.admin.urls')), + (r'^mymedia/(?P.*)$', 'django.views.static.serve', + {'document_root': '/usr/scripts/accounts/media/', + 'show_indexes': True} + ), +) diff --git a/archive/vieux/bot.py b/archive/vieux/bot.py new file mode 100755 index 00000000..2f7456d0 --- /dev/null +++ b/archive/vieux/bot.py @@ -0,0 +1,248 @@ +#!/usr/bin/env python + +import sys,os +import socket +import string +import time +import commands +import feedparser +import getopt + +def usage(): + print 'coucou\n' + print 'a list of useful feeds : ' + '\n' + print 'http://www.lemonde.fr/rss/une.xml' + '\n' + print 'http://linuxfr.org/backend/news-homepage/rss20.rss' + '\n' + print 'http://www.my-meteo.fr/meteo+rss+paris.html' + '\n' + print 'http://partner-meteo.com/api/api/rss_simple.php?id=29591' + '\n' + print 'http://feeds2.feedburner.com/failblog' + '\n' + print 'http://xkcd.com/rss.xml' + '\n' + print 'http://www.liberation.fr/rss/laune' + '\n' + print 'http://rss.slashdot.org/Slashdot/slashdot' + '\n' + print '\n' + print 'options -n --nick= : nickname\n' + print 'options --feedurl= the url of the feed\n' + print 'options --dontcheckfeed don\'t check if the feed has already been sent\n' + print 'options --command= the command to run\n' + print 'options --chan= the channel to join (don\'t put the #)\n' + print 'look at the source the author forget to document some options' + +def checklock(): + try: + lock=open("/tmp/botirclock",'r') + pid=int(lock.read()) + lock.close() + if os.path.exists("/proc/"+str(pid)): + print 'Locked by ' + str(pid) + '\n' + return 1 + else: + print 'Locked by ' + str(pid) + ' but the bot died\n' + return 0 + except: + return 0 + return 0 + +def makelock(): + pid=os.getpid() + print 'We write ' + str(pid)+' in the lock \n' + lock=open("/tmp/botirclock",'w') + lock.write(str(pid)+'\n') + lock.close() + +def releaselock(): + print 'We relase the lock .............' + lock=open("/tmp/botirclock",'w') + lock.close() + + +def main(): + #default values + HOST='irc.crans.org' #The server we want to connect to + PORT=6667 #The connection port which is usually 6667 + NICK='braicebot' #The bot's nickname + IDENT='braicebot' + REALNAME='4242' + CHANNELINIT='#flood' #The default channel for the bot + sendfeed=0 + sendcommand=0 + dontcheckfeed=0 + nofeedurl=0 + nolock=0 + numfeedentries=1 + longsumary=0 + linelen=120 + #command_to_send='tail /var/log/messages' + #command_to_send='cat ' + sys.argv[0] + + + + + try: + opts, args = getopt.getopt(sys.argv[1:], "hn:v", ["help", "dontcheckfeed", "nofeedurl", "nick=", "feedurl=", "command=", "chan=", "numfeeds=","longdesc", "nolock"]) + except getopt.GetoptError, err: + # print help information and exit: + print str(err) # will print something like "option -a not recognized" + usage() + sys.exit(2) + output = None + verbose = False + for o, a in opts: + if o == "-v": + verbose = True + elif o in ("-h", "--help"): + usage() + sys.exit() + elif o in ("-n", "--nick"): + NICK = a + elif o == "--feedurl": + feedurl = a + sendfeed=1 + elif o == "--numfeeds": + numfeedentries = int(a) + elif o == "--dontcheckfeed": + dontcheckfeed=1 + elif o == "--nofeedurl": + nofeedurl=1 + elif o == "--nolock": + nolock=1 + elif o == "--command": + command_to_send = a + sendcommand=1 + elif o == "--chan": + CHANNELINIT = '#' + a + else: + assert False, "unhandled option" + + + + if sendcommand: + print 'We execute the command ...' + fortune=commands.getoutput(command_to_send) + elif sendfeed: + feed = feedparser.parse(feedurl) + if numfeedentries==1 and not dontcheckfeed: #we check if it was updated + hashurl=abs(hash(feedurl)) + try: + lastupdate=time.mktime(feed["items"][0]["updated_parsed"]) + except: + sys.exit(0) + lastupdatesent=0 + alreadysent=0 + try: + filedate=open('/tmp/botirc'+str(hashurl),'r') + for line in filedate.readlines(): + if len(line)>2: + lastupdatesent=float(line) + if lastupdatesent == lastupdate : + alreadysent=1 + filedate.close() + except: + print 'Cannot open ' + '/tmp/botirc'+str(hashurl) + '\n' + if alreadysent: + print 'Feed already sent\n' + sys.exit(0) + if nofeedurl: + fortune ="" + else: + fortune="latest entry from " + feedurl +'\n' + for feednum in range(0,numfeedentries): + fortune+='title : ' + feed["items"][feednum]['title'] + '\n' + 'link : ' + feed["items"][feednum]['link'] +'\n' + oldline="" + for line in feed["items"][feednum]['summary'].split('\n'):#.split('linelen: + print 'line splitting' + j=0#We cut the line where spaces are #TODO : make a function + while j= 400 and code<>412: #412 : no text to send, we don't care + print "The server is not happy" + if not nolock: + releaselock() + sys.exit(1) + #print buffer #server message is output + if buffer.find('Welcome')!=-1: + s.send('JOIN '+CHANNELINIT+'\n') #Join a channel + hourjoined=time.time() + print 'Message in ' + str(delaybeforemessage) +'seconds \n' + buffer="" + + if hourjoined and not hourbye: + if (time.time()-hourjoined)>delaybeforemessage: + for line in fortune.split('\n'): + message='PRIVMSG '+CHANNELINIT+' :' + line + '\n' + time.sleep(sleepbetweenlines) + s.send(message.encode("utf-8")) + print message.encode("utf-8") + time.sleep(sleeppercharacter*len(message)) #to avoid kick by flood + print 'Bye in ' + str(delaybye) +'seconds \n' + hourbye=time.time() + if hourbye and (time.time()-hourbye)>delaybye: + break + + s.close() + if sendfeed and numfeedentries==1 and not dontcheckfeed: #we check if it was updated + filedate=open('/tmp/botirc'+str(hashurl),'a') + print 'we write ' + '/tmp/botirc'+str(hashurl) + '\n' + filedate.write(str(float(lastupdate))+'\n\n') + filedate.close() + if not nolock: + releaselock() + +if __name__ == "__main__": + main() diff --git a/archive/vieux/cert_crans.crt b/archive/vieux/cert_crans.crt new file mode 100644 index 00000000..67e5e504 --- /dev/null +++ b/archive/vieux/cert_crans.crt @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDjzCCAvigAwIBAgIBADANBgkqhkiG9w0BAQQFADCBkjELMAkGA1UEBhMCRlIx +DzANBgNVBAgTBkZyYW5jZTEPMA0GA1UEBxMGQ2FjaGFuMQ4wDAYDVQQKEwVDUkFO +UzExMC8GA1UEAxQoQXNzb2NpYXRpb24gQ2FjaGFuIFJlc2VhdXggQCBOb3JtYWxl +IFN1cDEeMBwGCSqGSIb3DQEJARYPcm9vdHNAY3JhbnMub3JnMB4XDTA0MDkyMTE2 +MjUwOFoXDTI0MDkxNjE2MjUwOFowgZIxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZG +cmFuY2UxDzANBgNVBAcTBkNhY2hhbjEOMAwGA1UEChMFQ1JBTlMxMTAvBgNVBAMU +KEFzc29jaWF0aW9uIENhY2hhbiBSZXNlYXV4IEAgTm9ybWFsZSBTdXAxHjAcBgkq +hkiG9w0BCQEWD3Jvb3RzQGNyYW5zLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAw +gYkCgYEAy5hkO55iS20gxRShJERKjuszdC9FjvyphkTOj+Lv6UgaRI586n1VupT1 +wvxLuwU2HHYvpWvoV15KMto57g7ZpDAtfoPa5TzNguJFtup+VqxnOJm2r7DxS+b0 +RKTw4Gngni5UMfqGoj2Y4pZ5sUZRH1a/fr8hi8nH4KDVPWMvK98CAwEAAaOB8jCB +7zAdBgNVHQ4EFgQUgyAdWaO733v1792NF3NncCXuo5owgb8GA1UdIwSBtzCBtIAU +gyAdWaO733v1792NF3NncCXuo5qhgZikgZUwgZIxCzAJBgNVBAYTAkZSMQ8wDQYD +VQQIEwZGcmFuY2UxDzANBgNVBAcTBkNhY2hhbjEOMAwGA1UEChMFQ1JBTlMxMTAv +BgNVBAMUKEFzc29jaWF0aW9uIENhY2hhbiBSZXNlYXV4IEAgTm9ybWFsZSBTdXAx +HjAcBgkqhkiG9w0BCQEWD3Jvb3RzQGNyYW5zLm9yZ4IBADAMBgNVHRMEBTADAQH/ +MA0GCSqGSIb3DQEBBAUAA4GBAHn3mJzXOZbJMh+yfFCWTNtm74Xe68qSpZc3vh+/ +IKyoEtZdlRfX0UDJtydak4TkfiQBrqaCIBYX7HNfUj9kSTj5GlVUXCGlG16Z8jIA +mPnWNqQCCuiKd56MdWxZnXeSxqBcKl4yjF3UKTrLH8Kd5jqUb3NWe/ghpS2eErwY +4EKL +-----END CERTIFICATE----- diff --git a/archive/vieux/cranspasswords b/archive/vieux/cranspasswords new file mode 100755 index 00000000..39b99790 --- /dev/null +++ b/archive/vieux/cranspasswords @@ -0,0 +1,182 @@ +#! /bin/bash +############################################################################### +# Plus utilisé ! Cf https://wiki.crans.org/CransTechnique/CransPasswords +# cranspasswords : Outil de (dé)chiffrage de mots de passe +############################################################################### +# +# Copyright (C) 2006 Etienne Chové +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +############################################################################### +# variables générales + +SRV=vert.adm.crans.org +REP=/root +TMP=`if which tempfile &> /dev/null; then tempfile -m 600; else mktemp; fi` +#trap "rm -f ${TMP} ${TMP}.asc" EXIT + +############################################################################## +# parsage des arguments + +if [[ -z "$1" ]] ; then + ACTION="--view" + CHOIX="" +elif echo $1 | grep -q '^--' ; then + ACTION=$1 + CHOIX=$2 +else + ACTION='--view' + CHOIX=$1 +fi + +############################################################################## +# fonctions utiles + +function liste () { + # donne la liste des mot de passe + echo -e "\033[1;34mListe des mot de passe disponibles :\033[1;0m" >&2 + ssh ${SRV} "ls ${REP} | grep -e '.asc$' | sed 's/\.asc$//g' | sed 's/^/ /g'" 2> /dev/null +} + +function choix () { + # choix du fichier + if [[ -z "$CHOIX" ]] ; then + liste + echo + echo -e -n "\033[1;34mChoix : \033[1;0m" + read CHOIX + else + echo -e "\033[1;34mChoix :\033[1;0m $CHOIX" + fi + echo +} + +function dechiffre () { + # récupère le mot de passe $CHOIX, le déchiffre et le colle dans $TMP + # ${TMP} sera vide si les pass n'existe pas + echo -e "\033[1;34mConnection à ${SRV}\033[1;0m" + ssh ${SRV} -t "sudo -p 'Mot de passe sudo : ' echo -n" 2> /dev/null + echo + echo -e "\033[1;34mRécupération du fichier et déchifrage\033[1;0m" + ssh ${SRV} "sudo cat ${REP}/$CHOIX.asc" | gpg --decrypt > ${TMP} + echo +} + +function chiffre () { + # chiffre les fichier $TMP et les colle dans le fichier $CHOIX + echo -e "\033[1;34mChiffrage et envoi sur ${SRV}\033[1;0m" + if [[ ! -s ${TMP} ]] ; then + echo -e "\033[1;31mFichier vide, abandon...\033[1;0m" + return + fi + full_rec=( + 051ADBC8 # maioli@crans.org + 0BF3708E # xavier.lagorce@crans.org + 2127F85A # jdimino@dptinfo.ens-cachan.fr + 41C2B76B # samir@crans.org + 49881AD3 # Stephane.Glondu@crans.org + 5BEC9A2F # olivier.iffrig@crans.org + 66475AAF # nicolas.dandrimont@crans.org + 6E1C820B # daniel.stan@crans.org + 7D980513 # parret-freaud@crans.org + 8E96ACDA # adg@crans.org + A8A4F83E # bruot@crans.org + AF087A52 # blockelet@crans.org + E0DCF376 # olivier.huber@crans.org + F2530FCE # pierre.chambart@crans.org + ) + count=${#full_rec[@]} + RECIPIENTS=$(index=0; while [ "$index" -lt "$count" ]; do echo -n "-r "; echo -n 0x${full_rec[$index]}; echo -n " "; ((index++)); done) + yes | gpg --armor --encrypt ${RECIPIENTS} ${TMP} + + # 3603EFD9 alexandre@alexandre-bos.fr + # 4EF9E1D1 xavier.pessoles@crans.org + # 6D1DF0FA pauget@crans.org + # 81DDB065 gregoire.detrez@crans.org + # 98E76332 etienne.chove@crans.org + # BD156CC4 dubost@crans.org + # C5C4ACC0 vincent.thomas@crans.org + # D6ADFD5A carlos@crans.org + # F22A794E Vincent.Bernat@crans.org + # FBFA4781 Nicolas.Stransky@crans.org + [[ "$#" == "0" ]] && ssh ${SRV} "sudo sh -c \"cat > ${REP}/${CHOIX}.asc\"" < ${TMP}.asc || echo -e "\033[1;31mErreur, abandon...\033[1;0m" +} + +function droits () { + # modifie les droits du fichier chiffré + echo -e "\033[1;34mChangement des droits sur le fichier\033[1;0m" + ssh ${SRV} "sudo chmod 600 ${REP}/${CHOIX}.asc" +} + +function edite () { + # édite le fichier temporaire + $EDITOR ${TMP} +} + +function voir () { + # affiche le contenu du fichier temporaire + echo -e "\033[1;34mAffichage du fichier\033[1;0m" + less ${TMP} +} + +function supprime () { + # supprime un fichier + echo -e "\033[1;34mSuppression du fichier chiffré : \033[1;0m${CHOIX}" + CONFIRM="Oui, je suis certain." + echo -n "Tapez \"$CONFIRM\" : " + read CONFIRM2 + echo + if [[ "${CONFIRM}" == "${CONFIRM2}" ]] ; then + echo -e "\033[1;34mConnexion à ${SRV}\033[1;0m" + ssh ${SRV} -t "sudo -p 'Mot de passe sudo : ' echo -n" 2> /dev/null + echo + echo -e "\033[1;34mSuppression du fichier\033[1;0m" + ssh ${SRV} "sudo rm -f ${REP}/$CHOIX.asc 2> /dev/null" + echo -e "\033[1;32mFichier supprimé...\033[1;0m" + else + echo -e "\033[1;31mAbandon...\033[1;0m" + fi +} + +############################################################################## + +if [[ "$ACTION" == "--re-encrypt-all" ]] ; then + for CHOIX in `liste 2> /dev/null` ; do + echo -e "\033[1;33mTraitement de : \033[1;0m${CHOIX}" + echo + dechiffre + chiffre + droits + rm -f ${TMP} ${TMP}.asc + echo + done +elif [[ "$ACTION" == "--edit" ]] ; then + choix + dechiffre + edite + chiffre + droits +elif [[ "$ACTION" == "--remove" ]] ; then + choix + supprime +elif [[ "$ACTION" == "--view" ]] ; then + choix + dechiffre + voir +elif [[ "$ACTION" == "--list" ]] ; then + liste 2> /dev/null | cut -b 5- +else + echo "Usage : cranspasswords [--re-encrypt-all|--edit|--remove|--view|--list] [FICHIER]" +fi diff --git a/archive/vieux/deco_ag.html b/archive/vieux/deco_ag.html new file mode 100644 index 00000000..6323dcd2 --- /dev/null +++ b/archive/vieux/deco_ag.html @@ -0,0 +1,750 @@ + + + + + + VieCrans/PagesDeDeconnexion/ERR_CUSTOM_AGO + + + +
+ +
+

+

DEMANDE REFUSEE

+

L'accès internet est suspendu en raison de la tenue de l'Assemblée Générale Ordinaire du Cr@ns ayant lieu en ce moment même au pavillon des jardins (PDJ).
+ La coupure sera effective pendant toute la durée de l'Assemblée Générale, c'est à dire de 19h30 à 23h.


Cette Assemblée Générale est importante car c'est l'occasion d'élire les personnes qui décideront de la politique générale de l'association et cela pour un an. Vous avez décidé d'adhérer à cette association qu'est le crans, il vous faut maintenant vous y investir un minimum, au moins en venant voter.

Comme indiqué sur la feuille verte intitulée "A propos de l'association" que ton cableur t'a remise au moment de ton inscription, il existe deux moyens privilégiés pour se tenir au courant des discussions concernant l'association :

  • Les fora crans.crans et crans.crans.annonces.
  • Le site web du crans, en particulier maintenant son wiki.

Cette déconnexion te surprend peut-être, elle a néanmoins été votée lors d'une réunion CA publique où, en tant qu'adhérent de cette association, tu es cordialement invité à participer (cf. les posts concernant les réunions des lundis 16 février et 1 mars sur les fora susnommés et sur le wiki).

La raison de cette coupure est toute simple : on assiste de plus en plus à un désintérêt du fonctionnement de l'association par ses adhérents, cette petite page est donc là pour rappeller que le CRANS ne peux exister sans un investissement minimum d'une partie de ses membres que ce soit au niveau technique (cableurs, nounous, ...) ou au niveau gestion administrative.

Nous insistons bien sur le fait que le crans n'est pas un simple fournisseur d'accés internet comme bon nombre d'adhérents le croient mais bien une association d'étudiants bénévoles qui prennent tous beaucoup de temps pour maintenir et améliorer la connexion du réseau.

A 20h30, le taux de participation est de 3,9%. VENEZ VOTEZ !!!!!!!

À 21h, le taux de participation est de 5,6%. Taux de procurations : 0,12%

À 21h30, le taux de participation est de 6,6%.

+

+Cette page a été extraite du wiki le 2011-12-31 03:30. Vous pouvez l'éditer ou voir la page originale. +

+
+ + diff --git a/archive/vieux/gest_crans_old b/archive/vieux/gest_crans_old new file mode 100755 index 00000000..7f39d28a --- /dev/null +++ b/archive/vieux/gest_crans_old @@ -0,0 +1,2113 @@ +#! /usr/bin/env python +# -*- coding: iso-8859-15 -*- + +""" +Interface utilisateur du système de gestion des machines +et adhérents du crans + +Copyright (C) Frédéric Pauget +Licence : GPLv2 + +Les fonctions set_* permettent de définir certains +paramètres liés à un adhérent ou une machine, elles posent les questions +puis apellent la méthode adpatée de la classe adhérent ou machine. +Elles prennent toute une instances de cette classe en paramètre. +Elles retournent 1 si l'action à échoué et None si OK. +Les fonction select permettent de choisir un objet dans la base +Retournent None si pas d'objet trouvé. +""" + +### Rapport de bug automatique +# Destinataires, si vide n'envoi rien +# To = ['fred@crans.org', 'glondu@crans.org', 'bos@crans.org'] +# Il risque d'y en avoir un paquet ... +To = ['bos@crans.org'] + +import string, os, sys +from whos import aff +import signal, getopt +from time import strftime, strptime, localtime, mktime +import re + +import affich_tools, config +from lock import make_lock, remove_lock +from ldap_crans import crans_ldap, blacklist_items, isadm, isdeconnecteur, ann_scol, droits_possibles, smtpserv, script_utilisateur +from ldap_crans import Adherent, AssociationCrans, Club +from ldap_crans import Machine, MachineFixe, MachineWifi, MachineCrans, BorneWifi + +def dialog(arg): + return affich_tools.dialog(u'Gestion des adhérents et machines du Crans', arg) + +db = crans_ldap() +droits = db.search("uid=%s" % script_utilisateur)['adherent'][0].droits() +isimprimeur = u"Imprimeur" in droits +iscontroleur = u'Contrôleur' in droits +isbureau = u'Bureau' in droits +encoding = sys.stdin.encoding or 'ISO-8859-15' + +######################################################################### +## Fonctions de remplissage ou modification des paramètres d'un adhérent + +def set_bases(adher): + """ + Définition des paramètres de bases d'un adhérent : + * Nom + * Prenom + * Téléphone + * Chambre + """ + + # Construction de la boite de dialogue + arg = u'--title "Inscription adhérent" ' + arg += u'--form "" 0 0 0 ' + arg += u'"Nom :" 1 1 "%s" 1 13 20 20 ' % adher.nom() + arg += u'"Prénom :" 2 1 "%s" 2 13 20 20 ' % adher.prenom() + arg += u'"Numéro de téléphone :" 3 1 "%s" 3 23 15 00 ' % adher.tel() + arg += u'"Chambre :" 4 1 "%s" 4 11 05 00 ' % adher.chbre() + arg += u'"(bat+numéro)" 4 17 "" 0 0 0 0 ' + arg += u'"EXT pour chambre extérieure au campus" 5 1 "" 0 0 0 0 ' + + # Affichage + annul, result = dialog(arg) + if annul: return 1 + + # Traitement + err = '' + try: adher.nom(result[0]) + except ValueError, c: err += c.args[0] + '\n' + + try: adher.prenom(result[1]) + except ValueError, c: err += c.args[0] + '\n' + + try: adher.tel(result[2]) + except ValueError, c: err += c.args[0] + '\n' + + err += _set_chbre(adher, result[3]) + + # Des erreurs ? + if err: + arg = u'--title "Inscription adhérent" ' + arg += u'--msgbox "%s\n\n" 0 0' % err + dialog(arg) + # On redemande + return set_bases(adher) + + if adher.chbre() == 'EXT': + # Il faut demander l'adresse extérieure + if set_addr_ext(adher): + # Annulation + return set_bases(adher) + +def _set_chbre(adher, chbre): + """ Attribution de la chambre chbre à l'adhérent fourni + Retourne une chaine (unicode) avec l'erreur éventuelle + """ + if chbre == '????': + # Réservé à un usage interne + return u'Chambre invalide\n' + + try: c = adher.chbre(chbre) + except EnvironmentError, c: return c.args[0] + '\n' + except ValueError, c: + if len(c.args) == 2: + # La chambre est occup-Aée-b + squatteur = c.args[1] + aff(squatteur) + arg = u'--title "Inscription adhérent" ' + arg += u'--yesno "Un adhérent (%s) occupe déjà cette chambre.\n' % squatteur.Nom() + arg += u'\nChanger la chambre de cet adhérent ?" 0 0' + no, res = dialog(arg) + if not no: + squatteur.chbre('????') + squatteur.save() + # On recommence, le géneur doit être parti. + return _set_chbre(adher, chbre) + return c.args[0] + '\n' + + return u'' + +def set_addr_ext(adher): + """ Définition de l'adresse extérieure d'un adhérent + La chambre de cet adhérent doit être EXT, sinon erreur """ + arg = u'--title "Adresse extérieure de %s" ' % adher.Nom() + arg += u'--form "" 0 0 0 ' + arg += u'"" 1 1 "%s" 1 1 46 50 ' % adher.adresse()[0] + arg += u'"" 2 1 "%s" 2 1 46 50 ' % adher.adresse()[1] + arg += u'"Code postal :" 3 1 "%s" 3 15 5 0 ' % adher.adresse()[2] + arg += u'"Ville :" 3 21 "%s" 3 30 17 30 ' % adher.adresse()[3] + # Affichage + annul, result = dialog(arg) + if annul: return 1 + + try: adher.adresse(result) + except ValueError, c: + arg = u'--title "Adresse extérieure de %s" ' % adher.Nom() + arg += u'--msgbox "%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + # On redemande + return set_addr_ext(adher) + +def set_etudes(adher): + """ + Définition des études en 3 questions : + * établissement + * année administrative + * section/labo + """ + + def __etudes_etab(): + arg = u'--title "Etudes de %s (1/3)" ' % adher.Nom() + if adher.etudes(0): + arg += u'--default-item "%s" ' % adher.etudes(0) + arg += u'--menu "Choisissez l\'établissement : " 0 0 0 ' + if adher.etudes(0): + arg += u'"Autre" "" ' + arg += u'"ENS" "" ' + arg += u'"IUT Cachan" "" ' + arg += u'"Maximilien Sorre" "" ' + arg += u'"Gustave Eiffel" "" ' + arg += u'"P1" "Université Panthéon Sorbonne" ' + arg += u'"P2" "Université Panthéon Assas" ' + arg += u'"P3" "Université de la Sorbonne Nouvelle" ' + arg += u'"P4" "Université Paris Sorbonne" ' + arg += u'"P5" "Université René Descartes" ' + arg += u'"P6" "Université Pierre et Marie Curie" ' + arg += u'"P7" "Université Denis Diderot" ' + arg += u'"P8" "Université Vincennes Saint Denis" ' + arg += u'"P9" "Université Paris Dauphine" ' + arg += u'"P10" "Université de Nanterre" ' + arg += u'"P11" "Université de Paris Sud (Orsay)" ' + arg += u'"P12" "Université Val de Marne" ' + arg += u'"P13" "Université Paris Nord" ' + arg += u'"IUFM" "" ' + if not adher.etudes(0): + arg += u'"Autre" ""' + + annul, result = dialog(arg) + if annul: return 1 + + if result[0] == 'Autre': + arg = u'--title "Etudes de %s (1/3)" ' % adher.Nom() + arg += u'--inputbox "Précisez l\'établissement d\'études" 0 0 "%s"' % adher.etudes(0) + annul, result = dialog(arg) + if annul: return 1 + if result == ['']: + # Pas bon + arg = u'--title "Etudes (2/3)" ' + arg += u'--msgbox "Réponse invalide\n\n\n" 0 0' + dialog(arg) + return __etudes_etab() + + etudes[0] = result[0] + + def __etudes_annee(): + arg = u'--title "Etudes de %s (2/3)" ' % adher.Nom() + if etudes[0] == 'ENS': + arg += u'--default-item "%s" ' % adher.etudes(1) + arg += u'--menu "Choisissez l\'année administrative" 0 0 0 ' + arg += u'"1" "License" ' + arg += u'"2" "Master 1" ' + arg += u'"3" "Agrégation" ' + arg += u'"4" "Master 2" ' + arg += u'"5" "1ère année thèse" ' + arg += u'"6" "2ème année thèse" ' + arg += u'"7" "3ème année thèse" ' + arg += u'"Autre" ""' + annul, result = dialog(arg) + if annul: return 1 + elif etudes[0] in [ 'P1', 'P2', 'P3', 'P4', 'P5', 'P6', 'P7', 'P8', 'P9', 'P10', 'P11', 'P12', 'P13' ]: + arg += u'--default-item "%s" ' % adher.etudes(1) + arg += u'--menu "Choisissez l\'année administrative" 0 0 0 ' + arg += u'"Deug 1" "Deug 1ère année" ' + arg += u'"Deug 2" "Deug 2ème année" ' + arg += u'"Licence" "" ' + arg += u'"Master 1" "Master 1ère année" ' + arg += u'"Master 2" "Master 2ème année" ' + arg += u'"Thèse 1" "1ème année thèse" ' + arg += u'"Thèse 2" "2ème année thèse" ' + arg += u'"Thèse 3" "3ème année thèse" ' + arg += u'"Autre" ""' + annul, result = dialog(arg) + if annul: return 1 + else: + result = ['Autre'] + + if result[0] == 'Autre': + arg = u'--title "Etudes de %s (2/3)" ' % adher.Nom() + arg += u'--inputbox "Année adminstrative :\nET UNIQUEMENT l\'ANNEE : la section sera demandée après." 0 0 "%s"' % adher.etudes(1) + annul, result = dialog(arg) + if annul: return 1 + if result == ['']: + # Pas bon + arg = u'--title "Etudes (2/3)" ' + arg += u'--msgbox "Réponse invalide\n\n\n" 0 0' + dialog(arg) + return __etudes_annee() + + etudes[1] = result[0] + + def __etudes_section(): + arg = u'--title "Etudes de %s (3/3)" ' % adher.Nom() + + # Pour l'ENS + if etudes[0] == 'ENS': + arg += u'--default-item "%s" ' % adher.etudes(2) + if etudes[1] in '1234': + arg += u'--menu "Choisissez la section : " 0 0 0 ' + else: + arg += u'--menu "Choisissez le laboratoire :" 0 0 0 ' + if not etudes[1] in '1234': + arg += u'"CMLA" "Centre de Mathématiques et de Leurs Applications" ' + arg += u'"GAPP" "Groupe d\'Analyse des Politiques Publiques" ' + arg += u'"IDHE" "Institutions et Dynamiques Historiques de l\'Economie" ' + arg += u'"LBPA" "Laboratoire de Biotechnologies et Pharmacologie génétique Appliquées" ' + arg += u'"LMT" "Laboratoire de Mécanique et Technologie" ' + arg += u'"LPQM" "Laboratoire de Photonique Quantique et Moléculaire" ' + arg += u'"LSV" "Laboratoire de Spécification et Vérification" ' + arg += u'"LURPA" "Laboratoire Universitaire de Recherche en Production Automatisée" ' + arg += u'"PPSM" "Laboratoire de Photophysique et Photochimie Supramoléculaires et Macromoléculaires" ' + arg += u'"SATIE" "Systèmes et Applications des Technologies de l\'Information et de l\'Energie" ' + arg += u'"STEF" "Sciences Techniques Education Formation" ' + if etudes[1] in '1234': + arg += u'"A0" "Informatique" ' + arg += u'"A1" "Mathématiques" ' + arg += u'"A2" "Physique fondamentale" ' + arg += u'"A\'\'2" "Chimie" ' + arg += u'"A3" "Biochimie" ' + if etudes[1] == '1': + arg += u'"B123" "Technologie mécanique" ' + arg += u'"EEA" "Électronique, électrotechnique et automatisme" ' + elif etudes[1] == '2': + arg += u'"EEA" "Électronique, électrotechnique et automatisme" ' + arg += u'"B1" "Mécanique" ' + arg += u'"B2" "Génie civil" ' + arg += u'"B3" "Génie mécanique" ' + else: + arg += u'"B1" "Mécanique" ' + arg += u'"B2" "Génie civil" ' + arg += u'"B3" "Génie mécanique" ' + arg += u'"A\'2" "Physique appliquée" ' + arg += u'"B4" "Génie électrique" ' + arg += u'"C" "Art et création industrielle" ' + arg += u'"D2" "Economie gestion" ' + arg += u'"D3" "Sciences sociales" ' + arg += u'"E" "Anglais" ' + + arg += u'"Autre" ""' + annul, result = dialog(arg) + if annul: return 1 + if result == ['']: + # Pas bon + arg = u'--title "Etudes (2/3)" ' + arg += u'--msgbox "Réponse invalide\n\n\n" 0 0' + dialog(arg) + return __etudes_annee() + + else: + result = ['Autre'] + + if result[0] == 'Autre': + arg = u'--title "Etudes de %s (3/3)" ' % adher.Nom() + arg += u'--inputbox "Section : " 0 0 "%s"' % adher.etudes(2) + annul, result = dialog(arg) + if annul: return 1 + if result == ['']: + # Pas bon + arg = u'--title "Etudes (3/3)" ' + arg += u'--msgbox "Réponse invalide\n\n\n" 0 0' + dialog(arg) + return __etudes_section() + + etudes[2] = result[0] + + etudes = ['', '', ''] + + step = 1 + while 1: + if step == 1: + if __etudes_etab(): return 1 + else: step += 1 + if step == 2: + if __etudes_annee(): step -= 1 + else: step += 1 + if step == 3: + if __etudes_section(): step -= 1 + else: break + + try: + adher.etudes(etudes) + except ValueError, c: + arg = u'--title "Etudes de %s" ' % adher.Nom() + arg += u'--msgbox "%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + return set_etudes(adher) + +def set_mail(adher): + """ + Choix d'une adresse mail crans ou extérieure. + Retourne ensuite le résultat de : + * set_mail_ext si adresse ext + * set_compte si compte crans + """ + if u'Nounou' in adher.droits() and not isadm: + arg = u'--title "Adresse mail de %s" ' % adher.Nom() + arg += u'--msgbox "Vous n\'avez pas les droits necessaires pour effectuer cette opération.\n\n\n" 0 0' + dialog(arg) + return + + while 1: + arg = u'--title "Adresse mail de %s" ' % adher.Nom() + arg += u'--menu "Adresse mail de l\'adhérent :" 0 0 0 ' + arg += u'"Adresse mail extérieure" "" ' + if adher.compte(): + arg += u'"Laisser le compte crans" "(login : %s)"' % adher.compte() + else: + arg += u'"Créer un compte crans" "(adresse @crans.org)"' + + annul, result = dialog(arg) + if annul: return 1 + + if result[0].split()[0] == 'Laisser': + break + elif result[0].split()[0] == 'Créer': + if not set_compte(adher): break + else: + if not set_mail_ext(adher): break + +def set_mail_ext(adher): + """ + Demande l'adresse mail extérieure d'un adhérent + """ + default = adher.mail() + if default.find('@') == -1: + # C'était une adresse crans + default = '' + + arg = u'--title "Adresse mail extérieure pour %s" ' % adher.Nom() + arg += u'--inputbox "Adresse : " 0 0 "%s"' % default + annul, result = dialog(arg) + if annul: return 1 + + try: adher.mail(result[0]) + except ValueError, c: + arg = u'--title "Adresse mail extérieure de %s" ' % adher.Nom() + arg += u'--msgbox "%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + return set_mail_ext(adher) + +def set_etat_civil(adher): + u""" + Modifie l'état-civil (nom, prénom) d'un adhérent. + """ + if u'Nounou' in adher.droits() and not isadm: + arg = u'--title "Adresse mail de %s" ' % adher.Nom() + arg += u'--msgbox "Vous n\'avez pas les droits necessaires pour effectuer cette opération.\n\n\n" 0 0' + dialog(arg) + return + + # Construction de la boite de dialogue + arg = u'--title "État-civil de %s" ' % adher.Nom() + arg += u'--form "" 0 0 0 ' + arg += u'"Nom :" 1 1 "%s" 1 13 20 20 ' % adher.nom() + arg += u'"Prénom :" 2 1 "%s" 2 13 20 20 ' % adher.prenom() + + # Affichage + annul, result = dialog(arg) + if annul: return + + # Traitement + err = '' + try: adher.nom(result[0]) + except ValueError, c: err += c.args[0] + '\n' + + try: adher.prenom(result[1]) + except ValueError, c: err += c.args[0] + '\n' + + # Des erreurs ? + if err: + arg = u'--title "État-civil de %s" ' % adher.Nom() + arg += u'--msgbox "%s\n\n" 0 0' % err + dialog(arg) + # On redemande + return set_etat_civil(adher) + + # On change éventuellement le compte + if adher.compte(): + # On demande au câbleur s'il faut garder le compte ou pas + arg = u'--title "Modification du compte de %s" ' % adher.Nom() + arg += u'--colors --defaultno --yesno "Changer le login de l\'adhérent ?\n' + arg += u'Son login actuel est %s.\n\n' % adher.compte() + arg += u'Choisir Oui si l\'adhérent n\'a jamais utilisé son compte.\n\n' + arg += u'\Zr\Z1AVERTISSEMENT :\n' + arg += u'Le changement de login entraîne la suppression irréversible du compte, ' + arg += u'et donc de tous les fichiers, mails, etc. associés !\Z0\ZR\n\n\n" ' + arg += u'0 0' + no = not dialog(arg)[0] + + if no: + # L'utilisateur n'utilise pas son compte, on le supprime... + adher.supprimer_compte() + # ..et on le recrée (ou on met une adresse mail extérieure) + if set_mail(adher): + # Le changement d'adresse a été annulé, on recommence tout + adher.restore() + return set_etat_civil(adher) + +def set_compte(adher): + """ + Créé un compte sur vert pour un adhérent. + """ + + # Message d'avertissement + arg = u'--title "Création compte crans pour %s" ' % adher.Nom() + arg += u'--colors --yesno "\Zr\Z1AVERTISSEMENT :\Zn \n' + arg += u'L\'adhérent devra impérativement consulter l\'adresse mail associée\n\n\n\\ZnContinuer ?" ' + arg += u'0 0' + no, res = dialog(arg) + if no: return 1 + + # Il faut déterminer le login + login = adher.nom() + + # Première tentative + err = 0 + try: login = adher.compte(login) + except ValueError, c: + try: + c.args[1] + # Le compte existe => 2ème tentative (1ere lettre prénom + nom) + login = adher.prenom()[0] +login + login = login.lower() + err = 2 + except: + err = 1 + except EnvironmentError, c: err = 1 # Locké + + if err: + while 1: + # Mauvais login => on demande + arg = u'--title "Création d\'un compte crans pour %s" ' % adher.Nom() + arg += u'--inputbox "Choix du login\n' + arg += u'Le login doit faire au maximum %s caractères\n' % config.maxlen_login + arg += u'Il ne doit pas être un pseudo ou prénom mais doit être relié au nom de famille\n' + arg += u'Seuls les caractères alphabétiques et le - sont autorisés" ' + arg += u'0 0 "%s"' % login + annul, result = dialog(arg) + if annul: return 1 + login = result[0] + + e = 0 + try: login = adher.compte(login) + except EnvironmentError, c: e = c.args[0] + except ValueError, c: e = c.args[0] + if e: + arg = u'--title "Création compte crans pour %s" ' % adher.Nom() + arg += u'--msgbox "%s\n\n\n" 0 0' % e + dialog(arg) + continue + break + + txt = u"Le compte ne sera créé que lors de l'enregistrement des données\n\n" + txt += u"L'adresse mail de l'adhérent est : %s@crans.org\n" % login + + a = adher.canonical_alias() + if a: + txt += u"L'adhérent possède également l'alias : %s@crans.org" % a + else: + txt += u"\n\Zr\Z1L'adresse mail %s.%s@crans.org étant déja prise l'adhérent ne peux pas l'utiliser.\Zn" % (adher.prenom(), adher.nom()) + + txt += u'\n' + + arg = u'--title "Création compte crans pour %s" ' % adher.Nom() + arg += u'--colors --msgbox "%s\n\n\n" 0 0' % txt + dialog(arg) + +def set_droits(adher): + """ Définition des droits de l'adhérent """ + arg = u'--title "Droits de %s" ' % adher.Nom() + arg += u'--separate-output ' + arg += u'--checklist "" 0 0 0 ' + + droits = adher.droits() + for key in droits_possibles: + actif = key in droits + if actif: actif = u'on' + arg += u'"%s" " " "%s" ' % (key, actif) + + annul, result = dialog(arg) + if annul: return 1 + + # Traitement + adher.droits(result) + +def del_adher(adher): + """ + Destruction adhérent + """ + quoi = u'Toutes les machines associées à cet adhérent seront détruites' + if adher.mail().find('@') == -1: + # L'adhérent a un compte + machines = adher.machines() + if not machines: + quoi = u'Le compte de cet adhérent sera détruit' + else: + # Et aussi des machines + # -> soit on détruit tout + # -> soit on garde le compte mais on vire les machines + arg = u'--title "Destruction adhérent %s " ' % adher.Nom() + arg += u'--menu "Cette adhérent possède également un compte." 0 0 0 ' + if adher: + arg += u'"1" "Détruire seulement les machines de l\'adhérent" ' + arg += u'"2" "Détruire les machines et le compte de l\'adhérent" ' + annul, res = dialog(arg) + if annul: return 1 + if res[0] == '2': + # On détruit tout + quoi += u' ainsi que son compte' + else: + # Destruction uniquement des machines + arg = u'--title "Destruction machines adhérent %s " --colors ' % adher.Nom() + arg += u'--inputbox "\Zr\Z1ATTENTION\Zn : la destruction est définitive\nToutes les machines associées à cet adhérent seront détruites, seul le compte sera conservé.\nCommentaire à insérer ?" 0 0' + annul, res = dialog(arg) + if annul: return 1 + for m in machines: + m.delete(res[0]) + adher.chbre('EXT') + arg = u'--title "Destruction machines" ' + arg += u'--msgbox "Machines détruites\n\n\n" 0 0' + dialog(arg) + return + + while 1: + arg = u'--title "Destruction adhérent %s " --colors ' % adher.Nom() + arg += u'--inputbox "\Zr\Z1ATTENTION\Zn : la destruction est définitive\n\n%s.\n\nCommentaire à insérer ?" 0 0' % quoi + annul, res = dialog(arg) + if annul: return 1 + if res[0]: break + arg = u'--title "Destruction adherent" ' + arg += u'--msgbox "Le commentaire est obligatoire\n\n\n" 0 0' + dialog(arg) + + if u'Nounou' in adher.droits() and not isadm: + arg = u'--title "Destruction adherent" ' + arg += u'--msgbox "Vous n\'avez pas les droits necessaires pour effectuer cette opération.\n\n\n" 0 0' + dialog(arg) + return + + adher.delete(res[0]) + + arg = u'--title "Destruction adhérent" ' + arg += u'--msgbox "Adhérent détruit\n\n\n" 0 0' + dialog(arg) + +############################################################### +## Fonctions de remplissage ou modification des paramètres club + +def set_responsable(club): + """ Modifie le responsable d'un club """ + arg = u'--title "Responsable du club" ' + arg += u'--msgbox "Séléctionnez l\'adhérent responsable du club\n\n\n" 0 0' + dialog(arg) + resp = select(club, u'du responsable du club a', 'ro') + if not resp: return 1 + else: + club.responsable(resp) + +def set_club_nom(club): + # Nom du club + arg = u'--title "Nom" ' + arg += u'--inputbox "Nom du club ?" 0 0 "%s"' % club.Nom() + annul, res = dialog(arg) + if annul: return 1 + else: + try: + club.Nom(res[0]) + except ValueError, c: + arg = u'--title "Nom club" ' + arg += u'--msgbox "%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + +def set_local(club): + """ Défini le local d'un club """ + try: + club.chbre('&é"') # Fait une erreur + except ValueError, c: + locaux = c.args[1] + + arg = u'--title "Local du club" ' + arg += u'--default-item "%s" ' % club.chbre() + arg += u'--menu "Choisissez le local du club :" 0 0 0 ' + key = locaux.keys() + # on tri par ordre alphébétique avec 'EXT' à la fin + key.pop(key.index('EXT')) + key.sort() + key.append('EXT') + for k in key: + arg += u'"%s" "%s" ' % (k, locaux[k]) + annul, result = dialog(arg) + if annul: return 1 + else: + club.chbre(result[0]) + + +def set_club_compte(club): + """ + Créé un compte sur vert pour un club. + """ + + while 1: + arg = u'--title "Création d\'un compte crans pour %s" ' % club.Nom() + arg += u'--inputbox "Choix du login\n' + arg += u'Le nom pour le login doit faire au maximum %s caractères\n' % config.maxlen_login + arg += u'Le login sur ssh sera club-\'nom du club\'\n' + arg += u'Le site web du club sera accessible via l\'adresse http://clubs.ens-cachan.fr/\'nom du club\'\n' + arg += u'Seuls les caractères alphabétiques et le - sont autorisés" ' + arg += u'0 0 ""' + annul, result = dialog(arg) + if annul: return 1 + login = result[0] + + e = 0 + try: login = club.compte(login) + except EnvironmentError, c: e = c.args[0] + except ValueError, c: e = c.args[0] + if e: + arg = u'--title "Création compte crans pour %s" ' % club.Nom() + arg += u'--msgbox "%s\n\n\n" 0 0' % e + dialog(arg) + continue + break + + txt = u"Le compte ne sera créé que lors de l'enregistrement des données\n\n" + txt += u"L'adresse mail du club est : %s@crans.org\n" % login + + txt += u'\n' + + arg = u'--title "Création compte crans pour %s" ' % club.Nom() + arg += u'--colors --msgbox "%s\n\n\n" 0 0' % txt + dialog(arg) + +###################################################################################### +## Fonctions de remplissage ou modification des paramètres adhérent ou machine ou club +## (suivant la classe fournie) + +def set_rque(clas): + """Définit le commentaire (méthode info de clas)""" + return __prompt_input_menu(clas.info, u'Remarque', u"Ajouter ou modifier une remarque\nPour ajouter une remarque modifier la dernière de la liste.") + +def __prompt_input_menu(method, titre, prompt): + arg = u'--title "%s" ' % titre + arg += u'--extra-label "Ajout/modif" ' + arg += u'--inputmenu "%s\nPour supprimer, laisser le champ vide." 0 100 7 ' % prompt + invite = '##nouveau##' + + i = 1 + for item in method(): + if item == '': continue + arg += u'"%d" "%s" '% (i, item) + i += 1 + arg += '"%d" "%s" '% (i, invite) + + annul, result = dialog(arg) + if annul: + return 1 + + # si modif alors result = [ 'RENAMED X nouvelle remarque' ] + result = result[0].split(' ', 2) + if result[0] != 'RENAMED': + # Pas de modif + return + + # maintenant result = ['RENAMED', 'X', 'nouvelle remarque'] + num = int(result[1]) + val = result[2].strip() + + if val == invite: + # Rien à faire + return + + try: + if num == i: + # Nouvelle valeur + if val: method(val) + else: + method([num-1, val]) + + except ValueError, c: + arg = u'--title "%s" ' % titre + arg += u'--msgbox "%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + return __prompt_input_menu(method, titre, prompt) + else: + return __prompt_input_menu(method, titre, prompt) + +def set_solde(clas): + """ Débit ou crédit d'un compte """ + while 1: + arg = u'--title "Crédit / débit du compte de %s" ' % clas.Nom() + arg += u'--inputbox "Solde actuel : %s\n Opération à effectuer (+ pour crédits et - pour débit) ?" 0 0 "" ' % clas.solde() + annul, res = dialog(arg) + if annul: return 1 + + # Ajout du commentaire + arg = u'--title "Crédit / débit du compte de %s" ' % clas.Nom() + arg += u'--inputbox "Commentaire à insérer ?" 0 0' + annul, comment = dialog(arg) + + if not annul: + if comment[0]: + comment = comment[0] + else: + comment = None + + try: + clas.solde(res[0], comment) + break + except ValueError, c: + arg = u'--title "Opération impossible" ' + arg += u'--msgbox "%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + +def confirm(clas): + """ Demande confirmation avant enregistrement""" + # On va faire en texte, les couleurs ne passent pas en curses + os.system('clear') + aff(clas) + while 1: + r = affich_tools.prompt(u"Valider et enregister ? [O/N]") + if r == 'O' or r == 'o': + break + elif r == 'N' or r == 'n': + return 1 + try: + res = clas.save() + except RuntimeError, c: + arg = u'--title "Enregistrement" ' + arg += u'--msgbox "%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + return 1 + + print res + affich_tools.prompt(u"Appuyez sur ENTREE pour continuer") + +def set_blackliste(clas): + """ Édite ou ajoute un item de la blackliste """ + bl = clas.blacklist() + if not bl: + # Pas d'entrée à éditer + index = -1 + else: + arg = u'--title "Édition blackliste de %s" ' % clas.Nom() + arg += u'--menu "Choisir l\'entrée à éditer :" 0 0 0 ' + arg += u'"0" "Ajouter une nouvelle entrée" ' + i = 1 + for b in bl: + champs = b.split('$') + arg += '"%i" "%s [%s]" ' % (i, champs[2], champs[3]) + i += 1 + annul, res = dialog(arg) + if annul: return 1 + index = int(res[0]) - 1 + + # Édition + if index != -1: + t = clas.blacklist()[index].split('$') + if t[0] != 'now': + t[0] = strftime('%d/%m/%Y %H:%M', localtime(int(t[0]))) + if t[1] != 'now' and t[1] != '-': + t[1] = strftime('%d/%m/%Y %H:%M', localtime(int(t[1]))) + else: + t = ['now', '-', '', ''] + + step = 1 + while 1: + if step == 1: + # Sanction + arg = u'--title "Blacklistage %s" ' % clas.Nom() + arg += u'--default-item "%s" ' % t[2] + arg += u'--menu "Choisir la sanction :" 0 0 0 ' + for n, c in blacklist_items.items(): + arg += u'"%s" "%s" ' % (n, c) + annul, res = dialog(arg) + if annul: return 1 + t[2] = res[0] + step += 1 + + if step == 2: + # Dates + commentaire + arg = u'--title "Blacklistage %s" ' % clas.Nom() + arg += u'--form "Entrez les dates de début et de fin (format jj/mm/aaaa hh:mm) ainsi que le commentaire associé\n" 0 0 0 ' + arg += u'"Début : " 1 1 "%s" 1 8 16 0 ' % t[0] + arg += u'"now pour immédiatement " 1 25 "" 0 0 0 0 ' + arg += u'"Fin : " 2 1 "%s" 2 8 16 0 ' % t[1] + arg += u'"- pour fin indéterminée" 2 25 "" 0 0 0 0 ' + arg += u'"Les jours de début et de fin sont inclus." 3 1 "" 0 0 0 0 ' + arg += u'"Sanction : %s" 4 1 "" 0 0 0 0 ' % t[2] + arg += u'"Commentaire (pas de dollar) : " 5 1 "%s" 6 1 52 0 ' % t[3] + annul, r = dialog(arg) + if annul: return 1 + + # Ajout des heures + t[0] = r[0].strip() + if len(t[0]) == 10: t[0] += ' 00:00' + t[1] = r[1].strip() + if len(t[1]) == 10: t[1] += ' 23:59' + + # Vérification des heures + try: + if t[0] != 'now': + t[0] = int(mktime(strptime(t[0], '%d/%m/%Y %H:%M'))) + except: + arg = u'--title "Erreur" ' + arg += u'--msgbox "Heure de début incorrecte (%s)\n\n\n" 0 0' % t[0] + dialog(arg) + step -= 1 + continue + + try: + if t[1] != 'now' and t[1] != '-': + t[1] = int(mktime(strptime(t[1], '%d/%m/%Y %H:%M'))) + except: + arg = u'--title "Erreur" ' + arg += u'--msgbox "Heure de fin incorrecte (%s)\n\n\n" 0 0' % t[1] + dialog(arg) + step -= 1 + continue + + # Commentaire + c = r[2].strip() + login = script_utilisateur + if c: + if c.split(' :')[0] != login: + t[3] = login + ' : ' + c + else: + t[3] = c + else: + t[3] = login + + try: + if index == -1: + clas.blacklist(t) + else: + clas.blacklist((index, t)) + step += 1 + except ValueError, c: + arg = u'--title "Erreur" ' + arg += u'--msgbox "%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + step -= 1 + + if step == 3: + if confirm(clas): step -= 1 + else: break + +########################################################################## +## Fonction de remplissage ou modification des paramètres club ou adhérent + +def on_off(condition): + """ + Renvoie 'on' ou 'off' selon la condition (pour dialog). + """ + if condition: + return 'on' + else: + return 'off' + +def set_admin(proprio): + """ + Définition de l'état administratif : carte d'étudiant, paiement + et caution. + """ + # Le proprietaire a-t-il une section carte d'étudiant (pas les clubs) ? + has_card = proprio.idn != 'cid' + + # Initialisation des différentes checkbox + carte = on_off(ann_scol in proprio.carteEtudiant()) + paiement = on_off(ann_scol in proprio.paiement()) + precab = on_off(ann_scol + 1 in proprio.paiement()) + caution = on_off('k' in proprio.controle()) + paiement_ok = on_off('p' in proprio.controle()) + carte_ok = on_off('c' in proprio.controle()) + + # Construction de la boîte de dialogue + texte = [] + checklist = [] + + if has_card: + if carte_ok == 'off' or iscontroleur: + checklist.append(u'"1" "Carte d\'étudiant %d/%d fournie" "%s"' % + (ann_scol, ann_scol+1, carte)) + else: + texte.append(u'Carte vérifiée') + + if paiement_ok == 'off' or iscontroleur: + checklist.append(u'"2" "Cotisation %d/%d réglée et charte signée" "%s"' % + (ann_scol, ann_scol+1, paiement)) + else: + texte.append(u'Cotisation/charte vérifiées') + + # TODO: controle pour le précâblage + if config.precab: + checklist.append(u'"3" "Adhésion %d/%d réglée et charte signée (précâblage)" "%s"' % + (ann_scol+1, ann_scol+2, precab)) + + if iscontroleur: + if has_card: + checklist.append(u'"4" "Carte d\'étudiant vérifiée" "%s"' % carte_ok) + checklist.append(u'"5" "Cotisation/charte/caution vérifées" "%s"' % paiement_ok) + + if not checklist: + # Il n'y a rien de modifiable + dialog(u'--title "État administratif de %s non modifiable" --msgbox "%s\n" 0 0 ' % + (proprio.Nom(), '\n'.join(texte))) + return + + # Il y a qqch de modifiable, on construit la checklist + arg = u'--title "Etat administratif de %s" ' % proprio.Nom() + arg += u'--separate-output ' + arg += u'--checklist "%s\n" 0 0 0 ' % '\n'.join(texte) + arg += u' '.join(checklist) + + annul, result = dialog(arg) + if annul: return 1 + + # Traitement + if has_card: + if '1\n' in result: + proprio.carteEtudiant(ann_scol) + elif iscontroleur or carte_ok == 'off': + proprio.carteEtudiant(-ann_scol) + if '4\n' in result: + proprio.controle('+c') + elif iscontroleur: + proprio.controle('-c') + + if '2\n' in result and ann_scol not in proprio.paiement(): + # On est en train de renouveller l'adhésion + # Combien a-t-il de machines ? + if proprio.idn != 'cid' and len(proprio.machines_fixes()) > 1 and not proprio.droits(): + # Il a plus d'une machine fixe et n'est pas membre actif + arg = u'--title "Trop de machines fixes" ' + arg += u'--menu " Cet adhérent a trop de machines fixes.\n\n' + arg += u'Seuls les membres actifs peuvent posséder plusieurs\n' + arg += u'machines fixes. L\'adhérent actuel n\'est pas membre\n' + arg += u'actif, il n\'est donc pas possible de lui laisser autant\n' + arg += u'de machines fixes..." 0 0 0 ' + arg += u'"OK" "OK, je vais lui virer des machines" ' + annul, result = dialog(arg) + if not annul and result[0] == "Si": + proprio.paiement(ann_scol) + else: + set_admin(proprio) + return + else: + proprio.paiement(ann_scol) + elif '2\n' not in result and (paiement_ok == 'off' or iscontroleur): + proprio.paiement(-ann_scol) + + if '3\n' in result: + proprio.paiement(ann_scol+1) + elif paiement_ok == 'off' or iscontroleur: + proprio.paiement(-ann_scol-1) + + if '5\n' in result: + proprio.controle('+p') + elif iscontroleur: + proprio.controle('-p') + + if 'C\n' in result: + proprio.controle('+k') + if not iscontroleur: + proprio.controle('-p') + elif iscontroleur: + proprio.controle('-k') + +############################################################### +## Fonctions de remplissage ou modification des paramètres club + +def new_club(club): + step = 1 + while 1: + + if step == 1: + # Responsable + if set_responsable(club): return 1 + else: step += 1 + + if step == 2: + # Nom du club + if set_club_nom(club): step -= 1 + else: step += 1 + + if step == 3: + # Local + if set_local(club): step -= 1 + else: step += 1 + + if step == 4: + # Administratif + if set_admin(club): step -= 1 + else: step += 1 + + if step == 5: + # Remarque + if set_rque(club): step -= 1 + else: step += 1 + + if step == 6: + # Confirmation + if confirm(club): step -= 1 + else: break + +def modif_club(club): + """ + Modification du club fourni (instance de club) + Retourne 1 si annulation. + """ + arg = u'--title "Modification du club %s" ' % club.Nom() + arg += u'--menu "Que souhaitez vous modifier ?" 0 0 0 ' + arg += u'"NomClub" "Modifier le nom du club" ' + arg += u'"Responsable" "Changer le responsable du club %s" ' % club.responsable().Nom() + arg += u'"Administratif" "Précâblage" ' + arg += u'"Local" "Modifier le local du club" ' + arg += u'"Compte" "Créer un compte crans." ' + if club.compte(): + arg += u'"Alias" "Créer ou supprimer un alias mail" ' + if isdeconnecteur: + arg += u'"Blackliste" "Modifier la blackliste du club" ' + if isimprimeur: + arg += u'"Solde" "Effectuer un débit/crédit pour ce club" ' + + arg += u'"Remarque" "Ajouter ou modifer un commentaire" ' + annul, res = dialog(arg) + + if annul: return 1 + + elif res[0] == 'NomClub': + set_club_nom(club) + elif res[0] == 'Responsable': + set_responsable(club) + elif res[0] == 'Administratif': + set_admin(club) + elif res[0] == 'Compte': + set_club_compte(club) + elif res[0] == 'Remarque': + set_rque(club) + elif res[0] == 'Blackliste': + set_blackliste(club) + elif res[0] == 'Local': + set_local(club) + elif res[0] == 'Alias': + __prompt_input_menu(club.alias, 'Alias mail', "Entrez ou modifier un alias mail.\nPour ajouter un alias modifier le dernier de la liste.") + elif res[0] == 'Solde': + set_solde(club) + + if club.modifs: + return confirm(club) + +def select_club(clas): + """ Choix d'un club """ + arg = u'--title "Recherche d\'un club" ' + + clubs = clas.search('cid=*')['club'] + if not clubs: + # Pas de club dans la base + arg += '--msgbox "Il n\'y a pas de clubs inscrits dans la base\n\n\n" 0 0 ' + dialog(arg) + return + arg += u'--menu "Choisissez un club :" 0 0 0 ' + for club in clubs: + arg += '"%s" "%s" ' % (club.id(), club.Nom()) + annul, res = dialog(arg) + if annul: return + return clas.search('cid=%s' % res[0], 'w')['club'][0] + +def del_club(club): + """ Destruction club """ + quoi = 'Toutes les machines associées à cet adhérent seront détruites' + while 1: + arg = u'--title "Destruction club " --colors ' + arg += u'--inputbox "\Zr\Z1ATTENTION\Zn : la destruction est définitive\n\nToutes les machines de ce club seront également détruites.\n\nCommentaire à insérer ?" 0 0' + annul, res = dialog(arg) + if annul: return 1 + if res[0]: break + arg = u'--title "Destruction club" ' + arg += u'--msgbox "Le commentaire est obligatoire\n\n\n" 0 0' + dialog(arg) + + club.delete(res[0]) + arg = u'--title "Destruction club" ' + arg += u'--msgbox "Club détruit\n\n\n" 0 0' + dialog(arg) + +################################################################## +## Fonctions de remplissage ou modification des paramètres machine + +def set_wifi(machine): + """ + Définition des paramètres spécifiques d'une borne wifi : + * Canaux + * Puissance + * Position GPS + * Variables nvram + * hotspot + """ + if not isadm: + #ça ne devrait jamais arriver mais on n'est jamais trop prudent + arg = u'--title "Erreur" ' + arg += u'--msgbox "Vous n\'avez pas les droits de modification de cette machine.\n\n" 0 0' + dialog(arg) + # On redemande + return 1 + + nom = machine.nom() + + # Construction de la boite de dialogue + arg = u'--title "Paramètres spécifiques wifi de "%s"" ' % (nom) + arg += u'--form "" 0 0 0 ' + # Borne wifi + arg += u'"Canaux :" 1 1 "%s" 1 14 10 0 ' % machine.canal(None, False) + arg += u'"Puissance :" 2 1 "%s" 2 14 4 0 ' % machine.puissance() + try: + arg += u'"Position N :" 3 1 "%s" 3 14 12 0 ' % machine.position()[0] + arg += u'"Position E :" 3 29 "%s" 3 42 12 0 ' % machine.position()[1] + except: + arg += u'"Position N :" 3 1 "%s" 3 14 12 0 ' % "" + arg += u'"Position E :" 3 29 "%s" 3 42 12 0 ' % "" + + arg += u'"Hotspot :" 4 1 "%s" 4 10 5 0 ' % (machine.hotspot() and 'oui' or 'non') + arg += u'"Nvram (cf wiki) :" 5 1 "%s" 6 1 100 0 ' % ', '.join(machine.nvram()) + + # Affichage + annul, result = dialog(arg) + if annul: return 1 + + # Traitement + err = '' + try: machine.canal(result[0]) + except ValueError, c: err += c.args[0] + '\n' + + try: machine.puissance(result[1]) + except ValueError, c: err += c.args[0] + '\n' + + try: + #On n'enregistre pas une position vide + if result[2].strip() and result[3].strip(): + if result[2].strip().lower() == "none" or result[3].strip().lower() == "none": + machine.position(None) + else: + machine.position((result[2].strip(),result[3].strip())) + except ValueError, c: err += c.args[0] + '\n' + + if result[4].lower().strip() == "oui": + machine.hotspot(True) + elif result[4].lower().strip() == "non": + machine.hotspot(False) + else: + err += "Les valeurs possibles pour le parametre hotspot\n sont \"oui\" ou \"non\"\n" + + try: + #On vérifie toutes les variables avant de sauvegarder + for nvram in result[5].split(','): + if len(nvram.strip()): #On évite les variables vides + if not '=' in nvram: + raise ValueError("Une variable nvram doit etre de la forme : 'variable=valeur'\n") + for nvram in result[5].split(','): + if len(nvram.strip()): #On évite les variables vides + variable = nvram.split('=')[0].strip() + valeur = nvram.split('=')[1].strip() + if valeur.lower() == "none": + valeur=None + machine.nvram(variable, valeur) + except ValueError, c: err += c.args[0] + '\n' + # Des erreurs ? + if err: + arg = u'--title "Paramètres machine wifi" ' + arg += u'--msgbox "%s\n\n" 0 0' % err + dialog(arg) + # On redemande + return set_wifi(machine) + + if machine.modifs and confirm(machine): + return set_wifi(machine) + +def set_machine(machine): + """ + Définition des paramètres d'une machine : + * Nom de machine + * Adresse MAC + * IP + * ports ouverts si adm + """ + if machine.proprietaire().__class__ == AssociationCrans: + if not isadm: + arg = u'--title "Erreur" ' + arg += u'--msgbox "Vous n\'avez pas les droits de modification de cette machine.\n\n" 0 0' + dialog(arg) + # On redemande + return 1 + nom = machine.nom() + l = 50 + else: + nom = machine.nom().split('.')[0] + l = 17 + + # Construction de la boite de dialogue + arg = u'--title "Paramètres machine" ' + arg += u'--form "" 0 0 0 ' + arg += u'"Nom de machine :" 1 1 "%s" 1 18 %i 0 ' % (nom, l) + arg += u'"Adresse mac :" 2 1 "%s" 2 15 17 0 ' % machine.mac() + arg += u'"IP :" 3 1 "%s" 3 6 15 0 ' % machine.ip() + if isadm: + arg += u'"PortsTCP ext->machine :" 4 1 "%s" 4 25 50 0 ' % ' '.join(machine.portTCPin()) + arg += u'"PortsTCP machine->ext :" 5 1 "%s" 5 25 50 0 ' % ' '.join(machine.portTCPout()) + arg += u'"PortsUDP ext->machine :" 6 1 "%s" 6 25 50 0 ' % ' '.join(machine.portUDPin()) + arg += u'"PortsUDP machine->ext :" 7 1 "%s" 7 25 50 0 ' % ' '.join(machine.portUDPout()) + if isadm and machine.proprietaire().__class__ == AssociationCrans: + arg += u'"Prise :" 8 1 "%s" 8 9 5 0 ' % machine.prise() + + else: + p = u'Pour ajouter une remarque modifier la dernière de la liste.' + + # Affichage + annul, result = dialog(arg) + if annul: return 1 + + # Traitement + err = '' + try: machine.nom(result[0]) + except ValueError, c: err += c.args[0] + '\n' + except EnvironmentError, c: err += c.args[0] + '\n' + + try: machine.mac(result[1]) + except ValueError, c: + if len(c.args)>1 and c.args[1] == 1 and isadm: + # Mac en double + arg = u'--title "Adresse MAC" ' + arg += u'--yesno "L\'adresse MAC existe déja, continuer ? \n" 0 0' + no, res = dialog(arg) + if no: + return set_machine(machine) + else: + try: machine.mac(result[1], 1) + except ValueError, c: err += c.args[0] + '\n' + except EnvironmentError, c: err += c.args[0] + '\n' + else: + err += c.args[0] + '\n' + + except EnvironmentError, c: err += c.args[0] + '\n' + + try: machine.ip(result[2]) + except ValueError, c: err += c.args[0] + '\n' + except EnvironmentError, c: err += c.args[0] + '\n' + except RuntimeError, c: err += c.args[0] + '\n' # Plus d'IP libres, peut-être à traiter differement ? + + if isadm: + try: + machine.portTCPin(result[3].split()) + machine.portTCPout(result[4].split()) + machine.portUDPin(result[5].split()) + machine.portUDPout(result[6].split()) + except ValueError, c: err += c.args[0] + '\n' + + if isadm and machine.proprietaire().__class__ == AssociationCrans: + try: machine.prise(result[-1]) + except ValueError, c: err += c.args[0] + '\n' + + # Des erreurs ? + if err: + arg = u'--title "Paramètres machine" ' + arg += u'--msgbox "%s\n\n" 0 0' % err + dialog(arg) + # On redemande + return set_machine(machine) + + if machine.modifs and confirm(machine): + return set_machine(machine) + +def set_machine_exemption(machine): + """Définit les réseau exemptés de comptage d'upload pour la machine""" + if __prompt_input_menu(machine.exempt, u'Exemption', u"Ajouter ou modifier un réseau/une ip vers lequel on ne compte pas l'upload (format x.y.z.t[/m])\nPour ajouter un réseau modifier la fin de la liste.") or confirm(machine): + machine.restore() + return 1 + +def set_machine_alias(machine): + """Définit la liste des alias d'une machine""" + if __prompt_input_menu(machine.alias, 'Alias machine', "Entrez ou modifier un alias machine.\nPour ajouter un alias modifier le dernier de la liste.") or confirm(machine): + machine.restore() + return 1 + +def del_machine(machine): + """ + Destruction machine + """ + while 1: + arg = u'--title "Destruction machine %s" --colors ' % machine.nom() + arg += u'--inputbox "\Zr\Z1ATTENTION\Zn : la destruction est définitive\nCommentaire à insérer ?" 0 0' + annul, res = dialog(arg) + if annul: return 1 + if res[0]: break + arg = u'--title "Destruction machine" ' + arg += u'--msgbox "Le commentaire est obligatoire\n\n\n" 0 0' + dialog(arg) + + try: + machine.delete(res[0]) + except EnvironmentError, c: + arg = u'--title "Destruction machine" ' + arg += u'--msgbox "ERREUR n°%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + return 1 + + arg = u'--title "Destruction machine" ' + arg += u'--msgbox "Machine détruite\n\n\n" 0 0' + dialog(arg) + + +#################################### +## Fonctions principales d'interface + +def new_adher(adher): + """ + Définition des propriétés d'un adhérent + 4 etapes : + * set_bases + * set_etudes + * set_admin + * set_mail + * set_rque + Retourne 1 si annulation. + """ + step = 1 + while 1: + if step == 1: + if set_bases(adher): return 1 + else: step += 1 + if step == 2: + if set_etudes(adher): step -= 1 + else: step += 1 + if step == 3: + if set_admin(adher): step -= 1 + else: step += 1 + if step == 4: + if set_mail(adher): step -= 1 + else: step += 1 + if step == 5: + if set_rque(adher): step -= 1 + else: step += 1 + if step == 6: + if confirm(adher): step = 1 + else: break + + arg = u'--title "Inscription Mailing liste de communication ENS" --yesno "\nInscrire l\'adhérent à la mailing liste de communication de l\'ENS ?\n\n\n" 0 0' + no, res = dialog(arg) + if not no: + mail = adher.mail() + if mail.find('@') == -1: mail += '@crans.org' + adher.services_to_restart('ML_ens', [mail]) + +def modif_adher(adher): + """ + Modification de l'adhérent fourni (instance de adhérent) + Retourne 1 si annulation. + """ + # Préliminaire : si la chambre est inconnue on force la question + if adher.chbre() == '????': + res= ['Chambre'] + arg = u'--title "Modification de %s" ' % adher.Nom() + arg += u'--msgbox "ERREUR : la chambre de cet adhérent est inconnue !\n\n\n" 0 0' + dialog(arg) + else: + arg = u'--title "Modification de %s" ' % adher.Nom() + arg += u'--menu "Que souhaitez vous modifier ?" 0 0 0 ' + arg += u'"Administratif" "Précâblage, carte d\'étudiant, études" ' + if adher.compte(): changement_compte = u", compte sur zamok" + else: changement_compte = u"" + arg += u'"État-civil" "Nom, prénom%s" ' % changement_compte + if adher.chbre() == 'EXT': + arg += u'"Adresse" "Déménagement" ' + else: + arg += u'"Chambre" "Déménagement" ' + arg += u'"Etudes" "Changement d\'année ou de filière" ' + arg += u'"Téléphone" "Changement de numéro de téléphone" ' + arg += u'"Mail" "Créer un compte ou changer l\'adresse mail de contact" ' + arg += u'"Alias" "Créer ou supprimer un alias mail" ' + arg += u'"Remarque" "Ajouter ou modifer un commentaire" ' + if isadm: + if 'cransAccount' in adher._data['objectClass']: + arg += u'"Droits" "Modifier les droits alloués à cet adhérent" ' + if 'posixAccount' in adher._data['objectClass']: + arg += u'"Shell" "Changer le shell de cet utilisateur" ' + if isdeconnecteur: + arg += u'"Blackliste" "Modifier la blackliste de cet adhérent" ' + if isimprimeur: + arg += u'"Solde" "Effectuer un débit/crédit pour cet adhérent" ' + + annul, res = dialog(arg) + + if annul: return 1 + + if res[0] == 'Etudes': + set_etudes(adher) + elif res[0] == 'État-civil': + set_etat_civil(adher) + elif res[0] == 'Administratif': + if not set_admin(adher): + set_etudes(adher) + elif res[0] == 'Mail': + set_mail(adher) + elif res[0] == 'Remarque': + set_rque(adher) + elif res[0] == 'Droits': + set_droits(adher) + elif res[0] == 'Blackliste': + set_blackliste(adher) + elif res[0] == 'Adresse' or res[0] == 'Chambre': + arg = u'--title "Déménagement de %s" ' % adher.Nom() + arg += u'--menu "Question :" 0 0 0 ' + arg += u'"1" "Déménagement sur le campus ? " ' + arg += u'"2" "Déménagement à l\'extérieur en conservant les machines ?" ' + arg += u'"3" "Départ du campus en conservant son compte ?" ' + arg += u'"4" "Départ du campus en supprimant son compte ?" ' + annul, result = dialog(arg) + if annul: return modif_adher(adher) + if result[0] == '2': + if set_addr_ext(adher): + # Annulation + return modif_adher(adher) + adher.chbre('EXT') + elif result[0] == '3': + arg = u'--title "Départ de %s" ' % adher.Nom() + arg += u'--yesno "Le départ d\'un adhérent provoque la destruction de ses machines.\n' + arg += u'\nDoit-on continuer ?" 0 0' + no, res = dialog(arg) + if no: return modif_adher(adher) + for m in adher.machines(): + m.delete("Depart du campus") + adher.chbre('EXT') + elif result[0] == '4': + if u'Nounou' in adher.droits() and not isadm: + arg = u'--title "Destruction adherent" ' + arg += u'--msgbox "Vous n\'avez pas les droits necessaires pour effectuer cette opération.\n\n\n" 0 0' + dialog(arg) + return modif_adher(adher) + arg = u'--title "Départ de %s" ' % adher.Nom() + arg += u'--yesno "Le départ du campus de %s va provoquer la destruction de son compte.\n' % adher.Nom() + arg += u'\nDoit-on continuer ?" 0 0' + no, res = dialog(arg) + if no: return modif_adher(adher) + for m in adher.machines(): + m.delete("Depart du campus") + adher.delete("Depart du campus") + return + + else: + while 1: + arg = u'--title "Déménagement de %s" ' % adher.Nom() + arg += u'--inputbox "Chambre ?" 0 0 ' + annul, res = dialog(arg) + if annul: return modif_adher(adher) + + e = _set_chbre(adher, res[0]) + if res[0] == 'EXT': + # Il faut demander l'adresse extérieure + if set_addr_ext(adher): + # Annulation + continue + if e: + arg = u'--title "Déménagement de %s" ' % adher.Nom() + arg += u'--msgbox "%s\n\n\n" 0 0' % e + dialog(arg) + else: + break + + + elif res[0] == 'Téléphone': + while 1: + arg = u'--title "Changement numéro de téléphone de de %s" ' % adher.Nom() + arg += u'--inputbox "Nouveau numéro ?" 0 0 "%s" ' % adher.tel() + annul, res = dialog(arg) + if annul: return modif_adher(adher) + + try: + adher.tel(res[0].replace(' ', '')) + break + except ValueError, c: + arg = u'--title "Changement numéro de téléphone de de %s" ' % adher.Nom() + arg += u'--msgbox "%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + + elif res[0] == 'Alias': + __prompt_input_menu(adher.alias, 'Alias mail', "Entrez ou modifier un alias mail.\nPour ajouter un alias modifier le dernier de la liste.") + + elif res[0] == 'Shell': + while 1: + arg = u'--title "Nouveau shell pour %s" ' % adher.Nom() + arg += u'--inputbox "Shell : " 0 0 "%s" ' % adher.chsh() + annul, res = dialog(arg) + if annul: return modif_adher(adher) + + try: + adher.chsh(res[0]) + break + except ValueError, c: + arg = u'--title "Changement du shell de %s" ' % adher.Nom() + arg += u'--msgbox "%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + + elif res[0] == 'Solde': + set_solde(adher) + + if adher.modifs: + return confirm(adher) + +def modif_machine(machine): + """ + Modification de la machine fournie (instance de machine) + Retourne 1 si annulation. + """ + + if not isadm: + step = 1 + while 1: + + if step == 1: + if set_machine(machine): return 1 + else: step = 2 + + if step == 2: + if set_rque(machine): step = 1 + else: return + + else: + arg = u'--title "Modification de %s" ' % machine.nom() + arg += u'--menu "Que souhaitez vous modifier ?" 0 0 0 ' + arg += u'"Informations" "Modifier le nom de machine, l\'IP, adresse MAC" ' + arg += u'"Blackliste" "Modifier la blacklist de la machine" ' + arg += u'"Alias" "Créer ou supprimer un alias de la machine" ' + arg += u'"Exemptions" "Modifier la liste d\'exemption d\'upload de la machine" ' + arg += u'"Remarques" "Ajouter ou supprimer une remarque de la machine" ' + if isinstance(machine, BorneWifi) and isadm: + # Borne wifi + arg += u'"Wifi" "Modifier les paramètres spécifiques aux bornes wifi" ' + + + + annul, res = dialog(arg) + + if annul: return 1 + + if res[0] == 'Informations': + set_machine(machine) + return + elif res[0] == 'Blackliste': + set_blackliste(machine) + elif res[0] == 'Alias': + set_machine_alias(machine) + elif res[0] == 'Exemptions': + set_machine_exemption(machine) + elif res[0] == 'Remarques': + set_rque(machine) + elif res[0] == 'Wifi': + set_wifi(machine) + if machine.modifs: + return confirm(machine) + + +######################################################################## +## Fonction de sélection (adhérent ou machine) + +def select(clas, quoi, mde=''): + """ + Interface de choix d'un adhérent, d'une machine ou d'un club + Retourne une instance de la classe choisie. + quoi est la chaine utilisée pour la demande (%sid=?) + exemples : quoi = 'adhérent a' => Votre choix ? adhérent aid=: + il faut que le dernier caractère de quoi soit a pour adhérent ou m pour machine + Retourne None si annulation. + + si m = ro ouvre l'objet en mode read-only + """ + + s= ['', '', '', '', '', '', '', '', '', ''] + def f(a): + try: + return unicode(a, 'iso-8859-15') + except: + return a + while 1: + s = map(f, s) + arg = u'--title "Recherche %s" ' % ' '.join(quoi.split()[:-1]) + arg += u'--help-button ' + arg += u'--form "Entrez vos paramètres de recherche" 0 0 0 ' + arg += u'"Nom :" 1 1 "%s" 1 13 20 20 ' % s[0] + arg += u'"Prenom :" 2 1 "%s" 2 13 20 20 ' % s[1] + arg += u'"Téléphone :" 3 1 "%s" 3 13 10 00 ' % s[2] + arg += u'"Chambre :" 4 1 "%s" 4 13 05 00 ' % s[3] + arg += u'"aid :" 5 1 "%s" 5 13 5 5 ' % s[4] + arg += u'"Login / mail :" 6 1 "%s" 6 16 30 00 ' % s[5] + arg += u'"Machine :" 1 35 "" 0 0 0 0 ' + arg += u'"Nom :" 2 37 "%s" 2 43 17 17 ' % s[6] + arg += u'"Mac :" 3 37 "%s" 3 43 17 17 ' % s[7] + arg += u'"IP :" 4 37 "%s" 4 43 15 15 ' % s[8] + arg += u'"mid :" 5 37 "%s" 5 43 5 5 ' % s[9] + arg += u'"Les champs vides sont ignorés." 7 1 "" 0 0 0 0' + + annul, result = dialog(arg) + if annul: return + + if result[0][:4] == 'HELP': + arg = u'--title Aide ' + arg += u'--msgbox "Il n\'est pas necessaire de remplir tous les champs.\n' + arg += u'Il est possible d\'utiliser les * dans les champs de recherche.\n\n\n" 0 0' + dialog(arg) + continue + + s= [] + for i in result: + i = i.strip().decode(encoding) + if not i: i= u'*' + s.append(i) + + ### Contruction de la chaîne de recherche + filtre_adher = u'nom=%s&prenom=%s&tel=%s&chbre=%s&aid=%s&mail=%s&' % tuple(s[:6]) + filtre_machine = u'host=%s&macAddress=%s&ipHostNumber=%s&mid=%s&' % tuple(s[6:]) + + filtre= '' + if filtre_adher.count('=*&') != 6: + # Au moins une condition adhérent + filtre += filtre_adher[:-1] + if filtre_machine.count('=*&') != 4: + # Au moins une condition machine + if filtre: filtre += '&' + filtre += filtre_machine[:-1] + if filtre == '': + # Aucune condion => erreur + arg = u'--title "Recherche" ' + arg += u'--msgbox "Il faut au moins une condition.\n\n\n" 0 0' + dialog(arg) + continue + + ### Recherche + try: + if mde == 'ro': + res = clas.search(filtre, 'ro') + else: + res = clas.search(filtre, 'w') + except ValueError: + arg = u'--title "Recherche" ' + arg += u'--msgbox "Caractère interdit.\n\n\n" 0 0' + dialog(arg) + continue + + # Affichage + if quoi[-1] == 'a': + valid = res['adherent'] + if not valid and res['machine']: + # On va récupérer les adhérents correspondants aux machines trouvés + deja= [] + for m in res['machine']: + a = m.proprietaire() + if a.id() in deja: continue + deja.append(a.id()) + valid.append(a) + elif quoi[-1] == 'm': + valid = res['machine'] + if not valid and res['adherent']: + # On va récupérer les machines des adhérents trouvés + for a in res['adherent']: + for m in a.machines(): + valid.append(m) + else: + raise TypeError('Argument fonction invalide') + + if not valid or (len(valid) == 1 and quoi[-1] == 'a' and valid[0].__class__ == AssociationCrans): + arg = u'--title "Recherche" ' + arg += u'--msgbox "Aucun résultat.\n\n\n" 0 0' + dialog(arg) + # Retour au formulaire + continue + + if len(valid) == 1: + # Une seule réponse + choix = valid[0] + else: + # Il faut choisir + while 1: + os.system('clear') + choix = None + print "Plusieurs réponses correspondant à votre requête ont été trouvées :" + aff(valid) + i = affich_tools.prompt(u'Votre choix ? (0 pour annuler) %sid =' % quoi) + if i == '0': break + for v in valid: + if v.id() == i: + choix = v + break + if not choix: + # Redemande le choix + print 'Choix invalide' + continue + if choix: break + + if not choix: + # Retour à l'interface de recherche + continue + + os.system('clear') + print "Sélection : " + aff(choix) + + while 1: + r = affich_tools.prompt(u'Confirmer sélection ? [O/N]') + if r == 'O' or r == 'o': + break + elif r == 'N' or r == 'n': + # Annulation du choix + choix = None + break + print 'Répondre O ou N' + # Retour à la confirmation + + if choix: + if mde != 'ro' and not choix._modifiable: + arg = u'--title "Recherche" ' + arg += u'--msgbox "Objet sélectionné locké, attendre.\n\n\n" 0 0' + dialog(arg) + return + return choix + # Sinon retour interface de sélection + +def menu_principal(): + """ + Affiche le menu de choix initial + """ + + # que signifient toutes ces initiales ? + # (a)jouter, (m)odifier, (d)eleter + # (M)achine, (A)dherent, (C)lub, K=crans, (B)orne + # (c)ourant = déja selectionné + + proprio = None + becane = None + choix = None + while 1: + arg = u'--title "Menu principal" ' + arg += u'--help-button --item-help --cancel-label "Quitter" ' + arg += u'--default-item "%s" ' % choix + arg += u'--menu "Que souhaitez vous faire ?" 0 55 13 ' + if proprio.__class__ == Adherent: + arg += u'"mAc"' + elif proprio.__class__ == Club: + arg += u'"mCc"' + if proprio: + if proprio.__class__ != AssociationCrans: + arg += u' "Modifier l\'inscription de %s" "" ' % proprio.Nom() + arg += u'"aMc" "Ajouter une machine à %s" "" ' % proprio.Nom() + if becane: + arg += u'"mMc" "Modifier la machine %s" "Modification du nom, de l\'IP, de la MAC, des alias, des exemptions..." ' % becane.nom().split('.')[0] + if proprio or becane: + arg += u'"" "---------------------------------------" "" ' + + arg += u'"aA" "Inscrire un nouvel adhérent" "" ' + arg += u'"mA" "Modifier l\'inscription d\'un adhérent" "Changer la chambre, la remarque, la section, la carte d\'étudiant ou précâbler." ' + arg += u'"aMA" "Ajouter une machine à un adhérent" "" ' + arg += u'"dA" "Détruire un adhérent" "Suppression de l\'adhérent ainsi que de ses machines" ' + arg += u'"" "---------------------------------------" "" ' + arg += u'"mM" "Modifier une machine existante" "Changer le nom ou la MAC d\'une machine." ' + arg += u'"dM" "Détruire une machine" "" ' + arg += u'"" "---------------------------------------" "" ' + arg += u'"aC" "Inscrire un nouveau club" "" ' + arg += u'"mC" "Modifier un club" "" ' + arg += u'"aMC" "Ajouter une machine à un club" "" ' + arg += u'"dC" "Détruire un club" "Suppression du club ainsi que de ses machines" ' + if isadm: + arg += u'"" "---------------------------------------" "" ' + if isadm: + arg += u'"aKM" "Ajouter une machine à l\'association" "" ' + arg += u'"aKB" "Ajouter une borne wifi" "" ' + annul, result = dialog(arg) + if annul: break + + if result[0][:4] == 'HELP': + arg = u'--title Aide ' + arg += u'--msgbox "Interface utilisable au clavier ou a la souris pour les terminaux le supportant.\n' + arg += u'Pour revenir à une question précédente utiliser le bouton annuler ou Ctrl +C.\n' + arg += u'Pour quitter sans enregister les dernières modifications utilisez ESC.\n\n' + arg += u'Pour toute remarque ou problème : fred@crans.org\n\n\n" 0 0' + dialog(arg) + continue + + choix = result[0] + if not choix: continue + + if choix == 'aA': + # Inscription nouvel adhérent + proprio = Adherent() + if new_adher(proprio): + del proprio + proprio = None + else: choix = 'aMc' # ajout d'une machine + + elif choix == 'mA': + # Modif adhérent + proprio = select(db, u'adhérent à modifier a') + if not proprio: continue + choix = 'mAc' + + elif choix == 'aMA': + # Ajout machine, adhérent à choisir + proprio = select(db, u'adhérent auquel ajouter une machine a') + if not proprio: continue + choix= 'aMc' + + elif choix == 'aMC': + # Ajout machine, club à choisir + proprio = select_club(db) + if not proprio: continue + choix= 'aMc' + + elif choix == 'mM': + # Modif machine, machine à choisir + becane = select(db, u'machine à modifier m') + if not becane: continue + choix= 'mMc' + + elif choix == 'aC': + # Ajout d'un club + proprio = Club() + if new_club(proprio): + del proprio ; proprio = None + else: choix = 'aMc' # ajout d'une machine + + elif choix == 'mC': + # Modif club + proprio = select_club(db) + if not proprio: continue + choix= 'mCc' + + elif choix == 'dA': + # Destruction adhérent + proprio = select(db, u'adhérent à détruire a') + if not proprio: continue + if del_adher(proprio): continue + del(proprio) ; proprio= None + del(becane) ; becane= None + + elif choix == 'dM': + # Destruction machine + becane = select(db, u'machine à détruire m') + if not becane: continue + if del_machine(becane): continue + del(becane) ; becane= None + + elif choix == 'dC': + # Destruction club + proprio = select_club(db) + if not proprio: continue + if del_club(proprio): continue + del(proprio) ; proprio= None + del(becane) ; becane= None + + elif choix == 'aKM': + # Ajout machine au crans + becane = MachineCrans(AssociationCrans(db.conn)) + if set_machine(becane): + becane.restore() + + elif choix == 'aKB': + # Ajout borne wifi + becane = BorneWifi(AssociationCrans(db.conn)) + if set_machine(becane): + becane.restore() + + ############################################## + + if choix == 'aMc': + # Ajout d'une machine à l'adhérent/au club courant + + # On ne peut avoir de machine fixe si on n'a pas payé + # la caution + caution_ok = 'k' in proprio.controle() + + # On ne peut avoir une machine fixe que si on a pas + # déjà une machine fixe, sauf si on est membre actif + # (expérimental) + + # On récupère la liste des machines fixes + if proprio.__class__ == Club or not proprio.machines_fixes() or proprio.droits(): + arg = u'--title "Nouvelle machine" ' + arg += u'--menu "Type de machine ?" 0 0 0 ' + arg += u'"Fixe" "Machine fixe" ' + arg += u'"Wifi" "Machine wireless" ' + annul, result = dialog(arg) + if annul: continue + choix= result[0] + else: + # Plus de machine fixe possible... + arg = u'--title "Nouvelle machine" ' + arg += u'--menu " Non membre actif\n\n' + arg += u'Seuls les membres actifs peuvent posséder plusieurs\n' + arg += u'machines fixes. L\'adhérent actuel n\'est pas membre\n' + arg += u'actif, il n\'est donc possible que de lui ajouter une\n' + arg += u'machine wifi..." 0 0 0 ' + arg += u'"OK" "OK, on lui rajoute une machine wifi" ' + arg += u'"Annul" "Bon, on abandonne..." ' + annul, result = dialog(arg) + if annul or result[0] == "Annul": continue + if result[0] == "OK": + choix = 'Wifi' + else: + choix = 'Fixe' + try: + if choix == 'Fixe': + becane = MachineFixe(proprio) + elif choix == 'Wifi': + becane = MachineWifi(proprio) + except ValueError, c: + arg = '--title "Nouvelle machine" ' + arg += '--msgbox "%s\n\n\n" 0 0' % c.args[0] + dialog(arg) + continue + if set_machine(becane): + # Annulation + del(becane) + becane = None + + + if choix == 'mAc': + # Modif propriétaire courant + del(becane) + becane= None + # On supprime la machine car des modifs du propriétaire (bat) ne seraient + # alors pas vu par l'instance actuelle de machine + if modif_adher(proprio): + # Annulation des modifs + proprio.restore() + + elif choix == 'mMc': + # Modif machine courante + if not proprio: + proprio = becane.proprietaire() + if proprio.chbre() == '????': + arg = u'--title "Ajout d\'une machine" ' + arg += u'--msgbox "ERREUR : la chambre de %s est inconnue !\n\n\n" 0 0' % proprio.Nom() + dialog(arg) + elif modif_machine(becane): + # Annulation des modifs + becane.restore() + + elif choix == 'mCc': + # Modif club courant + if modif_club(proprio): + # Annulation des modifs + proprio.restore() + + os.system('clear') + +def killed(a, z): + sys.exit(254) # Va tomber dans les exceptions + +if __name__ == '__main__': + global debug + debug = 0 + + signal.signal(signal.SIGTERM, killed) # Interception du signal TERM + signal.signal(signal.SIGINT, signal.SIG_DFL) # Comportement normal de Ctrl-C + + # Traitement des options + try: + if len(sys.argv) > 1: + options, arg = getopt.getopt(sys.argv[1:], '', ['debug']) + else: + options, arg = ([], '') + except getopt.error, msg: + print msg + sys.exit(255) + + for opt, val in options: + if opt == '--debug': + debug = 1 + + # Phase principale + try: + menu_principal() + #os.system('clear') + exit = 0 + except KeyboardInterrupt: + os.system('clear') + print "Interruption par l'utilisateur." + exit = 255 + except SystemExit, c: + if c.__str__() == '254': + os.system('reset') + print "Votre session d'édition à été tuée." + exit = c + except: + if not debug: os.system('clear') + print """Une erreur fatale c'est produite durant l'exécution.""" + + # Report de bug + import traceback + from cStringIO import StringIO + from smtplib import SMTP + + s = StringIO() + sys.stderr = s + traceback.print_exc() + sys.stderr = sys.__stderr__ + traceback = s.getvalue() + try: + if not debug and To: + # Paramètres pour le mail + From = script_utilisateur + '@crans.org' + + entete_mail = """From: %s +To: %s +Subject: Bugreport %s + +""" % (From, ','.join(To), sys.argv[0].split('/')[-1]) + + # Envoi mail + conn = SMTP(smtpserv) + conn.sendmail(From, To, entete_mail + traceback) + conn.quit() + sys.stderr.write("Un rapport de bug à été automatiquement envoyé.\n") + else: + print "Merci de faire parvenir un rapport de bug à nounou" + except: + sys.stderr.write("Impossible d'envoyer le rapport de bug.\n") + + if debug: + print '-'*40 + print 'Détails techniques :' + sys.stderr.write(traceback) + print '-'*40 + exit = 1 + + # Restart des services + signal.signal(signal.SIGINT, signal.SIG_IGN) # Pas de Ctrl-C + signal.signal(signal.SIGTERM, signal.SIG_IGN) # Pas de kill non plus + + try: + serv = db.services_to_restart() + except: + # Erreur trop tot probablement + serv = '' + if serv: + mn = int(strftime('%M')) + # Restart toutes les 10 min : 03, 13, 23, 33, 43, 53 + t = (13 - mn % 10) % 10 + 1 # Certaines machines le font -Aà 4-b + if t == 0: t = 10 + print "Les modifications apportées à la base seront prises en compte dans %i min environ." % t + if debug: + print "Les services suivants seront redémarrés: " + for s in serv: + print '\t%s' % s + + if debug: print '-*- Fin -*-' + + # Rétablissement du Ctrl-C + signal.signal(signal.SIGINT, signal.SIG_DFL) + sys.exit(exit) + diff --git a/archive/vieux/webmail_freebox b/archive/vieux/webmail_freebox new file mode 100755 index 00000000..a3750a1a --- /dev/null +++ b/archive/vieux/webmail_freebox @@ -0,0 +1,50 @@ +#! /bin/sh +# Petit script a executer sur ultra-adsl si on veut pouvoir consulter +# les mails sur freebox.crans.org, en cas de panne de renater +# Par Alexandre Bos, avec l'aide patiente de Stephane et Vince +# Licence GPLv3 ou ulterieure + +# A utiliser ponctuellement, n'oubliez pas de desactiver +# le routage et de vider le firewall quand vous n'en avez +# plus besoin + +# D'abord on désactive le routage +echo 0 >> /proc/sys/net/ipv4/ip_forward + +# Par defaut, le routage est interdit +iptables -P FORWARD DROP + +# On vide le firewall +iptables -F +iptables -t nat -F +iptables -t mangle -F + +# Le routage de paquets est autorise si c'est bien ce que l'on veut +iptables -A FORWARD -d 138.231.136.3 -i eth1 -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT +iptables -A FORWARD -d 138.231.136.3 -i eth1 -p tcp --dport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT +iptables -A FORWARD -s 138.231.136.3 -i eth0 -p tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT + +iptables -A FORWARD -d 138.231.136.3 -i eth1 -p tcp --dport 443 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT +iptables -A FORWARD -d 138.231.136.3 -i eth1 -p tcp --dport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT +iptables -A FORWARD -s 138.231.136.3 -i eth0 -p tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT + +iptables -A FORWARD -d 138.231.136.3 -i eth1 -p tcp --dport 993 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT +iptables -A FORWARD -d 138.231.136.3 -i eth1 -p tcp --dport 993 -m state --state RELATED,ESTABLISHED -j ACCEPT +iptables -A FORWARD -s 138.231.136.3 -i eth0 -p tcp --sport 993 -m state --state RELATED,ESTABLISHED -j ACCEPT + +iptables -A FORWARD -j REJECT + +# On NATe le port 80 vers rouge +iptables -t nat -A PREROUTING -d 82.225.39.54 -p tcp --dport 80 -j DNAT --to-destination 138.231.136.3 +iptables -t nat -A POSTROUTING -d 138.231.136.3 -j SNAT --to-source 138.231.136.9 + +# On NATe le port 443 vers rouge +iptables -t nat -A PREROUTING -d 82.225.39.54 -p tcp --dport 443 -j DNAT --to-destination 138.231.136.3 +iptables -t nat -A POSTROUTING -d 138.231.136.3 -j SNAT --to-source 138.231.136.9 + +# On NATe le port 993 vers rouge +iptables -t nat -A PREROUTING -d 82.225.39.54 -p tcp --dport 993 -j DNAT --to-destination 138.231.136.3 +iptables -t nat -A POSTROUTING -d 138.231.136.3 -j SNAT --to-source 138.231.136.9 + +# On active le routage +echo 1 >> /proc/sys/net/ipv4/ip_forward