v13i072: A BBS written in /bin/sh, Part02/02

Rich Salz rsalz at bbn.com
Mon Feb 29 04:13:34 AEST 1988


Submitted-by: Rob DeMarco <ncoast!robertd>
Posting-number: Volume 13, Issue 72
Archive-name: sbbs/part02

# This is a shell archive.  Save this into a file, edit it
# and delete all lines above this comment.  Then give this
# file to sh by executing the command "sh file".  The files
# will be extracted into the current directory owned by
# you with default permissions.
#
# The files contained herein are:
#             access            bbs           chat        control
#                cwd             db           edit      initial.c
#            install          killm         lock.c      login-sig
#            mailbox          medit          mkbul          mkusr
#               news           post        program         rescue
#               sbbs       sendmail            udl         udlnew
#             update          users            usr              z
#     
#
echo 'x - access'
sed 's/^X//' <<'________This_Is_The_END________' >>access
X#! /bin/sh
X# Access permisions for message bases
X
Xif [ $access -gt 3 ] ; then
X   exit 0
Xfi
X
Xa=`grep "^b$1=" $dir/misc/config`
Xif [ -z "$a" ] ; then
X  exit 0
Xfi
X
Xstring=`echo $a | awk -F= '{print $2}'`
X
Xtype=`echo $string | awk -F, '{print $1}'`
X
Xif [ "$type" = "restrict" ] ; then
X  name=`echo $string|grep ,$bbs_name,`
X  if [ -z "$name" ] ; then
X    echo "This base requires that you be on a\nrestricted list. Ask your sysop for more\ndetails."
X    exit 1
X  else
X    exit 0
X  fi
Xfi
X
Xif [ "$type" = "access" ] ; then
X  axess=`echo $string | grep ,$access,`
X  if [ -z "$axess" ] ; then
X    echo "This base requires that you have the\nfollowing accesses:$string. Please\ncontact your sysop for more details."
X    exit 1
X  else
X
X    exit 0
X  fi
Xfi
X
Xecho "Unrecognized variable value in config."
Xexit 2
________This_Is_The_END________
echo 'x - bbs'
sed 's/^X//' <<'________This_Is_The_END________' >>bbs
X#! /bin/sh
X# SBBS - revision
X# New bbs setup.
X# 
X# SBBS - By Rob DeMarco
X# Copyright(C) 1987 By Rob DeMarco
X# All rights reserved.
X
X# New revision started on June 16,
X# 1987
X
Xrflag=0
Xbase=General ;basen=1;export base basen
Xflag=0
X$dir/programs/access 1
Xif [ $? -eq 1 ] ; then
X   echo "Access to message bases is not allowed."
X   exit
Xfi
X
Xecho "\n\n"
X
Xwhile : ; do
X
Xif [ "$gflag" = "x" ] ; then
X   if [ $sflag = 1 ] ; then
X      global=`expr $global + 1`
X   fi
X   if [ $global -gt $bc ] ; then
X      gflag=z
X   fi 
X   if [ $sflag = 1 ] ; then
X      sflag=0 
X      if [ $skflag = 0 ] ; then
X         command=n
X      else
X         skflag=0 ; command=""
X      fi
X   else
X      sflag=1 ; command=j$global
X      echo "Examining base #$global"
X   fi
Xelse
Xecho "$base) \c"
Xread command
Xfi
Xskflag=0
X
Xcmd=`echo "$command" | cut -c1`
X
Xif [ "$cmd" = "" ] ; then
X  continue
Xfi
X
X
Xif [ "$cmd" = E -o "$cmd" = e ] ; then
X  exit
Xfi
X
Xif [ "$cmd" = K -o "$cmd" = k ] ; then
X  $dir/programs/killm
X  continue
Xfi
X
Xif [ "$cmd" = "?" ] ; then
X  cat $dir/misc/com
X  continue
Xfi
X
Xif [ $cmd = C -o $cmd = c ];then
X  if [ "$access" -lt 2 ];then
X    echo "Only the SysOp or Co-SySops may create\nnew boards. Contact them if you wish\nto."
X    continue
X  fi
X  while : ; do
X  echo "Enter the name of this board, 40 char."
X  echo "max."
X  echo "{========1=========2=========3========}"
X  read name
X  name=`echo "$name" | cut -c-40`
X  name=`echo "$name" | tr -d ":"`
X  echo "Board name is $name."
X  echo "Correct? <Y> \c"
X  read yn
X  yn=`echo $yn | cut -c1`
X  if [ "$yn" = N -o "$yn" = n ];then
X    continue
X  fi
X  break
X  done
X  bn=`ls $dir/bbs | wc -l`
X  bn=`echo $bn`
X  bn=`expr $bn + 1`
X  cr="$bn:$name"
X  echo "$cr" >> $dir/misc/bbsrc
X  mkdir $dir/bbs/$bn
X  continue
Xfi
X
Xif [ $cmd = L -o $cmd = l ];then
X  cat $dir/misc/bbsrc
X  continue
Xfi
X
Xif [ $cmd = M -o $cmd = m ];then
X   echo "Board #\tMessage Base manager:"
X   grep "^mbm" $dir/misc/config | tr = "	" | cut -c4- | sort -n
Xcontinue
Xfi
X
Xif [ $cmd = J -o $cmd = j ];then
X  b=`echo "$command" | cut -c2-`
X  l=`ls $dir/bbs | wc -l`
X  l=`echo $l`
X  if [ "$b" = "" ];then
X    while : ; do
X    echo "Jump to what base (1-$l)? \c"
X    read b
X    b=`echo $b | tr -d "!"`
X    if [ "$b" = "" ];then
X      continue
X    fi
X    break
X    done
X  fi
X  b=`expr $b + 0 2> /dev/null`
X  if [ $? != 0 ];then
X    b=1
X    continue
X  fi
X  if [ $b -lt 1 -o $b -gt $l ];then
X    echo "That board doesn't exist."
X    continue
X  fi
X  $dir/programs/access $b
X  if [ $? = 1 ] ; then
X    skflag=1
X    continue
X  fi
X  basen=$b ; export basen
X  base="`grep \"^$basen:\" $dir/misc/bbsrc | awk -F: '{print $2}'`"
X  export base
X  continue
Xfi
X
Xif [ "$cmd" = P -o "$cmd" = p ] ; then
X  $dir/programs/post
X  continue
Xfi
X
Xif [ $cmd = I -o $cmd = i ];then
X  number=`ls $dir/bbs/$basen | wc -l`
X  if [ $number = 0 ];then
X    echo "They're no messages in this base."
X    continue
X  fi
X  echo "Read what message number? (1): \c"
X  read rnumber
X  if [ "$rnumber" = "" ];then
X    rnumber=1
X  fi
X  rnumber=`expr $rnumber + 0 2> /dev/null`
X  if [ $? != 0 ] ; then
X    rnumber=1
X  fi
X  if [ $rnumber -lt 1 ] ; then
X    rnumber=1
X  fi
X  if [ $rnumber -gt $number ];then
X    echo "That message doesn't exist."
X    continue
X  fi
X  $cls
X  number=`echo $number`
X  echo "{Message $rnumber of $number}"
X  cat $dir/bbs/$basen/$rnumber
X  $dir/programs/update $rnumber
X  continue
Xfi
X
Xif [ $cmd = S -o $cmd = s ] ; then
X   a=`ls $dir/bbs/$basen | wc -l`
X   a=`echo $a`
X   if [ $a -eq 0 ] ; then
X      echo "They're no messages in this base."
X      continue
X   fi
X   echo "Start scanning (1): \c"
X   read scan
X   scan=`expr $scan + 0 2> /dev/null`
X   if [ $? -ne 0 ] ; then
X      scan=1
X   fi
X   if [ $scan -gt $a ] ; then
X      scan=1
X   fi
X   while [ $scan -le $a ] ; do
X         echo "{Message $scan of $a}"
X         sed -n '1,3p' $dir/bbs/$basen/$scan
X         echo "---------------------------------------"
X         echo "[ Q to quit, <RETURN> to continue ] \c"
X         read scanf
X         scanf=`echo $scanf | tr -d "!"`
X         if [ "$scanf" = Q -o "$scanf" = q ] ; then
X           continue 2
X         fi
X         scan=`expr $scan + 1`
X   done
X   continue
Xfi
X
Xif [ $cmd = Q -o $cmd = q ] ; then
X   a=`ls $dir/bbs/$basen | wc -l`
X   if [ $a -eq 0 ] ; then
X      echo "They're no messages in this base."
X      continue
X   fi
X   echo "Start scanning (1): \c"
X   read scan
X   scan=`expr $scan + 0 2> /dev/null`
X   if [ $? -ne 0 ] ; then
X      scan=1
X   fi
X   if [ $scan -gt $a ] ; then
X      scan=1
X   fi
X   while [ $scan -le $a ] ; do
X         wc=`cat $dir/bbs/$basen/$scan | wc -l`
X         if [ $wc -eq 1 ] ; then
X            echo "$scan\t<KILLED>"
X            scan=`expr $scan + 1`
X            continue
X         else
X            echo "$scan\t\c"
X            sed -n '2p' $dir/bbs/$basen/$scan
X         fi
X         scan=`expr $scan + 1`
X   done
X   continue
Xfi
X
Xif [ "$cmd" = O -o "$cmd" = o ] ; then
X   $dir/programs/medit
X   continue
Xfi
X
Xif [ $cmd = Z -o $cmd = z ] ; then
X   $dir/programs/z
X   continue
Xfi
X
Xif [ $cmd = G -o $cmd = g ] ; then
X   gflag=x ; bc=`ls $dir/bbs | wc -l`
X   bc=`echo $bc` ; sflag=0 ; global=1
X   continue
Xfi
X
Xif [ $cmd = N -o $cmd = n ];then
X  if [ ! -f $dir/new/$bbs_name ];then
X    echo > $dir/new/$bbs_name
X  fi
X  info=`grep "^$basen:" $dir/new/$bbs_name`
X  if [ "$info" = "" ] ; then
X    echo "$basen:0" >> $dir/new/$bbs_name
X    mp=1
X  else
X    mp=`echo "$info" | awk -F: '{print $2}'`
X    mp=`expr $mp + 1`
X  fi
X    tst=`ls $dir/bbs/$basen|wc -l`
X    if [ $mp -gt $tst ];then
X      echo "They're no new messages."
X      continue
X    fi
X  cmd=F
X  f=x
X  number=`ls $dir/bbs/$basen|wc -l`
Xfi
X
Xif [ "$cmd" != "F" -a "$cmd" != "f" -a "$cmd" != R -a "$cmd" != r -a "$cmd" != N -a "$cmd" != n ] ; then
X   continue
Xfi
Xif [ "$f" != x ] ; then
X  if [ $cmd = F -o $cmd = f -o $cmd = R -o $cmd = r ] ; then
X    f=_
X  fi
Xfi
X
Xif [ "$f" = _ ];then
X  number=`ls $dir/bbs/$basen | wc -l`
X  if [ $cmd = F -o $cmd = f ];then
X    default=1
X  fi
X  if [ $cmd = R -o $cmd = r ] ; then
X    default=$number
X  fi
X  if [ $number = 0 ] ; then
X    continue
X  fi
X  default=`echo $default`
X  echo "Start at message number ($default): \c"
X  read mp
X  if [ "$mp" = "" ];then
X    mp=$default
X  fi
X  mp=`expr $mp + 0 2> /dev/null`
X  if [ $? != 0 ] ; then
X    mp=1
X  fi
X  if [ $mp -lt 1 ];then
X    mp=1
X  fi
X  if [ $mp -gt $number ];then
X    echo "That message doesn't exist."
X    continue
X  fi
Xfi
Xwhile : ; do
X     $cls
X     number=`echo $number`
X     echo "{Message $mp of $number}"
X     if [ "$rot13" = 1 ] ; then
X        rot13=0
X        sed -n '1,5p' $dir/bbs/$basen/$mp
X        sed -n '6,$p' $dir/bbs/$basen/$mp | tr "[A-M][N-Z][a-m][n-z]" "[N-Z][A-M][n-z][a-m]" 
X     else
X        cat $dir/bbs/$basen/$mp
X     fi
X     $dir/programs/update $mp
X  echo "[R]eply [A] Read Again [N]ext [Q]uit\n[X] Read as rot13 message <N>: \c"
X  read o
X  o=`echo $o | cut -c1`
X  if [ "$o" = "" ];then
X    o=N
X  fi
X  if [ $o = A -o $o = a ];then
X    continue
X  fi
X  if [ $o = X -o $o = x ];then
X    rot13=1
X    continue
X  fi
X  if [ $o = Q -o $o = q ];then
X    $dir/programs/update $mp
X    continue 2
X  fi
X  if [ $o = R -o $o = r ];then
X    t=`cat $dir/bbs/$basen/$mp | wc -l`
X    if [ $t = 1 ];then
X      echo "You can not reply to a killed \n message."
X      rflag=1
X      continue 
X    fi
X    echo "Is this [A](Private) or [B]public?<B> \c"
X    read pop
X    if [ "$pop" = A -o "$pop" = a ];then
X      arg1="`sed -n 1p $dir/bbs/$basen/$mp`"
X      arg1=`echo "$arg1" | cut -c10-`
X      arg1=`echo "$arg1" | awk -F\( '{print $1}'`
X      arg1=`echo "$arg1" | cut -c2-`
X      subj="`sed -n 2p $dir/bbs/$basen/$mp`"
X      subj=`echo "$subj"|cut -c10-`
X      $dir/programs/sendmail $arg1 "$subj" $mp
X    else
X      subject="`sed -n 2p $dir/bbs/$basen/$mp`"
X      subject=`echo "$subject" | cut -c10-`
X      sub=`echo "$subject"|cut -c-4`
X      if [ "$sub" != "Re: " ];then
X        subject="Re: $subject"
X      fi
X
X      flag=1 ; xcmd=$cmd ; cmd=P ; $dir/programs/post "$subject" $dir/bbs/$basen/$mp
X      flag=0
X      cmd=$xcmd
X      if [ $rflag = 0 ];then
X        number=`expr $number + 1`
X      fi
X      if [ $number -gt `ls $dir/bbs/$basen | wc -l` ];then
X        number=`expr $number - 1`
X        rflag=0
X      fi
X    fi
X  fi
X  if [ $cmd = R -o $cmd = r ];then
X    mp=`expr $mp - 1`
X    if [ $mp -lt 1 ];then
X      echo "Scan complete."
X      continue 2
X    fi
X    continue
X  else
X    mp=`expr $mp + 1`
X    if [ $mp -gt $number ];then
X      echo "Scan complete."
X      continue 2
X    fi
X    continue
X  fi
Xdone
Xecho "Illegal command."
Xdone
________This_Is_The_END________
echo 'x - chat'
sed 's/^X//' <<'________This_Is_The_END________' >>chat
X#! /bin/sh
X# Shell script for chat
X
Xecho "ID\tName"
Xecho "--\t----"
Xawk -F: '{print $1 "\t" $2}' $dir/misc/usr
Xecho "Enter user id to chat with: \c"
Xread y
Xy=`echo $y | tr -d "!"`
Xa=`grep "^$y:" $dir/misc/usr`
X
Xif [ "$a" = "" ] ; then
X  echo "No such user on."
X  exit 1
Xfi 
Xy=`echo $a | awk -F: '{print $3}'`
Xecho "Message from UID #$bbs_name on tty\n$tty.Choose option T from $bbs main." > $y
Xif [ $? != 0 ] ; then
X  echo "Permision to chat is denied."
X  exit
Xfi
X
Xecho "Enter message - line by line. Press"
Xecho "CTRL-D when finshed."
X
Xwhile : ; do
X echo ":\c"
X read msg || break
X echo "$msg" > $y
Xdone
X
Xecho "Message/chat terminated."
Xecho "    [ END OF MESSAGE ]" > $y
________This_Is_The_END________
echo 'x - control'
sed 's/^X//' <<'________This_Is_The_END________' >>control
X#! /bin/sh
X# Inhibit or allow message/chat
X# request.
X
Xecho "<N>o messages from other users."
Xecho "<Y>es, allow messages from other users."
Xread y
Xy=`echo $y | tr "[A-Z]" "[a-z]"`
Xy=`echo $y | tr -d "!"`
Xif [ "$y" != n -a "$y" != y ] ; then
X  echo "N or Y."
X  exit 1
Xfi
X
Xif [ "$y" = n ] ; then
X   chmod og-rwx `tty`
Xelse
X   chmod og+wrx `tty`
Xfi
________This_Is_The_END________
echo 'x - cwd'
sed 's/^X//' <<'________This_Is_The_END________' >>cwd
X#! /bin/sh
X# Change Password
X
Xstty -echo
Xecho "Enter your current password: \c"
Xpwd="`line | tr \"[A-Z]\" \"[a-z]\"`"
Xecho "\n"
Xif [ `echo "$pwd\c" | wc -c` -eq 1 ];then
Xpwd=`echo "$pwd" | tr -d "!"`
Xfi
Xif [ -z "$pwd" ] ; then 
X  echo "Password change is aborted."
X  stty echo
X  exit
Xfi
X
X
Xpid=$$
Xecho "$pwd" > /tmp/sbbs.buf.$pid
Xpwd=`crypt "$pwd" < /tmp/sbbs.buf.$pid`
Xrm /tmp/sbbs.buf.$pid
Xcpwd=`fgrep -x "$bbs_name $pwd" $dir/admin/profile/logins`
X
Xif [ "$cpwd" = "" ] ; then
X  echo "Sorry."
X  stty echo
X  exit
Xfi
X
Xecho "Enter new password: \c"
Xnpwd="`line | tr \"[A-Z]\" \"[a-z]\"`"
Xecho "\n"
Xecho "Enter new password again: \c"
Xntest="`line | tr \"[A-Z]\" \"[a-z]\"`"
Xecho "\n"
X
Xif [ "$ntest" != "$npwd" ] ; then
X   echo "Aborted."
X   stty echo
X   exit
Xfi
X
X
X
Xif [ -z "$npwd" ]; then
X  echo "Password change aborted."
X  stty echo
X  exit
Xfi
X
Xpid=$$
Xecho "$npwd" > /tmp/sbbs.buf.$pid
Xnpwd=`crypt "$npwd" < /tmp/sbbs.buf.$pid`
Xrm /tmp/sbbs.buf.$pid
X
Xed - $dir/admin/profile/logins << EOE
XH
X/^$bbs_name /d
Xw
XEOE
Xecho "$bbs_name $npwd" >> $dir/admin/profile/logins
Xecho "Password has been changed."
Xstty echo
________This_Is_The_END________
echo 'x - db'
sed 's/^X//' <<'________This_Is_The_END________' >>db
X#! /bin/sh
X# Display Bulletin (db)
X
X
Xnob=`ls $dir/bulletins | wc -l`
X
Xif [ $nob = 0 ] ; then
X  exit
Xfi
X
Xcb=1
X
Xwhile [ $cb -le $nob ] ; do
X  while : ; do
X    echo "Bulletin #$cb - read? \c"
X    read yn
X    yn=`echo $yn | tr -d "!"`
X    yn=`echo $yn | cut -c1`
X
X    if [ "$yn" = N -o "$yn" = n ]; then
X      break
X    fi
X
X    if [ "$yn" = Y -o "$yn" = y ]; then
X      cat $dir/bulletins/$cb
X      echo "Hit <ENTER> to go on: \c"
X      read junk
X      break
X    fi
X    echo "Please enter Yes or No"
X    continue
X  done
X  cb=`expr $cb + 1`
Xdone
________This_Is_The_END________
echo 'x - edit'
sed 's/^X//' <<'________This_Is_The_END________' >>edit
X#! /bin/sh
X# Editor
X
Xwhile : ; do
X
Xecho "SBBS Editor) \c"
Xcmd=`line | tr -d "!"`
Xcmd="`echo \"$cmd\" | cut -c1`"
X
Xif [ "$cmd" = "" ];then
X  continue
Xfi
X
Xif [ "$cmd" = "?" ] ; then
X  cat $dir/misc/ecom
X  continue
Xfi
X
Xif [ $cmd = C -o $cmd = c ];then
X  echo "(continue)"
X  exit 1
Xfi
X
Xif [ $cmd = P -o $cmd = p ];then
X  echo "UNIX spell checker:not 100% accurate."
X  echo "---------------{spelling errors}------"
X  echo ` spell $1`
X  continue
Xfi
X
Xif [ $cmd = A -o $cmd = a ];then
X  echo "---------ABORT---------"
X  echo "Do you realy want to do this?"
X  echo "<N>: \c"
X  read yn
X  yn=`echo $yn | cut -c1`
X  if [ "$yn" = Y -o "$yn" = y ];then
X    echo "-<ABORT>-"
X    rm $1
X    exit 2
X  fi
X  echo "ABORT was aborted."
X  continue
Xfi
X
Xif [ $cmd = S -o $cmd = s ];then
X  echo "Saving message..."
X  if [ "$2" != "" ];then
X    $dir/programs/lock /tmp/sbbs.pst.lock
X    ml=`ls $dir/bbs/$basen|wc -l`
X    ml=`expr $ml + 1`
X    cat $1 > $dir/bbs/$basen/$ml 
X    rm $1
X    rm /tmp/sbbs.pst.lock
X  else
X    exit 3
X  fi
X  echo "Message saved..."
X  exit 
Xfi
X
Xif [ $cmd = L -o $cmd = l ];then
X  l=`cat $1|wc -l`
X  l=`expr $l - 5`
X  if [ $l -eq 0 ];then
X    continue
X  fi
X  while : ; do
X    echo "A)ll   R)ange: \c"
X    read x
X    x=`echo $x | cut -c1`
X    if [ -z "$x" ] ; then
X      continue
X    fi
X    if [ $x = A -o $x = a ] ; then
X      start=1 ; end=$l
X      begin=1
X    else
X      echo "Start at: \c"
X      read start
X      begin="$start"
X      if [ -z "$start" ] ; then
X        continue
X      fi
X      start=`expr $start + 0` 2> /dev/null 
X      if [ $? -ne 0 ] ; then
X        echo "Bad number."
X        continue
X      fi
X      if [ $start -gt $l -o $start -lt 1 ] ; then
X        echo "Out of range."
X        echo "(1-$l)"
X        continue
X      fi 
X      echo "End at: \c"
X      read end
X      if [ -z "$end" ] ; then
X        continue
X      fi 
X      end=`expr $end + 0` 2> /dev/null
X      if [ $? -ne 0 ] ; then
X        echo "Bad number."
X        continue
X      fi 
X      if [ $end -lt $start -o $end -gt $l ] ; then
X        echo "Bad range."
X        continue
X      fi
X    fi
X    break
X    done
X
X    file=/tmp/sbbs.tmp.$$
X    # start=`expr $start + 5`
X    # end=`expr $end + 5`
X
X    sed -n '6,$p' $1 >$file
X
Xed - $file << Z
X$start,${end}n
XZ
X
X    rm $file
X    string=""
X  continue
Xfi
X
Xif [ $cmd = E -o $cmd = e ];then
X  echo "Edit what line? \c"
X  read l
X  l=`echo $l`
X  if [ "$l" = "" ];then
X    continue
X  fi
X  l=`expr $l + 5` 2> /dev/null
X  if [ $? -ne 0 ];then
X    echo "Illegal number."
X    continue
X  fi
X  wc=`cat $1|wc -l`
X  if [ $l -gt $wc ];then
X    echo "Range out of bounds."
X    continue
X  elif [ $l -lt 6 ];then
X    echo "Range out of bounds."
X    continue
X  fi
X  echo "Old line reads"
X  ed - $1 <<- EOS
X  $l p
XEOS
X  echo "Enter new line"
X  read qr
X  ed - $1 <<- EOS
X  $l a
X$qr
X.
X  $l d
X  w
XEOS
Xcontinue
Xfi
X
Xif [ $cmd = D -o $cmd = d ];then
X  echo "Delete what line? \c"
X  read l
X  l=`expr $l + 5`
X  if [ $? -ne 0 ];then
X    echo "Illegal number."
X    continue
X  fi
X  wc=`cat $1|wc -l`
X  if [ $l -lt 6 ];then
X    echo "Range out of bounds."
X    continue
X  elif [ $l -gt $wc ];then
X    echo "Range out of bounds."
X    continue
X  fi
X  ed - $1 <<- EOS
X  $l d
X  w
XEOS
X  continue
Xfi
X
Xif [ $cmd = I -o $cmd = i ] ; then
X  echo "Insert at what line? \c"
X  read insert
X  insert=`expr $insert + 0 2> /dev/null`
X  if [ $? -ne 0 ] ; then
X    echo "Bad number."
X    continue
X  fi
X  insert_limit=`cat $1 | wc -l`
X  insert_limit=`expr $insert_limit - 5`
X
X  if [ $insert -gt $insert_limit -o $insert -lt 1 ];then
X    echo "Out of range."
X    continue
X  fi
X  echo "Start inserting now. Type CTRL-D on a\nblank space to get to editor."
X  file=/tmp/sbbs.tpi.$$
X  cat > $file
X  {
X   ed - $1 << EOS
X   $insert+5,\$p
X   $insert+5,\$d
X   w
XEOS
X  } >> $file
X  cat $file >> $1
X  rm $file
X  continue
Xfi
X
Xif [ $cmd = R -o $cmd = r ] ; then
X   file=/tmp/sbbs.rot.$$
X   sed -n '1,5p' $1 > $file
X   sed -n '6,$p' $1 | tr "[a-m][n-z][A-M][N-Z]" "[n-z][a-m][N-Z][A-M]" >> $file
X   mv $file $1
X   continue
Xfi   
Xecho "Illegal command."
Xdone
________This_Is_The_END________
echo 'x - initial.c'
sed 's/^X//' <<'________This_Is_The_END________' >>initial.c
X
X /* Initial "shell" */
Xmain()
X{
X
X  /* Fake shell name */
X
X  execl ("/bin/sh", "sbbs", "-c", "/u/robertd/lib/sbbs/programs/login-sig", (char *) 0);
X}
________This_Is_The_END________
echo 'x - install'
sed 's/^X//' <<'________This_Is_The_END________' >>install
X#! /bin/sh
X# Install version 1.0
X
Xdir=/u/robertd/lib/sbbs ; export dir
Xecho "Install version 1.0"
Xecho "\n\n"
Xecho 'Please enter sbbs $home directory: \c'
Xread home
X
Xecho "Creating directories..."
Xmkdir $home/admin
Xmkdir $home/admin/profile
Xmkdir $home/bbs
Xmkdir $home/bbs/1
Xmkdir $home/udl
Xmkdir $home/bulletins
Xmkdir $home/misc
Xmkdir $home/mail
Xmkdir $home/udl/new
Xmkdir $home/new
X
Xecho "Initializing files..."
X
Xecho "1:General" > $home/misc/bbsrc
Xecho "\c" > $home/misc/prlib
Xecho "\c" > $home/misc/config
Xecho "\c" > $home/misc/udlrc
Xecho "\c" > $home/admin/profile/lastcaller
Xecho "\c" > $home/admin/profile/logins
Xecho "\c" > $home/admin/profile/members
Xecho "\c" > $home/admin/profile/log
Xecho "\c" > $home/admin/profile/newusers
Xecho "\c" > $home/misc/usr
Xecho "\c" > $home/admin/profile/cmdlog
Xecho "\c" > $home/misc/info
Xecho "\c" > $home/misc/closing
Xecho "\c" > $home/misc/openmes
Xecho "\c" > $home/misc/newnews
Xecho "1:Ascii:echo Recieving buffer. Begin. Send CTRL-D when finished. ; cat >> " > $home/misc/protocols.up
Xecho "1:Ascii:echo Prepare to recieve. ; sleep 10 ; cat" > $home/misc/protocols.down
Xcat << EOH > $home/misc/main_menu
X
X    (A)dministration shell              (B) Post Bulletins
X    (C)hange Password                   (D)ataBases
X    (E)xit from SBBS                    (I)nformation
X    (L)ist users                        (M)essage bases
X    (O)pening bulletins                 (P)rogram menu
X    (Q) Allow/disallow chat requests    (R)ead private mail to you
X    (T) Talk to users                   (U)ser log
X    (V)alidate users                    (W)rite to other users
XEOH
X
Xcat << EOH > $home/misc/com
X   (C) Create message base              (L) List message bases
X   (Jx) Jump to a message base x        (P) Post a message
X   (I) Read an individual message       (F) Retrieve forward sequential
X   (R) Retrieve reverse sequential      (N) Read new messages
X   (G) Global scan                      (K) Kill a message
X   (E) Exit SBBS BBS                    (S) Scan messages
X   (Q) Quick scan of messages           (M) List MBMs.(Message Base Manager)
X   (O) Open a message to edit           (Z) Manage message bases
XEOH
X
Xcat << EOH > $home/misc/ecom
X   (A)bort message                      (D)elete line
X   (E)dit a line                        (I)nsert at line
X   (C)ontinue entering message          (S)ave message
X   (P)roof read message(spell check)    (L)ist message
X   (R)ot 13 / DeRot 13 a message.
XEOH
Xecho "Compiling .c programs..."
X
Xcc -o $home/programs/initial $home/programs/initial.c
Xcc -o $home/programs/lock $home/programs/lock.c
X
Xecho "Making sysop user..."
Xecho ""
Xecho "Please enter your REAL name. "
Xecho ""
Xecho ">> Name: \c"
Xread rname
Xrname=`echo "$rname"| tr -d "!"`
Xrname=`echo "$rname"| tr -d ":" `
Xrname=`echo "$rname"| tr -s " "`
Xrname=`echo "$rname"| tr "[a-z]" "[A-Z]"`
Xname=`cat $home/admin/profile/members | wc -l`
Xname=`expr $name + 1`
Xecho ""
Xecho "Write your user ID down and don't lose it."
Xecho "You will need it to login again."
Xecho ""
Xecho ">> Your user ID is: $name"
Xecho ""
Xecho "Now choose a password. It must be at least four characters."
Xwhile : ; do
Xecho ""
Xecho ">> Password: \c"
Xread pass
Xpc=`echo "$pass" | wc -c`
Xif [ $pc -lt 5 ] ; then
X  echo ""
X  echo "Make it at least four characters."
X  continue 
Xelse 
X  pass="`echo \"$pass\" | tr \"[A-Z]\" \"[a-z]\"`"
X  break
Xfi
Xdone
Xecho ""
Xwhile : ; do
Xecho "Enter your phone number. Format is XXX-XXX-XXXX."
Xecho ""
Xecho ">> Phone: \c"
Xread num
Xnum="`echo \"$num\" | tr -d \":\"`"
Xif [ `echo $num | wc -c` -ne 13 ] ; then
X  echo ""
X  echo "Try again."
X  continue
Xfi
Xbreak
Xdone
Xecho ">> Modem Phone (if any): \c"
Xread data
Xecho ">> Address: \c"
Xread add
Xadd=`echo $add | tr -d ":"`
Xecho ">> City: \c"
Xread city
Xcity=`echo $city | tr -d ":"`
Xecho ">> State: \c"
Xread state
Xstate=`echo $state | tr -d ":"`
Xecho ">> Zip Code (five digits): \c"
Xread zip
Xzip=`echo $zip | tr -d ":"`
Xecho "$name:$rname:$pass:$num:$data:$city:$state:$add" >> $home/admin/profile/newusers 
X$home/programs/mkusr $name "$pass" "$rname" 3 "$add" "$city" "$state" $zip "$num"
Xecho ""
Xecho "New account has been created. "
Xecho ">> ID: $name"
Xecho ">> Password: $pass"
Xecho ""
________This_Is_The_END________
echo 'x - killm'
sed 's/^X//' <<'________This_Is_The_END________' >>killm
X#! /bin/sh
X# Shell script to kill a message.
Xz=`ls $dir/bbs/$basen | wc -l`
Xif [ $z -eq 0 ] ; then
X   exit
Xfi
X
Xlm=`ls $dir/bbs/$basen | wc -l`
Xlm=`echo $lm`
X
Xecho "Enter message number to kill ($lm): \c"
Xread kill
X
Xkill=`expr $kill + 0 2> /dev/null`
X
Xif [ $? != 0 ] ; then
X  kill=$lm
Xfi
X
X
Xif [ $kill -lt 1 -o $kill -gt $lm ];then
X   echo "Message not killed." ; exit
Xfi
X
Xfrom="`sed -n 1p $dir/bbs/$basen/$kill`"
X
Xfrom="`echo \"$from\" | cut -c11-`"
Xfrom="`echo \"$from\" | awk '{print $1}'`"
Xmbm=`grep "^mbm$basen:" $dir/misc/config` ; mbm="${mbm:+y}"
Xif [ $from -ne $bbs_name -a $access -lt 2 -a "$mbm" != y ] ; then
X  echo You cannot delete that message.
X  exit
Xfi
X
Xecho "Message $kill is unavailable." > $dir/bbs/$basen/$kill
________This_Is_The_END________
echo 'x - lock.c'
sed 's/^X//' <<'________This_Is_The_END________' >>lock.c
X
X#include <stdio.h>
X#include <fcntl.h>
X#include <errno.h>
X
Xextern int errno;
X
Xmain(argc, argv)
Xchar **argv; {
X	int fd;
X
X	if (argc != 2) {
X		fprintf(stderr, "Usage: lock name\n");
X		exit(1);
X	}
X	while ((fd = open(argv[1], O_RDWR|O_CREAT|O_EXCL, 0666)) == -1) {
X		if (errno != EEXIST)
X			break;
X		sleep(10);
X	}
X	if (fd == -1) {
X		perror(argv[1]);
X		exit(1);
X	}
X	close(fd);
X	exit(0);
X}
X
________This_Is_The_END________
echo 'x - login-sig'
sed 's/^X//' <<'________This_Is_The_END________' >>login-sig
X#!/bin/sh
X#
X# %Z% %M% %I% %D% %Q%
X# %P%
X# 
X# SBBS version 1.0
X
Xtrap "" 2 3   # trapping
Xstty intr '^C'
X
Xdir=/u/robertd/lib/sbbs   # Change to your system
Xexport dir
Xlogins=$dir/admin/profile/logins
Xbbs="`grep \"^name=\" $dir/misc/config | cut -c6-`"
Xversion="`grep \"^version=\" $dir/misc/config | cut -c9-`"
Xexport version bbs
Xecho ""
Xecho ">> Welcome to $bbs (SBBS version $version)"
Xecho '>> Copyright (C) 1987, Rob DeMarco'
X
Xcycle=`grep "^cycle=" $dir/misc/config`
Xcycle=`echo $cycle | cut -c7-`
Xif [ -z "$cycle" ] ;then 
X cycle=3
Xfi
Xcycle=`echo $cycle`
Xcyclep=1
Xelite=`grep "^elite=\$" $dir/misc/config`
Xif [ ! -z "$elite" ] ; then
X  elite=1
Xelse
X  elite=0
X  echo ">> If you are a new user, use NEW for your ID."
Xfi
Xecho ">> Enter OFF to leave system."
Xecho ""
X
Xwhile [ $cyclep -le $cycle ] ; do
X     echo ">> Your ID? \c"
X     bbs_name="`line | tr \"[A-Z]\" \"[a-z]\"`"
X     bbs_name=`echo $bbs_name | tr -d "!"`
X     if [ "$bbs_name" = '' ] ; then
X       continue
X     fi
X
X     if [ "$bbs_name" = off ] ; then
X        exit
X     fi
X
X     if [ "$bbs_name" = new -a $elite -eq 0 ] ; then
X       ni=`grep "^newuser=" $dir/misc/config | cut -c9-`
X       if [ ! -z "$ni" ] ; then
X         cat $ni
X         echo ">> Press RETURN to continue.\c"
X         read junk
X       fi
X         
X       echo ""
X       echo "Please enter your REAL name. "
X       echo ""
X       echo ">> Name: \c"
X       read rname
X       rname=`echo "$rname"| tr -d "!"`
X       rname=`echo "$rname"| tr -d ":" `
X       rname=`echo "$rname"| tr -s " "`
X       rname=`echo "$rname"| tr "[a-z]" "[A-Z]"`
X       name=`cat $dir/admin/profile/members | wc -l`
X       name=`expr $name + 1`
X       echo ""
X       echo "Write your user ID down and don't lose it."
X       echo "You will need it to login again."
X       echo ""
X       echo ">> Your user ID is: $name"
X       echo ""
X       echo "Now choose a password. It must be at least four characters."
X       while : ; do
X       echo ""
X       echo ">> Password: \c"
X       stty -echo
X       read pass
X       stty echo ; echo "\n\c"
X       pc=`echo "$pass" | wc -c`
X       if [ $pc -lt 5 ] ; then
X         echo ""
X         echo "Make it at least four characters."
X         continue 
X       else 
X         pass="`echo \"$pass\" | tr \"[A-Z]\" \"[a-z]\"`"
X         break
X       fi
X       done
X       echo ""
X       while : ; do
X       echo "Enter your phone number. Format is XXX-XXX-XXXX."
X       echo ""
X       echo ">> Phone: \c"
X       read num
X       num="`echo \"$num\" | tr -d \":\"`"
X       if [ `echo $num | wc -c` -ne 13 ] ; then
X         echo ""
X         echo "Try again."
X         continue
X       fi
X       break
X       done
X       echo ">> Modem Phone (if any): \c"
X       read data
X       echo ">> Address: \c"
X       read add
X       add=`echo $add | tr -d ":"`
X       echo ">> City: \c"
X       read city
X       city=`echo $city | tr -d ":"`
X       echo ">> State: \c"
X       read state
X       state=`echo $state | tr -d ":"`
X       echo ">> Zip Code (five digits): \c"
X       read zip
X       zip=`echo $zip | tr -d ":"`
X       echo "$name:$rname:$pass:$num:$data:$city:$state:$add" >> $dir/admin/profile/newusers 
X       $dir/programs/mkusr $name "$pass" "$rname" 0 "$add" "$city" "$state" $zip "$num"
X       echo ""
X       echo "New account has been created. "
X       echo ">> ID: $name"
X       echo ">> Password: $pass"
X       echo ""
X       echo "Now finish logging in normally."
X       echo ""
X       continue
X     fi
X     echo ">> Password: \c"
X     stty -echo
X     bbs_passwordc="`line | tr \"[A-Z]\" \"[a-z]\"`"
X     echo "\n"
X     stty echo
X     pid=$$
X     echo "$bbs_passwordc" > /tmp/sbbs.buf.$pid
X     bbs_password=`crypt "$bbs_passwordc" < /tmp/sbbs.buf.$pid`
X     dataset="$bbs_name $bbs_password"
X     datatest=`fgrep -x "$dataset" $logins`
X
X     if [ -z "$datatest" ];then
X      echo
X      echo "Either the ID or the password is wrong; try again."
X      rm /tmp/sbbs.buf.$pid
X      cyclep=`expr $cyclep + 1`
X      continue
X     fi
X     export bbs_name bbs_password
X     rm /tmp/sbbs.buf.$pid
X     fullname=`grep "^$bbs_name:" $dir/admin/profile/members | awk -F: '{print $3 }'` ; export fullname
X     access=`grep "^$bbs_name:" $dir/admin/profile/members | awk -F: '{print $2}'`
X     export access
X     cat $dir/misc/openmes
X     $dir/programs/news
X     bn=`echo "$bbs_name" | cut -c-7`
X     login_time=`date | cut -c9-19`
X     export bn login_time
X     exec $dir/programs/sbbs
Xdone
Xecho ""
Xecho "Call back when you can remember your password
Xecho "or finally decide to login as NEW."
Xexit
________This_Is_The_END________
echo 'x - mailbox'
sed 's/^X//' <<'________This_Is_The_END________' >>mailbox
X#! /bin/sh
X# Read private messages.
X#
X
Xaapath=$dir/mail
X
Xa=`ls $aapath/"$bbs_name" | wc -l`
Xb=`echo $a`
Xa=1
X
Xif [ $b -eq 0 ] ; then
X  echo "No mail"
X  exit
Xfi
X
Xwhile [ $a -le $b ] ; do
Xts=""
X     echo "..........................."
X     cat $aapath/"$bbs_name"/$a
X     echo "..........................."
X
X     while [ "$ts" != "pass" ] ; do
X          echo "[N]ext message [R]eply [A] Read again:\c"
X          read cmd
X          cmd=`echo "$cmd"|tr -d "!"`
X          if [ "$cmd" = "" ] ; then
X            continue
X          fi
X
X          if [ $cmd = A -o $cmd = a -o $cmd = r -o $cmd = R -o $cmd = N -o $cmd = n ] ; then
X            ts=pass
X            continue
X          fi
X     done
X
X     if [ $cmd = N -o $cmd = n ] ; then
X       rm $dir/mail/"$bbs_name"/$a
X       a=`expr $a + 1`
X       continue
X     fi
X
X     if [ $cmd = A -o $cmd = a ] ; then
X       continue
X     fi
X
X
X     to=`sed -n 1p $aapath/"$bbs_name"/$a`
X     to=`echo "$to" | cut -c8-`
X     to=`echo "$to" | awk '{print $1}'`
X     if [ $to -eq $bbs_name ] ; then
X       echo "Attempting to reply to yourself - abort"
X       continue
X     fi
X     file=sbbs.mle.$$
X
X     echo "From: #$bbs_name ($fullname)"> /tmp/$file
X     echo "Date: `date`" >> /tmp/$file
X     echo "Message to: #$to (you)\n\n" >> /tmp/$file
X     echo "Include message in reply?(n)\c"
X     read yn
X     if [ "$yn" = Y -o "$yn" = y ];then
X       echo "In your message you wrote to me...." >> /tmp/$file
X       sed -n '6,$s/^/> /
X               6,$p' $aapath/$bbs_name/$a >> /tmp/$file
X       echo "You may use the editor to trim the "
X       echo "quoted message down to what you need."
X     fi
X     echo "Enter your message now."
X     echo "Type a CTRL-D for editor."
X     while : ; do
X       cat >> /tmp/$file
X       $dir/programs/edit /tmp/$file
X       status=$?
X       if [ $status = 1 ] ; then
X         continue
X       fi
X       if [ $status = 2 ] ; then
X         continue 2
X       fi
X       if [ $status = 3 ] ; then
X         nol=`ls $aapath/"$to" | wc -l`
X         nol=`echo $nol`
X         nol=`expr $nol + 1`
X         cat /tmp/$file > $aapath/"$to"/$nol
X         rm /tmp/$file
X         echo "Message Saved."
X         break
X       fi 
X    done
Xdone
________This_Is_The_END________
echo 'x - medit'
sed 's/^X//' <<'________This_Is_The_END________' >>medit
X#! /bin/sh
X# edit:
X# SBBS version 1.0;
X#
X
Xz=`ls $dir/bbs/$basen | wc -l`
Xif [ $z -eq 0 ] ; then
X   exit
Xfi
Xmbm=`grep "^mbm$basen=" $dir/misc/config | awk -F= '{print $2}'`
Xmbm=${mbm:+1}
X
X
Xecho "Edit what message? (1): \c"
Xread m
X
Xm=`expr $m + 0 2> /dev/null`
X
Xif [ $? != 0 ] ; then
X   m=1
Xfi
X
Xl=`ls $dir/bbs/$basen | wc -l`
X
Xif [ $m -lt 1 -o $m -gt $l ] ; then
X   echo "Message not edited."
Xfi
X
Xwc_l=`cat $dir/bbs/$basen/$m | wc -l`
Xif [ $wc_l -eq 1 ] ; then
X   echo "This message was killed."
X   exit
Xfi
X
Xzz="`sed -n 1p $dir/bbs/$basen/$m | cut -c11- | awk '{print $1}' `"
Xif [ $access -lt 2 -a "$mbm" != 1 -a $zz != $bbs_name ] ; then
X   echo "Your access is too low."
X   exit
Xfi
Xfile=/tmp/sbbs.edt.$$
Xcat $dir/bbs/$basen/$m > $file
X
Xwhile : ; do
X      $dir/programs/edit $file
X
X      status=$?
X
X      case $status in
X
X           1) cat >> $file
X              continue
X              ;;
X           2) exit
X              ;;
X           *) mv $file $dir/bbs/$basen/$m
X              echo "Message saved..."
X              break
X              ;;
X      esac
Xdone
________This_Is_The_END________
echo 'x - mkbul'
sed 's/^X//' <<'________This_Is_The_END________' >>mkbul
X#! /bin/sh
X# Post a system bulletin.
X
X
Xif [ "$access" -lt 2 ]; then
X  echo "Sorry - You are not allowed to post\nbulletins."
X  exit
Xfi
X
Xfile=/tmp/sbbs.pbl.$$
Xecho "Subject <$bbs update>: \c"
Xread subj
Xsubj=`echo "$subj" | tr -d "!"`
Xif [ -z "$subj" ] ; then
X   subj="$bbs update"
Xfi
X
Xecho "Enter your bulletin now. Press CTRL-D"
Xecho "for editor.\n"
Xecho "From: #$bbs_name ($fullname)\nDate: `date`" > $file
Xecho "Subj: $subj" >> $file
Xecho "      $bbs version $version\n" >> $file
Xwhile : ; do
X      cat >> $file
X      $dir/programs/edit $file
X      status=$?
X      if [ $status = 1 ] ; then
X        continue
X      elif [ $status = 2 ] ; then
X        exit
X      else
X        $dir/programs/lock /tmp/sbbs.pbl.lock
X        z=`ls $dir/bulletins | wc -l`
X        z=`expr $z + 1`
X        cat $file > $dir/bulletins/$z
X        rm $file
X        rm /tmp/sbbs.pbl.lock
X        echo "Message saved..."
X        exit
X      fi
Xdone
________This_Is_The_END________
echo 'x - mkusr'
sed 's/^X//' <<'________This_Is_The_END________' >>mkusr
X#! /bin/sh
X# mkusr - make user.
X
Xname="$1:"
Xpassword=$2
Xfname=$3
Xaccess=$4
Xif [ "$access" = "" ] ; then
X  access=1
Xfi
X
Xtfile=/tmp/sig.data.$$
Xecho $password > $tfile
Xcryp=`crypt "$password" < $tfile`
X
Xecho "$1 $cryp" >> $dir/admin/profile/logins
X
Xname="$1:$4:$3:$5:$6:$7:$8:$9"
Xecho "$name" >> $dir/admin/profile/members
Xrm $tfile
X
Xmkdir $dir/mail/"$1"
________This_Is_The_END________
echo 'x - news'
sed 's/^X//' <<'________This_Is_The_END________' >>news
X#! /bin/sh
X# news : A bulletin update system
X
Xp=$dir/misc/newnews
Xc=$dir/bulletins
Xg="`grep \"^$bbs_name:\" $p`"
X
Xif [ "$g" != "" ] ; then
X  rec="`grep \"^$bbs_name:\" $p `"
X  rec="`echo \"$rec\" | awk -F: '{print $2}'`"
X else
X  rec=1
X  echo "$bbs_name:1" >> $p
Xfi
X
Xb=`ls $c | wc -l`
X
Xif [ $rec -gt $b ] ; then
X  sleep 5
X  exit
Xfi
X
Xecho "===========[System News]==========="
X
Xwhile [ $rec -le $b ] ; do
X  cat $c/$rec
X  f=/tmp/sbbs.tpb.$$
X  $dir/programs/lock /tmp/sbbs.lock
X  grep -v "^$bbs_name:" $p > $f
X  cat $f > $p
X  rm $f
X  rc=`expr $rec + 1`
X  echo "$bbs_name:$rc" >> $p
X  rm /tmp/sbbs.lock
X  echo "Continue or Quit) C\b\c"
X  read default
X  default=`echo $default | cut -c1`
X  if [ "$default" = Q -o "$default" = q ] ; then
X    exit
X  fi
X  rec=`expr $rec + 1`
Xdone
________This_Is_The_END________
echo 'x - post'
sed 's/^X//' <<'________This_Is_The_END________' >>post
X#! /bin/sh
X# Post bulletins.
Xif [ "$1" = "" ] ; then
X  echo "<CR = abort> Enter subject: \c"
X  read subject
X  count=`echo "$subject" | wc -c`
X  if [ $count -le 4 -a $count -gt 1 ] ; then
X    echo "Please make your subject 4 characters or more."
X    exit
X  fi
X  if [ "$subject" = "" ] ; then
X    exit
X  fi
X  echo "Correct? <Y> \c"
X  read yn
X  set yn=`echo $yn`
X  if [ "$yn" = N -o "$yn" = n ] ; then
X    exit
X  fi
Xelse
X  subject=$1
X  echo "Include message in reply?(n)\c"
X  read yn
X  yn=`echo $yn | tr -d "!"`
X  if [ "$yn" = Y -o "$yn" = y ] ; then
X    xflag=1
X  fi
Xfi
Xdate=`date`
Xfrom="$bbs_name ("
Xfrom="$from$fullname)"
Xfile=/tmp/sbbs.pst.$$
Xecho "From   : #$from " >> $file
Xecho "Subject: $subject" >> $file
Xecho "Date   : $date" >> $file
Xecho "\n" ; echo "\n" >> $file
Xif [ "$xflag" = 1 ] ; then
X   sed -n '6,$s/^/> /
X           6,$p' $2 >> $file
Xfi
Xecho "Enter your message now."
Xecho "Enter a CTRL-D for editor."
Xwhile : ; do
X  cat >> $file
X  $dir/programs/edit $file null
X  status=$?
X  if [ $status = 1 ];then
X    continue
X  fi
X  if [ $status = 2 ];then
X    exit
X  fi
X  break
Xdone
________This_Is_The_END________
echo 'x - program'
sed 's/^X//' <<'________This_Is_The_END________' >>program
X#! /bin/sh
X# Shell program menu
X# Takes input from a file called
X# $dir/misc/prlib
X
X
Xif [ -r $dir/misc/prlib ] ; then
X  echo "\n\n"
Xelse
X  echo "No programs available."
X  exit
Xfi
Xecho "$: Leave program"
Xecho "#: List programs"
Xawk -F: '{print $1 ":" $2}' $dir/misc/prlib
X
Xwhile :;do
Xecho "Program) \c"
Xread prg
Xprg=`echo "$prg" | tr -d "!"`
Xprg=`echo $prg`
Xcom=`echo "$prg" | cut -c1`
X
Xif [ -z "$prg" ] ; then
X  continue
Xfi
X
Xif [ "$com" = '$' ] ; then
X  exit
Xfi
X
Xif [ "$com" = '#' ] ; then
X  echo "$: Leave program"
X  echo "#: List programs"
X  cut -c-20 $dir/misc/prlib
X  continue
Xfi
X
X
X
X
Xa=`expr $prg + 0 2> /dev/null`||continue
Xa=`grep "^$a:" $dir/misc/prlib`
X
Xif [ -z "$a" ] ; then
X  echo "Program not found"
X  continue
Xfi
Xprg="`echo \"$a\" | awk -F: '{print $3}' `"
X
Xeflag=`grep "^eval=" $dir/misc/config`
Xif [ -z "$eflag" ] ; then
X$prg
Xelse
Xeval $prg
Xfi
Xdone
X
________This_Is_The_END________
echo 'x - rescue'
sed 's/^X//' <<'________This_Is_The_END________' >>rescue
X#! /bin/sh
X# Shell cleanup/rescue script.
X
Xlength=`cat $dir/admin/profile/log | wc -l`
Xif [ $length -eq $logc ] ; then
X  proc=$$
X  sed "1d" $dir/admin/profile/log > $dir/admin/profile/log.$proc
X  mv $dir/admin/profile/log.$proc $dir/admin/profile/log ; rm $dir/admin/profile/log.$proc
Xfi
X
Xecho "$bn\t$login_time\t`date | cut -c9-19`<CD>" >> $dir/admin/profile/log
X
Xfile=/tmp/sbbs.hup.$$
X$dir/programs/lock /tmp/sbbs.hup.lock
Xgrep -v "^$bbs_name:" $dir/misc/usr > $file
Xcat $file > $dir/misc/usr
Xrm /tmp/sbbs.hup.lock
Xrm $file
Xrm /tmp/sbbs.*
Xecho "$cmd_list" >> $dir/admin/profile/cmdlog
Xecho "$fullname" > $dir/admin/profile/lastcaller
________This_Is_The_END________
echo 'x - sbbs'
sed 's/^X//' <<'________This_Is_The_END________' >>sbbs
X#! /bin/sh
X# SBBS Main menu.
X
Xtrap 'trap "" 15 14 3 2 1 ; $dir/programs/rescue ; exit 0' 1
Xtrap "" 2 3
Xtty=`tty`
Xexport tty
Xecho "$bbs_name:$fullname:$tty" >> $dir/misc/usr
X
Xlogc="`grep \"^log=\" $dir/misc/config`"
Xcls="`grep \"^cls=\" $dir/misc/config`"
X
Xif [ "$cls" = "" ] ; then
X  cls="echo \c"
Xelse
X  cls=`echo "$cls" | cut -c5-`
Xfi
Xexport cls
X
Xif [ "$logc" = "" ] ; then
X  logc=20 ; export logc
Xelse
X  logc=`echo $logc | cut -c5-`
X  logc=`expr $logc + 0 2> /dev/null`
X  if [ $? != 0 ] ; then
X    logc=20 ; export logc
X  else
X    export logc
X  fi
Xfi
Xcmd_list="#$bbs_name" ; export cmd_list
Xecho "\n\n"
Xmaill=`ls $dir/mail/"$bbs_name" | wc -l`
X
Xecho "Last caller was `cat $dir/admin/profile/lastcaller`."
X
Xif [ $maill -gt 0 ] ; then
X  echo "You have mail waiting! Choose option R at $bbs main prompt."
Xfi
X
X
X
Xwhile : ; do
X     echo "$bbs main) \c"
X     read cmd
X     cmd=`echo "$cmd" | tr -d "!"`
X
X     cmd=`echo "$cmd"`
X     if [ -z "$cmd" ] ; then
X       continue;
X     fi
X     cmd=`echo "$cmd" | cut -c1`
X     cmd_list="$cmd_list:$cmd";export cmd_list
X
X     if [ "$cmd" = "?" ] ; then
X       cat $dir/misc/main_menu
X       continue
X     fi
X
X     if [ $cmd = M -o $cmd = m ] ; then
X       $dir/programs/bbs
X       continue
X     fi
X
X     if [ $cmd = O -o $cmd = o ] ; then
X       $dir/programs/db
X       continue
X     fi
X
X
X     if [ $cmd = I -o $cmd = i ] ; then
X       cat $dir/misc/info
X       continue
X     fi
X
X     if [ $cmd = L -o $cmd = l ] ; then
X       $dir/programs/users
X       continue
X     fi
X
X     if [ $cmd = E -o $cmd = e ] ; then
X       $dir/programs/lock /tmp/sbbs.hup.lock
X       file=/tmp/sbbs.hup.$$
X       grep -v "^$bbs_name:" $dir/misc/usr > $file
X       cat $file > $dir/misc/usr ; rm $file
X       rm /tmp/sbbs.hup.lock
X       length=`cat $dir/admin/profile/log | wc -l`
X       if [ $length -eq $logc ] ; then
X         proc=$$
X         sed 1d $dir/admin/profile/log > $dir/admin/profile/log.$proc
X         mv $dir/admin/profile/log.$proc $dir/admin/profile/log
X       fi
X       echo "$bn\t$login_time\t`date | cut -c9-19`" >> $dir/admin/profile/log
X       echo "$cmd_list" >> $dir/admin/profile/cmdlog
X       echo "Thank you for calling, $fullname"
X       echo "Loging off at `date`"
X       echo ""
X       cat $dir/misc/closing
X       echo "$fullname" > $dir/admin/profile/lastcaller
X       echo "$bbs (SBBS $version) disconnecting..."
X       exit
X     fi
X
X     if [ $cmd = A -o $cmd = a ];then
X       if [ $access -lt 3 ];then
X         echo "Only the system administrater may get \naccess to the shell."
X         continue 
X       fi
X       sh=`grep "^shell=" $dir/misc/config | cut -c7-`
X       if [ -z "$sh" ] ; then
X          /bin/sh
X       else
X          $sh
X       fi
X       continue
X     fi
X
X     if [ $cmd = D -o $cmd = d ] ; then
X       $dir/programs/udl
X       continue
X     fi 
X
X     if [ $cmd = W -o $cmd = w ] ; then
X       $dir/programs/sendmail
X       continue
X     fi
X
X     if [ $cmd = R -o $cmd = r ] ; then
X       $dir/programs/mailbox
X       continue
X     fi
X
X     if [ $cmd = P -o $cmd = p ] ; then
X       if [ "$access" -eq 0 ] ; then
X         echo "Only level 1 and greater people have\naccess to the program library."
X         continue
X       fi 
X       $dir/programs/program
X       continue
X     fi
X
X     if [ $cmd = B -o $cmd = b ] ; then
X       $dir/programs/mkbul
X       continue
X     fi  
X
X     if [ $cmd = C -o $cmd = c ] ; then
X       $dir/programs/cwd
X       continue
X     fi
X
X     if [ $cmd = v -o $cmd = V ] ; then
X       $dir/programs/usr
X       continue
X     fi
X     if [ $cmd = u -o $cmd = U ] ; then
X       echo "NOTE: <CD> denotes loss of carrier."
X       cat $dir/admin/profile/log
X       continue
X     fi
X     if [ $cmd = t -o $cmd = T ] ; then
X       $dir/programs/chat
X       continue
X     fi
X     if [ $cmd = q -o $cmd = Q ] ; then
X       $dir/programs/control
X       continue
X     fi
Xdone
________This_Is_The_END________
echo 'x - sendmail'
sed 's/^X//' <<'________This_Is_The_END________' >>sendmail
X#! /bin/sh
X# Send - part of the email package of
X# sbbs
Xappath=$dir/admin/profile
X
Xif [ "$1" = "" ] ; then
Xecho "Enter user name or # to send mail to:"
Xread name
Xto=`echo "$name"| tr "[a-z]" "[A-Z]"`
Xto=`echo "$to" | tr -s " "`
Xelse
Xto=$1
Xecho "Include message in reply?(n)\c"
Xread yn
Xyn=`echo $yn | tr -d "!"`
Xif [ "$yn" = Y -o "$yn" = y ] ; then
X  xflag=1
Xfi
Xfi
Xq=`expr $to + 0 2> /dev/null`
Xif [ $? -ne 0 ] ; then
X  t=`awk -F: '{print $3}' $dir/admin/profile/members | grep "^$to\$"`
X  flagh=1
Xelse
Xt=`grep "^$to:" $appath/members`
Xfi
Xif [ "$t" = "" ] ; then
X  echo "There is no user $to"
X  exit
Xfi
Xif [ "$flagh" =  1 ] ; then
X  flagh=0
X  to=`awk -F: '{print $1 ":" $3}' $dir/admin/profile/members | grep ":$to\$"`
X  to=`echo "$to"| awk -F: '{print $1}'`
Xfi
Xk=`grep "^$to:" $dir/admin/profile/members | awk -F: '{print $3}'`
Xif [ -z "$k" ] ; then
X  echo "User was deleted."
X  exit
Xfi
X
Xno=`ls $dir/mail/"$to" | wc -l`
Xno=`echo $no`
Xno=`expr $no + 1`
X
Xfile=sbbs.sml.$$
Xecho "From: #$bbs_name ($fullname)" >> /tmp/$file
Xecho "Date: `date`" >> /tmp/$file
Xecho "Message to: #$to(you)" >> /tmp/$file
Xif [ "$1" != "" ] ; then
X  echo "Reply from bulletin: \"$2\"\n" >> /tmp/$file
Xfi
Xif [ "$xflag" = 1 ] ; then
X   sed -n '6,$s/^/> /
X           6,$p' $dir/bbs/$basen/$3 >> /tmp/$file
Xfi
Xif [ "$1" = "" ] ; then
Xecho "\n" >> /tmp/$file
Xfi
Xecho "Enter your message now."
Xecho "Enter CTRL-D for editor."
Xwhile : ; do
X   cat >> /tmp/$file
X   $dir/programs/edit /tmp/$file
X   p=$?
X   if [ $p = 2 ] ; then
X     exit
X   fi
X   if [ $p = 1 ] ; then
X     continue
X   fi
X   if [ $p = 3 ] ; then
X     cat /tmp/$file > $dir/mail/"$to"/$no
X     rm /tmp/$file
X     echo "Message Saved..."
X     exit
X   fi
Xdone
________This_Is_The_END________
echo 'x - udl'
sed 's/^X//' <<'________This_Is_The_END________' >>udl
X#! /bin/sh
X# Main udl system
X
X$cls
X
Xecho "================================"
Xecho "The $bbs UP/DOWN load system"
Xecho "================================"
Xecho "\n"
Xwhile : ; do
Xecho ""
Xecho "UD/L) \c"
Xread nu
X
Xif [ -z "$nu" ] ; then
X  continue
Xfi
X
Xnu=`echo "$nu" | tr -d "!"`
X
Xif [ "$nu" = N -o "$nu" = n ] ; then
X  $dir/programs/udlnew
X  continue
Xfi
X
Xif [ "$nu" = E -o "$nu" = e ] ; then
X  exit
Xfi
X
Xif [ "$nu" = C -o "$nu" = c ] ; then
X   if [ $access -lt 2 ] ; then
X      echo "Sorry , you may not create DataBases.\nConsult your local SysOp or Co-SysOp if\nyou wish to have a DataBase."
X      continue
X   fi
X   echo "Enter title of DataBase: \c"
X   read DataBase
X
X   if [ -z "$DataBase" ] ; then
X      echo "(abort)"
X      continue
X   fi
X
X   title="$DataBase"
X
X   DataBase=`ls $dir/udl | wc -l`
X   DataBase=`echo $DataBase`
X 
X   mkdir $dir/udl/$DataBase
X   echo "\c" >> $dir/udl/$DataBase/.udlrc
X   echo "$DataBase: $title" >> $dir/misc/udlrc
X   continue
Xfi 
Xif [ "$nu" = "L" -o "$nu" = "l" ] ;then
X   cat $dir/misc/udlrc
X   continue
Xfi
X
Xif [ "$nu" = "?" ] ; then
X  cat << EOH
X   (C) Create a message base            (N) New downloads
X   (E) Exit                             (L) List DataBases
X   (n) Enter DataBase number n.
XEOH
Xcontinue
Xfi
X
Xat=`expr $nu + 0 2> /dev/null`||continue
X
Xtest=`grep "^$nu:" $dir/misc/udlrc`
X
Xif [ -z "$test" ] ; then
X  echo "Base does not exist."
X  continue
Xfi
X
Xdbase=$nu
Xdbase=`echo $dbase`
X
Xwhile : ; do
Xecho "File) \c"
Xread file
X
Xif [ "$file" = "?" ] ; then
X  cat << HELP
X        (E) Exit to $bbs main           (C) Chose another DataBase
X        (L) List files.
X
X	Enter file number to download.
X
X	To upload, type a number that is not available on this base. (And
Xnot less then 1)
XHELP
Xcontinue
Xfi
X
Xif [ "$file" = L -o "$file" = l ]; then
X  cat $dir/udl/$dbase/.udlrc
X  continue
Xfi
X
Xif [ "$file" = E -o "$file" = e ]; then
X  exit
Xfi
X
Xif [ "$file" = C -o "$file" = c ]; then
X  continue 2
Xfi
X
Xfile=`expr $file + 0 2> /dev/null`
X
Xif [ $? != 0 ] ; then
X  continue
Xfi
X
Xtest=`grep "^$file:" $dir/udl/$dbase/.udlrc`
X
Xif [ -z "$test" ] ; then
X  echo "File doesn't exist."
X  echo "Do you wish to upload it? <N> \c"
X  read upload
X  upload=`echo "$upload" | tr -d "!" | cut -c1`
X  if [ "$upload" != Y -a "$upload" != y ] ; then
X    continue
X  fi
X  echo "Enter an 80 character or less description\n: \c"
X  read des
X  des=`echo "$des" | tr "|" ":"`
X  des=`echo "$des" | cut -c-80`
X  name=$file
X  file=`ls $dir/udl/new | wc -l`
X  file=`expr $file + 1`
X  echo "$file| $des [Uploaded by #$bbs_name]|$dbase" >> $dir/udl/new/.udlrc
X  echo "Protocols available: "
X  awk -F: '{print $1 ":  " $2}' $dir/misc/protocols.up
X  echo "(ENTER to abort)"
X  echo "Protocol) \c"
X  read proto
X  proto=`expr $proto + 0 2> /dev/null`
X  if [ $? -ne 0 ] ; then
X     proto=1
X  else
X     at=`grep "^$proto:" $dir/misc/protocols.up`
X     if [ -z "$at" ] ; then
X        proto=1
X     else
X        cmd="`echo \"$at\" | awk -F: '{print $3}'`"
X        eval $cmd $dir/udl/new/$file
X     fi
X  fi
X  continue
Xfi
X
X
Xecho "Transfer protocols: "
Xawk -F: '{print $1 ":" $2}' $dir/misc/protocols.down
Xecho "(ENTER to abort)"
Xecho "Protocol) \c"
X  read proto
X  proto=`expr $proto + 0 2> /dev/null`
X  if [ $? -ne 0 ] ; then
X     proto=1
X  else
X     at=`grep "^$proto:" $dir/misc/protocols.down`
X     if [ -z "$at" ] ; then
X        proto=1
X     else
X        cmd="`echo \"$at\" | awk -F: '{print $3}'`"
X        eval $cmd $dir/udl/$dbase/$file
X     fi
X  fi
X  continue
Xdone
Xdone
________This_Is_The_END________
echo 'x - udlnew'
sed 's/^X//' <<'________This_Is_The_END________' >>udlnew
X#! /bin/sh
X# New file check.
X
Xif [ $access -lt 2 ] ; then
X  echo "You may not allow new uploads."
X  exit
Xfi
X
Xa=`ls $dir/udl/new | wc -l`
X
Xif [ $a -eq 0 ] ; then
X  echo "No uploads."
X  exit
Xfi
X
X
X$cls ; b=1
X
Xwhile [ $b -le $a ] ; do
X
X     c="`sed -n ${b}p $dir/udl/new/.udlrc`"
X     echo "File:\c"
X     echo "$c" | awk -F\| '{print $1}'
X     echo "Description:\c"
X     echo "$c" | awk -F\| '{print $2}'
X     echo "DataBase:\c"
X     echo "$c" | awk -F\| '{print $3}'
X
X     while : ; do
X     echo "Upload) \c"
X     read cmd
X
X     if [ -z "$cmd" ] ; then
X       continue
X     fi
X
X     if [ "$cmd" = "?" ] ; then
X       cat << EOH
X
X       D: Delete file.
X       M: Move this file.
X       V: View this file.
X       A: Abort session.
XEOH
X     fi
X
X     if [ $cmd = D -o $cmd = d ];then
X       set="$set"0
X       b=`expr $b + 1`
X       continue 2
X     fi
X
X     if [ $cmd = M -o $cmd = m ];then
X       set="$set"1
X       b=`expr $b + 1`
X       continue 2
X     fi
X
X     if [ $cmd = V -o $cmd = v ];then
X        echo "First ten lines..."
X        sed -n '1,10p' $dir/udl/new/$b
X        echo "Press <RETURN>:\c"
X        read junk
X        echo "Last ten lines..."
X        tail -10 $dir/udl/new/$b
X        echo "Press <RETURN>:\c"
X        read junk
X        continue
X     fi
X
X     if [ $cmd = A -o $cmd = a ];then
X       echo "Session aborted. Files restored."
X       exit
X     fi
X
X     done
X
Xdone
X
Xsetc=`echo "$set" | wc -c`
Xsetc=`expr $setc - 1`
X
Xa=1
Xecho "Sorting....."
Xwhile [ $a -le $setc ] ; do
X      string="`sed -n ${a}p $dir/udl/new/.udlrc`"
X      sett=`echo "$set" | cut -c$a`
X      if [ $sett -eq 0 ] ; then
X        a=`expr $a + 1`
X        continue
X      fi
X      datab=`echo "$string" | awk -F\| '{print $3}'`
X      desc="`echo \"$string\" | awk -F\| '{print $2}'`"
X      num=`ls $dir/udl/$datab | wc -l`
X      num=`expr $num + 1`
X      echo "$num: $desc" >> $dir/udl/$datab/.udlrc
X      mv $dir/udl/new/$a $dir/udl/$datab/$num
X      a=`expr $a + 1`
Xdone
Xecho "\c" > $dir/udl/new/.udlrc
Xrm $dir/udl/new/* 2> /dev/null
Xecho "done"
________This_Is_The_END________
echo 'x - update'
sed 's/^X//' <<'________This_Is_The_END________' >>update
X#! /bin/sh
X# Update file for the bbs
X
Xif [ ! -f $dir/new/$bbs_name ] ; then
X   echo > $dir/new/$bbs_name
Xfi
X
Xline=`grep "^$basen:" $dir/new/$bbs_name`
Xif [ "$line" = "" ] ; then
X   echo "$basen:$1" >> $dir/new/$bbs_name
X   exit
Xfi
X
Xnq=`echo "$line" | awk -F: '{print $2}'`
Xif [ $nq -gt $1 ] ; then
X  exit
Xfi
X
Xfile=/tmp/sbbs.tmp.$$
X
Xgrep -v "^$basen:" $dir/new/$bbs_name > $file
Xcat $file > $dir/new/$bbs_name
Xrm $file
Xecho "$basen:$1" >> $dir/new/$bbs_name
________This_Is_The_END________
echo 'x - users'
sed 's/^X//' <<'________This_Is_The_END________' >>users
X#! /bin/sh
X# List Users
X
Xecho "Enter -1 to exit."
X
Xwhile : ; do
X      echo "User ID) \c"
X      read id
X
X      id=`expr $id + 0 2> /dev/null`
X      if [ $? != 0 ] ; then
X        echo "Enter the ID #."
X        continue
X      fi
X      if [ $id -eq -1 ] ; then
X        exit
X      fi
X      
X      t="`grep \"^$id:\" $dir/admin/profile/members`"
X
X      if [ -z "$t" ] ; then
X        echo "ID doesn't exist."
X        continue
X      fi
X
X      if [ $access -lt 2 ] ; then
X        echo "$t" | awk -F: '{print "ID #:" $1 "\t" "Access:" $2 "\nFull Name:" $3}'
X      else
X        echo "$t" | awk -F: '{print "Uid: " $1 "\tAccess: " $2 "\nFull Name: " $3 "\tAddress: " $4 "\nCity: " $5 "\tState: " $6 "\nZip: " $7 "\tPhone: " $8}'
X      fi
Xdone
________This_Is_The_END________
echo 'x - usr'
sed 's/^X//' <<'________This_Is_The_END________' >>usr
X#! /bin/sh
X# Validate, list, remove, access
X
Xif [ $access -lt 2 ] ; then
X  echo "Sorry - You may not use the validation\nfunction with a level less then 2."
Xfi
Xecho "\n\n"
Xwhile : ; do
X  echo "$bbs validation) \c"
X  read cmd
X  cmd=`echo "$cmd" | tr -d "!"`
X  if [ -z "$cmd" ] ; then
X    continue
X  fi
X
X  cmd=`echo "$cmd" | tr "[A-Z]" "[a-z]"`
X
X  if [ "$cmd" = "?" ] ; then
X    cat << EOH
X
X    (L) List new users on file          (A) Change access of a user
X    (R) Remove a user                   (C) Clear a new user
X    (V) View command log                (D) Delete (refresh) command log
X    (E) Exit valadation menu
XEOH
X    continue
X  fi
X
X  if [ $cmd = e ] ; then
X    exit
X  fi
X
X  if [ $cmd = l ] ; then
X    cat $dir/admin/profile/newusers
X    continue
X  fi
X
X  if [ $cmd = a ] ; then
X    if [ $access = 3 ] ; then
X      axlim=3
X    else
X      axlim=1
X    fi
X    while : ; do
X    echo "Enter user ID: \c"
X    read alias
X    ab="`grep \"^$alias:\" $dir/admin/profile/members`"
X    if [ -z "$ab" ] ; then
X      echo "That user doesn't exist!"
X      continue
X    fi
X    break
X    done
X    while : ; do
X    echo "Enter new access (0-$axlim): \c"
X    read axess
X    axess=`expr $axess + 0 2> /dev/null`
X    if [ $? = 2 ] ; then
X      echo "Ilformed number."
X      continue
X    fi
X    if [ $axess -lt 0 -o $axess -gt $axlim ] ; then
X      echo "Out of range - (0-$axlim)"
X      continue 2
X    fi
X    break
X    done
X    lin="`echo \"$ab\" | awk -F: '{print $1}'`"
X    lin="$lin:$axess:`echo \"$ab\" | awk -F: '{print $3 ":" $4 ":" $5 ":" $6 ":" $7 ":" $8}'`"
X    file=/tmp/sbbs.tmp.$$
X    $dir/programs/lock /tmp/sbbs.tmp.lock
X    grep -v "^$alias:" $dir/admin/profile/members > $file
X    cat $file > $dir/admin/profile/members
X    rm /tmp/sbbs.tmp.lock
X    rm $file
X    echo "$lin" >> $dir/admin/profile/members
X    echo "Access changed successfully."
X  fi
X
X  if [ $cmd = c ] ; then
X    echo "Enter the user number: \c"
X    read number
X    a=`grep "^$number:" $dir/admin/profile/newusers`
X    if [ -z "$a" ] ; then
X      echo "There is no newuser #$number"
X      continue
X    fi
X    file=/tmp/sbbs.tnw.$$
X    $dir/programs/lock /tmp/sbbs.tnw.lock
X    grep -v "^$number:" $dir/admin/profile/newusers > $file
X    cat $file > $dir/admin/profile/newusers
X    rm /tmp/sbbs.tnw.lock
X    rm $file
X    echo "Newuser #$number cleared from newuser file."
X    continue
X  fi
X
X  if [ $cmd = r ] ; then
X    echo "Enter user # to delete: \c"
X    read delete
X    a=`grep "^$delete:" $dir/admin/profile/members`
X    if [ -z "$a" ] ; then
X      echo "#$delete doesn't exist."
X      continue
X    fi
X    named=`echo "$a" | awk -F: '{print $3}'`
X    axess=`echo "$a" | awk -F: '{print $2}'`
X    if [ $axess -ge $access -a $access -ne 3 ] ; then
X      echo "Sorry, access level of said user is higher or equal to yours."
X      continue
X    fi
X    if [ "$named" = "" ] ; then
X      echo "Record was deleted."
X      continue
X    fi
X    echo "Delete $named? \c"
X    read yn
X    if [ $yn != Y -a $yn != y ] ; then
X      continue
X    fi
X    rm -r $dir/mail/$delete
X    rm $dir/new/$delete 2> /dev/null
X    file=/tmp/sbbs.rmu.$$
X    $dir/programs/lock /tmp/sbbs.rmu.lock
X    grep -v "^$delete " $dir/admin/profile/logins > $file 
X    cat $file > $dir/admin/profile/logins
X    rm $file
X    rm /tmp/sbbs.rmu.lock
X    $dir/programs/lock /tmp/sbbs.rmr.lock ; uslimit=`cat $dir/admin/profile/members|wc -l`
X    file=/tmp/sbbs.rmr.$$
X    grep -v "^$delete:" $dir/admin/profile/members > $file   
X    cat $file > $dir/admin/profile/members
X    if [ $delete -ne $uslimit ] ; then
X       echo "$delete:0"  >> $dir/admin/profile/members
X    fi
X    rm $file
X    rm /tmp/sbbs.rmr.lock
X    th=`grep "^$delete:" $dir/misc/newnews`
X    if [ ! -z "$th" ] ; then
X    ed - $dir/misc/newnews << EOS
X    /^$delete:/d
X    w
XEOS
X    fi
X    echo "User deleted."
X  fi
X
X  if [ $cmd = v ] ; then
X     cat $dir/admin/profile/cmdlog
X     continue
X  fi
X
X  if [ $cmd = d ] ; then
X     echo "Delete? <N>: \c"
X     read d
X     d="`echo $d | cut -c1`"
X     if [ "$d" = y -o "$d" = Y ] ; then
X        echo "\c" > $dir/admin/profile/cmdlog
X        continue
X     fi
X     echo "Aborted."
X  fi
Xdone
________This_Is_The_END________
echo 'x - z'
sed 's/^X//' <<'________This_Is_The_END________' >>z
X#! /bin/sh
X# Administrate a message base;
X# 
X
Xm=`grep "^mbm$basen=" $dir/misc/config | awk -F= '{print $2}'`
X
Xm=${m:-n}
X
Xif [ $access -lt 2 -a $m = n ] ; then
X   echo "Access too low / not a MBM."
X   exit
Xfi
X
Xecho "\n\n" ; cmd=I
X
Xwhile : ; do
X
X      if [ -z "$cmd" ] ; then
X         echo "MBM) \c"
X         read cmd
X         cmd="`echo \"$cmd\"|tr \"[a-z]\" \"[A-Z]\"`"
X      fi
X
X      if [ "$cmd" = "?" ] ; then
X         cat << 'EOMenu'
X
X    {I}nformation
X    {C}hange status of access / Modify
X       active list.
X    {B}ase manager change (Change MBM)
X    {E}xit
XEOMenu
X         cmd=
X         continue
X      fi
X
X      if [ "$cmd" = E ] ; then
X         exit
X      fi
X
X      if [ "$cmd" = I ] ; then
X         echo "Message base: `grep \"^$basen:\" $dir/misc/bbsrc|awk -F: '{print $2}'`"
X         axs="`grep \"^b$basen=\" $dir/misc/config`"
X         axs="${axs:-NONE}"
X         if [ "$axs" != "NONE" ];then
X            axs="`echo \"$axs\" | awk -F= '{print $2}'`"
X            axs="`echo \"$axs\" | awk -F, '{print $1}'`"
X         fi
X         echo "Protection: $axs"
X         echo "Base #: $basen"
X         echo "MBM: #`grep \"^mbm$basen=\" $dir/misc/config | awk -F= '{print $2}'"
X         msg=`ls $dir/bbs/$basen | wc -l `
X         msg=`echo $msg`
X         echo "Messages: $msg"
X         cmd=
X      fi
X
X      if [ "$cmd" = C ] ; then
X         echo "Wait...\c"
X         check="`grep \"^b$basen=\" $dir/misc/config`"
X         if [ ! -z "$check" ] ; then
X            ed - $dir/misc/config  << EOF
X/^$check\$/d
Xw
XEOF
X         fi
X         echo "\b\b\b\b\b\b\bDone..."
X         echo "\n\nAccess=[R]estricted list [A]ccess\n[N]one <N>: \c"
X         read op
X         op="`echo \"$op\"|tr \"[a-z]\" \"[A-Z]\"|cut -c1`"
X         if [ "$op" = A ] ; then
X            echo "Enter access levels allowed seperated\nby commas."
X            read ar
X            ar="`echo \"$ar\" | tr -d \" \" `"
X            echo "b$basen=access,$ar," >> $dir/misc/config
X            cmd=
X            continue
X         fi
X         if [ "$op" = R ] ; then
X            echo "Enter users, seperated by commas. "
X            read users
X            users="`echo \"$users\" | tr -d \" \" `"
X            echo "b$basen=restrict,$users," >> $dir/misc/config
X            cmd=
X            continue
X         fi
X         cmd=
X         continue
X      fi
X
X      if [ "$cmd" = B ] ; then
X         echo "Current MBM:\c"
X         a="`grep \"^mbm$basen=\" $dir/misc/config | awk -F= '{print $2}'`"
X         echo "${a:-(none)}"
X         echo "Enter new mbm: \c"
X         read nmbm
X         if [ -z "$a" ] ; then
X            echo "mbm$basen=$nmbm" >> $dir/misc/config
X         else
X            ed - $dir/misc/config << EOL
X/^mbm$basen=$a\$/c
Xmbm$basen=$nmbm
X.
Xw
XEOL
X         fi
X      fi
X      cmd=
Xdone
________This_Is_The_END________
exit

-- 
For comp.sources.unix stuff, mail to rsalz at uunet.uu.net.



More information about the Comp.sources.unix mailing list