#!/usr/bin/perl # # REF: resooadmin.pl # ResooSite v.0.9.5.3-1 -(p)Resoo 2002-2004 # (c)2004 - pascal blain / GNU GPL - General Public License # http://www.resoo.com/resoosite # pascal@resoo.org # require "resooconf.pl"; $query = $ENV{'QUERY_STRING'}; &parse_form; &get_date; &get_variables; ######## recuperation des variables ######## ##################################################### # Obtenir les informations du formulaire - Subroutine sub parse_form { # recevoir les variables read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # partager les variables en paire ( nom , valeur ) @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); # Un-Webify plus signs and %-encoding $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; $FORM{$name} = $value; } } ################################################### # Mettre les champs dans des variables - Subroutine sub get_variables { if ($FORM{'page'}) { $page = "$FORM{'page'}"; } else { $page = "$query"; } if ($FORM{'utilnew'}) { $utilnew = "$FORM{'utilnew'}"; $renew = $utilnew; &ctrlline; $utilnew = $renew; } if ($FORM{'passnew'}) { $passnew = "$FORM{'passnew'}"; $renew = $passnew; &ctrlline; $passnew = $renew; } if ($FORM{'passnew2'}) { $passnew2 = "$FORM{'passnew2'}"; $renew = $passnew2; &ctrlline; $passnew2 = $renew; } if ($FORM{'retourold'}) { $retourold = "$FORM{'retourold'}"; } if ($FORM{'titre'}) { $renew = $titre; &unword; &ctrlline; $titre = $renew; $titre = "$FORM{'titre'}"; $titre =~ tr/\"/ /; $titre =~ tr/\,/ /; $titre =~ tr/\)/ /; $titre =~ tr/\(/ /; $titre =~ tr/\;/ /; $titre =~ tr/\\/ /; $titre =~ tr/\/ /; $titre =~ tr/\&/ /; $titre =~ tr/\~/ /; $titre =~ tr/\#/ /; $titre =~ tr/\{/ /; $titre =~ tr/\}/ /; $titre =~ tr/\[/ /; $titre =~ tr/\]/ /; $titre =~ tr/\^/ /; $titre =~ tr/\$/ /; $titre =~ tr/\%/ /; $titre =~ tr/\§/ /; $titre =~ tr/\*/ /; $titre =~ tr/\?/ /; $titre =~ tr/\:/ /; $titre =~ s/_\w_/_\w /; } if ($FORM{'creation'}) { $creation = "$FORM{'creation'}"; } if ($FORM{'titre2'}) { $titre2 = "$FORM{'titre2'}"; } if ($FORM{'image'}) { $image = "$FORM{'image'}"; } if ($FORM{'titre3'}) { $titre3 = "$FORM{'titre3'}"; } if ($FORM{'manchette'}) { $manchette = "$FORM{'manchette'}"; } if ($FORM{'encart'}) { $encart = "$FORM{'encart'}"; } if ($FORM{'action'}) { $action = "$FORM{'action'}"; } if ($FORM{'verif'}) { $verif = "$FORM{'verif'}"; } else { $verif = "0" } if ($FORM{'util'}) { $util = "$FORM{'util'}"; if ($FORM{'pass'}) { $pass = "$FORM{'pass'}"; &verify; } else { $verif = ( $verif + 1 ); &page_verify; } } else { &page_verify; } } ######## affichage page mot de passe ######## sub page_verify { &page_tete; if ($verif == 2) { print "$fontgrande\n"; print "Votre mot de passe n'est pas valide,
\n"; print "merci de contacter \n"; print "l'administrateur du site $dir.
\n"; print "$finfontgrande\n"; } else { print "$fontstitre\n"; print "Vous êtes en mode \"Super Administrateur\":
\n"; print "$finfontstitre
\n"; print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
$font Utilisateur: $finfont
$font Mot de passe: $finfont
\n"; print "
\n"; if ($verif == 1) { print "
 
\n"; print "$fontstitre\n"; print "deuxième essai\n"; print "$finfontstitre\n"; } else { print "
 
