[comp.unix.xenix] C News on SCO Xenix

chip@ateng.com (Chip Salzenberg) (06/14/89)

C News on SCO Xenix/386 2.3 works like a dream.  Notes on how to do it:

First, be sure _all_ shell scripts in the development tree that start with
"#! /bin/sh" are changed to ": use /bin/sh".  It's too bad Xenix suffers
from Not Invented Here disease; "#!" is such a nice feature.  Sigh.

Second, tell "build" that the following things are unavailable:

	ANSI stdlib.h
	fsync()
	index()
	rindex()
	symlink()

Third, Xenix setuid(geteuid()) is broken so badly that it doesn't even
return -1 when it fails!  I got around this problem by making the following
change in relay/relay.c:

	/* Xenix setuid() doesn't return error?! */
	(void) setgid(newsgid);
	(void) setuid(newsuid);
	if (getgid() != newsgid || getegid() != newsgid
	 || getuid() != newsuid || geteuid() != newsuid) {
		/* this code runs the setuid-root hack program */
	}

Fourth, you need spacefor.xenix.  I'm including it in this article as a
sharchive.  You'll need to modify the device assignment labeled "dare to be
stupid". :-)

All in all, C News works tremendously well.  I love it to pieces.
Thanks much to Geoff and Henry.

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  spacefor.xenix
# Wrapped by chip@ateng on Tue Jun 13 13:31:27 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'spacefor.xenix' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'spacefor.xenix'\"
else
echo shar: Extracting \"'spacefor.xenix'\" \(1729 characters\)
sed "s/^X//" >'spacefor.xenix' <<'END_OF_FILE'
X: use /bin/sh
X# spacefor - determine available disk space
X# About how many things of $1 bytes will fit in the available space for
X# stuff of type $2 ("incoming", "articles", "control", "outbound $3",
X# or "archive") without cramping things too badly?
X#
X# You'll have to change this -- your blocksize, minimum-free-desired amounts,
X# and df output format will probably differ, and you may need to name
X# your filesystems explicitly.
X
X# =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
X. ${NEWSCONFIG-/usr/lib/news/bin/config}
X
XPATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH
Xumask $NEWSUMASK
X
X# punt to server if necessary
Xif test -r $NEWSCTL/server
Xthen
X	server="`cat $NEWSCTL/server`"
X	me="`hostname`"
X	if test " $server" != " $me"
X	then
X		exec rsh $server "PATH=$PATH `basename $0` $*"
X		# does not return
X	fi
Xfi
X
X# head off special case
Xcase "$1" in
X0)	echo 10000 ; exit 0 ;;
Xesac
X
X# argument to df, df units, and free space desired (in df units)
Xdfunit=512			# default unit (bytes)
Xcase "$2" in
Xincoming)	arg="$NEWSARTS/in.coming" ; desire=5000 ;;
Xarticles)	arg="$NEWSARTS" ; desire=5000 ;;
Xcontrol)	arg="$NEWSCTL" ; desire=3000 ;;
Xoutbound)	arg="/usr/spool/uucp" ; desire=10000 ;;	# ignore $3
Xarchive)	arg="$NEWSARTS" ; desire=1 ;;		# system-specific
X*)		echo "$0: bad type argument \`$2'!!" >&2
X		exit 2 ;;
Xesac
X
X# dare to be stupid
Xarg=/dev/root
X
X# this is set up for the stupid System V df
Xdf $arg | sed "s/.*:/: :/" | awk "BEGIN { nf = 6 ; nr = 1 }
X	NR == nr && NF >= nf {
X		nb = (\$3 - $desire) * $dfunit / $1
X		if (nb > 10000)
X			nb = 10000	# ensure representable as integer
X		nb = int(nb)
X		if (nb <= 0)
X			print 0
X		else
X			print nb
X		exit
X	}
X	NR == nr && NF < nf {		# idiotic Berkeley continuation
X		nr += 1
X		nf -= 1
X	}"
END_OF_FILE
if test 1729 -ne `wc -c <'spacefor.xenix'`; then
    echo shar: \"'spacefor.xenix'\" unpacked with wrong size!
fi
chmod +x 'spacefor.xenix'
# end of 'spacefor.xenix'
fi
echo shar: End of shell archive.
exit 0
-- 
You may redistribute this article only to those who may freely do likewise.
Chip Salzenberg         |       <chip@ateng.com> or <uunet!ateng!chip>
A T Engineering         |       Me?  Speak for my company?  Surely you jest!