DialSoft C.O.N.T.R.O.L.


Instruction & Configuration Manual










































Richard Iglar
August 8, 1997



Table of Contents

Introduction	
Pricing Information	
Suggestions from DialSoft	
How to contact DialSoft	
Installation	
MajorBBS 6.25/WorldGroup 1.x, 2.x Setup	
MajorBBS 6.25 Limitations	
Main Menu Options	
C - Create Configuration File	
Config - General keys & settings	
I - Information	
U - Update lines	
L - User logging controls	
N - New User Controls	
K - Killwords / Killnumbers	
R - Rodent controls	
D - Duplicate account report	
S - Search the account database	
E - Export the account database	
V - View the log file	
P - Pseudo Keys	
SB - Set lines to busy-out.	
SN - Set lines to no answer.	
SA - Set lines to answer.	
Class Controls	
AC - Add a Class Control	
EC - Edit a Class Control	
LC - List Class Controls	
DC - Delete a Class Control	
Key Controls	
AK - Add a Key Control	
EC - Edit a Key Control	
LC - List Key Controls	
DC - Delete a Key Control	
Line Controls	
AL - Add a Line Control	
EL - Edit a Line Control	
LL - List Line Controls	
DL - Delete a Line Control	
TCP/IP Controls	
AT - Add a TCP/IP Control	
ET - Edit a TCP/IP Control	
LT - List TCP/IP Controls	
DT - Delete a TCP/IP Control	
Grant Controls	
AG - Add a Grant Control	
EG - Edit a Grant Control	
LG - List Grant Controls	
DG - Delete a Grant Control	
User Lock Controls	
AU - Add a User Lock Control	
EU - Edit a User Lock Control	
LU - List User Lock Controls	
DU - Delete a User Lock Control	
Global Commands	
The Class Controls Command	
The Idle Command	
The Baud Stats Command	
The Baud Stats 2 Command	
The Time Stats Command	
The Month Stats Command	
The New/Total Mail Stats Command	
Text Variables	
Cycling Text Variables	
Variables V1 - V5	
Conclusion	


Introduction

Welcome to DialSoft's C.O.N.T.R.O.L.  This is your official CONTROL Bible!  Read this manual from cover to cover to understand the full workings of this powerful module.  CONTROL is made up of several different types of control.  I can best explain this by showing you how we came up with the name of the module:

C	Class Control
O	Online Time Control
N	New User Control
T	TCP/IP Control
R	Rodent Control
O	Online Configuration Control
L	Line Control

	CONTROL does all that, and more!  I will try my best to explain all of the features of this module in this manual.    CONTROL is currently in it's beta testing period.  We have been running it for over 1 month on our system,  and we have fixed all bugs we've come across,  but there's always a possibility for bugs we have missed.  And since I am adding features in daily,  we can lose track after a while.   If you come across any, please let us know!  We believe CONTROL will help you control your system in many ways.  We at DialSoft take ALL suggestions into account,  therefore if you have any ideas you'd like to see in this module, get in touch with us!  


							Richard Iglar
							May 20, 1997

Pricing Information

	If you purchased modules to do all that CONTROL does,  you would pay well over $400. We are selling CONTROL at $149.95 for an unlimited user license.  If you own DialSoft's Bouncer module,  you are offered an upgrade cost of $90.00 to upgrade to CONTROL which is the price difference between the cost of the modules.  We are doing this because CONTROL is an extension of The Bouncer,  and includes many of it's features.  

Suggestions from DialSoft

	We highly recommend that you use DialSoft's DS-DOS along with CONTROL.  Our DS-DOS module will give you a complete online DOS Shell which can help you a lot with viewing, copying, searching, deleting files created with CONTROL.  DS-DOS currently sells for $99.95, although we will honor a special price of $50.00 if you purchase it with CONTROL.  We're calling this the CONTROL PowerPak, CONTROL & DS-DOS for $199.95.  If you own Bouncer and would like to purchase the CONTROL PowerPak the price is $140.00.


How to contact DialSoft

E-mail:			marc@jungle.net		(sales, tech support, etc...)
			richie@jungle.net		(tech support, suggestions, comments...)

World Wide Web:	http://www.dialsoft.com/		(News, upgrades)

BBS:			201-JUNGLE8			(Support board)
			jungle.net			
			http://www.jungle.net/

Mailing Address:		DialSoft
52 Comanche Avenue
Rockaway, NJ 07866

Phone:			(201) 586-1550			(sales, technical support, questions)


Let us know what you think of CONTROL!


Installation
MajorBBS 6.25/WorldGroup 1.x, 2.x, 3.x Setup

CONTROL is very simple to set up.  Follow the following sequence of instructions, and you 
should be on your way to the web!  

*  	PKUNZIP the DIACONxx.ZIP file to an empty directory, then run the INSTALL.EXE program.  If you received a distribution diskette, simply run the INSTALL.EXE file.
 
*  	After all of the files have been copied, you will be brought into the Release Notes file, then onto your system to configure the menu options.
 
* 	Add "Dialsoft CONTROL" to your menu tree, make sure you protect this page so normal users can't get to it!!
 
* 	All done! BBS GO!

MajorBBS 6.25 Notes & Limitations
	Since CONTROL uses a WorldGroup 3.0 installation method,  the call to WG.BAT fails to execute.  To avoid this problem, create a batch file called "WG.BAT" in your bbs directory with the folloing line in it:  "bbs.bat %1".  That will take are of the problem! CONTROL was not designed in the MajorBBS 6.25 operating environment, but I did my best to port the code over to work with MajorBBS 6.25, since there are many MajorBBS 6.25 customers out there.   Some of the features that do not work under MajorBBS 6.25 are:

New user E-Mail notifications - The sysop will only get notification if he/she is online.
The "no /P while /P off" mode will not work. 

	There are no current plans to fix these routines for MajorBBS 6.25.

Main Menu Options

From the Main Menu you have the following options.  I will do our best to explain the workings of each command, as well as the effects of each setting.  If you have any questions,  please feel free to contact us!

config	Online MSG configuration, keys, global settings.
G	Global Commands
I	Information
N	New User Controls
K 	Killwords / Killnumbers
R	Rodent Controls
L 	User Logging
C	Create configuration file
U 	Update Lines
D	Duplicate Account Report
S	Search Account Database
E	Export Account Database
P	Pseudo Keys
V	View the log file
SB	Set lines to busy-out.
SN	Set lines to no answer.
SA	Set lines to answer.

AC, EC, LC, DC		Class Control
AL, EL, LL, DL		Line Control
AK, EK, LK, DK	Key Control
AT, ET, LT, DT		TCP/IP Control
AG,EG,LG,DG		Grant Control
AU,EU,LU,DU		User Lock Control

V1,V2,V3,V4,V5		Cycling Text Variables


C - Create Configuration File

The configuration file is an important tool for you, as well as for us dudes at DialSoft who need to help you if you have a problem.  If you encounter a problem with CONTROL,  the first thing we will ask you for is your DIALCTRL.CFG file and your current DIALCTRL.LOG file.  The configuration file writes down ALL (and we mean all!) of your current settings,  controls, etc to a text file.  Most of the creation dates & modified dates of CONTROLS will also be written down.  It also writes a full list of all your defined channels, with their hardware type, channel group, and current controlling line group.  This will help you configure your systems line control features.

When you first install CONTROL, it will create a directory called "DIALCTRL" off of your system directory (in most cases ?:\WGSERV), so the directory will be ?:\WGSERV\DIALCTRL.  This is where CONTROL will store all of its log files, etc, including the DIALCTRL.CFG file.

