!/bin/sh # NOTE: this script needs to be run by the news user. # Debian systems will not allow normal users to run ctlinnd and innxmit or rnews. # Script distributed with suck but modified by Christophe Le Bars for the Debian package. # authinfo compatibility by Brian Mays . COMMAND=$0 ETCDIR_INIT=/etc/suck # location of sucknewsrc* and killfile* if [ -z "${PAGER}" ]; then PAGER=more fi while [ ! -z "$1" ]; do case "$1" in -dirconf) shift DIR_CONF=$1 shift ;; -outgoingfile) shift SITE_OPTION=$1 shift ;; -server) shift LOCAL_SERVER=$1 shift ;; -userid) shift USERID=$1 shift ;; -password) shift PASSWD=$1 shift ;; -noauth) shift NOAUTH="t" USERID="" PASSWD="" ;; -port) shift REMOTE_PORT=$1 shift ;; -q) shift OPTS="$OPTS -q" ;; -h) $PAGER <<__END__ Usage: $COMMAND [-option parm] [] The NNTP server you will connect to. (if nothing, $COMMAND read ${GETNEWSCONF}) Options: -dirconf El nombre del directorio de configuración bajo ${ETCDIR_INIT} donde se encuentran lo ficheros de configuración. Por defecto get-news.conf -outgoingfile The file of your remote server outgoing articles. (default = the remote server name) -userid The userid to send to the remote server. -password The password to send to the remote server. -noauth Do not send userid and password. (even if they are specified in ${GETNEWSCONF}) -port Set remote port number. -server Your local NNTP server. (default = "$LOCAL_SERVER") -q Do not display the BPS and article count messages during download. __END__ exit 0 ;; *) REMOTE_SERVER=$1 shift ;; esac done if [ -z "$DIR_CONF" ]; then DIR_CONF="." fi ETCDIR=${ETCDIR_INIT}/${DIR_CONF} # Directorio que contiene los ficheros de # configuración y control de grupos GETNEWSCONF=${ETCDIR}/get-news.conf # defaults for this script if [ -z "$LOCAL_SERVER" ];then LOCAL_SERVER=`grep ^server: ${GETNEWSCONF} \ | awk '{gsub(" ","");print}' | cut -c8-` fi if [ -z "$REMOTE_SERVER" ];then REMOTE_SERVER=`grep ^remoteserver: ${GETNEWSCONF} \ | awk '{gsub(" ","");print}' | cut -c14-` fi if [ -z "$REMOTE_PORT" ];then REMOTE_PORT=`grep ^remoteport: ${GETNEWSCONF} \ | awk '{gsub(" ","");print}' | cut -c12-` fi if [ -z "$SITE" ];then SITE=`grep ^outgoingfile: ${GETNEWSCONF} \ | awk '{gsub(" ","");print}' | cut -c14-` fi if [ -z "$USERID" ];then USERID=`grep ^userid: ${GETNEWSCONF} \ | awk '{gsub(" ","");print}' | cut -c8-` fi if [ -z "$PASSWD" ];then PASSWD=`grep ^password: ${GETNEWSCONF} \ | awk '{gsub(" ","");print}' | cut -c10-` fi if [ ! -z "$NOAUTH" ];then USERID="" PASSWD="" fi if [ -z "$OPTS=" ];then OPTS=`grep ^suckoptions: ${GETNEWSCONF} | cut -c13-` fi REMOTE_SERVER_DEFAULT=${REMOTE_SERVER} if [ -z "${LOCAL_SERVER}" ]; then LOCAL_SERVER=localhost fi if [ -z "${REMOTE_PORT}" ]; then REMOTE_PORT=119 fi if [ -z "${SITE}" ]; then SITE=${REMOTE_SERVER} fi if [ ! "${REMOTE_SERVER_DEFAULT}" = "${REMOTE_SERVER}" ]; then SITE=${REMOTE_SERVER} fi if [ ! -z "${SITE_OPTION}" ]; then SITE=${SITE_OPTION} fi if [ ! -z "${USERID}" ]; then AUTHOPTS="-U ${USERID}" else AUTHOPTS="" fi if [ ! -z "${PASSWD}" ]; then AUTHOPTS="$AUTHOPTS -P ${PASSWD}" fi OUTGOINGFILE="/var/spool/news/outgoing/$SITE" echo "Local server=$LOCAL_SERVER remote server=$REMOTE_SERVER remote=port=$REMOTE_PORT site=$SITE user=$USERID pass=$PASSWD opt=$OPTS etcdir=$ETCDIR getnewsconf=$GETNEWSCONF noauth=$NOAUTH authopts=$AUTHOPTS outgoingfile=$OUTGOINGFILE" # antes que nada, corrige las cabeceras #echo "Vamos a corregir las cabeceras..." #(su news -c "/scripts/limpiacabeceras $OUTGOINGFILE") && \ # echo "Cabeceras corregidas" || \ # echo "ERROR. NO SE HAN PODIDO REESCRIBIR LAS CABECERAS" BINDIR=/usr/bin # base directory for suck rpost and testhost RPOST=${BINDIR}/rpost # my rpost SUCK=${BINDIR}/suck # my suck TESTHOST=${BINDIR}/testhost # my testhost SCRIPT=/usr/lib/suck/put-news # my filter for rpost NEWSDIR=/usr/lib/news # base directory for INN news binaries INNXMIT=${NEWSDIR}/bin/innxmit # location of innxmit CTLINND=${NEWSDIR}/bin/ctlinnd # location of ctlinnd RNEWS=${NEWSDIR}/input/rnews # location of rnews # location of the list of articles to upload NEWSSPOOLDIR=/var/spool/news # base directory for articles to be rposted [ -d ${NEWSSPOOLDIR}/.outgoing ] && OUTGOING=${NEWSSPOOLDIR}/.outgoing/${SITE} [ -d ${NEWSSPOOLDIR}/out.going ] && OUTGOING=${NEWSSPOOLDIR}/out.going/${SITE} [ -d ${NEWSSPOOLDIR}/outgoing ] && OUTGOING=${NEWSSPOOLDIR}/outgoing/${SITE} OUTGOINGNEW=${OUTGOING}.new # temporarily used during upload of articles STATEDIR=/var/state/suck # location for suck state files OUTFILE=${STATEDIR}/rpost.${REMOTE_SERVER}.$$ # used by rpost as article after it is filtered BATCHFILE=${STATEDIR}/batch.${REMOTE_SERVER}.$$ # Name of batchfile to build for rnews or innxmit SPOOLDIR=/var/spool/suck # location for suck spool MSGDIR=${SPOOLDIR}/${REMOTE_SERVER} # where to put MultiFile articles when getting them LOGDIR=/var/log/suck # location for suck log files ERRLOG=${LOGDIR}/errlog GETNEWSLOG=${LOGDIR}/get-news.log LASTDIR=${LOGDIR}/${REMOTE_SERVER} # last get-news suck files # is the local host up and running so we can post articles we download? ${TESTHOST} ${LOCAL_SERVER} -s -e LOCAL_RESULT=$? if [ ${LOCAL_RESULT} -ne 0 ]; then echo "Bad status for the ${LOCAL_SERVER} local NNTP news server" exit 1 fi # is the remote host up and running so we can download articles? ${TESTHOST} ${REMOTE_SERVER} -N ${REMOTE_PORT} ${AUTHOPTS} -s -e REMOTE_RESULT=$? if [ ${REMOTE_RESULT} -ne 0 ]; then echo "Bad status for the ${REMOTE_SERVER} remote NNTP news server" exit 2 fi [ -d ${LASTDIR} ] || mkdir ${LASTDIR} if [ "${REMOTE_SERVER_DEFAULT}" = "${REMOTE_SERVER}" ]; then date >> ${GETNEWSLOG} echo 'get-news: download articles with the default remote server' >> ${GETNEWSLOG} if [ -f "${INNXMIT}" ]; then ${SUCK} ${REMOTE_SERVER} ${OPTS} -u ${AUTHOPTS} -bi ${BATCHFILE} -dt ${STATEDIR} -dm ${MSGDIR} -dd ${ETCDIR} -N ${REMOTE_PORT} -E ${ERRLOG} #${SUCK} ${REMOTE_SERVER} -U linuxero -P ecolsexy ${OPTS} -bi ${BATCHFILE} -dt ${STATEDIR} -dm ${MSGDIR} -dd ${ETCDIR} -N ${REMOTE_PORT} -E ${ERRLOG} else #${SUCK} ${REMOTE_SERVER} -U linuxero -P ecolsexy ${OPTS} -br ${BATCHFILE} -dt ${STATEDIR} -dm ${MSGDIR} -dd ${ETCDIR} -N ${REMOTE_PORT} -E ${ERRLOG} ${SUCK} ${REMOTE_SERVER} ${OPTS} -u ${AUTHOPTS} -br ${BATCHFILE} -dt ${STATEDIR} -dm ${MSGDIR} -dd ${ETCDIR} -N ${REMOTE_PORT} -E ${ERRLOG} fi SUCK_STATUS=$? if [ ${SUCK_STATUS} -eq 0 ]; then echo "Downloaded Articles" mv ${ETCDIR}/sucknewsrc ${ETCDIR}/sucknewsrc.old mv ${STATEDIR}/suck.newrc ${ETCDIR}/sucknewsrc if [ -f ${STATEDIR}/suck.sorted ]; then mv ${STATEDIR}/suck.sorted ${LASTDIR} fi if [ -f ${STATEDIR}/suck.killlog ]; then mv ${STATEDIR}/suck.killlog ${LASTDIR} fi if [ -f ${ETCDIR}/suckothermsgs ]; then mv ${ETCDIR}/suckothermsgs ${LASTDIR} fi fi else date >> ${GETNEWSLOG} echo 'get-news: download articles' >> ${GETNEWSLOG} if [ -f "${INNXMIT}" ]; then ${SUCK} ${REMOTE_SERVER} ${AUTHOPTS} -bi ${BATCHFILE} -dt ${STATEDIR} -dm ${MSGDIR} -dd ${ETCDIR} -p .${REMOTE_SERVER} -N ${REMOTE_PORT} -E ${ERRLOG} else ${SUCK} ${REMOTE_SERVER} ${AUTHOPTS} -br ${BATCHFILE} -dt ${STATEDIR} -dm ${MSGDIR} -dd ${ETCDIR} -p .${REMOTE_SERVER} -N ${REMOTE_PORT} -E ${ERRLOG} fi SUCK_STATUS=$? if [ ${SUCK_STATUS} -eq 0 ]; then echo "Downloaded Articles" mv ${ETCDIR}/sucknewsrc.${REMOTE_SERVER} ${ETCDIR}/sucknewsrc.${REMOTE_SERVER}.old mv ${STATEDIR}/suck.newrc.${REMOTE_SERVER} ${ETCDIR}/sucknewsrc.${REMOTE_SERVER} mv ${STATEDIR}/suck.*.${REMOTE_SERVER} ${LASTDIR} if [ -f ${ETCDIR}/suckothermsgs.${REMOTE_SERVER} ]; then mv ${ETCDIR}/suckothermsgs.${REMOTE_SERVER} ${LASTDIR} fi fi fi # now upload articles if [ -s ${OUTGOING} ]; then if [ -f "${INNXMIT}" ]; then # this is needed by INND so that the outgoing file will be # properly flushed and we have a new blank file to work with # when we are done # First mv the current one to a new file name # Since innd already has the file open, it doesn't care # about the rename. # The flush will ensure that all articles to be posted have # been written out, close off the old one (already renamed) # and create a new one. mv ${OUTGOING} ${OUTGOINGNEW} ${CTLINND} flush ${SITE} echo "reloaded ctlinnd" # location of articles if [ -d ${NEWSSPOOLDIR}/articles ]; then OUTGOINGPREFIX=${NEWSSPOOLDIR}/articles else OUTGOINGPREFIX=${NEWSSPOOLDIR} fi # outgoing articles to post ${RPOST} ${REMOTE_SERVER} -N ${REMOTE_PORT} -u ${AUTHOPTS} -b ${OUTGOINGNEW} -p ${OUTGOINGPREFIX} -f \$\$o=${OUTFILE} ${SCRIPT} \$\$i ${OUTFILE} else # outgoing articles to post ${RPOST} ${REMOTE_SERVER} -N ${REMOTE_PORT} -u ${AUTHOPTS} -b ${OUTGOING} -p ${OUTGOINGPREFIX} -f \$\$o=${OUTFILE} ${SCRIPT} \$\$i ${OUTFILE} fi if [ $? -ne 0 ]; then echo "Error remote posting" EXIT_STATUS='exit -1'; else echo "Remotely posted articles" if [ -f "${INNXMIT}" ]; then rm -f ${OUTFILE} ${OUTGOINGNEW} else rm -f ${OUTFILE} ${OUTGOING} fi fi fi echo "You can hang up the modem now" if [ -f ${BATCHFILE} ]; then # locally post articles if [ -f "${INNXMIT}" ]; then ${INNXMIT} ${LOCAL_SERVER} ${BATCHFILE} else ${RNEWS} ${LOCAL_SERVER} < ${BATCHFILE} fi if [ $? -ne 0 ]; then echo "Local posting error" exit -1; else echo "Posted Articles Locally" rm -rf ${MSGDIR} ${BATCHFILE} fi fi $EXIT_STATUS