#!/usr/bin/sh #---------------------------------------------------------------------------- # /var/install/bin/sn-newng - add a newsgroup # # Creation : 2001 chriswue # Last update: $Id$ # # Copyright (c) 2001-2003 by Christian Wuerdig eisfair(at)chriswue(dot)de # Copyright (c) 2010-@@YEAR@@ Holger Bruenjes, holgerbruenjes(at)gmx(dot)net # # 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. #---------------------------------------------------------------------------- . /var/install/include/eislib . /etc/config.d/sn . /var/lib/sn/sn.info tmp="/tmp/.snserv" defmax="200" defexpt="1m" # --------------------------------------------------------------------------- # check if console minium 80x24 # --------------------------------------------------------------------------- check_screensize case ${?} in 0) : ;; *) exit 1 ;; esac # include passwdlib . /var/install/include/passwdlib # --------------------------------------------------------------------------- # create login # --------------------------------------------------------------------------- create_login() { ns_server="${1}" if [ -n "${ns_server}" ] then echo ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${ASK} "Login required" > ${ask_tmpfile} rc=${?} read yesno < ${ask_tmpfile} rm -f ${ask_tmpfile} # if ask break, ask returned 255 if [ ${rc} = 255 ] then exit 0 fi if [ "${yesno}" = "yes" ] then cd ${OUTGOING}/${ns_server}:119 echo ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${ASK} "Username" "" "*" > ${ask_tmpfile} rc=${?} read login < ${ask_tmpfile} rm -f ${ask_tmpfile} # if ask break, ask returned 255 if [ ${rc} = 255 ] then exit 0 fi # no username is given if [ -z "${login}" ] then exit 0 fi # function to get and check password # returned if true # _passwd=true get_passwd if "${_passwd:-false}" then echo ${login} >username echo ${password} >password cp /usr/sbin/SNHELLO SNHELLO chmod 600 username password chown news:news username password SNHELLO fi fi fi } # --------------------------------------------------------------------------- # add group # --------------------------------------------------------------------------- add_group() { touch /var/spool/news/.noservice su news -s /usr/bin/sh -c "/usr/sbin/snnewgroup $1 $2 2>>$SN_LOG_DIR/$SN_CONF_LOG" echo $defmax > /var/spool/news/$1/.max chown news:news /var/spool/news/$1/.max echo $defexpt > /var/spool/news/$1/.expire chown news:news /var/spool/news/$1/.expire touch /var/spool/news/$1/.compress chown news:news /var/spool/news/$1/.compress rm -f /var/spool/news/.noservice mecho -n --info "Newsgroup" mecho -n " '${1}'" mecho -n --info " on server" mecho -n " '${2:-local}'" mecho --info " added." } # --------------------------------------------------------------------------- # main # --------------------------------------------------------------------------- SN_TITLE="Add newsgroup" SN_FLAGS='--indent 12 --spread' SN_CAPTION_1='--info "Add new NG on"' SN_COLS='40' SN_ROWS=2 SN_1_1="\"Existing newsserver (or local NG)\"" SN_2_1="\"New newsserver\"" export SN_TITLE export SN_FLAGS export SN_CAPTION_1 export SN_COLS export SN_ROWS export SN_1_1 export SN_2_1 # marker for newsserver exists exists=0 SN_QUESTION='Select' export SN_QUESTION ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${CHOOSE} SN 1 > ${ask_tmpfile} rc=${?} read answer < ${ask_tmpfile} rm -f ${ask_tmpfile} # if ask break, ask returned 255 if [ ${rc} = 255 ] then answer=0 fi case "${answer}" in '') rm -f ${tmp} exit 0 ;; 0) rm -f ${tmp} exit 127 ;; 1) SN_TITLE="Local news server" export SN_TITLE unset SN_CAPTION_1 /var/install/bin/sn-getserver local ret=${?} ns='' if [ -f ${tmp} ] then read ns < ${tmp} rm -f ${tmp} else exit ${ret} fi exists=1 break ;; 2) clrhome mecho --info "Enter new news server" echo ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${ASK} "Server" "" "*" > ${ask_tmpfile} rc=${?} read ns < ${ask_tmpfile} rm -f ${ask_tmpfile} # if ask break, ask returned 255 if [ ${rc} = 255 ] then exit 0 fi case ${ns} in '') rm -f ${tmp} exit 0 ;; *) break ;; esac esac tmp="/tmp/.sngl" sdir="${OUTGOING}/$ns:119" if [ -f $sdir/grouplist ] then echo ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${ASK} "newsgroup (regex possible):" "" "*" > ${ask_tmpfile} rc=${?} read regex < ${ask_tmpfile} rm -f ${ask_tmpfile} # if ask break, ask returned 255 if [ ${rc} = 255 ] then exit 0 fi grep "${regex}" ${sdir}/grouplist > ${tmp} SN_COLS='60*' SN_ROWS=0 export SN_COLS while read line do SN_ROWS=$((${SN_ROWS} + 1)) eval ng_${SN_ROWS}='"$line"' eval SN_${SN_ROWS}_1=\"${line}\" export SN_${SN_ROWS}_1 done < $tmp rm -f $tmp SN_ROWS=$((${SN_ROWS} + 1)) eval ng_${SN_ROWS}='"all.groups"' eval SN_${SN_ROWS}_1="all.groups" export SN_${SN_ROWS}_1 export SN_ROWS if [ "${SN_ROWS}" -gt 50 ] then echo ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${ASK} "Display all '${SN_ROWS}' possibilities" > ${ask_tmpfile} rc=${?} read yesno < ${ask_tmpfile} rm -f ${ask_tmpfile} # if ask break, ask returned 255 if [ ${rc} = 255 ] then exit 0 fi if [ "${yesno}" = "no" ] then exit 0 fi fi while [ 1 ] do SN_TITLE="Subscribe newsgroups" SN_SUBTITLE="\n( $((${SN_ROWS} - 1)) groups found matching '${regex}' )" SN_FLAGS='--indent 12 --spread' SN_QUESTION='Select' export SN_TITLE export SN_SUBTITLE export SN_FLAGS export SN_QUESTION ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${CHOOSE} SN 1 > ${ask_tmpfile} rc=${?} read answer < ${ask_tmpfile} rm -f ${ask_tmpfile} # if ask break, ask returned 255 if [ ${rc} = 255 ] then answer=0 fi unset SN_SUBTITLE case "${answer}" in '') exit 0 ;; 0) exit 127 ;; *) eval group='$ng_'${answer} if [ "$group" = "all.groups" ] then n=0 numb=$((${SN_ROWS} - 1)) while [ "$n" -lt "$numb" ] do n=$(($n + 1)) eval group='$ng_'$n add_group "$group" "$ns" done anykey break else add_group "$group" "$ns" anykey fi ;; esac done else echo ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${ASK} "newsgroup (no regex possible due to missing grouplist):" "" "*" > ${ask_tmpfile} rc=${?} read ng < ${ask_tmpfile} rm -f ${ask_tmpfile} # if ask break, ask returned 255 if [ ${rc} = 255 ] then exit 0 fi if [ "$ns" = "local" ] then ns="" fi case "${ng}" in '') exit 0 ;; esac add_group "$ng" "$ns" if [ "$exists" = "1" ] then mecho --info "newsserver exists, skipping authorisation" anykey else create_login "${ns}" fi fi exit 0 # --------------------------------------------------------------------------- # end # ---------------------------------------------------------------------------