Two other files CONTROL will create (on it's own, at cleanup) are the MODSTATS.TXT file and CLSSTATS.TXT file.  These files are pretty much replicas of the associated MODSTATS and CLSSTATS commands in the Galacticomm Remote Sysop Menu.  CONTROL appends these values to the file at cleanup so you can check your system growth/usage over a period of time.


Config - General keys & settings

CONFIG is the heart & soul of all DialSoft products.  Every new DialSoft module will have at least one config command which enables you to control options you would normally see in the offline CNF.  We at DialSoft believe that your system should be 100% configurable while it's running, so we make that possible.  

Activation Code 
	CONTROL will run on your system for 2 weeks without an activation code.  That is your demo/evaluation time of this product.  If you find it useful,  you may purchase an activation code from DialSoft to register your copy.

Key required for SysOp access in CONTROL
	The holder of this key will be able to see system statistics in various commands such as "/IDLE" as well as not being disconnected for /P bombing.  It should generally be given to only highly trusted SysOps.

Record all events to DIALCTRL.LOG file?
	Right now this option does nothing,  in order for me to debug the module logging is active all the time.  In the future it will control the log file,  but for now just ignore it.

Key which protects users from line control
	Users who hold this key will be protected from all line controls.  For example,  if your line control is set to disconnect users who logon at speeds less then 14,400bps,  then a user who logs on at 2400bps and has this key will not be disconnected.

Key which protects users from class control
	Users who hold this key will be protected from all class controls.

Key which protects users from idle disconnects
	If you have the idle-time out feature enabled in any of your line controls,  users with this key will not be disconnected if they exceed the idle time limit.

Key needed to use the I: invisible logon
	A nice feature of CONTROL is the ability to logon invisible.  This allows you to logon without your other users knowing.  At your system UserID prompt, if you enter "I:SYSOP" as your UserId,  you will be logged on invisible after you enter your password.  Only users who hold this key will be allowed to logon invisible.

Default database exported fields
	This string specifies the default exported fields when running the Export User Database command.  In this field you would enter the tokens for the fields you would like to export.  See the Export User Database section for more information.

System full percentage
	This value determines when users should be bumped off to let other users on when your system becomes full.  This is only active when you have "FULL Lines" set in Line Controls.  Basically,  your "Full Lines" are priority lines, such as modem channels.  When your "Full Lines" reach this percentage,  CONTROL will then look for users to disconnect based on their KEY priorities & time online.  There will be more on this topic later in the manual.

Should bumping be based on time/day or call?
	This option determines which users should be bumped when your system FULL Lines reach the full percentage.  If this option is set to "Time/Day" the users who will be bumped first will be the ones who have been on your system longest in the current day.  If it's set to "Time/Call" the user who has been on the longest for the current call will be bumped first.

Maximum users to bump at system full time
	This value determines how many users (at most) will be disconnected when your "Full Lines" reach the system full percentage.  Only users who are eligible to be disconnected will be disconnected.

Lockout
	This value determines how long the user will be locked out from the system after he is bumped (when the system gets full).  This prevents users from simply hanging up and calling back to avoid losing their line.  If you don't want to lock users out, set this value to 0,  otherwise enter the amount of minutes you would like to lock the user out for.  The reason for this lockout could be edited in CNF message block BLOCKRSN.

Enable auto-disconnect for ghosted accounts?
	A "YES" or "NO" option.  When enabled,  CONTROL will disconnect a "presumed dead" session if a user logs on successfully while their account was online.  This is commonly known as "ghosted channels".  The user will be disconnected right after the password was successfully entered, and the user will receive a message that their account was assumed "ghosted".

Key which automatically protects accounts
	There seems to be a bug in the baseline code which deletes accounts if they haven't logged on in a certain amount of days.  Use this option to protect users from deletion.  If a user has this key, they will be protected from deletion next time they logon.

Enable protection of unlimited day accounts?
	There seems to be a bug in the baseline code which deletes accounts if they haven't logged on in a certain amount of days.  This option will automatically set a users protected flag to TRUE if they have unlimited days in their account.  Please note that this affects ALL users/classes which have unlimited days!  

Format for advertisement files
	One request made for CONTROL was the ability to show rotating text files.  I call these "advertisement files" because they can be used to show advertisements to users during the logon or logoff sequence, as well as on the fly using a global command.

	These advertisement files cycle through by number starting at 1, and you must specify the format of the files.  By default, the format is: ADVERTIS.%D  The "%D" field represents the current number that is being displayed.  This format yields the following cycling results: ADVERTIS.1, ADVERTIS.2 ADVERTIS.3, etc. for advertisements 1, 2, and 3 respectivly.

	You can modify this to be anything you like, as long as you include the "%D" in the field.  For example: AD%D.TXT will yield the results AD1.TXT, AD2.TXT, AD3.TXT, etc.

Show advertisement files during logon sequence?
	This controls whether or not the advertisement files will be shown during the logon sequence.

Show advertisement files during logoff sequence?
	This controls whether or not the advertisement files will be shown during the logoff sequence.


Store IP address of user in which account field?
	A good way to see where your users come from is to have a record of their last used IP Address.  With this option enabled, you can select a field in the user account where you would like to save this information.  This is active on ALL accounts if they telnet in.  The IP address is updated each time the user logs on.  The fields you can save their IP address in are:
Field		Description			
		None		Doesn't store the IP Address.
Company	Company Line	
		StreetAddress	Address Line 1
		City/State	Address Line 2
		Country		Address Line 3
		Phone Number	Phone Number Line
	The best place to put it would be the "COUNTRY" field.
		

I - Information
	
This is just an information screen.  Nothing special to document about that here.
U - Update lines

This command should be run when you want to commit any Line Control settings you have made.  For example if you just modified your modems line group,  you should run this command to make sure that all channels are updated with the new control information.  This applies only to using the Line Control commands: AL, EL, LL, DL.  

L - User logging controls

The user logging feature of CONTROL allows you to record all they keystrokes entered by a user.  Since all input from the user is trapped from the global handler routine,  it's possible that some strings a user types will not be logged,  but in most cases  the information  you need (text typed in chat, /P's, etc) will be logged.  All log files created by CONTROL are stored in the "DIALCTRL" directory as "UserID.TXT".  For example, if you were logging UserID "Sysop", the file would be saved as "SYSOP.TXT".  Long UserID's will be truncated, to fit the 8 character DOS naming convention.  CONTROL is also smart enough not to log 2 similar ID's to the same file.  You have upto 30 fields to enter UserID's for logging.

NOTE:  When you are logging a user,  the log file for that user remains open until the user logs off.  This means you will not be able to view the users current session until the users hangs up and the file is closed.

Log single character input lines to file?
	With this option enabled,  any single character input lines will be ignored.  This is so you don't have to see the user navigating your menuing system,  or typing 'X' a billion times.


N - New User Controls

The new user controls of CONTROL enable you to rid of annoying users who log on with false information.  It's not uncommon to see annoying kids logon as "Asdfsdf" with garbage filling every field of their account.  New user control will put a stop to this, as well as let you control which is "garbage" info. 

Should new users accept the rules after logging on?
After a user logs on as "new", you have the option of making them agree to a set of rules you specify.  If this option is enabled, the Level6 Message block "THERULES" will be printed to the new user.  If the user does not accept your rules, they will be disconnected. 

Punishment for failing to pass new user control 
There are 3 possible responses for this field; HANGUP, SUSPEND, DELETE.  All responses are self explanatory,  and all users who fail to pass new user control will suffer one of these consequences.

Punish users who enter only a first name only? 
If this option is enabled, any user which enters only one string as their name will be punished.  For example, if a user puts "Richie" as his name he will be punished,  but a user who puts "Richie I" as his name will not be punished.

Punish users who enter and invalid address?
When this option is enabled,  all users who fail to enter a proper address format will be disconnected.  The proper address format would be a string which contains digits and a string.  IE: "52 Comanche Avenue" is a valid address, as well as "PO Box 42".   One example of an address that's invalid would be "Sycamore".  

Punish users who use letters in their phone #?
When enabled, this option will punish any user who uses an alphabetic character in their phone number.

Punish users who are not of age?
When enabled, this option will punish any user who does not meet your age requirements.  The minimum and maximum age required are set by the next two fields.

Minimum age
This option works with age checking.  This value specifies the minimum age required for access on your system.  This may be useful for sysops running adult systems, where a minimum age of 18 is required for access.

Maximum age
This option works with age checking.  This value specifies the maximum age required for access to your system.  We found this useful because we have found several annoying users to logon with the birthdate "1/1/1" which means they are 96 years old.  In almost every case,  this indeed is fake, so you may wish to make the maximum age of your system 70.  This means if a user is 71, he/she will not be allowed to access your system.

Punish new users who use profanity in the following fields...
This group of options controls whether or not users will be disconnected for using profanity in their information.  You may selectively enable/disable checking for profanity in the UserID, Name, Company, Street Address, City/State, Country, and Password fields. What you would consider a profane word, is most likely what DialSoft defined as a profane word. :)

New user notification accounts/forums #1 - #5
	The accounts listed in these fields will receive mail every time a new user logs on to your system.  It is an extension of the default new user mail,  but also contains information such as the channel the user logged on to,  the baud rate.  If the user connected on a TCP/IP channel, it will also show the IP the user came from, and their associated System name (from TCP/IP control, if defined).  Also, if you may also forward new user emails to forums by specifying the name as "/FORUM", so if you wanted to send new user mails to a forum called "NEWUSERS" enter "/NEWUSERS".

Send new user email even if user is punished?
Since CONTROL has it's own built in new user e-mail notification,  you have the option of not getting the new user mail notification of users who fail new user control.  I would recommend you keep this option enabled because all mails sent by CONTROL will let you know why the user failed new user control.

Format of new user database text file
	A great way to keep track of users who called your system is to have a list of them right when they sign up.  With this option,  you can the fields of information you would like to save about all new users.  The information will be saved in the file called "NEWUSERS.TXT" which is a TAB delimited file.  You can then import this file into almost any program (such as Microsoft Excel) to create mailing lists,  or for your own personal records.  The fields for this option are:

A.  UserId
B.  User name
C.  Company
D.  Street Address
E.  City, State, Zip
F.  Country
G.  Phone Number
H.  Birth date
I.  Sex
J.  Password
K.  Account Creation Date

	For example, if you wanted to write the User's name, phone number, then UserId, enter the following string in:  BGA

Write new users to database even if user is punished?
Like the e-mail option,  you have the option whether or not to include new user information in the new user database file if the user fails new user control.


K - Killwords / Killnumbers

Killwords and Killnumbers work with new user control.  These options allow you to punish users for using certain words and or phone numbers in their information.  

Punish new users who use killwords in the following fields...
This group of options controls whether or not users will be disconnected for using killwords anywhere in their information.  You may selectively enable/disable checking for killwords in the UserID, Name, Company, Street Address, City/State, Country, and Password fields.

