***************************************************************************
*                                                                         *
*                          SerServer & Con1-Handler                       *
*                                                                         *
*             All parts (c) Copyright 1990 by Michael R. Mossman.         *
*                                                                         *
*                Released for private, non-commercial use.                *
*                                                                         *
*                     Compiled with Lattice 5.04.                         *
*                                                                         *
***************************************************************************

                   SerServer - Version 1.03

What is it?

       Maybe a better name would have been CliBBS, but I started
 with SerServer and so it will stay. It is a personal (with the
 lack of a better word) BBS program. It gives the user a full
 CLI with restrictions setup by the sysop. I don't like the word
 BBS in this case, because, any program that offers a CLI to
 strangers, can be a lot of trouble. I wrote the program so that
 I can log on to my computer from work and do all of the things
 that I do from home in a CLI. I do not recommend that you let
 any Tom, Dick or Harry in to use this program. You will end up
 with formatted hard drives and sleepless nights. It has three
 user levels, and full Zmodem UP/DOWNLOAD. It could be a very
 useful program for a few friends and your self to use, when
 working on a common project. A place to share files. It
 offers limited message sending and receiving.

What files are in the zoo?

       Con1-Handler   - this is the DOS handler for the CLI.
       
       SerServer      - this is the serial device interface and 
                        it talks to Con1-Handler.
			
       SySop          - This program configures the "BBS" and 
                        maintains the user/password list.
			
       help           - This is just a text file that you edit,
                        to tell users what commands and devices,
                        are available to them.
			
       logon          - Another text file that the user gets 
                        before they enter their name and 
                        password.
			
       greeting       - Another text file that the user gets 
                        after login.
			
       mountlist      - This shows how to enter the Con1-Handler
                        in your mountlist.
			
       Zmodem.zoo     - This zoo contains sz and rz. The two 
                        public domain external protocols Zmodem
                        handlers. Sz is the upload handler and
                        rz receives the files.
			
       NoRequests.zoo - This public domain program prevents 
                        requesters from coming up when the user
                        asks for a disk or a drive that is not
                        present in the system. You can't click 
                        off a requester when your sitting at a 
                        remote terminal! SerServer calls this
                        program when it firsts starts up.
			

