201 lines
4.8 KiB
Plaintext
201 lines
4.8 KiB
Plaintext
|
|
#!/bin/sh
|
||
|
|
set -e
|
||
|
|
|
||
|
|
# don't run if this package is removed but not purged
|
||
|
|
if [ ! -f /usr/sbin/popularity-contest ]; then
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
MODE="$1"
|
||
|
|
|
||
|
|
unset MAILFROM
|
||
|
|
unset MAILTO
|
||
|
|
unset MY_HOSTID
|
||
|
|
unset PARTICIPATE
|
||
|
|
unset SUBMITURLS
|
||
|
|
unset USEHTTP
|
||
|
|
unset USETOR
|
||
|
|
unset MTAOPS
|
||
|
|
|
||
|
|
TORIFY_PATH=/usr/bin/torify
|
||
|
|
|
||
|
|
torify_enabled() {
|
||
|
|
# Return 1 to enable torify for HTTP submission, otherwise 0; exit on error
|
||
|
|
TORSOCKS_PATH=/usr/bin/torsocks
|
||
|
|
[ -f "$TORIFY_PATH" ] && [ -f "$TORSOCKS_PATH" ] && TOR_AVAILABLE=1
|
||
|
|
|
||
|
|
case "$USETOR" in
|
||
|
|
"yes")
|
||
|
|
if [ -z $TOR_AVAILABLE ]; then
|
||
|
|
echo "popularity-contest: USETOR is set but torify is not available." 2>&1
|
||
|
|
echo "popularity-contest: Please install the tor and torsocks packages." 2>&1
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
if [ "yes" != "$USEHTTP" ]; then
|
||
|
|
echo "popularity-contest: when USETOR is set USEHTTP must be set as well" 2>&1
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
return 0
|
||
|
|
;;
|
||
|
|
"maybe")
|
||
|
|
[ "yes" = "$USEHTTP" ] && [ ! -z $TOR_AVAILABLE ] && return 0
|
||
|
|
return 1
|
||
|
|
;;
|
||
|
|
"no")
|
||
|
|
return 1
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
}
|
||
|
|
|
||
|
|
# get configuration information
|
||
|
|
. /usr/share/popularity-contest/default.conf
|
||
|
|
. /etc/popularity-contest.conf
|
||
|
|
|
||
|
|
if test -d /etc/popularity-contest.d/; then
|
||
|
|
for file in `run-parts --list --regex '\.conf$' /etc/popularity-contest.d/`;
|
||
|
|
do
|
||
|
|
. $file
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
|
||
|
|
# don't run if MAILTO address is blank, and not configured to use HTTP POST!
|
||
|
|
if [ -z "$MAILTO" ] && [ "yes" != "$USEHTTP" ]; then exit 0; fi
|
||
|
|
|
||
|
|
# don't run if PARTICIPATE is "no" or unset!
|
||
|
|
if [ "$PARTICIPATE" = "no" ] || [ -z "$PARTICIPATE" ]; then exit 0; fi
|
||
|
|
|
||
|
|
# enable torify
|
||
|
|
if torify_enabled; then
|
||
|
|
TORIFY=$TORIFY_PATH
|
||
|
|
else
|
||
|
|
TORIFY=''
|
||
|
|
fi
|
||
|
|
|
||
|
|
|
||
|
|
if [ -n "$HTTP_PROXY" ]; then
|
||
|
|
export http_proxy="$HTTP_PROXY";
|
||
|
|
fi
|
||
|
|
|
||
|
|
POPCONVAR="/var/lib/popularity-contest"
|
||
|
|
POPCONOLD="/var/log/popularity-contest"
|
||
|
|
POPCONNEW="/var/log/popularity-contest.$$"
|
||
|
|
POPCON="$POPCONNEW"
|
||
|
|
|
||
|
|
last_sub()
|
||
|
|
{
|
||
|
|
if [ -r "$POPCONVAR/lastsub" ] ; then
|
||
|
|
cat "$POPCONVAR/lastsub"
|
||
|
|
else
|
||
|
|
date -r "$POPCONOLD" +%s
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
set_sub()
|
||
|
|
{
|
||
|
|
test -d "$POPCONVAR" || mkdir -p "$POPCONVAR"
|
||
|
|
date +%s > "$POPCONVAR/lastsub"
|
||
|
|
}
|
||
|
|
|
||
|
|
# Only run on the given day, to spread the load on the server a bit
|
||
|
|
if [ "$MODE" != "--crond" ] || ( [ "$DAY" ] && [ "$DAY" != "$(date +%w)" ] ) ; then
|
||
|
|
# Ensure that popcon runs at least once in the last week
|
||
|
|
if [ -f "$POPCONOLD" ] ; then
|
||
|
|
now=$(date +%s)
|
||
|
|
lastrun=$(last_sub)
|
||
|
|
if [ "$MODE" = "--crond" ]; then
|
||
|
|
# 7.5 days, in seconds
|
||
|
|
week=648000
|
||
|
|
else
|
||
|
|
# 6.5 days, in seconds
|
||
|
|
week=561600
|
||
|
|
fi
|
||
|
|
if [ "$(( $now - $lastrun ))" -le "$week" ]; then
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
# keep old logs
|
||
|
|
cd /var/log
|
||
|
|
umask 022
|
||
|
|
savelog -c 7 popularity-contest >/dev/null
|
||
|
|
|
||
|
|
do_sendmail()
|
||
|
|
{
|
||
|
|
if [ -n "$MAILFROM" ]; then
|
||
|
|
sendmail -oi $MTAOPS -f "$MAILFROM" $MAILTO
|
||
|
|
else
|
||
|
|
sendmail -oi $MTAOPS $MAILTO
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# generate the popularity contest data
|
||
|
|
|
||
|
|
/usr/sbin/popularity-contest --su-nobody > $POPCON
|
||
|
|
|
||
|
|
GPG=/usr/bin/gpg
|
||
|
|
|
||
|
|
if [ "$ENCRYPT" = "yes" ] && ! [ -x "$GPG" ]; then
|
||
|
|
logger -t popularity-contest "encryption required but gpg is not available."
|
||
|
|
echo "popularity-contest: encryption required but gpg is not available." 2>&1
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -x "$GPG" ] && [ "$ENCRYPT" = "maybe" ] || [ "$ENCRYPT" = "yes" ]; then
|
||
|
|
POPCONGPG="$POPCON.gpg"
|
||
|
|
rm -f "$POPCONGPG"
|
||
|
|
GPGHOME=`mktemp -d`
|
||
|
|
$GPG --batch --no-options --no-default-keyring --trust-model=always \
|
||
|
|
--homedir "$GPGHOME" --keyring $KEYRING --quiet \
|
||
|
|
--armor -o "$POPCONGPG" -r $POPCONKEY --encrypt "$POPCON"
|
||
|
|
rm -rf "$GPGHOME"
|
||
|
|
POPCON="$POPCONGPG"
|
||
|
|
fi
|
||
|
|
|
||
|
|
SUBMITTED=no
|
||
|
|
|
||
|
|
# try to post the report through http POST
|
||
|
|
if [ "$SUBMITURLS" ] && [ "yes" = "$USEHTTP" ]; then
|
||
|
|
for URL in $SUBMITURLS ; do
|
||
|
|
if setsid $TORIFY /usr/share/popularity-contest/popcon-upload \
|
||
|
|
-u $URL -f $POPCON 2>/dev/null ; then
|
||
|
|
SUBMITTED=yes
|
||
|
|
set_sub
|
||
|
|
else
|
||
|
|
logger -t popularity-contest "unable to submit report to $URL."
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
|
||
|
|
# try to email the popularity contest data
|
||
|
|
# skip emailing if USETOR is set
|
||
|
|
|
||
|
|
if [ "$MODE" = "--crond" ] && [ yes != "$SUBMITTED" ] && [ yes != "$USETOR" ] && [ "$MAILTO" ]; then
|
||
|
|
if [ -x "`which sendmail 2>/dev/null`" ]; then
|
||
|
|
(
|
||
|
|
if [ -n "$MAILFROM" ]; then
|
||
|
|
echo "From: <$MAILFROM>"
|
||
|
|
echo "Sender: <$MAILFROM>"
|
||
|
|
fi
|
||
|
|
echo "To: $MAILTO"
|
||
|
|
echo "Subject: popularity-contest submission"
|
||
|
|
echo "MIME-Version: 1.0"
|
||
|
|
echo "Content-Type: text/plain"
|
||
|
|
echo
|
||
|
|
cat $POPCON
|
||
|
|
) | do_sendmail
|
||
|
|
SUBMITTED=yes
|
||
|
|
else
|
||
|
|
logger -t popularity-contest "unable to submit report using sendmail."
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ "yes" != "$SUBMITTED" ] ; then
|
||
|
|
logger -t popularity-contest "unable to submit report."
|
||
|
|
rm -f $POPCONNEW $POPCONNEW.gpg
|
||
|
|
else
|
||
|
|
mv $POPCONNEW $POPCONOLD
|
||
|
|
if [ -n "$POPCONGPG" ]; then
|
||
|
|
mv $POPCONNEW.gpg $POPCONOLD.gpg
|
||
|
|
fi
|
||
|
|
fi
|