Killwords
Here you have five lines of text to define your killwords.  By default,  CONTROL defines the following killwords:  asd sdf jkl qwer zxc.  These are commonly found character strings in garbage information.  You may wish to extend upon this in any way you like.  You may also use these fields to keep unwanted users off.  For example,  if you didn't want any one with the last name "Smith" on your system,  you may enter "Smith" anywhere in the text fields.  (Also, make sure that killword punishment is enabled for Name!)

Killnumbers
Here you have five lines of text to define your killnumbers.  The killnumbers field applies only to the phone number field in the user account.  By default, CONTROL defines the following killnumbers:  911- 000- 0000 123-4567 411- 976- for obvious reasons.  We also suggest expanding on this by entering your system's phone number in.  We have found many fake users to enter our system phone number as theirs. You may also wish to enter phone numbers of harassing callers, etc..  The possibilities are endless.. 

Punish new users who use killwords in the following fields...
This group of options controls whether or not users will be disconnected for using killwords anywhere in their information.  You may selectively enable/disable checking for killwords in the UserID, Name, Company, Street Address, City/State, Country, and Password fields.


R - Rodent controls

What is a rodent you ask?  Well it's a pesky little critter, of course!  In the rodent controls you will find fields which punish users for random acts of annoyance on your system,  one prime example is /P bombing, another is Input Bombing.  Don't you hate when users go into Teleconference and dump lines and lines of trash?  (Well, that doesn't happen in DialSoft's DialChat (hint,hint))  CONTROL will take care of input bombers, regardless of where they are!

Enable teleconference chat bomb protection?
There is a rather annoying bug in Galaticomm's Teleconference & Entertainment Teleconference where you can disconnect a user you go into chat with.  Simply by dumping a macro, you can fill up the other person's input buffer causing the system to disconnect them.  With this feature enabled, it will make sure that the user does not become disconnected, and it will clear the users input buffer.

Teleconference module name
You must specify the name of your Teleconference for CONTROL to use teleconference chat bomb protection.  This name is by default is "Teleconference", but if you modified the name in the .MDF file, you will have to specify the correct name.  You can enter a partial name in this field, and CONTROL will find the first module name which matches your input (ie: type "tele" and hit enter, and CONTROL will find "Teleconference".)

Flood rate for the input bomb counter
Input bombing is determined by the number of characters a user sends within a 2 second period.  For example,  if you have the flood rate set to 500,  and a user sends more 500 characters to the input buffer, he/she will be punished for input bombing. The next field controls the number of characters that will be counted when the user hits <ENTER>.  This is helpful because if users type something like "a<ENTER>b<ENTER>c<ENTER>d...etc" they will be charged a certain amount of characters for each time they hit the <ENTER> key, therefore their flood rate would increase significantly because they are hitting <ENTER> a lot within the period. This value is ONLY active for people who are active on the BBS and using menu/command strings.  It will not affect PPP users or users uploading files.  Another note,  If you attempt to enter a value < 256 for this field,  CONTROL will not accept it, and will set it to 0. Why 256?  Because the input buffer per channel is 256 characters, therefore if a user typed 256 characters, and hit <ENTER> they would have been disconnected for doing no harm.  This is why I made the minimum 256. Users who hold the CONTROL SysOp key (See CONFIG) are not affected.

Character value of the <ENTER> key
This is the field that controls how many characters will be counted when the user hits the <ENTER> key for the input bomb counter.  You may want to research what you set this value to.  Setting it to a value such as 100 will definitely cut down on the "a<ENTER>b<ENTER>..." problem shown above,  but it may also be bad for people who play role-playing games and are constantly using single characters to navigate around some silly computer world.  So please take caution in setting this value!

Here's a good all-around setup for catching input bombers:  
	Flood rate		320
	<ENTER> value		50

All records of input bombing are recorded to the LOG file along with their input flood count.  This will help you in deciding where to put your flood rate at!

Punishment for users who input bomb
If a user is caught for Input Bombing, they will suffer one of the following consequences:  Hangup, Suspend, or LockOut.  The Hangup command,  which we find is more then sufficient will hang up a user when they are caught.  Suspending them is a bit extreme,  but if you're a strict person,  you may want to use this. Finally, the LockOut option will lock the user out for a specified period of time using CONTROL's User Lock Controls.  When the user is locked out, he/she can not log back onto your system until the lock expires.  

Flood rate for the /P bomb counter
/P bombing is determined by the number of /P's a user sends in 2 seconds.  For example,  if you have the flood rate set to 2,  if a user sends 2 or more /P's within a 2 second period,  they will be punished for /P bombing.  We recommend a value of 3.  We don't know that many people that can type more then 3 lines in 2 seconds anyway.  Using macros,  it's possible to send about 15-20 pages in 2 seconds,  which is what most /P bombers do.  Regardless of this fact, keeping this value low will insure that no one /P bombs.  Users who hold the CONTROL Sysop key (See CONFIG) are not affected by the /P bomber bouncer.  So yes,  if us SysOps feel the need, we can /P bomb users with no penalties. :)

All records of /P bombing are recorded to the LOG file along with the number of /P's sent,  and the input line of the last /P sent.  Use these values to determine which flood rate is optimal for your system.

Punishment for users who /P bomb
If a user is caught for /P bombing, they will suffer one of the following consequences:  Hangup, Suspend, NoMore/Ps, or LockOut.  The Hangup command,  which we find is more then sufficient will hang up a user when they are caught.  Suspending them is a bit extreme,  but if you're a strict person,  you may want to use this.  Next,  if you want to annoy the user,  set the punishment to "NoMore/Ps", this will remove the users access to /P people for the remainder of their call.  Finally, the LockOut option will lock the user out for a specified period of time using CONTROL's User Lock Controls.  When the user is locked out, he/she can not log back onto your system until the lock expires.  

Length of LockOut if punishment is lockout
If your punishment is set to LockOut this option specifies how long the user will be locked out for.  This value is in minutes and can range from 1 minute to 60 minutes.  This value applies to both the punishments for Input and /P bombing.  

Enable "no /P while busy" mode?
Nothing is more annoying then typing a 3 line response to someone who just paged you,  only to find out they have their busy flag on.  With this option enabled,  and user who tries to send a /P with their busy flag on will receive a message telling them to turn off their busy flag before they /P people. 

Enable "no /P while no page" mode?
Yet another instance of the annoying.  With this option enabled,  if a user has their /P setting to "/P OFF" (meaning they are no longer accepting incoming pages),  they will receive a message telling them to type "/P OK" before they page people.

Log all invalid password attempts?
If this option is enabled, CONTROL will write the password the user attempted to logon with to the log file.  This is good to see if accounts are being hacked. This is here since the baseline code of MajorBBS/WorldGroup fails to do this.

Log all suspended user logons?
If this option is enabled, CONTROL will log all users who logon while they are suspended.  This is here, once again,  since the baseline code of MajorBBS/WorldGroup fails to do this.

Lock accounts after how many bad passwords?
The best way to prevcnt a hacker from hacking an account is to disable it.  This option lets you lock-out accounts after XX number of invalid password attempts.  This will work on all modules associated with your BBS such as PPP, FTP, SLIP, etc.  If you set this value to 0, account locking will be disabled.  We recommend a value of 20.

Length of bad password lockout
This is the amount of time the account is locked out after being disabled for bad passwords.  A value of 60 is efficient,  which means the account will be clear for 1 hour.  You may set this value to 0,  to permanently lock out the account.  Permanantly locked out accounts can only logon from the console,  otherwise the user lock must be removed from CONTROL.  See User Lock Control for information on how to remove a User Lock.

Fields to check for duplicate accounts
Yes, yet another cool feature!  The ability to find duplicate accounts by fields!  Ok, checking for duplicate accounts is not an easy thing to do,  and it's hard for a computer to determine if 2 accounts are identical.  CONTROL does it's best to match up similar fields,  and will save all information in a text file (which you can name at your own will).  

Field		What is defined as similar?		Example of a match
Name		1 tokens must match			Richie Iglar	Richie Smith
Company	1 token must match			Richie Inc.	Richie Corp.
Address		1 tokens must match			25 Mary Lane	10 Mary Street
City, State	1 token must match, excluding state	Rockaway, NJ	Rockaway, NY
Country		1 token must match			USA		USA
Phone Number	close to  exact				586-1550	201-586-1550
Birthdate	same month and day			08/26/74		08/26/80

Our recommendation for searching for duplicate accounts is by enabling the following fields:

Name, Street Address, Phone Number, Birthdate, Password

With those fields enabled,  all accounts with similar names,  streets, etc will be matched against each other and written to the log file.  Just for your information,  NOT ALL fields must match to be written to the log file.  If only one of the fields match, it will be written to the file regardless of the other fields.  When we get to the Duplicate account checking option,  I will explain more on the output of the file.

Log only exact duplicated field matches?
This option tightens up on duplicate account checking. With this option enabled,  field checking will be more precise, and a match would require that both fields be exact.  Example:  "14 Mary Street" and "14 Mary St" would match as exact,  because each field has 3 tokens,  and all the tokens are similar to each other.  

