This is setnewsconf.sh in view mode; [Download] [Up]
#! /bin/sh
#+++
# RCS setnewsconf.sh,v 1.8 1995/07/13 11:37:03 tom Exp
# title: setnewsconf.sh
# abstract: set news config according to (key,value) parameters from stdin.
# author: T.R.Hageman, Groningen, The Netherlands
# created: December 1994
# modified: (see RCS Log at end)
# copyleft:
#
# Copyright (C) 1994,1995 Tom R. Hageman.
#
# This 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.
#
# This software is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this software; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# description:
#
# This script is part of NewsConfig.app
#
#---
NEWSCONFIGAPP=$1
# =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
. ${NEWSCONFIG-/usr/local/lib/news/bin/config}
export NEWSCTL NEWSBIN NEWSARTS NEWSPATH NEWSUMASK NEWSMASTER NEWSCONFIG
PATH=$NEWSCONFIGAPP:$NEWSCTL/maint:$NEWSBIN/bin:$NEWSBIN:$NEWSPATH
export PATH
# Read the new configuration (key, value) pairs from stdin.
while read key value
do
eval "$key=\"$value\""
done
# Split NEWSFEED info into sitename and /exclusions (aliases).
NEWSFEED_NAME=`expr "$NEWSFEED" : '^\([^/:]*\).*'`
NEWSFEED_EXCLUSIONS=`expr "$NEWSFEED" : '^[^:/]*\(/[^:]*\)'`
status=1
locks=
buiddir=
trap 'rm -f $locks;trap 0;exit $status' 0 1 2 15
# Lock the news system while we're doing our dastardly deeds.
lock=$NEWSCTL/LOCK
ltemp=$lock.$$
locks=$ltemp
echo $$ >$ltemp || exit
newslock $ltemp $lock || {
sleep 5
# Try again, once.
echo $$ >$ltemp || exit
newslock $ltemp $lock || { status=${EXIT_LOCKED-99}; exit; }
}
rm -f $ltemp
locks=$lock
# Create a temp. directory to build the new configuration in.
builddir=/tmp/setnewsconf$$
rm -rf $builddir
mkdir $builddir || exit
cd $builddir || exit
# simple things first
echo $ORGANIZATION >organization || exit
echo $HOSTNAME >mailname || exit
echo $UUCPNAME >whoami || exit
[ -z "$EXPIRERMDIR" ] || touch expirermdir || exit
[ -z "$IMMEDNEWS" ] || touch rnews.immed || exit
[ -z "$ADDSIGNATURE" ] || echo $ADDSIGNATURE >addsignature || exit
# build new sys file
ORGFEED=''
if [ -r $NEWSCTL/sys ]
then
canonsys.sh $NEWSCTL/sys >sys.tmp || exit
[ -n "$NEWSFEED_NAME" ] || {
NEWSFEED_NAME=`sed -n '/^ME:/d; /^\([^:/]*\).*/{; s//\1/p; q; }' sys.tmp`
}
ORGFEED=`grep "^$NEWSFEED_NAME[:/]" sys.tmp`
# Get default values from existing entry.
[ "$NEWSFEED_EXCLUSIONS" = "/" ] &&
NEWSFEED_EXCLUSIONS=`expr "$ORGFEED" : '^[^:/]*\(/[^:]*\)'`
[ -z "$NEWSFEED_SUBSCRIPTIONS" ] &&
NEWSFEED_SUBSCRIPTIONS=`expr "$ORGFEED" : '^[^:]*:\([^:/]*\)'`
[ -z "$NEWSFEED_DISTRIBUTION" ] &&
NEWSFEED_DISTRIBUTION=`expr "$ORGFEED" : '^[^:]*:[^:/]*/\([^:]*\)'`
[ -z "$NEWSFEED_FLAGS" ] &&
NEWSFEED_FLAGS=`expr "$ORGFEED" : '^[^:]*:[^:]*:\(.*\)'`
# Defaults for my own subscriptions
MYFEED=`grep "^ME[:/]" sys.tmp`
## Only subscriptions are meaningful for receiving news.
## DISTRIBUTION=`expr "$ORGFEED" : '^[^:]*:[^:/]*\(/[^:]*\)'`
[ -z "$ACTIVEGROUPS" ] &&
ACTIVEGROUPS=`expr "$MYFEED" : '^[^:]*:\([^:/]*\)' | tr ',' ' '`
else
cat >sys.tmp <<! || exit
# $ID
#
# Only the ME line is mandatory; the others are just samples of how to do
# things. Virtually everything will need modifying for your local feeds
# and newsgroups.
# Line indicating what we are willing to receive:
ME:all
!
fi
if [ "$ACTIVEGROUPS" = "$AVAILABLEGROUPS" ]
then
SUBSCRIPTIONS=all
else
SUBSCRIPTIONS=`echo $ACTIVEGROUPS | tr ' ' ','`
fi
##[ "$ACTIVEGROUPS" = "all" ] && ACTIVEGROUPS="$AVAILABLEGROUPS"
##[ -z "$DISTRIBUTION" ] && DISTRIBUTION="/all"
if [ -n "$ALLGROUPS" ]
then
EXCEPTIONS=`echo $AVAILABLEGROUPS | tr ' ' '\012' |
gngp -av "$SUBSCRIPTIONS" | sed 's/^/!/'`
if [ -n "$EXCEPTIONS" ]
then
SUBSCRIPTIONS=all,`echo $EXCEPTIONS | tr ' ' ','`
else
SUBSCRIPTIONS=all
fi
fi
# Default values
[ "$NEWSFEED_EXCLUSIONS" = "/" -o -z "$NEWSFEED_EXCLUSIONS" ] &&
NEWSFEED_EXCLUSIONS=""
[ -z "$NEWSFEED_SUBSCRIPTIONS" ] &&
NEWSFEED_SUBSCRIPTIONS="all,!junk,!general"
[ "$NEWSFEED_DISTRIBUTION" = "/" -o -z "$NEWSFEED_DISTRIBUTION" ] &&
NEWSFEED_DISTRIBUTION="all,!local"
[ -z "$NEWSFEED_FLAGS" ] &&
NEWSFEED_FLAGS="f:"
# Normalize fields; replace spaces with commas.
# (leading and trailing spaces are already stripped automagically by read)
for field in NEWSFEED_EXCLUSIONS NEWSFEED_SUBSCRIPTIONS NEWSFEED_DISTRIBUTION
do
eval 'case "$'$field'" in #(
*\ *) '$field'=`echo "$'$field'" | sed "s/ /,/g;s/,,,*/,/g"`
esac'
done
# replace feed in sys
sed "/^ME[:\/]/c\\
ME:$SUBSCRIPTIONS$DISTRIBUTION\\
\\
# Primary newsfeed:\\
$NEWSFEED_NAME$NEWSFEED_EXCLUSIONS:$NEWSFEED_SUBSCRIPTIONS/$NEWSFEED_DISTRIBUTION:$NEWSFEED_FLAGS
/^# Primary newsfeed:\$/d
/^$NEWSFEED_NAME/d" sys.tmp >sys || exit
rm sys.tmp
# support function
zcat_maybe() { # root file name
while :
do
case "$#" in
0) break
esac
cat "$1" 2>/dev/null ||
zcat "$1".Z 2>/dev/null ||
gzcat "$1".gz 2>/dev/null ||
echo "zcat_maybe: cannot read file $1 (plain, .Z or .gz)" >&2
shift
done
}
# Create new active file by merging existing active (if any) with template
# in app wrapper. Same with newsgroups and active.times file.
ACTIVE_CURRENT=$NEWSCTL/active
[ -r $ACTIVE_CURRENT ] || ACTIVE_CURRENT=/dev/null
zcat_maybe $NEWSCONFIGAPP/active | mergeactive.sh $ACTIVE_CURRENT - |
gngp -a "$SUBSCRIPTIONS" >active || exit
NEWSGROUPS_CURRENT=$NEWSCTL/newsgroups
[ -r $NEWSGROUPS_CURRENT ] || NEWSGROUPS_CURRENT=/dev/null
zcat_maybe $NEWSCONFIGAPP/newsgroups | mergenewsgroups.sh $NEWSGROUPS_CURRENT - |
gngp -a "$SUBSCRIPTIONS" >newsgroups || exit
ACTIVE_TIMES_CURRENT=$NEWSCTL/active.times
[ -r $ACTIVE_TIMES_CURRENT ] || ACTIVE_TIMES_CURRENT=/dev/null
mergeacttimes.sh active $ACTIVE_TIMES_CURRENT |
gngp -a "$SUBSCRIPTIONS" >active.times || exit
# Provide a default "newgroupperm" config file (for newgroup and rmgroup)
# (but not for CNews Cleanup Release that supports controlperm)
[ -f $NEWSCTL/newgroupperm -o -f $NEWSCTL/controlperm ] ||
cp -p $NEWSCONFIGAPP/newgroupperm . || exit
# Move stuff in place; i.e., copy all files that have been changed to $NEWSCTL,
# while making a backup of the originals (in a backup directory).
date="`date | sed 's/^... \(.*:[0-5][0-9] \).* \(....\)\$/\1\2/'`"
backupdate=Backup_`echo $date | tr ' ' '_'`_by_NewsConfig
backupdir=$NEWSCTL/$backupdate
mkdir $backupdir || exit
# Some files have meaning solely by their presence.
for f in rnews.immed expirermdir addsignature
do
if [ -f $f ]
then
[ -f $NEWSCTL/$f ] || touch $backupdir/$f.NOT
else
[ ! -f $NEWSCTL/$f ] || mv $NEWSCTL/$f $backupdir/$f || exit
fi
done
# Move new setup in place whilst making a backup of existing setup in $NEWSCTL
for f in *
do
if [ -f $NEWSCTL/$f ]
then
cmp -s $NEWSCTL/$f $f || {
cp -p $NEWSCTL/$f $backupdir/$f &&
cp $f $NEWSCTL/$f || exit
}
else
cp $f $NEWSCTL/$f || exit
fi
done
# Try to remove the backupdir. Only succeeds if setup is unchanged.
rmdir $backupdir >/dev/null 2>&1
# Remove temporary build directory
rm -rf $builddir
# Create spool directory for principal newsfeed if it does not exist.
[ -d $NEWSARTS/out.going/$NEWSFEED_NAME ] ||
mkdirs $NEWSARTS/out.going/$NEWSFEED_NAME || exit
status=0
exit
#======================================================================
# setnewsconf.sh,v
# Revision 1.8 1995/07/13 11:37:03 tom
# add newssys locking; more strict error handling throughout;
# add ALLGROUPS support; fixed avoid-copy bug (still copied/-);
# [fixed Copyright notice]
#
# Revision 1.7 1995/01/27 04:19:01 tom
# Try to make cleanup work (still doesn't).
#
# Revision 1.6 1995/01/25 13:57:23 tom
# (NEWSFEED): normalize fields; collapse sequences of multiple spaces and
# commas into a single comma.
#
# Revision 1.5 1995/01/13 22:40:45 tom
# (NEWSFEED_SUBSCRIPTIONS,NEWSFEED_DISTRIBUTION,NEWSFEED_FLAGS): taken from
# GUI frontend.
#
# Revision 1.4 1995/01/10 04:29:36 tom
# remove distribution from ME line since it is menaingless.
#
# Revision 1.3 1995/01/02 20:41:56 tom
# (NEWSFEED_DISTRIBUTION): add !local to default;
# (zcat_maybe): simplified; (ACTIVE_EGREP): removed, use gngp instead;
#
# Revision 1.2 1994/12/28 20:04:39 tom
# Fleshed out.
#
# Revision 1.1 1994/12/20 14:41:15 tom
# Initial revision
#
#======================================================================
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.