#!/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