\n"; print "$fontpetite\n"; print "premier essai\n"; print "$finfontpetite\n"; } } &page_pied; } ######## verification mot de passe ######## sub verify { open(MAIN,"$private/$util.su") || &erreurpass; @main =
; foreach $main_line (@main) { $passcrypt = &resoocrypt($pass); if ($main_line =~ /^$passcrypt$/) { if ($action > 0) { &action; } else { $verif = "9"; #condition du titre page_admin $action = "0"; &page_admin; } } else { &erreurpass; } } close(MAIN); } sub erreurpass { $verif = ( $verif + 1 ); &page_verify; } ######## administration du site ######## sub page_admin { &page_tete; print "
\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print ""; print "\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print ""; print "\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; &hidden; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
$fontstitre Création d'une page index: $finfontstitre
$font Titre: $finfont

$fontstitre Création d'une page index invisible: $finfontstitre
$font Titre: $finfont

$fontstitre Modification du titre d'une page index: $finfontstitre
$font Titre: $finfont\n"; print "\n"; print "
$font Nouveau titre: $finfont

$fontstitre Suppression d'une page index: $finfontstitre
$font Titre: $finfont\n"; if ($retourfiles > 1) { print "\n"; } else { print "Pas de page index à supprimer"; } print "

$fontstitre Création d'un administrateur: $finfontstitre
$font Nom: $finfont
$font Mot de passe: $finfont
$font 2° saisie: $finfont

$fontstitre Suppression d'un administrateur: $finfontstitre
$font Nom: $finfont"; print "

$fontstitre Création d'un SUPERadministrateur: $finfontstitre
$font Nom: $finfont
$font Mot de passe: $finfont
$font 2° saisie: $finfont

$fontstitre Suppression d'un SUPERadministrateur: $finfontstitre
$font Nom: $finfont

$fontstitre Configuration du site: $finfontstitre
$font Configuration couleur, etc... $finfont

$fontstitre Configuration des scripts: $finfontstitre
$font Nom du serveur, page index, etc... $finfont

$fontstitre Configuration du forum: $finfontstitre
$font Mode modération, affichage, modérateurs, etc... $finfont

$fontstitre Statistiques du site: $finfontstitre
$font Compteurs articles et index $finfont

\n"; print "$fontpetite
 
\n"; print "en cas de difficulté, merci de contacter \n"; print "l'administrateur du site $title.
\n"; print "
$finfontpetite\n"; &page_pied; } ######## entete et pied de page ######## sub page_tete { print "Content-type: text/html\; charset=ISO-8859-1\n\n"; &head; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "$font\n"; print "\n"; print "
\n"; print "$fonttitre\n"; if ( $verif == 9 ) { if ( $action == "4" ) { print "Oups ! Erreur...\n"; } else { print "Page Super Administrateur\n"; } } else { print "Saisie du mot de passe $fontstitre(super-admin)$finfontstitre\n"; } print "$finfonttitre

\n"; print "Si vous avez un problème avec cette page, merci d'en informer "; print "l'administrateur de ce site
\n"; print "$finfont\n"; print "
\n"; print "$font\n"; print "\ \;
\ \;\n"; print "$finfont\n"; print "
\n"; print "$font \ \;
\n"; } sub page_pied { print "$finfont\n"; print "
\n"; print "$font\n"; print "\n"; print "
\n"; &foot; } ######## routines "action" ######## # action = 1 (creation) # action = 11 (creation "invisible") # action = 2 (modification) # action = 3 (suppression) # action = 4 (erreur) # action = 5 (creation admin) # action = 6 (suppression admin) # action = 7 (creation super admin) # action = 8 (suppression super admin) # action = 9 (config) # action = 10 (stat) sub action { ✓ # verifie les champs obligatoire if (($action == "1") or ($action == "11")) { ## creer le fichier idx &get_numb; $page = "$numb"; open(MAIN4,">$dir_txt/$page.idx") || die $!; print MAIN4 "$titre\n"; print MAIN4 "$creation\n"; print MAIN4 "$titre2\n"; print MAIN4 "$image\n"; print MAIN4 "$titre3\n"; $encart =~ s/\n/
/g; print MAIN4 "$encart\n"; print MAIN4 "\n"; ## formatarticle ## infospeciale close(MAIN4); ## creer le fichier txt open(MAIN5,">$dir_txt/$page.txt") || die $!; $manchette =~ s/\s\s/\n/g; $manchette =~ s/\n\n/\n/g; print MAIN5 "$manchette"; close(MAIN5); ## creer le fichier lst open(MAIN6,">$dir_txt/$page.lst") || die $!; print MAIN6 ""; close(MAIN6); ## creer le fichier cmp &creer_comp; ## maj de liste index if ($action==11){ $filesindex{$page} = "_I_$titre"; } else { $filesindex{$page}=$titre; } open (CONF,"resoocnf.pl") || &badcheck; @conf = ; close (CONF); open(CONF,">resoocnf.pl") || &badcheck2; foreach $line (@conf) { if ($line =~ /\%filesindex \= \(\".*/) { print CONF "\%filesindex \= \("; foreach $key (sort keys %filesindex) { print CONF "\"$key\",\"$filesindex{$key}\","; } print CONF "\)\;\n"; } else { print CONF "$line"; } } close(CONF); } if ($action == "2" ) { ## maj du fichier idx open(F,"$dir_txt/$retourold.idx"); @f = ; close(F); open(F,">$dir_txt/$retourold.idx"); foreach $line (@f) { if ($line =~ /$filesindex{$retourold}/) { $_=$line; s/$filesindex{$retourold}/$titre/; print F "$_"; } else { print F "$line"; } } close(F); ## maj de liste index open (CONF,"resoocnf.pl") || &badcheck; @conf = ; close (CONF); open(CONF,">resoocnf.pl") || &badcheck2; foreach $line (@conf) { if ($line =~ /\%filesindex \= \(\".*/) { $_=$line; s/\"$retourold\"\,\"$filesindex{$retourold}\"\,/\"$retourold\"\,\"$titre\"\,/; print CONF "$_"; } else { print CONF "$line"; } } close(CONF); } if ($action == "3" ) { $delfic1 = "$dir_txt/$retourold.txt"; unlink ($delfic1); $delfic2 = "$dir_txt/$retourold.idx"; unlink ($delfic2); $delfic3 = "$dir_txt/$retourold.lst"; unlink ($delfic3); $delfic4 = "$dir_comp/$retourold.cmp"; unlink ($delfic4); ## maj de liste index open (CONF,"resoocnf.pl") || &badcheck; @conf = ; close (CONF); open(CONF,">resoocnf.pl") || &badcheck2; foreach $line (@conf) { if ($line =~ /\%filesindex \= \(\".*/) { $_=$line; s/\"$retourold\"\,\"$filesindex{$retourold}\"\,//; print CONF "$_"; } else { print CONF "$line"; } } close(CONF); } if ($action == "5" ) { ## creer le fichier txt open(MAIN7,">$private/$utilnew.txt") || die $!; $passnew = &resoocrypt($passnew); print MAIN7 "$passnew\n"; close(MAIN7); chmod 0600, "$private/$utilnew.txt"; &logutil("TXT$utilnew"); } if ($action == "6" ) { $delfic1 = "$private/$utilnew.txt"; unlink ($delfic1); &delogutil("TXT$utilnew"); } if ($action == "7" ) { ## creer le fichier su open(MAIN8,">$private/$utilnew.su") || die $!; $passnew = &resoocrypt($passnew); print MAIN8 "$passnew\n"; close(MAIN8); chmod 0600, "$private/$utilnew.su"; &logutil("SU$utilnew"); } if ($action == "8" ) { $delfic1 = "$private/$utilnew.su"; unlink ($delfic1); &delogutil("SU$utilnew"); } if ($action == "9" ) { ## voir &config; } &page_tete; print "$fontgrande\n"; if (($action == "1") or ($action == "11")) { print "Création d'index terminée :
\n"; print "Page: $titre (\# $page)

\n"; print "
\n"; print "
\n"; &hidden; print "\n"; print "\n"; print "
\n"; print "
\n"; } if ($action == "2") { print "Modification du titre de page index effectuée
\n"; print "Page: $filesindex{$retourold} (\#$retourold)"; } if ($action == "3") { print "Suppression de page index effectuée
\n"; print "Page: $filesindex{$retourold} (\#$retourold)"; } if ($action == "5") { print "Création administrateur \"$utilnew\" effectuée !

\n"; } if ($action == "7") { print "Création Super Administrateur \"$utilnew\" effectuée !

\n"; } if ($action == "6") { print "Suppression utilisateur \"$utilnew\" effectuée !

\n"; } if ($action == "8") { print "Suppression utilisateur \"$utilnew\" effectuée !

\n"; } if ($action == "9") { print "configuration du site effectuée !\n"; } if ($action == "10" ) { print "Statistiques site $title au $date :

\n"; print "\n"; if ($img > "1") { print ""; open(N01,"$dir_comp/img.cmp"); $comp01 = ; close(N01); print "\n"; } if ($link > "1") { print ""; open(N02,"$dir_comp/link.cmp"); $comp02 = ; close(N02); print "\n"; } if ($bbs > "1") { print ""; open(N03,"$dir_comp/bbs.cmp"); $comp03 = ; close(N03); print "\n"; } if ($rep > "1") { print ""; open(N04,"$dir_comp/doc.cmp"); $comp04 = ; close(N04); print "\n"; } foreach $key (sort keys %filesindex) { if (!($filesindex{$key} =~ /^_\w_/)) { print ""; my $pagestat=$key; open(N,"$dir_comp/$pagestat.cmp"); $comp0 = ; close(N); print "\n"; $asterix = ""; &print_stat($pagestat); } } print "
Titrevisites
  • $imgtitre
  • $comp01
  • $linktitre
  • $comp02
  • Forum
  • $comp03
  • Page téléchargement
  • $comp04
    $filesindex{$key}$comp0


    \n"; } if ($action == "4") { print "Erreur: champs $error.

    \n"; print "$font\n"; print "utiliser le bouton retour de votre navigateur pour revenir au formulaire prédédent.

    \n"; print "$finfont\n"; } print "
    \n"; print "
    \n"; &hidden; print "\n"; print "\n"; print "\n"; print "
    \n"; print "
    \n"; print "
    \n"; print "
    \n"; if ($page) { print "\n"; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
    \n"; print "


    \n"; print "$finfontgrande\n"; print "$font\n"; print "...
    \n"; print "$finfont\n"; &page_pied; } sub print_stat { my $pagestat = $_[0]; if (-e "$dir_txt/$pagestat.lst"){ open (F, "$dir_txt/$pagestat.lst"); my @f=; close (F); foreach my $line (@f) { my $pagestat2=$line; $pagestat2 =~ s/\n//; if (-e "$dir_txt/$pagestat2.lst"){ open(N1,"$dir_txt/$pagestat2.idx"); @ttt = ; $titreart = $ttt[0]; close(N1); $asterix = $asterix . "*"; print "
  • $titreart ($asterix)"; open(N2,"$dir_comp/$pagestat2.cmp"); $comp1 = ; close(N2); print "$comp1\n"; } &print_stat($pagestat2); } $asterix =~ s/\*//; } else{ open(N1,"$dir_txt/$pagestat.idx"); @ttt = ; $titreart = $ttt[0]; close(N1); if ($asterix) { print "
  • ($asterix) $titreart"; } else { print "
  • $titreart"; } open(N2,"$dir_comp/$pagestat.cmp"); $comp1 = ; close(N2); print "$comp1\n"; } } sub check { if (($action == "1") or ($action == "11")) { if (!$titre) { $error = "\"titre\" non servi"; $action = "4"; } foreach $key (%indexfiles) { if (($titre eq $key) or ($key eq "_I_$titre")) { $error = "\"titre\" déjà existant"; $action = "4"; } } } if ($action == "2") { if (!$titre) { $error = "\"titre\" non servi"; $action = "4"; } if (!$retourold) { $error = "\"titre index\" non servi"; $action = "4"; } foreach $key (%indexfiles) { if ($titre eq $key) { $error = "\"titre\" déjà existant"; $action = "4"; } } } if ($action == "3") { if (!$retourold) { $error = "\"titre index\" non servi"; $action = "4"; } open (F,"$dir_txt/$retourold.lst"); @f = ; # close (F); foreach $line (@f) { if ($line =~ /^\w/) { $error = "\"page article\" $fontpetite
    (pour pouvoir supprimer une page index, il faut avoir précédemment supprimé ou transféré vers une autre page index tous les articles qui lui sont rattachés)
    $finfontpetite"; $action = "4"; } close(F); } } if ($action == "5") { if (!$utilnew) { $error = "\"nom\" non servi"; $action = "4"; } if ($utilnew eq "users") { $error = "\"nom\" : ce nom est réservé par le système..."; $action = "4"; } if ((!$passnew) or (!$passnew2)) { $error = "\"mot de passe\" non servi"; $action = "4"; } if ($passnew ne $passnew2) { $error = "\"mot de passe\" : les deux saisies sont différentes..."; $action = "4"; } if (open (F, "$private/$utilnew.txt")) { $error = "\"nom\" (Utilisateur déjà existant)"; close(F); $action = "4"; } } if ($action == "6") { if (!$utilnew) { $error = "\"nom\" non servi"; $action = "4"; } if (!open (F, "$private/$utilnew.txt")) { $error = "\"nom\" (Utilisateur inconnu)"; close(F); $action = "4"; } } if ($action == "7") { if (!$utilnew) { $error = "\"nom\" non servi"; $action = "4"; } if ($utilnew eq "users") { $error = "\"nom\" : ce nom est réservé par le système..."; $action = "4"; } if ((!$passnew) or (!$passnew2)) { $error = "\"mot de passe\" non servi"; $action = "4"; } if ($passnew ne $passnew2) { $error = "\"mot de passe\" : les deux saisies sont différentes..."; $action = "4"; } if (open (F, "$private/$utilnew.su")) { $error = "\"nom\" (Super utilisateur déjà existant)"; close(F); $action = "4"; } } if ($action == "8") { if (!$utilnew) { $error = "\"nom\" non servi"; $action = "4"; } if (!open (F, "$private/$utilnew.su")) { $error = "\"nom\" (Super utilisateur inconnu)"; close(F); $action = "4"; } } if ($action == "9") { ### pas de verification } } sub badcheck { $error = "Fichier resoocnf.pl absent..."; $action = "4"; } sub badcheck2 { $error = "Impossible d'écrire dans le fichier resoocnf.pl..."; $action = "4"; }