home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / bbs / fn132bin / fdman / chapter.09 < prev    next >
Text File  |  1991-09-03  |  18KB  |  417 lines

  1.  
  2.  
  3. Chapter 9:  Doors                                                        126
  4.  
  5.  
  6.  
  7.  
  8. 9  Doors
  9.  
  10.  
  11.    The Fnordadel __door__  mechanism allows the  Sysop to provide access  to
  12. external programs  from within  the BBS, in  a controllable  fashion.   This
  13. allows things  like online  games,  additional file  transfer protocols,  or
  14. whatever you feel like.  This chapter describes the door mechanism.
  15.  
  16.  
  17.  
  18. 9.1  Defining Doors
  19.  
  20.    Doors  are defined  in  the  file `ctdldoor.sys',  which  lives  in  your
  21. #sysdir.  It is  a simple ASCII text file, editable with any text  editor or
  22. word processor that  will save in ASCII. It  is read into memory  by citadel
  23. when it  runs; if you  change the file  somehow while Fnordadel is  running,
  24. you'll have  to [Q]uit from the  BBS and re-run  citadel to make the  change
  25. take effect.
  26.  
  27.  
  28. 9.1.1  Format of ctdldoor.sys
  29.  
  30.    The `ctdldoor.sys' file  consists of any number  of lines (each of  which
  31. defines a separate door), in the following format:
  32.  
  33.       <door> <mode> <program-name> [command tail] [#comment]
  34.  
  35.    The fields  should be separated  by white-space (i.e.,  spaces or  tabs).
  36. The meanings of the individual fields are as follows:
  37.  
  38. door       The name that Fnordadel will use to refer to this  door.  It must
  39.            be unique among all the doors you have defined.
  40.  
  41. mode       The  set   of  permissions/restrictions  on   this  door.      It
  42.            consists of  a string of any  of these characters (although  some
  43.            combinations don't make sense):
  44.  
  45.            `u'        Anyone may use this door.
  46.  
  47.            `a'        Only  Aides,  Co-Sysops and  the  Sysop may  use  this
  48.                       door.
  49.  
  50.            `s'        Only Co-Sysops and the Sysop may use this door.
  51.  
  52.            `z'        Only the Sysop may use this door  (that's you usually,
  53.                       but  it could  also  be any  Sysop  logged in  at  the
  54.                       system  console,  or  who   has  supplied  the  system
  55.                       password to get into the Sysop menu).
  56.  
  57.            `c'        Only users on the system console may use this door.
  58.  
  59.            `m'        Only users on the modem may use this door.
  60.  
  61.            `d'        This door  must be  executed from  within a  directory
  62.                       room.
  63.  
  64.  
  65.  
  66. Chapter 9:  Doors                                                        127
  67.  
  68.  
  69.  
  70.  
  71.            `r'        For `d' above; the directory must be readable.
  72.  
  73.            `w'        For `d' above; the directory must be writable.
  74.  
  75.            `t'        The user may provide a command tail for this command.
  76.  
  77.            `n'        Pass the  user name  to this  command as  part of  the
  78.                       command tail (as the end of the tail).
  79.  
  80.            `x'        This door  is a  ``system'' door.   See Section  9.3.1
  81.                       [System doors], page 130.
  82.  
  83.            `v'        This door  is an  ``archiver'' door,  defining a  file
  84.                       archiver which  Fnordadel will use  to read the  table
  85.                       of  contents of  archive  files.   See  Section  9.3.2
  86.                       [Archiver doors], page 130.
  87.  
  88.            `p'        This  door is  a ``protocol''  door,  defining a  file
  89.                       transfer  protocol.     See  Section  9.3.3  [Protocol
  90.                       doors], page 131.
  91.  
  92.            `h'        This  door  will   be  executed  from  the   BBS  home
  93.                       directory   (i.e.       where   ctdlcnfg.sys   lives).
  94.                       Normally,  a door executed  in a  directory room  will
  95.                       be run from  that room's directory.  Some  doors don't
  96.                       like that, so this mode can be  set to correct things.
  97.                       If  the `l'  mode is  also present,  it will  override
  98.                       this mode.
  99.  
  100.            `i'        If present, this must  be the last mode.  The  rest of
  101.                       the mode  string is the  name of a  room to which  the
  102.                       door will be  linked.  The  door will only show up  in
  103.                       the `!?' list in that room, and  will only be runnable
  104.                       in  that room.    If the  room  name contains  spaces,
  105.                       replace them with `_' in the door declaration.
  106.  
  107.                       If  a  mode   string  ended  with  `iFoo_blort',   for
  108.                       example,  this particular  door is  tied  to room  Foo
  109.                       blort.   If Foo blort  is a directory room,  Fnordadel
  110.                       will make  the room's directory the working  directory
  111.                       for the door  when it is run.   The `i' mode  can't be
  112.                       used with the `l' mode, described next.
  113.  
  114.            `l'        If present,  this must  be the  last mode.   The  rest
  115.                       of  the mode  string is  the directory  to which  this
  116.                       command  will  be linked.     If a  mode  string  ends
  117.                       with  `lc:\bin',  for  example,  Fnordadel  will  make
  118.                       `c:\bin' the  current working  directory when  running
  119.                       this command.   The  `l' mode can't  be used with  the
  120.                       `i'  mode, described  above.   If  used  with the  `h'
  121.                       mode, `l' takes precedence.
  122.  
  123. program-name
  124.            The  full pathname,  including  the  filename extension,  of  the
  125.            program attached to this door.
  126.  
  127.  
  128.  
  129. Chapter 9:  Doors                                                        128
  130.  
  131.  
  132.  
  133.  
  134. command tail
  135.            The optional  command tail to pass  to this door upon  execution.
  136.            If  the door  allows a  user-supplied command  tail,  it will  be
  137.            appended to  this command  tail, and  user names (mode  character
  138.            `n') are appended after everything else.
  139.  
  140. comment    Also optional.  This field must be preceded by a  `#'.  It allows
  141.            you to put  in a short description  of what the door does,  which
  142.            users will see when they hit `!?'.
  143.  
  144.  
  145. 9.1.2  Example door definitions
  146.  
  147.    Here are some sample door definitions, some of which you  may want to use
  148. on your system:
  149.  
  150.       clog    u       e:\citutil\clog.tos     -t      # 3-column log reader
  151.       uclog   s       e:\citutil\clog.tos     -p      # log reader for Sysop
  152.       rz      udrt    c:\bin\rz.ttp                   # zmodem download
  153.       ez      udwt    c:\bin\sz.ttp                   # zmodem upload
  154.  
  155.    The  first   example  provides  a   quick  way  for   users  to  get   an
  156. up-to-the-minute quickie  listing of  the user log;  it will  print out  the
  157. names only, in three-column format.  (See `clog.man' for more on clog.)
  158.  
  159.    The second  example is for  Sysop and  Co-Sysop use only  (note the  mode
  160. string  of `s').    It runs  clog and  passes  it the  argument `-p'  (which
  161. enables the printing of passwords).  You'd use this  if someone forgot their
  162. password and  you wanted to  find out  what it was  (be careful of  hackers,
  163. though).
  164.  
  165.    The third example  implements Zmodem downloads  via the external  program
  166. `rz.ttp', which is kept in `c:\bin'.  It passes no  command tail of its own,
  167. but it  does allow  the user  to pass  a tail in,  so he  can specify  which
  168. file(s) he wants to download.
  169.  
  170.    The fourth  example implements  Zmodem  uploads.   Notice  that the  mode
  171. string consists of  `udwt'; the `w' means  that this door is only  usable in
  172. rooms which allow uploads.  Makes sense, right?
  173.  
  174.  
  175.  
  176. 9.1.3  Notes
  177.  
  178.   o In any  directory room, the ``current  directory'' (for the purposes  of
  179.     the  door program) is  always set to  be the  directory attached to  the
  180.     room, unless you use the link mode `l' to specify another directory.
  181.  
  182.   o User-supplied command tails  (enabled with `t' in the mode  string) will
  183.     be  scanned for occurences  of `\'  and `:' characters,  and these  will
  184.     be removed.    This is to  stop an unscrupulous  user from passing  full
  185.     pathnames  to,  say,  a file  transfer  program  and gaining  access  to
  186.     private information;  users will only be  able to access information  to
  187.     which they have normal Citadel access (by being in a directory room).
  188.  
  189.  
  190.  
  191. Chapter 9:  Doors                                                        129
  192.  
  193.  
  194.  
  195.  
  196.   o If you're  running an online  game or something  which requires that  it
  197.     be  pointed at  a specific directory  (so it  can access  data files  or
  198.     whatever), use the  mode `l<dirname>'.  This is the most  common problem
  199.     in getting many doors to run.
  200.  
  201.   o If you want to restrict a door to be used  only by certain users, make a
  202.     private or  invitation-only room, and link  the door to that room  using
  203.     the `i' mode.   If the door program in question also needs  to be linked
  204.     to a directory in order to run properly, make  the room a directory room
  205.     pointing at the needed directory.
  206.  
  207.   o The  syntax of  door definitions  may be  checked by  using the  utility
  208.     program ckdoor.  See `ckdoor.man' for details of its usage.
  209.  
  210.  
  211.  
  212. 9.2  The User Interface
  213.  
  214.    A door command, from the user's point of view, is very simple:
  215.  
  216.       !door [command-tail]
  217.  
  218. Simply type a `!', followed  by the name of the door; if the door  allows or
  219. requires a command  tail to be passed in,  as in the example door  `rz' from
  220. Section 9.1.2 [Example  doors], page 128,  then it should be separated  from
  221. the door name by a space, and the remainder of the  door command is taken to
  222. be the  command tail.   So, using `rz' to  download the files `foo',  `bar',
  223. and `blort', the user would simply say:
  224.  
  225.       !rz foo bar blort
  226.  
  227. at the room prompt.   The program `c:\bin\rz.ttp' will be run, and  `foo bar
  228. blort' will be passed to it as a command tail.  Easy, huh?
  229.  
  230.    Typing `!?' will  print out a list  of doors accessible from the  current
  231. room  by the  current user.    So  you'll  notice that  the list  may  vary,
  232. depending on  the type of user  logged in (Sysop,  Co-Sysop, Aide or  normal
  233. user),  and on  the  room or  type of  room  the user  is in  (directory  or
  234. normal).  Doors that specify `sd', for example, in  the mode string will not
  235. be listed when an Aide does `!?' in a non-directory room.
  236.  
  237.    Also, overall door  access can be controlled  by the door privilege  flag
  238. in  each  user's account,  and  the  #alldoor  flag  in `ctdlcnfg.sys'.
  239. See  Section 5.2  [User Status  Commands], page  80,  for more  information,
  240. as well  as the  #alldoor description  in `ctdlcnfg.doc',  and the  flipbits
  241. documentation in `flipbits.man'.
  242.  
  243.  
  244.  
  245. Chapter 9:  Doors                                                        130
  246.  
  247.  
  248.  
  249.  
  250. 9.3  Special Kinds of Doors
  251.  
  252.  
  253. 9.3.1  System doors
  254.  
  255.    Doors with  a mode  of `x'  are special __system__  doors.   These  doors
  256. currently are  no different than doors  with a mode of  `z' (for use by  the
  257. Sysop only),  but  that may change  in the  future.   For  now, these  doors
  258. are intended  to be ones that  aren't run explicitly  by any user, even  the
  259. Sysop.  There are three special doors that you  will probably want to define
  260. as  system doors:   `login'  (run automatically  when any  user logs  in);
  261. `logout' (run  automatically when  any user  logs out);  and `newuser'  (run
  262. automatically when  a new  user logs  in the  first time).    Here are  some
  263. examples:
  264.  
  265.       login   x       c:\bin\cookie.tos
  266.       newuser nx      d:\bbsprogs\survey.ttp
  267.  
  268.    The first  example runs  a  cookie program  (something that  spits out  a
  269. random witty quote)  for every user that logs  in.  The second  example runs
  270. a hypothetical survey program  for each new caller, passing the  user's name
  271. to the program (mode character  `n').  Note that all of these  special doors
  272. must have  the exact name  as given here  (`login', `logout' or  `newuser').
  273. This implies  that you can only  have one door  of each type.   If you  need
  274. more, you'll need  to write yourself a  custom program that calls, in  turn,
  275. each of the other programs that you wish to be executed.
  276.  
  277.  
  278.  
  279. 9.3.2  Archiver doors
  280.  
  281.    Doors with  a mode of  `v' are __archiver__  doors.   These will  usually
  282. not be called directly  using the `!door' syntax, but indirectly,  using the
  283. .R(ead) (archive-)H(eader) command.   These doors  enable users to view  the
  284. contents of any archive  file, even though the Fnordadel internal  code only
  285. supports the .arc file type.  Here's a couple of examples.
  286.  
  287.    In your `ctdlcnfg.sys' file, put:
  288.  
  289.       #archiver ZOO zootoc
  290.       #archiver LZH lzhtoc
  291.  
  292. In your `ctdldoor.sys' file, put:
  293.  
  294.       zootoc  tdrv    c:\bin\zoo.ttp          v
  295.       lzhtoc  tdrv    c:\bin\lharc102.ttp     v
  296.  
  297. Both doors take command  tails (`t'), are usable only in  readable directory
  298. rooms  (`dr'), and  are flagged  as  archiver doors  (`v').    To use  them,
  299. all a  user needs to  do is  enter commands like  `.RH foobar.zoo' and  `.RH
  300. blort.lzh'.
  301.  
  302.  
  303.  
  304. Chapter 9:  Doors                                                        131
  305.  
  306.  
  307.  
  308.  
  309. 9.3.3  Protocol doors
  310.  
  311.    Doors with a mode of `p' are __protocol__ doors.   They are currently not
  312. used in any special  way by the system, but a coming enhancement  will allow
  313. them to function for  file transfers sort of like archiver doors do  for the
  314. `.RH' command.  For example, suppose you defined a door like:
  315.  
  316.       rz      tdrp    c:\bin\rz.ttp   Zmodem-download
  317.  
  318. Then  users could  download  files using  the  Zmodem transfer  protocol  by
  319. entering  a  command  like  `.RZFfoo.bar',   which  would  echo  like  .Read
  320. Zmodem-download File foo.bar.  Look for this in an upcoming release.
  321.  
  322.  
  323. 9.3.4  The shell door
  324.  
  325.    If you have a door  which is named `shell', it will override  the setting
  326. of the #shell  variable in `ctdlcnfg.sys'.   See `ctdlcnfg.doc'.   This door
  327. is meant to  be a program like command.tos,  PCOMMAND, or gulam.   Executing
  328. the `!shell' door  is equivalent to executing  the [O]utside command in  the
  329. Sysop menu; see Section 5.1 [Sysop Special Functions], page 75.
  330.  
  331.  
  332.  
  333. 9.3.5  Fnordadel as a door
  334.  
  335.    It  is  theoretically  possible  to  run  Fnordadel  itself  as  a  door!
  336. Unfortunately, this  currently will not  work if your  main BBS software  is
  337. also STadel  or Fnordadel  (we're working  on it), although  it should  work
  338. from within  fOrEm and others  that support doors.   To  run Fnordadel as  a
  339. door from  another system, set  it up as  you would if  you were running  it
  340. stand-alone.   Then create a  door on your  main system to change  directory
  341. into your Fnordadel's home directory, and invoke it with the command:
  342.  
  343.       citadel +door
  344.  
  345.    When  Fnordadel  comes  up,  it  will  assume  that  a  user  is  already
  346. connected.   Thus, no  modem commands or  controls will be used.   When  the
  347. user  terminates, Fnordadel  will exit  and return  control  to the  calling
  348. program.   You may supply  other parameters to citadel  if you wish, but  do
  349. not use  `+multi'.   Also, you may  need to avoid  using `+line', since  the
  350. status line may screw up your main system.
  351.  
  352.  
  353. 9.4  Notes and Caveats
  354.  
  355.  
  356.  
  357. Chapter 9:  Doors                                                        132
  358.  
  359.  
  360.  
  361.  
  362. 9.5  Door Problems
  363.  
  364.    Getting  doors to  work  can  sometimes  be a  tricky  thing,  even  if
  365. everything looks good and ckdoor doesn't complain  about your `ctdldoor.sys'
  366. file.   A  common problem with  programs used  as doors is  that they  don't
  367. process command  line parameters  the same  way Fnordadel does.    Fnordadel
  368. passes parameters to  all doors using the Atari-sanctioned  ``ARGV'' method,
  369. which is used by Mark Williams C, Gnu C, and  possibly other languages also.
  370. However,  many languages do  not use  this method of  handling command  line
  371. parameters, and so won't work as Fnordadel doors.
  372.  
  373.    To get around  this problem is  not difficult, hopefully.   We provide  a
  374. utility program called doorwrap,  whose only purpose is to take  a parameter
  375. list from Fnordadel, convert it to a different form,  and pass the result on
  376. to the *real* door program, which will hopefully be able  to process the new
  377. format of the parameters.
  378.  
  379.    To use  doorwrap, declare your  door exactly as  you normally would,  but
  380. insert the full  pathname of doorwrap immediately  prior to the pathname  of
  381. the real door program.  Here's an example:
  382.  
  383. Before:    foobar ut c:\blort\foobar.tos -dv
  384.  
  385. After:     foobar ut c:\fnordbin\doorwrap.tos c:\blort\foobar.tos -dv
  386.  
  387.    For  more  information on  doorwrap,  see  `doorwrap.man'.     For  other
  388. compatibility and support  information, see Section 13.8  [Compatibilities],
  389. page 168, and Appendix A [Fnordadel Support], page 170.
  390.  
  391.   o If  someone  drops  carrier while  running  a  door,  the  door  program
  392.     (depending on whether  it's been written to detect the loss  of carrier)
  393.     will probably  be sitting waiting  for the user  to type something  when
  394.     the next  call comes in;  the next caller may  well end up dumped  right
  395.     into  the door  where  the last  caller  left off.    Depending  on  the
  396.     program, it may well be a Bad Thing.   Be really careful of this problem
  397.     when defining special doors like `login', `logout', and `newuser'.
  398.  
  399.   o Be  careful when giving  out access  to things like  shell programs  and
  400.     stuff;  anything that gives  the user access to  your whole file  system
  401.     (and especially stuff like shells that gives  them access to things like
  402.     directory removal  commands) is potentially  hazardous to the health  of
  403.     your BBS and anything else accessible.
  404.  
  405.   o If  you have people  hogging a  lot of  system time  using doors,  there
  406.     isn't much you can do about it other than turf  the doors.  However, you
  407.     can set  the #maxtime parameter in  `ctdlcnfg.sys' to place some  limits
  408.     on users' abilities  to monopolize your system.  See  `ctdlcnfg.doc' and
  409.     Chapter 10 [Anti-Ruggie Measures], page 133, for details.
  410.  
  411.   o If you  have problems with  people using doors  and screwing up events
  412.     you have  defined, see the #eventclosetime parameter  in `ctdlcnfg.doc'.
  413.     It lets  you specify a  cut-off time in  minutes.  If  an event is  that
  414.     number of minutes (or less) away from happening,  users won't be allowed
  415.     to start any doors.
  416.  
  417.