Setting it up!

       First off make a mountlist entry for the Con1-Handler.
 Make a directory somewhere called "bbs". Then assign it, eg -
 "assign bbs: device:subdirectory/bbs". Create a subdirectory
 off of bbs: and call it "mail". Next sit down with a pen
 and paper and think. Write down all the devices that are
 available to level 1 users (the lowest level). Think very
 carefully about what devices you select. (I try to keep people
 off my hard drive.) Then select the commands that level 1 users
 can execute. (Format seems to be a bad choice.) Commands that
 open their own window, should not be used because most of them 
 will not return control to the CLI and the remote user can
 not close the window. Do the same thing for level 2 users. You
 might ask, why two levels? I find that I can trust some people
 more then others. You might loan your Corvette to some friends
 and the Volkeswagon to others. There must be one device
 that is common to all level users. This is called the "HOME
 DIRECTORY DEVICE". The root of this device is where all level
 of users will start from when they log on. It is also the area
 that all uploads and downloads take place. A file must be moved
 here, before it can be sent. Received files will arrive here.
 Do not use Ram: as your "HOME DIRECTORY DEVICE". Rz checks how
 much space is left on Ram: before it receives a download file.
 Ram: then says that it has 0 blocks free and rz aborts the transfer.
 Decide what level can download from your system. Decide what
 level can upload to your computer (this is much more dangerous
 then downloading and should require a higher level). If you
 select a level of 4 for up/downloading then no level user will be able
 to send or receive files. The modem string has to be just right for
 this program to work. I use ATE0 L0 M1 Q0 V1 &D2 on a Supra 2400.
 I will explain each entry in case your modem is not a Supra.
 
          E0 - Modem does not echo back commands (this is 
               important.
	       
          L0 - Low speaker volume (does not matter).
	  
          M1 - Speaker on until carrier received (does not 
               matter).
	       
          Q0 - Modem returns result codes after commands (this 
               is important).
	       
          V1 - Selects Verbal result codes (this is important).
	  
         &D2 - Modem hangs up, disables autoanswer, and goes to
               command state upon ON-to-OFF transition of DTR 
               line (this is important).

 DO NOT PUT THE MODEM IN THE AUTOANSWER MODE eg. ATS0=1.

 Now execute Sysop and select "Configure". It will
 put a file in the assigned BBS: subdirectory called config.
 Enter the previous well thought out data.
 Now move SerServer, Sysop, NoRequest, logon,
 help and greeting into the assigned BBS: subdirectory (the text files
 help, greeting and logon, do not have to be present for SerServer to
 work). Copy sz and rz into the C: subdirectory. Copy Con1-Handler into
 the L: subdirectory. The DOS commands copy, cd and endcli,
 must be in the C: subdirectory. Use Sysop
 to enter yourself and who ever, in the userlist. This will create a
 file called passwords in the assigned BBS: subdirectory.
 Make sure that the sysop is the first entry in the password file and 
 remember the password. You will be asked for this password every time
 you run this program to make changes. The program does this to prevent
 someone from uploading the file to the BBS and making changes to the
 config or passwords. The program also writes to the log if you fail the
 password.
   
 Now do the following:
           
mount con1:                         (done after a reboot and not yet mounted)

assign bbs: device:subdirectory/bbs (after a reboot)
 
newcli con1:                        (every time the program is started)

SerServer                           (every time the program is started)


 Now the program is up and running and ready for someone to
 logon. The text that is received from the Con1-Handler and the
 serial device is send to the CLI window that serserver is
 started up from. The program can be terminated by selecting the
 CLI window and typing Control C. People logging on should set
 their terminal programs for 8N1.

Commands

 SerServer will parse the command line for level 1 and 2 users. If
a user types "df0:dir" then the parser will eliminate the "df0:" and
only "dir" will be sent to CLI (this assumes that dir is an allowed
command). This along with alias (as shown later) will prevent users
from renaming files (to an allowed command name) and then uploading and
executing them.
 Commands that should not be allowed to level 1 and 2 users are
execute, alias, assign, protect, endcli and format.


Help

  A user can type help or "?" along the command line and get a help file
if the Sysop provides a text file called "help".


Mail

   At a CLI prompt a user can type "mail" and they can leave private
 or public mail. Private mail is created in a file under the users
 name (the name of the user who is to receive the mail). Private mail
 will be deleated after it is read by the user. Public mail is put
 in a file called "ALL". It will grow in size until the sysop either
 deletes it or edits it. (Some text editors can handle this file.)
 All messages are saved in "bbs:mail/". 

Things to think about!

    Level 3 is the highest level user. There is no parsing of
 the command line for a level 3 user. If format is in the
 command path and a level 3 user says "format drive DH0: name
 NOTHING" then your brand new hard drive will erase it's brains.
 The same thing can happen with any level user, if you make the
 command available to them. If you make Alias available as a
 command then users can do things like "alias dir format" and
 type "dir drive DH0: name NOTHING" and format your hard drive
 if DH0: is one of the available devices and dir is an allowed
 command.
  
 How about if you make zoo an available command and a user puts
 format renamed as dir in the zoo. They can then de-zoo the file
 and format your hard drive because the CLI will find dir
 command in the current path (really format) before it goes to
 c:.
  
 Endcli will terminate SerServer from a remote. I felt that this
 was handy for the sysop to drop the program from a remote
 terminal but can be a problem, if it is an allowed command.
 What I'm trying to say is, pick your commands and devices
 carefully. And most important, know who the hell your letting
 on your computer! 

Timings and Stuff

      Anyone is allowed one minute to type in their name at the
 login prompt, another minute for the password. Everyone is
 allowed three tries and then it hangs up. Level 1 and level 2
 users are allowed two minutes of inactivity at a CLI prompt
 before the program drops them. Level 3 users can be at a CLI all
 day and do nothing and the program will not hang up. In the Mail
 section of the program, time outs will happen to any level user.
 There is no limit to the over all on time for any level user as long
 as they are doing something. 

Log Keeping

    The program keeps a log in the BBS: subdirectory called "log'.
    This requires that BBS disk NOT be write protected.

Zmodem Stuff

    The program uses Zmodem for up/downloads. Sending from a
 remote is easy. I used Online!, Telix and JrComm for testing.
 Just select 32 bit CRC (16 bit works also) and at a CLI prompt
 in the BBS, select upload in Online!, JrComm, or Telix. Pick
 the files and then sit back and wait (have a beer) till they
 all arrive at the BBS.
  
    Sending files requires a little more work. First the files
 have to be in the "HOME DIRECTORY DEVICE" root. Use copy to
 move them there. Then along the CLI prompt line type:

     send file1 file2 file3 (etc)
     
 Make sure your terminal program is setup for auto downloads.

"Send" will also accept several options, like so:

send -ao file1 file2

The options are these:

+ - append to existing file.
a - (ascii) change NL to CR/LF in text file.
b - binary file transfer.
e - escape all control characters.
n - send file if source is newer.
N - send file if source is newer or longer.
o - use 16 bit CRC checking.
p - protect existing destination file.
r - resume/recover interrupted file transfer.
y - overwrite existing file.

 Not all of the options of sz are supported in SerServer, and it
 will prevent unsupported options from being used.
 
Neet Things

 There are some neet things that you can do with Alias. It can provide
a whole bunch of extra commands this way. Say you want users to be
able to read the log file but don't want them to have access to Df0:
where the bbs: files are kept. You can then set up an Alias that reads
like this:

      Alias log type bbs:log

You then add log as a command to the Sysop program, and users can read
the log file.
Say you have a bunch of users that don't know dos commands. You can add
help files for each allowed command by doing somthing like this. Create
a subdirectory off bbs: called "help". Then put a text file in there called
"dir". This text file will explain the "Dir" command and it's options.
Then set up an Alias like this:

     Alias what type bbs:help/[] 
 
The user then types "what dir" and gets a help file on "Dir". What has to
be added to the allowed commands. 

Scripts

 Here are a couple example scripts to show you how to set up the the
BBS and use the alias command.

assign bbs: df0:bbs
c:mount con1:
newshell con1: from s:remote-shell <---- This starts the remote-shell script.
stack 10000
bbs:serserver
endcli


And here is the remote-shell script.

stack 10000
cd vd0:
Prompt "(%N) %S>> 
alias dir c:dir                  <---- You should have an entry like these
alias list c:list                      for every allowed command for
alias type c:type                      Level 1 & 2 users. This helps prevent 
alias echo c:echo                <---- users uploading and executing a file.
alias copy copy [] NOPRO BUF=10  <---- allows copyied protected files to be deleted.
alias log type bbs:log           <---- Gives the log to users.
alias what type bbs:help/[]      <---- If you want help files.



Bugs and Other Critters of the Night

     Well this is version 1.03, so what can I say. People doing
 buffer dumps and hanging up in the middle of things can always
 be a problem. I have tried to catch these problems, but bugs
 always seem to surface. I am releasing the executable but will
 retain the source on this one. Let me know if you find any
 problems. Please don't say it just locked up, try to tell me
 what the program was doing, when it locked up!

Things to Do

    Programs like this always have things that can be added. I
 might add a chat feature in the future. But for now, this meets my
 needs. I program for me first and you last.  

CopyRight and Things

    I am retaining the copyright on Con1-Handler and SerServer Version 1.03
 but will release it's use to the public for non-commercial use.
   

How To Rip Me Apart

   You can contact me on CompuServe, my UI is 76515,3017. You can also
 reach me on Fido Net 1:255/1 or Punter Net Node 95.

Thanks

   Many thanks to Wayne Marchand and the Mad Scientist for debugging and
  helpful comments. A real big thanks goes out to Mad for pulling down
  his bbs and putting up SerServer. This found bugs, that would have
  taken years to find by using a term prog on my 500 and SerServer
  installed on my 2500.


History
   
   Version 1.00 - Orginal alpha testing version. Not released to public.
   
   Version 1.01 - Fixed bug in dropped carrier lockup. Program was 
                  waiting on timer message that never came. Fixed 
		  PassWordMaker so that it did not wreck the password 
		  file when editing user entries. Not released to public.
		  
   Version 1.02 - Added log keeping and moved sz & rz into the C:
                  subdirectory from the "HOME DIRECTORY". Not released
		  to the public.
		  
   Version 1.03 - PassWordMaker was rewritten by The Mad Scientist and
                  called Sysop. Thanks a lot Doug! (call his BBS at
		  506-648-9196). Added the mail feature and caught a
		  few more bugs. Added Mail to the Sysop program so
		  the sysop can read his own mail (or anyone's).
                  Made level 1 and 2 users command line get parsed
		  so a path can not be set to a command. Password 
		  protected the Sysop file.