Field		What is defined as exact?		Example
Name		2 tokens must match			Richie Iglar	Richie V. Iglar
Address		All tokens must match			14 Mary Street	14 Mary St.
Birthdate	exact					08/26/74		08/26/74


 D - Duplicate account report

	This will invoke the duplicate account report.  At first it will prompt you for a filename,  by default CONTROL will create ".DIALCTRL.DUP" which places the file in the DIALCTRL directory off of your system directory (confusing, isn't it?).  You can rename this file if you wish, or specify a new path & filename.

	The process of duplicate account checking uses a simple algorithm to start with the first user and check that user against all users above it in the user account database.  The next step would be to check the next successive user in the account database, and check that user against all the users above it in the account database.  The algorithm works out to N! cycles, where N is the number of users in your user database.  Depending on the size of your user base, this could take a LONG time.  The output on the screen will list the current user it's checking.  The next line will be a series of + and - symbols which track the matching process.  All - symbols represent a non-matched account.  +'s indicate that a match has been found and written to the log file.  After the process has completed,  you can view the file it created.  You see something like this:

	Duplicate account report. (CONTROL 0.06)
	Start: 05/16/97 - 11:31 am

	N = Similar name.
	M = Similar company.
	S = Similar Address.
	C = Similar city.
	O = Similar country.
	# = Similar phone number.
	B = Similar birth date.
	P = Similar password.

	UserId                         UserId                         NMACO#BP
	-----------------------------------------------------------------------
	Amethyst                       Chrissie                       -------P
	Anarchist                      Ministry                       N----#B-
	Angel                          Arch Angel                     N----#BP
	Arcain                         Stilletto                      N-------
	Arclyte                        Shaq                           ------B-
	...
	...
	-----------------------------------------------------------------------
End: 05/16/97 - 12:00 pm


The UserId's that match will be displayed on the same line, and the fields that match will be indicated in the last column using on of the characters which are defined above.  When doing duplicate account checks,  our recommendations are matching by the fields: Name, Street Address, Phone Number, Birth date, and Password, with exact checking enabled. (See Rodent Controls for more information.) We  have found this combination to produce the best results for finding duplicate accounts.  Please note that if you enabled ALL fields,  the log file will increase immensely.  Fields which tend to match a lot are the CITY field, and COUNTRY field, and these do not necessarily pinpoint duplicate accounts since there could be hundereds of users from the same city.


S - Search the account database

	This is just an extension of the regular SEARCH command which is in the default remote sysop menu. The main difference is that our search doesn't limit you to one field,  such as user name,  or address.  If you wanted,  you could search the database for all users with the string "Tokyo" in their account information.  Finally,  our search will write ALL of the information in the user account to a file,  so you don't have to pull up individual accounts to search for specific bytes information.  

	When you issue this command,  you will first be prompted for the string you wish to search for.  It is a case-insensitive search,  so "HAPPY" will match with "happy".  Next you will be prompted for the filename in which you wish to save the results of your search to.  The default is "DIALCTRL.SEA" which will save the file DIALCTRL.SEA in the directory "?:\WGSERV\DIALCTRL",  in most cases. Finally,  just like the duplicate account report,  the search will begin at the beginning of the user account database.  All records that match the search string will be indicated by a + symbol,  all non-matches will be indicated by a - symbol. Here's the generated report file of a search for "richie":


	Search Account Database Report (CONTROL 0.08)
	Start: 05/20/97 - 11:27 pm

	Search key: richie

	-----------------------------------------------------------------------

	 User-ID .................... Richie
	 Account Created ............ 09/22/96
	 Last Logon ................. 05/20/97
	 Account Class............... MONTHLY
	 Time Limit Per Call......... UNLIMITED
	 Time Limit Per Day.......... 180 minutes
	 Days Left in This Class..... 3940

	 Name ........... Richie Iglar
	 Company ........ 
	 Addr (Line 1) .. 1 Happy Street
	 Addr (Line 2) .. Happyland, HA 12345
	 Addr (Line 3) .. 
	 Phone Number ... 201-778-9970
	 System Type .... IBM-PC (ANSI)
	 Screen Width ... 80
	 Screen Length .. (continuous)
	 Default Editor . FSE
	 Date of Birth .. 08/26/74
	 Sex ............ M
	 Password ....... happy
	 Credits ........ 0 (Exempt from charges)
	
	-----------------------------------------------------------------------
	...
	...
	-----------------------------------------------------------------------
	End: 05/20/97 - 11:30 pm


	That's about it for this topic!

E - Export the account database

	One of the things we like to do on our system is keep a phone record of all the users who call our system.  Since there is no database export routine in WorldGroup, I decided to add one to CONTROL.  The exporting features I built in are simple,  but very useful.  The fields I made available are:

A.  UserId
B.  User name
C.  Company
D.  Street Address
E.  City, State, Zip
F.  Country
G.  Phone Number
H.  Birth date
I.  Sex
J.  Password
K.  Account creation date
L.  Date of last use
M.  System type
N.  Primary Class
O.  Current Class
P.  Days left in class (if applicable)
Q.  Credits available (debt if negative)
R.  Total credits posted (paid & free)
S.  Total credits posted (paid only)


	When you first execute the Export command,  you will be prompted to enter the order of the fields you would like to save,  or you can hit <ENTER> to use the default fields specified in CONFIG.   Here you type in a string of letters based on the letters next to each field.  For example,  if you wanted the exported file to have the User ID, Name, then Phone number you would type:  ABG at the prompt.  The outputted file will have TAB delimited inputs with CR/LF's at the end of each record.  You can then import this file into Excel or any other database program as a TAB delimited file.  I have done this several times so far, and it's extremely useful!  This is a great way to create mailing lists, as well as backup records of your user database.  Finally, if you have any other fields you would like me to add, feel free to leave me a message.

V - View the log file

	This may be a temporary feature/utility.  When I am ready to, I will create a better way to log all CONTROL events.  Right now, all events are logged in a text file which has the current date (in MM-DD-YY) format with the .LOG extension.  So the log file for May 20, 1997 would be:  05-20-97.LOG.  Why?  Just so each day has it's own log file. Like I said,  it's temporary and eventually will be built better.

What is logged? Just about everything CONTROL does.  Here's a list of some events which are logged by CONTROL:

IP Control events:  User granted access,  IP blocked 
Line Control events: Baud too low,  No key access, C/S not allowed, Idle timeouts, etc...
Class Control:  Class controlled/uncontrolled disconnects,  System full disconnects
New User Control:  All events,  reasons for failing new user control,  successful logons
Users not accepting rules
Auto-invisible logons
Ghosted accounts
/P Bombing (even includes their input line so you can see WHO they were bombing!)


	For each entry,  the log file writes the current date & time, UserID, class, channel & baud, IP (if telnetting in),  the host (if it's listed in the TCP/IP controls), and the message which explains the event that is being logged.  Here's a short example:

-------------------------------------------------------------------------------
05/20/97 - 4:24 pm
  User-ID: XynamaX
    Class: SYSOP
  Channel: 36 (38400 bps)
       IP: 206.137.16.123
From host: Jungle Online
  IP Control active on this channel.
-------------------------------------------------------------------------------

	
	At every shutdown,  the baud rate statistics for every channel will be printed to the log file.  For more information on these statistics, see the global baud stats command near the end of this manual.

P - Pseudo Keys

	Built into CONTROL are some very useful pseudo keys.  What is a pseudo key?  A pseudo key is a key which is determined based on an expression.  For example,  let's say you only want users who are over the age of 18 to use the teleconference.  How do you determine which users are 18?  Sure, you can individually load up each account and add a key,  but that is very tedious.  How do you solve this problem?  Using pseudo keys, of course!  

	Here's an example of the pseudo key to determine age requirements.  By default,  the prefix of the age pseudo key is "_AGE".  We at DialSoft like to stick to standards as much as possible, so we honor Galacticomm's use of the "_"  (underscore) character to denote a pseudo key.  Now to determine the age requirement,  I built mathematical operators into the pseudo key for your convenience.  The operators available are:  =, <, <=, >, >=, <>.  How do you use them?  Here's some examples:

Situation: Only users who are 18 and above can get into teleconference.
Solution: The key required for teleconference key should be "_AGE>=18", or equivalently "_AGE>17".  

Situation: Only users who are under 18 can play games.
Solution: The key required for teleconference key should be "_AGE<=17", or equivalently "_AGE<17".  

	Simple, eh?  Pseudo keys are extremely flexible,  and you're never limiting yourself.  Please keep in mind that Pseudo Keys are expressions that are computed online.  Users will not have pseudo keys in their key rings!  Master Key holders will pass all pseudo key checks!


Pseudo key for checking sex
This is the pseudo key for determining sex.  
The expression values for this pseudo key are: =MALE or =FEMALE

If your pseudo key is named _SEX, these are the possible expressions:
_SEX=MALE 		Only male users will pass this key check.
_SEX=FEMALE	Only female users will pass this key check.

Pseudo key for checking ANSI
This is the pseudo key for determining current ANSI settings.  
The expression values for this pseudo key are: =ON or =OFF

If your pseudo key is named _ANSI, these are the possible expressions:
_ANSI=ON		Only users with ANSI enabled will pass this check.
_ANSI=OFF		Only users with NO ANSI enabled will pass this check.

Pseudo key for checking age
This is the pseudo key for determining users age.
The expression values for this pseudo key are: =, <, <=, >, >=, <>
You may also do age checking within a range using the _ operator.

If your pseudo key is named _AGE, these are the possible expressions:
_AGE=21		Only users who are 21 will pass this check.
_AGE>=21		Only users who are 18 and over will pass this check.
_AGE<18		Only users who are under 18 will pass this check.
_AGE<>18		Only users who are not 18 years old.
_AGE13_19		Only users who are atleast 13 and younger then 20 will pass.

Pseudo key for checking IP address
This is the pseudo key for determining users IP address.
The expression values for this pseudo key are: =,  <>

If your pseudo key is named _IP, these are the possible expressions:
_IP=206.137.16.2	Only users on this IP will pass this check.
_IP<>206.137.16.2	Only users who are NOT on this IP will pass this check.

Pseudo key for NOT keys
This is the pseudo key for not having a key.  Very useful!
The expression values for this pseudo key are: KEYNAME

If your pseudo key is named _NOT, these are the possible expressions:
_NOTSLIP		Only users who DON'T have the SLIP key will pass this check.
_NOTNEW		Only users who DON'T have the NEW key will pass this check.

Pseudo key for checking Total Credits
This is the pseudo key for checking a users Total credits.
The expression values for this pseudo key are: =, <, <=, >, >=, <>
You may also do age checking within a range using the _ operator.

If your pseudo key is named _AGE, these are the possible expressions:
_TCREDS=1000		Only users who have 1000 credits will pass this check
_TCREDS>=1000	Only users who have 1000+ credits will pass this check
_TCREDS1000_2000	Only users who have between 1000 & 2000 credits will pass.

Pseudo key for checking Paid Credits
This is the pseudo key for checking a users Paid Credits
The expression values for this pseudo key are: =, <, <=, >, >=, <>
You may also do age checking within a range using the _ operator.

See example for Total Credits Pseudo key for examples, just replace _TCREDS with _PCREDS.

Pseudo key for checking Free Credits
This is the pseudo key for checking a users Free Credits
The expression values for this pseudo key are: =, <, <=, >, >=, <>
You may also do age checking within a range using the _ operator.

See example for Total Credits Pseudo key for examples, just replace _TCREDS with _PCREDS.

Pseudo key for ANTI keys
This is the pseudo key for ANTI keys, these can be used to deny access to users who hold a certain key.  There is a hardcoded prefix for ANTI keys, and that is "ANTI".  This is how they work.  Let's say you have a key called "FTP" for users to access the FTP section.  If you want to deny a user who has the FTP key, simply add the "ANTIFTP" key in his/her keyring.  Then you must change the key-required for the module to:  _ANTIkeyname

If your pseudo key is named _ANTI, these are the possible expressions:
_ANTISLIP		Users who hold the SLIP key will be granted access as long as the 
ANTISLIP key is NOT in their key-ring.  If a user has the SLIP key 
AND also has the ANTISLIP key, they will not be granted access.
Users who don't have the SLIP key will not be granted access.

SB - Set lines to busy-out.

	If for some reason you wanted to hang up & busy-out multiple lines, this is the way to do it. This could be handy for system testing,  modem testing,  or anything else you can think of.  When you first issue this command, you have several options on the lines you would like to busy out.


Available Choices
Description
Example
!
Busy-out all lines.
!
##
Busy-out line ##, hexadecimal notation.
A
##-##
Busy-out the range of lines ##-##, hexadecimal notation.
1-F
##,##-##,##,##
Busy-out a combination of single & ranges.
1,A,10-13
LINECONTROL
Busy-out a Line Control Group (if defined).
MODEMS

	If you select a Line Control to busy-out, CONTROL will go through and hang up each line of the Line Control you selected.  (Line Controls will be discussed later in this manual).  You can do this more creatively too.  For example,   you can create dummy Line Controls and use them JUST to busy-out lines.  The best way I can explain this is with this example:  Let's say you wanted to busy-out all your lines, except for line "DD" which was an Internet feed.  What you could do is create a Line Control,  name it something like "BUSYCHANS", set the ACTIVE parameter of the line control to "NO" so it doesn't load up,  then set the scope to all the lines except DD.  Then, just use the Busy-out command with the group BUSYCHANS, and it's done!

	The current status of the lines can be seen using the Baud Locks 2 global command.  See the Global Commands section.

SN - Set lines to no answer.

	The format for this command is similar to the Busy-out lines command.  As you can tell, this command is used to set the lines to NO ANSWER mode.  This means all calls will be ignored on the lines you set.
SA - Set lines to answer.

	The format for this command is similar to the Busy-out lines command.  This command is used to set the lines to normal ANSWER mode.  All calls will then be handled as they normally should.


Class Controls

	Class Controls are an excellent way to limit certain classes on your system.  Using class controls you can limit the number of users from a certain class..  For example,  let's say at any given time you only want 5 DEMO users on; Class control can handle this.  Class control takes things a bit further as well.  You can defined "CONTROLLED" periods of time where you can have stricter limits on the number of users logged on.  You can specify these periods for each day of the week..   So that leaves you with ways to limit your system during prime time hours & non-prime time hours, as well as on weekdays & weekends.  By default,  Class control is active on all lines unless it's disabled in one of your Line controls, but we'll get to that later.
AC - Add a Class Control

	When you want to add a new Class Control, this is the command to use.

Class Name
This is the name of the class you wish to control.  CONTROL will only let you add a class control for classes found in your class database, so don't try to add a non-existant class. Sorry, you must type the exact class name in!

Active?
If this option is enabled,  the Class Control will be active.  If not,  then it will be ignored.  This is here so that if you are having problems, you can disable Class Controls without having to delete the whole Class Control.

Description
This is here for your convenience.  Type anything you want here.

Maximum # of users on when this class is controlled
This is the maximum number of users (from this class) allowed on your system when this class is in the "CONTROLLED" state.  To set the controlled hours,  all you have to do is enter X's in the Control Schedule.  All hours that are X'd are CONTROLLED states.

Maximum # of users on when this class is uncontrolled
This is the maximum number of users (from this class) allowed on your system when this class is in the "UNCONTROLLED" state.  The uncontrolled periods are noted by blanks (spaces) in the Control Schedule.

Maximum # of users on when system is full
This is the maximum number of users (from this class) allowed on your system's "FULL LINES" hit the full percentage (see CONFIG settings).  This allows you to limit the number of users on (from this class) when your system gets full.  

Control Schedule
The Control Schedule is a graph which has each day of the week along with all the hours of the day.  In this little graph is where you enter X's for the hours when you want the class to be "CONTROLLED".  You don't have to worry about the periods,  you can write over them, and they will re-appear after you hit <ENTER> on the field.  For example, if you wanted to CONTROL the period from 4:00pm to 11:00pm on Monday you could cursor right to 4:00pm, then keep hitting X until you reach 11:00pm and just hit enter.  You could do the same to clear fields by hitting <SPACE> consecutively.


EC - Edit a Class Control

	When you want to edit a previously defined Class Control, this is the command to use.  The fields are the same as the AC (add Class Control) command,  although you can not modify the name of the class.

LC - List Class Controls

	This will list all of the Class Controls defined.

DC - Delete a Class Control

	This will let you permanently delete a Class Control.

Key Controls

	Key Controls are responsible for controlling many different settings by KEYS.  First off, they are an important subset of LINE Controls which allow you to block users out based on the time of the day if they hold a certain key.  Next,  they can be used to define custom credit rates for certain users.   Please read this section carefully!

	I feel it's important that you read about and understand the Key Control features before you move on to Line Control.  Key Controls are out way of granting and revoking access to lines on your system.  They are also a way to set priorities for users when it comes time to make room for other users (ie: which users will get bumped off the system first).  The great thing about Key Controls is that you aren't limiting them to just one class.  Why?  Because several classes can share the same keys.  This gives you a bit more flexibility when it comes time to add new classes, because you won't have to add these new classes to the Line Controls, instead all you have to do is add a key to the class key ring.

	Key controls are timed.  Yes,  just like Class Controls you can specify the hours that users with a key can't get on.  This is how you limit access to your lines.  For example,  let's say all users in the DEMO class have a key called "DEMO" and you don't want DEMO users to logon your system from 4:00pm - 7:00pm every day.  All you would have to do is add a new Key Control called "DEMO",  then put X's from the hours of 4:00pm to 7:00pm for each day you want this Key Control to be active.  Then,  edit the Line Control to include the "DEMO" access key (you'll learn about that in the next section...)  That's it! 

	Some things you should know.  Since a user may have several keys which are access keys for a line,  he or she will be granted access to a line if they have any key which grants them access.  This is here so that you don't have to make sure each class has it's own specific Key Control.  Here's a scenario where I can explain this a bit more.  Let's say a user named "Richie" is in the "PAID" class and has the following keys which are Key Control keys:  DEMO and PAID.   Let's say the DEMO Key Control denies access from 4:00pm - 7:00pm everyday,  and the PAID key let's a user logon any time they like.  Now,  the time is 4:30pm and Richie logs on.  Will he get cut off?  No!  Even though Richie has the "DEMO" Key Control which denies him access, he still has at least ONE key that grants him access, which is the PAID key.  Hope that clears up the confusion!


AK - Add a Key Control

	When you want to add a new Key Control, this is the command to use.

Key Name
This is the name of the key you wish to control.  Please be sure that you enter a valid key name.  Since there is no real way to check if the key exists,  a spelling error could cause you lots of problems!

Active?
If this option is enabled,  the Key Control will be active.  If not,  then it will be ignored.  This is here so that if you are having problems, you can disable Key Controls without having to delete the whole Key Control.

Description
This is here for your convenience.  Type anything you want here.

Line Priority
This is here to define the priority of users with this key.  The possible choices are: None, Low, Medium, High, and Top.  When it comes time to bump a user off of your system (your system becomes full), CONTROL will find the users with the lowest priorities and bump them first,  as long as they have been on for the Line Control's minimum time on line.  This is so that a user that has been on for 5 minutes isn't bumped right away.  Users with Top priority will NEVER be bumped.

RADIUS Time Limit
This is the maximum time allowed to RADIUS users who hold the key specified by this key control.  This applies ONLY to Vircom's RADIUS Server.

Online Credit Rate
This option allows you to charge users XX credits per minute if they hold this key.  This can be applied to many different things.  If you have defined several KEY Controls which have a credit rate defined,  and a user holds more then one of these keys,  the credit rates will be added up and the total is how many credits the user will be charged.

Hint: Viewing the /IDLE command as a SysOp will show the CONTROL assigned credit rate for each channel!

Active Schedule
The Locking Schedule is a graph which has each day of the week along with all the hours of the day.  

For Custom Credit Rates:
In this graph you would enter X's for the hours where you DON'T want to charge the custom credit rate.  If you want this credit rate to be active at all times, then the graph should be blank.

For Line Control:
In this little graph is where you enter X's for the hours when you want to deny access to users who hold this key.  All hours that are blank will grant the user access.  This graph works the same way as the graph from Class Controls.

EC - Edit a Key Control

	When you want to edit a previously defined Key Control, this is the command to use.  The fields are the same as the AK (add Key Control) command,  although you can not modify the name of the key.  You may enter a partial name instead of typing the full name.

LC - List Key Controls

	This will list all of the Key Controls defined.

DC - Delete a Key Control

	This will let you permanently delete a Key Control. You may enter a partial name instead of typing the full name.

Line Controls

	Now that you know about Key Controls,  which work hand-in-hand with Line Controls, we'll talk about them.  Line controls can be configured to control a group of lines. With Line Control you can control which users can use which lines,  at which time,  for how long, etc, etc, etc...  There is a lot of power and configurability,  and setting it up is simple.  The first thing you should do before you start creating your Line Controls is to run the Create Configuration File option at the main menu, and print it out!  (see CONFIG for more info)  I recommend this because the configuration file will give you a nice list of all the channels you have defined, and what they are.  Once you do that,  think about how many Line Controls you want to break your lines into,  and then start setting them up!

	After you are happy with a the Line Controls you created or edited,  you must run the Update Lines Command.  This command will give you the status of all the line controls being installed, as well as any errors it runs into.

Note:	 If a user has the "Protected from Line Control Key" (see CONFIG), they will not be affected by Line Control!!  The same goes for Master Key holders!

AL - Add a Line Control

	When you want to add a new Line Control, this is the command to use.

Line group  Name
This is the name of the control.  You can name this anything you like,  and I would recommend you name it something descriptive to identify the lines it controls easily.  Let's say you are setting up your modem lines,  try naming the group "MODEMS".  If you're creating a control for your telnet channels, try "TELNET".

Active?
If this option is enabled,  this Line Control will be active.  If not,  then it will be ignored.  Having this option here is powerful,  because you can create several Line Controls for the same sets of lines.  Then,  you can have one control active and disable the other one.

Description
This is here for your convenience.  Type anything you want here.

Lines included
This is where you enter the lines you are controlling.  You can enter the lines one by one separated by commas,  or using hyphens to define ranges.  For example, if you typed this line in:  01,05,0A-10, the lines 2,5,0A,0B,0C,0D,0E,0F,10 would be controlled by this control.  Easy, eh?

Lines access keys
This is where you can enter up to two lines of access control keys for your lines, more commonly known as Key Controls.  Each Key Control must be separated by a space. 

Lines in this control count towards full lines
With this option enabled,  all lines in this group will count as "FULL LINES".  When all the FULL LINES get filled,  the system will then begin bumping users off of these "FULL LINES" to make room for more users.  You would generally make your modem lines your FULL LINES,  because unlike Telnet Channels,  these are more useful to your dial-up users.  Users will only be bumped if the percentage of full lines used exceeds the System Full Percentage  (see CONFIG).

Class control is active on these lines
With this option enabled,  all lines in this group will include Class Control checking.  By default, Class Controls are active on ALL lines,  but if you wanted to explicitly turn them off,  this is one way to do it.  This would be useful if you would only want to control classes on your dial-up channels instead of your telnet channels.

C/S users are allowed to use these lines
With this option enabled,  all lines in this group will accept C/S user logons.  You can disable C/S logons to these lines by disabling this.

Key #1-3 given to users who logon these lines
Line Controls let you grant up to 3 keys to users who logon a certain line.  You can use these for a whole bunch of different things.  One example is,  let's say you had a game that you only let dial-up users play.  Simply enter a key in one of these fields,  and set the key required for the game to the same key.  The possibilities are endless! These keys are granted upon logon, and removed after logoff.

Minimum baud rate required to use these lines
This is the lowest baud rate you will accept on these lines.  If you have high speed access lines,  this will make sure that low baud callers don't tie up your high speed lines.

Maximum time allowed on these lines
If you wanted to limit the time users spend on these lines,  this is the way to do it.  Once a user exceeds this line,  he/she will be disconnected.

Minimum time before user is disconnected
If you you have FULL LINES set,  and it comes time to bump users to make room for other users,  users will be bumped according to their priority and time online.  Since you wouldn't want to disconnect a user who just logged on,  this option is here.  This option will guarantee that the user gets this minimum amount of time on your system before they are disconnected.

Idle-time before a user is disconnected
This option disconnects a user after they have been idle for a certain amount of time.  You may wish to use this on modem channels so users don't tie up a line while they sit and do nothing.  Users who have the "Protected from idle time-disconnects" key (see CONFIG) will not be disconnected!

Credits consumed per minute on these lines
If you run a credit based system,  you may wish to charge users more credits for using certain lines.  Here is where you would enter the amount of credits the user consumers per minute for being on these lines.  If this value is 0,  then the default value of credits consumed per minute will be used.  The default value is specified in option MMUCRR in Level 3 CNF of MAJORBBS.MSG.  This can be used for charging users of high speed lines more credits then low speed lines.
EL - Edit a Line Control

	When you want to edit a previously defined Line Control, this is the command to use.  The fields are the same as the AL (add Line Control) command,  although you can not modify the name of the group.  You may enter a partial name instead of typing the full name.

LL - List Line Controls

	This will list all of the Line Controls defined.

DL - Delete a Line Control

	This will let you permanently delete a Line Control. You may enter a partial name instead of typing the full name.

TCP/IP Controls

	TCP/IP Controls give you a way to grant or deny access to users based on the IP address they come from.  Let's say you have a friend who also has a system on the Internet, and you have a cooperation between your systems where you grant each other access.  You can create a TCP/IP control that grants a new CLASS and keys to users based on the IP they call from.  You can also restrict callers from a certain IP just as easily.  TCP/IP Controls work on a Class C and Class D basis.  You can easily give one whole class C access, or limit it to one system.  
AT - Add a TCP/IP Control

	When you want to add a new TCP/IP Control, this is the command to use.  In this section I will use DialSoft's home system, The Jungle Online,  as the example.

IP Control
This is the Class A,B,C, or D address of the IP you would like to control.  This is probably the most flexible IP Control system.  You can control by these methods:

	Class D		206.137.16.2	IP Control for this specific IP.
	Class C		206.137.16.*	IP Control for all hosts in this class C.
	Class B		206.137.*.*	IP Control for all hosts in this class B.
	Class A		100.*.*.*	IP Control for all hosts in this class A.
	Everyone	*.*.*.*		IP Control for any host.

TCP/IP Control will search for hosts starting from the Class D address all the way down to EVERYONE.  If you defined a *.*.*.* IP Control, all users who logon from any host will be controlled by it.

In our example we will use the IP Control 206.137.16.*.

Active?
If this option is enabled,  the TCP/IP Control will be active.  If not,  then it will be ignored.  This is here so that if you are having problems, you can disable TCP/IP Controls without having to delete the whole TCP/IP Control.

Accept callers from this IP?
With this option enabled,  all incoming requests from the scope defined will be accepted.  If this field is disabled,  NO calls will be accepted regardless of what you scope is defined to.  To find out more about the scope, read the next option.

IP Scope
This field is only active for Class C addresses!  Ie: IP Controls entered as: ###.###.###.*
The IP scope is where you define the scope of IP numbers which will be accepted for calls.  You can enter the numbers one by one separated by commas,  or using hyphens to define ranges.  For example, if you typed this line in:1,2,10-100,150-200, the IP addresses 206.137.16.1, 206.137.16.2, 206.137.16.10 to 206.137.16.100, and 206.137.16.150 to 206.137.16.200 would be the scope which you accept callers from.  IP numbers which are not included in the scope will be disconnected.

System Name
Here is where you would type the system name of the system.  This is the name that will appear in the log file, as well as in new-user e-mails of users who call from an IP address which is registered under TCP/IP control.  For our example, "The Jungle Online" would suffice.

Domain Name
Here is where you would type the Internet domain name of the system. This is here for descriptive purposes.  In our example, "jungle.net" would be the correct response.

IP Address
Here is where you would type the Class D address of the domain name.  206.137.16.2 for the Jungle.

Don't switch users with this key
If a user has this key,  his/her class will not be changed regardless of what the other fields read.  

Class to switch users from
When granting special access to users who call from systems that are TCP/IP controlled, you have the option to change their class at logon time.  This field specifies the key from which you want to switch users.  If you wanted to switch ONLY "VALIDATED" users in this class to a new class, you would enter "VALIDATED" in the field.  If you wanted to switch ALL users to the new class, you would leave this field blank.  Users who have the "Don't switch users with this key.." key,  will NOT be switched.  The full class name must be entered.

Switch users to this class
This is the class you would like to switch users to.  If you don't want to switch users to a class, leave this field blank,  otherwise enter the full class name of the class you would like to switch these users to.

Make this switch permanent?
If this field is enabled,  and class switch is enabled,  then the class switch would be permanent.  Otherwise, the class switch will only remain active until the user logs off.

Switch users back to this class
This is the class you would like to switch users back to if permanent switching is not active.  They will be switched back to this class after they log off of your system.

Make user invisible
If this field is enabled, all callers from this scope will be invisible upon logon on your system.

Key #1-3 given to users
TCP/IP controls let you grant up to 3 keys to users who logon from the defined scope.  You can use these for a whole bunch of different things.  These keys are granted upon logon, and removed after logoff.

Free credits given to users
	If you would like to give free credits to users from this scope, this is where you do it!

Paid credits given to users
	If you would like to give free credits to users from this scope, this is where you do it!

ET - Edit a TCP/IP Control

	When you want to edit a previously defined TCP/IP Control, this is the command to use.  The fields are the same as the AT (add TCP/IP Control) command,  although you can not modify the IP Control field. You may enter a partial name instead of typing the full name.

LT - List TCP/IP Controls

	This will list all of the TCP/IP Controls defined.

DT - Delete a TCP/IP Control

	This will let you permanently delete a TCP/IP Control. You may enter a partial name instead of typing the full name.

Grant Controls

Grant controls allow you to grant users a different class and/or keys during any time period you specify.  For example,  let's say you want to have a credit-free account such that during the hours of 8:00am-4:00pm,  users can use your BBS at no charge,  and after 4:00pm they will be charged.  What you can do is create a Grant Control for their class to switch them to a credit free class during the hours of 8:00am - 4:00pm, then CONTROL will return them back to their original class after the grant period expires.  You may also wish to have a class which has limited Internet access during the day.  To accomplish this,  just set the granted keys to keys which control your Internet access,  then set the grant period and it's all done!
AG - Add a Grant Control

	When you want to add a new Grant Control, this is the command to use.

Grant Name
This is the name of the class you wish to apply a Grant Control.  Please be sure that you enter a valid class name. 

Active?
If this option is enabled,  the Grant Control will be active.  If not,  then it will be ignored.  This is here so that if you are having problems, you can disable Grant Controls without having to delete the whole Grant Control.

Description
This is here for your convenience.  Type anything you want here.


Class granted to user
	If you wish to grant a new class to users during the grant period,  specify the class name here.  If this field is blank,  the user's class will not be touched.  The user will be returned to his original class after he/she logs off,  or when the grant period expires.

Key #1-3 granted to users
Grant Controls let you grant up to 3 keys to users during the grant period.  You can use these to offer free Internet Access to users during certain hours of the day,  or whatever else you like.   The keys are granted at logon and removed at logoff, or whenever the grant period expires.

Grant Schedule
The Grant Schedule is a graph which has each day of the week along with all the hours of the day.  In this little graph is where you enter X's for the hours when you want to grant the keys & or class in this Grant Control.  This graph works the same way as the graph from Class Controls.

EG - Edit a Grant Control

	When you want to edit a previously defined Grant Control, this is the command to use.  The fields are the same as the AG (add Grant Control) command,  although you can not modify the name of the key. You may enter a partial name instead of typing the full name.

LG - List Grant Controls

	This will list all of the Grant Controls defined.

DG - Delete a Grant Control

	This will let you permanently delete a Grant Control. You may enter a partial name instead of typing the full name.

User Lock Controls

User Lock controls enable you to lock a user out from your system.  This is similar to suspending a user, although with User Locks you have the option to leave a message to the user as to why he/she is currently locked out.  You may specify the time & date that the User Lock expires, and the user can log back on.
AU - Add a User Lock Control

	When you want to add a new User Lock Control, this is the command to use.

UserId
This is the UserId which you want to lock out.

Does this User Lock expire?
This specifies whether or not User Lock will expire.  If you set it not to expire, the user will never be able to logon.  Use this if you want to "permanently" suspend a user and have a record as to why they are suspended.  

Show user when it expires?
This specifies whether or not you want the user to know when this User Lock expires, if they attempt to logon.  By default, all expiration dates & times will be shown to the user except on accounts which were locked out because of being hacked.  In this case, the expiration date & time will not be shown for security reasons.

Expire Date
This is the date that the User Lock expires.

Expire Time
This is the time that the User Lock expires.


After you SAVE the information above,  you will be moved to the full screen editor where you can edit the message that the user will see when they log on.  You MUST choose SAVE to edit this message!!!!

EU - Edit a User Lock Control

	When you want to edit a previously defined User Lock Control, this is the command to use.  The fields are the same as the AU (add User Lock Control) command,  although you can not modify the UserId. You may enter a partial name instead of typing the full name.

LU - List User Lock Controls

	This will list all current User Lock Controls defined.  After a User Lock expires, it is automatically deleted.

DU - Delete a User Lock Control

	This will let you permanently delete a User Lock Control. You may enter a partial name instead of typing the full name.

Global Commands

	Control includes a plethora of global commands for your usage.  Here's the option list from the Global Commands options screen,  later on in this section each global command will be discussed thoroughly.

Global command for viewing Class Control statistics
	This command will list out all of your current class controls along with the number of users currently on who are members of those classes.  This is handy to see if CONTROL is keeping track of these users,  but it's also a good informational command.  

Key needed (for above command)
	Users with this key can use the global Class Control statistics command.  If this field is blank, any user can use this command.

Global command for idle times
	Another great command of CONTROL is the ability to see how long your users have been idle.  Idle time is determined by the status of the users input buffer.  If a users input buffer remains empty,  their idle timer begins ticking away. For more information,  see the Global Commands section near the end of this manual for more information.

Key needed (for above command)
	Users with this key can use the global idle command.  If this field is blank, any user can use this command.

Global command for baud stats
	This is the command for the baud rate statistics command.  This command will list all your channels and the number of calls connected on them,  and some baud rate statistics.  See the Global Commands section near the end of this manual for more information.

Key needed (for above command)
	Users with this key can use the global baud stats command.  If this field is blank, any user can use this command.

Global command for baud stats 2
	This is the command for the second baud rate statistics command.  This command will list all your channels with other baud rate statistics such as the highest & lowest connect rates for each channel.  I couldn't fit all info into one command, so I had to split it into two!

Key needed (for above command)
	Users with this key can use the global baud stats 2 command.  If this field is blank, any user can use this command.

Global command for time stats
	This is the command used to view the time you have spent online in the past calendar year.  It comes in handy for many reasons, such as seeing which month users are on longest, which months are "prime" months, etc.

Key needed (for above command)
	Users with this key can use the time stats command.  If this field is blank, any user can use this command.  I would recommend leaving this field blank so that all users can see their own time statistics!

Global command for month stats
	This is the command used to view a calendar of any month with the time you have spent on the system on every day. It comes in handy for many reasons, such as seeing which day is your busiest, as well as viewing other months, and the statistics of other users.

Key needed (for above command)
	Users with this key can use the month stats command.  If this field is blank, any user can use this command.  I would recommend leaving this field blank so that all users can see their own daily statistics!

Global command for new/total mails
	This is the command used to view how many new mails you have received since you last logged off.  This command is not perfect!! I know it isn't!! It's at the best I can get it at the moment.  There are no real hooks in the Baseline code to count the mails, so I improvised the best I could.

Key needed (for above command)
	Users with this key can use the new/total mails command.  If this field is blank, any user can use this command.  I would recommend leaving this field blank so that all users can see their own mail statistics!


The Class Controls Command

	Default Command String:  /CLASS

	This command will list all of your defined Class Controls along with their current statistics.  This could be used to see how many users from each class are on your system.  Feel free to add ALL classes as Class Controls.  Even if the Class Control is empty,  it will show up in this command and let you see how many users are logged on in that class.  


The Idle Command
	
Default Command String:  /IDLE

When you type this command,  you will see a list of users followed by the time they have been idle.  If you hold the CONTROL Sysop key, you will also see several other columns which hold some valuable information for you.  By default,  this is the break down of the Sysop idle list:

Channel    UserID    Idle time    IPAddress    Kill

The Channel is the channel of the user.
Idle time is the time the user has been idle.
IP Address is the IP address of the user, if the channel is a TCP/IP channel.
Kill is the users kill value.  This is the value that CONTROL looks at when it's time to disconnect a user.  The user with the greatest kill value will be disconnect first.  Users with a kill value of 0 will never be disconnected.

	This command may also be used with a search string.  
Example: (assuming you named this command /IDLE)

	/IDLE Richie - Typing this will display only the lines which include "Richie".


The Baud Stats Command

	Default Command String:  /BAUD

	One good way to see how good your modems are,  are to see the average connect rates on each line.  What the baud stats command does is list each channel on your system with the following information:

		Total number of calls connected <= 14400bps.
	Average baud rate of calls connected <= 14400bps.
		Total minutes of usage of calls <= 14400bps.
	Average length of calls <=14400bps.
		Total number of calls connected > 14400bps.
	Average baud rate of calls connected > 14400bps.
		Total minutes of usage of calls > 14400bps.
		Average length of calls >14400bps.
	Total number of calls connected.
	Average baud rate of calls connected.
	Total minutes of usage for channel.
	Average length of calls on this channel.

You can also pull up the statistics for a particular channel by typing that channel after the baud stats command.  For example,  if your baud stats command is /BAUD and you want to pull up the information on channel 0A, type:  /BAUD A

The Baud Stats 2 Command
	
	Default Command String:  /BAUD2

	This is generally just a continuation of the regular baud stats command.  Since I couldn't fit all the info I wanted in one command, I had to split it into two.  This command will show the highest, lowest, and average connection rates for each channel.  It shows the hardware type, total number of calls, total minutes of usage,  average time per call, and the status of each channel.  If a user issues this command, and he/she does NOT have the CONTROL Sysop Key, they will NOT see if invisible lines are in use or not.

	Like the regular baud stats command, you can also pull up the info for a particular channel by typing the baud stats 2 command, followed by the channel number.  Example:  /BAUD2 2 will pull up the statistics for channel 02.

	Before people question what the status strings are, please see DIA_CHANSTATUS in the Text Variables section.
The Time Stats Command
	
	Default Command String:  /TIME

When you type this command,  you will see a little chart of each month followed by the amount of time you have been online for that month. The Information is kept for one calendar year.
	
This command may also be used with a UserId to view the time stats of another user.  Only holders of the CONTROL SYSOP key can view the time stats of other users.
Example: (assuming you named this command /TIME)

	/TIME Richie - Typing this will display Richie's time stats.

The Month Stats Command
	
	Default Command String:  /MONTH

When you type this command,  you will see a calendar of the month and the amount of time you have spent online during each day.  Very handy & nifty!
	
You can also view your statistics for a particular month by entering the month (or partial spelling of the month after the command):

/MONTH january - This will show your stats for the month of January.


This command may also be used with a UserId to view the monthly stats of another user.  Only holders of the CONTROL SYSOP key can view the monthly stats of other users.
Example: (assuming you named this command /MONTH)

	/MONTH Richie - Typing this will display Richie's daily stats for the current month.
	/MONTH Richie feb- Typing this will display Richie's daily stats for February.

The New/Total Mail Stats Command
	
	Default Command String:  /MAIL

When you type this command,  you will see how many new mails you have received since you last logged off.  This command IS NOT PERFECT.  PLEASE don't report bugs on this command, because I know there are instances where I can't trap every mail received!  It gives a good general idea if you have received new mail or not.  There are also 2 text variables associated with this command, see the Text Variables section for more info.

This command may also be used with a UserId to view the mail stats of another user.  Only holders of the CONTROL SYSOP will see the TOTAL mails received by that user.  All other users can see how many new mails that user has waiting.

Example: (assuming you named this command /MAIL)

	/MAIL Richie - Typing this will display Richie's mail stats.

Text Variables

These are the currently defined text variables in CONTROL which can be used anywhere you like.  Everyone of the variables defined here is used at least once in CONTROL.  These variables can also be used anywhere else you like,  perhaps on the user listing,  logon screen,  or anywhere else your heart desires!

TEXT VARIABLE	WHAT IT RETURNS
DIA_CHANNEL	HEX channel number of current user.
DIA_CHANINUSE 	Shows the total number of used channels on the system.
DIA_GROUPTYPE	Returns hardware group type of current user's channel.
DIA_IDLE		Time spent idle of current user.
DIA_KILL		Kill value of current user.
DIA_CREDITRATE	This is the custom credit rate of the current user.
DIA_FULL		Percentage of FULL LINES used.

DIA_IPADDRESS	TCP/IP address of current user (if connected via TCP/IP).
DIA_FROMHOST	Host name of system user is coming from (if TCP/IP controlled).

DIA_CALLS		Number of calls <= 14400bps on current channel.
DIA_AVGBAUD	Average baud rate <= 14400bps of current channel.
DIA_USE		Minutes of usage of calls <= 14400bps on current channel
DIA_AVGTIME	Average time online of calls <= 14400bps on current channel

DIA_CALLS14		Number of calls > 14400bps on current channel.
DIA_AVGBAUD14	Average baud rate > 14400bps of current channel.
DIA_USE14		Minutes of usage of calls > 14400bps on current channel.
DIA_AVGTIME14	Average time online of calls > 14400bps on current channel.

DIA_CALLSLINE	Number of calls on current channel.
DIA_AVGBAUDLINE	Average baud rate of current channel.
DIA_USELINE		Minutes of usage on current channel.
DIA_AVGTIMELINE	Average time online of calls on current channel.

DIA_TCALLS		Number of calls <= 14400bps on all channels.
DIA_TAVGBAUD	Average baud rate <= 14400bps on all channels.
DIA_TUSE		Minutes of usage of calls <= 14400bps on all channels.
DIA_TAVGTIME	Average time online of calls <= 14400bps on all channels.

DIA_TCALLS14	Number of calls > 14400bps on all channels
DIA_TAVGBAUD14	Average baud rate > 14400bps on all modem channels.
DIA_TUSE14		Minutes of usage of calls > 14400bps on all channels.
DIA_TAVGTIME14	Average time online of calls > 14400bps on all channels.

DIA_TOTALCALLS	Total number of calls on system.
DIA_TOTALBAUD	Average baud rate of all modem channels.
DIA_TOTALTIME	Average time of all calls.
DIA_TOTALUSE	Total minutes of usage on all channels.

DIA_LOWBAUD	Lowest baud rate connected on current channel.
DIA_HIGHBAUD	Highest baud rate connected on current channel.
DIA_LOWESTBAUD	Lowest baud rate connected on all channels.
DIA_HIGHESTBAUD	Highest baud rate connected on all channels.
DIA_CHANSTATUS	The possible returns for this variable are:

STATUS		WHAT THE STATUS MEANS					
IN USE			Someone is currently logged on that channel.
BUSY-OUT		The line is currently set to BUSY-OUT.
NO ANSWER		The line is currently set to NO ANSWER.
VACANT		The line is set to answer mode, but is empty.
PRIVATE CLASS	Private Class is logged on, PPP users, FTP users, special connections.

DIA_NEWMAILS	The number of new mails received for the current user.
DIA_TOTALMAILS	The number of mails ever received by the current user.


Note: The average baud rate text variables were enhanced to return a "baud-like" value.  For example instead of returning an average baud of "21983" the text variable will round it off to the closest baud rate, which in this case would be 21600.  This produces more readable statistics.  After all, did you ever see anyone connect at 21983bps?

Cycling Text Variables 
Variables V1 - V5

	DIA_CYCLE1	Cycling variable #1.
	DIA_CYCLE2	Cycling variable #2.
	DIA_CYCLE3	Cycling variable #3.
	DIA_CYCLE4	Cycling variable #4.
	DIA_CYCLE5	Cycling variable #5.


	CONTROL offers you the ability to create cycling text variables which you can place on anywhere on your system.  Use these variables to display helpful hints, or quotes, or anything else you want.  When you edit these variables, you must delimit your messages using the | (pipe) key.  This key will separate messages from each other.  Each message MUST be less then 78 characters.  Here's an example:

	Type /# for a user list! | Type /P SYSOP to page the SYSOP! | Type /GO TELE
	to enter the teleconference! | Type /GO EXIT to leave the system!

This example includes 4 different messages which will be displayed.  The order or cycling is sequential starting from the first.  So the first message displayed in the text block will be "Type /# for a user list!" followed by the next, and so on.  After the last message is displayed,  cycling will start from the beginning again.

Conclusion

So there you have it.  We hope CONTROL is the one module that does it all for your system.  Since we have our own system,  we found a need for every feature we put in control.  No module even comes close to covering all of the features we have covered.  We hope you are satisfied with the product,  and we look forward to hearing from you soon.

Special thanks to all DialSoft customers who have supported us throughout the past year.  DialSoft has been a small, but happy company since we started selling modules in early 1996. Be sure to check out our other great modules if you have a chance!

47



