Citadel/UX: Room based bulletin board software for UNIX systems Release 2.24, August 1988 Written by Art Cancro (Inspector Gadget) UNCENSORED! BBS (914) 761-6877 300/1200/2400 Installation/sysop documentation Citadel/UX is designed around both the UNIX operating system and the Citadelstandard for room based bulletin boards. Installing a Citadel/UX system shouldbe rather easy provided that the installer knows a little bit about the UNIXoperating system, the Citadel bulletin board standard, and the "C" programminglanguage. (The reason a tiny bit of "C" knowledge is required is that in orderto configure the system [number of rooms, etc] one must edit the sysconfig.hheader file, and then compile all programs which use it. Citadel/UX may be freely distributed, provided that no sum of money ischarged for its distribution. It may NOT be used as the parent code for anyother program, however, sysops may edit the program to their liking to fittheir particular systems. UNIX is a trademark of Bell Laboratories. SPECIAL FEATURES Citadel/UX has some features found only in select versions of Citadel andsome features not found anywhere else. Among them are: - Voting. Sysops/aides can create ballots for the users to fill out at theirown option, giving a chance to make the system a 'democracy' or just to findout more about the user base in general. - The ability to prompt after each message. - A call log which records all connects, logins, logouts, carrier drops,sleeping, and bad password attempts. - BBS users can send and recieve uucp mail. (see uumail.shar) - Problem user flag. - Networking with other Citadel/UX sites, and with UseNet - Fully supports multiuser access. - A "subsystem", or the ability to shell out to other programs. RECENT CHANGES - xmodem.c has been replaced by wcrecieve.c and wcsend.c - these programs aremuch more reliable. - auto vandal detection has been replaced by a problem user flag. - Fixed the bug which prevented aides from kicking people out of rooms - a new .ide ho knows room command - A call log is kept in a circular file, which records connects, logins,logouts, carrier drops, sleeping, and bad password attempts. readlog.c isincluded to read this file, as well as stats.c, which is a statisticsprogram based on this file (you must have the curses package to run stats.c) - The program no longer looks at the login name to determine whether thecaller is a BBS user or shell user. Instead, it looks at the user id andcompares it to the BBSUID variable in sysconfig.h COMING NEXT YEAR: Citadel/UX v3.00. *major* changes in all file structures THE FILES Keep a seperate directory for the BBS, and create these subdirectories: rooms Contains indexes to message file for each room. help Contains all .elp files. messages Contains all system messages. files Subdirectory for textfile uploading/downloading. voting Contains object code for "ballot boxes". Here are the "C" source code programs that should be inthe BBS directory: citadel.c } routines.c } rooms.c } linked together, these form the BBS shell. commands.c } messages.c } setup.c System configuration/installation program. sysoputil.c Sysop utilities. userlist.c Lists BBS users. Also called by .ead serlist mkvote.c Compile a vote source code. rmvote.c Remove a vote from the system. wcrecieve.c Xmodem program. wcsend.c Xmodem program. readlog.c Reads the call log stats.c Call log statistics (requires the curses package) Create an account in /etc/passwd which looks like this: bbs::999:999:BBS Account:/usr/bbs:/usr/bbs/citadel It doesn't have to be called BBS, and the userid and groupid can beanything you want. HERE'S THE IMPORTANT PART: make sure that you put theuserid of this account in the BBSUID variable in sysconfig.h - hereis an explanation of this file: There are two header files: citadel.h and sysconfig.h - youedit sysconfig.h to customize your system - most settings are size-oriented.Edit sysconfig.h to your liking, and then compile all the programs whichuse it. (The ones listed above). Now make sure that all files in the directory and itssubdirectories have read/write permissions for EVERYONE, and executepermissions for EVERYONE for files which are executable. The exceptions are: - The source code (in case you don't want anyone changing your source!) - sysoputil.c and sysoputil (you only want the sysop to have access to that) The next thing you must do is find some way of informing users that theymust type 'guest' or 'bbs' to log in. If your system prints a banner beforethe login prompt, no problem. Simply put it there. If not, you'll eitherhave to edit the binaries for getty and login, which is really tough. Ifworst comes to worst, you'll have to say something about typing 'guest' or'bbs' when you advertise the board. By the way, there's an extra login feature for users who are alreadyon the board and use the shell (sh). When they run the main program,it automatically creates an account for them usingtheir full name found in /etc/passwd (the "full name" field). Accountscreated in this manner do not require a password, since logging in from theshell assumes that the user has already entered a password when logging in.You should create a batch file called /usr/bin/bbs which looks like this: cd /usr/bbs (or whatever it's called) citadel That way, shell users can log in to the board simply by typing 'bbs' atthe shell prompt. One final word about this: accounts created in this mannermay not be accessed by typing 'guest' at the login prompt. Users who createdtheir accounts from the shell must use them from the shell. After you have edited sysconfig.h and compiled all the "C" programs, cdto your bbs directory and run setup. The system will ask questionsabout whether it should initialize various files. Since this is the firsttime installing the system, you should answer yes to all the questions. Hereare the files it will create: msgmain Contains all message text. usersupp User account information. quickroom Information on rooms. MMstructure Information about the msgmain file. voteinfo Information on system votes. eternal Contains the current "eternal" user number. calllog Contains a record of logins, logouts, hangs, etc. There are a few others; these are the important ones. It will also attempt to create the directory "rooms" and placein it one file for each room slot on the system. These files contain indexesto the msgmain file. You'll never have to bother with these files. You must have an executable file called "subsystem" whichcan be either a shell script or an executable program. This file isrun when a user types "*" at the room prompt for a subsystem. In the subsystemyou may want to put online games, messages, or perhaps a shell. Likewise,a teleconferencing program may be placed in "chat", and it iscalled when the user presses "C" (argv[1] is set to the user's name). If "errmsgs" is present, if the system ever has an internalerror, it will print a message from that file describing the error. Thisfile does not have to be present: if it is not found, the error number onlywill be printed. Most internal errors are the result of incorrect filepermissions on one or more files. The file "tabooname" MUST be present. This file contains words or characters which users may not use in their login names. The fieldsare seperated by spaces or newlines and the file ends with a @ character.After the @ character you may put comments, since the system stops readingwhen it finds the @ character. Here is a sample file: sysop 0 terrorist @ First of all, you don't want people logging in as "The Sysop" and sayingthings like "The system is going down permanently tomorrow". The 0 is thereso an account called, say, "JOHN DOE" won't be counterfeited by someonelogging in as "J0HN D0E". I added "terrorist" as another example. Say therewas a problem user who logged in as "The Terrorist". Simply kick him off thesystem and add the word "terrorist" to this file. Then the next time theylog in, they can't use any name that has the word "terrorist" in it. Theusefulness of this file depends on how cleverly you use it. Here are the files the program may look for in the "messages" directory: aideopt Command options printed when an aide types .A? changepw Blurb concerning how to choose a password dohelp Printed when a user types 'h' or '?' at the room prompt entermsg Blurb printed before entering a message entopt Enter options printed when a user types .E? goodbye Printed when a user logs out. hello Printed when a user logs in. help (link to dohelp) newuser New user policy readopt Read options printed when a user types .R? roomaccess Blurb on the different types of private rooms unlisted Blurb on the pros and cons of having an unlisted userlist entry. Blurbs are only printed if a user has specified that he/she is not anexperienced user. The system will not crash if one of these files is notfound, but it will print a message saying so. These files are regular textfiles, formatted like any other text. In the "help" directory are any help files you want to add. There are norequirements. For example, if a user types .elp SUMMARY it will displaythe file help/summary on the screen. There can be as manyhelp files as you want or there do not have to be any at all. At this point your system should be configured correctly. If you get stuckon a problem or if you have any meaningful suggestions, feel free to contactme on my board, UNCENSORED! BBS (914) 761-6877. If you set up an actualsystem running this software, please let me know! I would like to call everyboard which runs my software so I may see how it is running and note possibleimprovements, as well as discuss networking possibilities.