// Shadowlands Forum Developers' ChangeLog -*- c -*- (for emacs) // // NOTE: If you just want to read about new features for 1.9.6, // please check out // http://shadowlands.org/forum/slf196/ChangeLog-userfeatures // http://shadowlands.org/forum/slf196/docs/features.html // // this ChangeLog uses yyyymmdd.hhmm format for a unique timestamp // for each change; this makes it easy to grep the sources for exactly where // these changes were made. // // Sometimes methods or other code is removed; you may need to look in // the archives to find this code (and the accompanying timestamp) in an // older version of the source. // // Unless the change has 'dschin' or 'matt' near it, jeremy implemented. // // bug fixes and changes not visible to users are (in parens). // // where a -- version # -- is noted, it includes all changes listed below // it in the file; anything above it will be part of the next release. // // gaps of a few lines indicate no development work was done for a while. /* * --1.9.6.6 -- (20090703) * * 20090703.0914: ^E cancels macro, like ^H or ESC (user.tryExpandMacro) * * (20090703.0737) user: on startup, check usercmds[NUM_USERCMDS] * vs _SLF_USERCMDS_LIST_END (bugfix: !who was not recognized); * rename user.checked_admin_ss_table to checked_table_lengths * * * --1.9.7-devel18 -- (20081206; not announced) * * (20081206.0939) In room::SendRecapToUser, prevent infinite-loop if circular * buffer's recap_last == (RECAP_LINES - 1) when user logs in. * * (20081206.0841) Print unlimited core size as unlimited, not -1, in main * * (20081206.0830) fix gcc-4.3 warnings * * (20081206.0614) avoid localtime() reentrancy bug (halt/crash) via * slf_localtime new function. * - Also: slforumutil.h show function docs from slforumutil.c * * (20081127.0730) snprintf edge-condition fixes: *.cc * manpage: "Until glibc 2.0.6 [snprintf] would return -1 when * the output was truncated." * (TODO) virtdb.c ? If fixing it, extend 'main' with params for fname * to parse instead of vartmpfile. * * (20081126.0733) slfprefs.h MAX_BANNER_SIZE - clarify units, docu behavior * for banner files of larger size. * * (20081126.0703) in main::main, fix off-by-1 error when using * SLFHOMEDIR_fallback. * * 20081126.0645: Add ALLOW_DUMP_CORE_ON_COMMAND to slfprefs.h. Also, * Use getpid() instead of hard-coded value for c_core are-you-sure token. * * * --1.9.6.5 -- (20081007; not announced - still occasional crash at login) * * (20081010.0720) add c_core to SLForumUser::usercmds, but not help text * * 20081007.0735 add slforumcmd::c_core; Allowed for admins only. * * 20080831.0910: slfprefs.h DUMP_CORE on by default * * * -=-=-=- 1.9.6.4 -=-=-=- (1.9.6 maintenance release) 4 Jul 2008 * * Includes everything below this line, including 1.9.7-devel items. * * (20080704.0920) update INSTALL: PAM is more or less standard now * * (Releasing 1.9.7-devel17 as 1.9.6.4 with no other changes.) * * * --1.9.7-devel17 -- * * (20080523.2021) fix for fedora 9: passwd.c proto for time_t time. * * (20080523.0735) fix gcc assignment const warnings: virtdb.c * Keep version# at 1.0.2 (from 2005) because no functional changes are * being made to virtdb.c. * * (20080523.0711) fix pointer sign warnings: passwd-db-inc.c (no unsigned now) * * 20080523.0647 PAM: use "login" service, not "slforum". * PAM has changed, we can't supply our own PAM file and expect it to * work unmodified. Noted in INSTALL: May need to run as root for PAM. * Also more logging - pam_check_pass calls Lprintf when bailing. * * 20080523.0610 rename Makefile-linux-fc4 to Makefile-linux-fedora, * adjust comments in there; fc4 is old now. * Remove "-Wmissing-prototypes" from Makefile-shared * * (20080405.0536) dschin: gcc tweaks (gcc 4.1) * * * * --1.9.7-devel16 -- * * (20070128.1830) fix inf-loop bug in lpcat when \r\n or \n\r found * * * * --1.9.7-devel15 -- * * (20060912.2328) gcc fixes for strict gcc4.1 (fedora core 5) * Uses same makefile Makefile-linux-fc4. * * * * --1.9.7-devel14 -- * * (20060704.1025) typo fix ChangeLog-userfeatures disze->dsize (1.9.5-devel49) * * (20060704.0940) new user state STATE_LOAD_PREFS between accept and enter. * (user::state_is_load_prefs, user::loadPrefs, isUserAround changes) * * 20060704.0915: add !macro to listing in !help (and rearrange) * * (20060704.0910) in slfprefs.h, ALLOW_TOPICS is define/undef not 1/0. * (always been that way; add clarify comments) * * (20060614.1235) don't set recap_lasttime for MSG_SYS messages * * (20060613.0600) write chimes to recap-log in room::CheckHourChime * * (20060610.1520) bugfix where !macro add prints Use: message too. * (slforumcmd::c_macro missing 'else' before 'if edit') * * 20060610.1445: handle ^E(esc) and ^E^H (user::ManageInputNewCtrlChar, * case ss_macro_addedit_readkey in SLForumUser::HandleAdminLine, * tryExpandMacro.) If the user already has a macro defined for esc * or backspace, let them expand it, but can't create or edit one. * Fixes "FORUM: No macro is defined for ^E ^H", "for ^E " * * 20060610.1400: add desc comment above user::hourlyChime. * * 20060608.0610: for timestamps/chimes, user::expandTimeTokens added * * 20060607.0610: for timestamps/chimes, recap_time[], recap_timetype[] added * * (20060603.1100) don't save lines with hintbits in recap * * 20060601.0700: USE_USERCOUNT_FILE, ::UpdateUserCount added * * 20060528.1140: recap buffer feature (thanks M DeMaria) * (room::recap, USE_RECAP, RECAP_LINES, and * RECAP_IDLE_WARN_MINUTES prefs) using room::_BroadCast, * printed with room::SendRecapToUser. show_recap user pref. * Text prefs RECAP_HEADER, RECAP_FOOTER, RECAP_FOOTER_IDLE_WARN_MIN, * RECAP_FOOTER_IDLE_WARN_HR. * FORUM: -- Recap of recent conversation -- * FORUM: jeremy: k * FORUM: -- Recap ends (IDLE: room quiet for 22 minutes) -- * * (20060528.1127) add !me to listing in !help (thanks M DeMaria) * * (20060528.1120) fix 'unsigned char..always true' warnings in * user::keyDisplayLength, keyDisplayString * * (20060528.1110) clarify comment for AUTO_AWAY_TIME purpose in slfprefs.h * * (20060524.1250) add doc comment, fix harmless buglet in setAutoMsgchk * * 20060520.0945: SLF_PROMPT_CHAR, no longer hardcoded '>'. * user::setAdmPrompt will change ">" or "> " to the prompt char. * * * --1.9.7-devel13 -- * * (20051225.1925) confirm still compiles on rh9 (gcc-3.3) * * (20051219.2355) gcc4 fixes for fc4 compile; new file Makefile-linux-fc4. * Also updated authlocal.c to note testing through kernel 2.6.11. * passwd-db-inc.c: db4.3 ndbm compat; signedness warn fixes needed * (virtdb bump to 1.0.2 for gcc4 fixes) * * * --1.9.7-devel12 -- (not announced) * * 20031204.2230: For compiling with stricter gcc3: Method definitions with * parameter default values: comment-out default in .cc (defaults provided * in the decl in .h) * * * -=-=-=- 1.9.6.3 -=-=-=- (1.9.6 maintenance release) 25 Dec 2005 * * Includes everything below this line, including 1.9.7-devel items. * * (Releasing 1.9.7-devel11 as 1.9.6.3 with no other changes.) * * * --1.9.7-devel11 -- * * 20030703.0550: --nofork now accepted, in preference to -nofork (which is * still accepted, but docs and Makefile "testrun" rule use --nofork) * * (20030703.0515): fix for rh9: passwd-db-inc.c looks for gdbm/ndbm.h instead * of db1/ndbm.h . This should not break Solaris, but Solaris build has * not been tested lately. * * * -=-=-=- 1.9.6.2 -=-=-=- (1.9.6 maintenance release) 7 Jan 2003 * * Includes everything below this line, including 1.9.7-devel items. * * (20030107.1940): virtdb util: Can now run -h / --help (an argc check was * off by one); this is virtdb 1.0.1. * * (20030107.1920): ChangeLog: added info on _very_ old releases 980529, * 980620, 980703, for historical/hysterical purposes. * * * -- 1.9.7-devel10 -- * * (20030103.0733): virtdb.c casts to eliminate gcc warnings for argcheck() * * (20030103.0730): Makefile tweak so virtdb compiles in linux * * 20030103.0230: Standalone utility virtdb is ready and tested! * * 20030103.0225: !set password cancels out if a blank password is typed; * there had been no way to cancel, and a virtuser could accidentally * clear their password (and thus not be able to log in at all). * * (20030103.0217): typedef struct slf_userinfo: add reminder that the * struct passwd MUST be the first part for unix_validate to work. * * (20030103.0215): passwd-unix-inc.c: cast result of slf_getpwnam for gcc * * (20030103.0210): passwd-db-inc.c: add debug print if pw_name==NULL * * 20030103.0202: Give virtuser feedback when !set password is successful * * (20030101.0400): Add a couple debug prints to passwd-db-inc.c * (Shown via Lprintf when DEBUG_INS_AND_OUTS is set) * * (20021229.1120): Change // to /* in comments in linkedlist.c, slforumutil.c, * passwd-db-inc.c * * * -- 1.9.7-devel9 -- First release to run on OS X 10.1 with virtusers etc. * * (20021225.2000): virtuser db bugfix: slforumroom: constructor: If "test" * open of virtuser database file creates it as a new 0-byte file, * dbm_open may fail to reopen it; so if we create a 0-byte file here, * delete it. * * (20021225.1930): passwd-db-inc.c.: room log debug prints if put_info fails * * (20021225.1600): passwd-db-inc.c: handle ndbm.h being in different locations * * (20021225.1530): admin substates: print message to user if virtusers are * turned off / not accessible, and trying to add/edit/del/list them. * * (20021225.1205): Makefiles: Move -l* from Makefile-shared, no need on OS X. * * (20021225.1155): linkedlist.c, Makefiles: Define USE_MALLOC_H except for OSX * * (20021225.1150): slforumutil.c: slf_safe_fopen: Use EPERM if ENOSTR not def. * * (20021225.1145): slforumroom.cc: BindSocket nodelay setup -- remove SOL_TCP * reference, since we use getprotobyname anyway. (OS X fix) * Do most programs hardcode 6 here anyway? * * * * (20021130.0830): Fix passwd.c so it compiles stub functions for virtuser * calls when USE_VIRTUSERS is 0 (this means we don't need a lot of * ifdefs in other files) * * (20021129.2000): Fix passwd.c so it knows OS X utmp format * * * * * -- 1.9.7-devel8 -- * * 20020819.1740: !8ball can now take a question to ask; the question is * announced publicly right above the 8ball's response. * * (20020811.0830): struct slfparam: Added field "kind", marking what kind of * parameter it is. p_is_unused, p_is_str, p_is_int, p_is_user, p_is_cmd * Wherever slfparams are made, sets this field. * * * -- 1.9.7-devel7 -- * * (20020805.2110): slfprefs.h: Updated version from 1.9.6.1 to 1.9.7-devel7. * Also made a note in TODO about auto-accept-guests. * Otherwise identical to 1.9.6.1. * * * -=-=-=- 1.9.6.1 -=-=-=- (1.9.6 maintenance release) 3 Aug 2002 * * Includes everything below this line, including 1.9.7-devel items. * * (20020803.0930): DUMP_CORE moved from Makefile-shared to slfprefs.h, * now commented out by default. * * (20020803.0905): encapsulation: Added room::topicsAreOn(), setTopicsOnOff(). * * (20020803.0900): slfcmd: Ensure ALL references to flarg[] contents check * argc before reading from flarg[] ! * * (20020803.0840): Remove segfault in cmd::c_topic (argc==0, it read flarg[0], * which was NULL, on autotopic on return.) * * (20020803.0835): Don't autotopic on return if ! room->room_topics_on. * * (20020803.0210): Docs updated for recently added features. * * (20020803.0200): in !set output, showaidle now mentions !showaway/!users; * msgchk changed from "check (minutes)" to "check interval (minutes)" * * (20020803.0120): If topics are off, and user is admin, hints them the admin * command to turn topics on. If !admin topics off is given, clears that * hint bit (in case it's been a while) for all users. * * (20020803.0110): For localization: Added to slfprefs.h: * TOPICS_DISABLED_MSG, TOPICS_ADMIN_ON_MSG. * * (20020803.0100): !prevtopic no longer lists empty "dummy topic": * Old topic #3 set at 02 Aug 19:00 by nobody. (0 comments) * If it has comments, it will be listed. (that is, if people !comment * before the room's first !topic) * * (20020803.0030): Clear the flag that checks ^D^D / ESC ESC if the user in * fact does not hit the key twice in a row. (Added boolean flag * substate_tracks_dblchar to SLFUser, checked in ManageInputNewChar) * Fixes bug where two arrow keys would clear input line. * Added note in TODO that we could parse other esc sequences from this. * * 20020802.1910: Add note to INSTALL about nbdm / gdbm * * 20020802.1850: ESC ESC clears input line, just in case. * * 20020802.1830: Prevent topic monopolizing -- the "Time until topic change * allowed" is not reset when topic changes, unless topic setter also * has changed. This prevents any user from owning it for more than * TOPIC_RESET_INTERVAL seconds. * * * -- 1.9.7-devel6 -- * * (20020731.0725): Toward localization: Created constants HINT_WHISPERDONE_MSG * and HINT_DONEWHISPERING_CMD_MSG in slfprefs.h, instead of hardcoded * strings in slforumcmd::_i_toalso . * * 20020731.0720: Reword hint given on first whisper to: * Type "!!" or ESC ESC when you're done whispering :-) * (was "Type "!to all" when..." which is archaic) * * (20020731.0715): cmd::_i_toalso checks argc before trying flarg[1].strval, * which won't exist if argc<2. * * 20020731.0710: New key: Can hit ESC twice to exit whisper ( !! / !to all ) * and keep your input line. * * * -- 1.9.7-devel5 -- * * (20020728.1140): user::setAdmSubstate : when going to nonadmin, and keeping * buffer, set the show_input field _before_ redisplaying input line with * the proper prompt. Otherwise it may hide input incorrectly. * * 20020728.1045: Now supports 60 users at a time. userfield_t is unsigned * long long, MAX_CHAT_USERS is 60. (true max users for 64 bits is 62) * * (20020728.1040): userfield_t is unsigned; this should allow it to clear * high bit on shift right, if by some calamity it becomes set. * * (20020728.1015): user::talkingTo: cast 1 to userfield_t before shift left; * fixes problem of all-ones long long to_bits on 32bit platform. * (the high bit of userfield_t should never be 1) Also fixed in all * other places where to_bits, from_bits, any other userfield_t var used. * * (20020728.0925): To remove cc warnings about using a void* to store a char * in statedata for the macro substates, added field user::state_d_char. * * * * -- 1.9.7-devel4 -- * * 20020723.1050: Added MSG_IDLESOON, !ignore idlesoon * * * -- 1.9.7-devel3 -- * * (20020723.1040): c_topic reminds (hint msg) the user who just set topic that * they may change it at any time. * * (20020723.1025): Added TOPICS_ON_AT_START to slfprefs.h -- defaults to 0. * #define ALLOW_TOPICS is no longer commented out by default. * !admin topics on/off dynamically enables/disables topics. * * 20020723.1015: The user who set the current topic can change it at any * time; added slfuser param to topicTimeCheck, returns 0 for that user. * * * -- 1.9.7-devel2 -- * * (20020711.0710): setAdmSubstate(ss_nonadmin) from ss_idlesoon_hitanykey * no longer erroneously clears their input line. * * * -- 1.9.7-devel1 -- * * (20020706.0945): Comment out code in RedisplayEntryLine that exits forum if * the wrong prompt is chosen. Kept the assert check that writes this to * forum log. * * (20020706.0930): user::RedisplayEntryLine, user::HandleAdminLine: made sure * the conditions are the same in both places for choosing admin/nonadmin * prompt to display. * * * * -=-=-=- 1.9.6 -=-=-=- 4 Jul 2002. * * 20020704.1945: Add !set showaidle pref -- show/hide AWAY:idle users in * !showaway and !users listing * * (20020704.1930): Added public GetAwayTime(), isAWayFromIdle() to SLFUser. * * * -- 1.9.6-devel3 -- * * 20020704.1330: Add admin substate to warn user that they will go autoaway * soon due to idle time, hit any key to clear idle. * * (20020704.1255): Add user::getAdmSubstate() * * * -- 1.9.6-devel2 -- ( internal snapshot for authlocal fix ) * * (20020704.1210): Comment out dumpAuthlFailLogInfo, slf_send_file (unused). * * 20020704.1140: Update to authlocal.c 1.0.5 to fix spurious failed auths. * * * * * * * -- 1.9.6-devel1 -- * * (20020514): comment out ancient alarm(5); in slforumutil:lpcat * * (20020514): added static dumpAuthlFailLogInfo to slforumuser.cc (called * from HandleNoConnection()) to find why authlocal's failing sometimes * * (20020514): added static debug routine slf_send_file to slforumuser.cc * (called from dumpAuthlFailLogInfo) * * * -=-=-=- 1.9.5 -=-=-=- 4 Apr 2002. * * 20020404.1224: Topics on/off can be toggled at runtime with !admin topic off * if they are compiled in (if ALLOW_TOPICS is #defined in slfprefs.h) * * (20020404.0945): Added reminder about \201, \202 timestamps in user and room * * (20020404.0935): topics work again (broke when user prefs moved into struct, * cosmetic dent with timebuf when u==null). Also added check in * !prevtopic # that # is set (name[0] not \0) * * 20020404.0929: Dice roll total var is unsigned * * (20020404.0920): Tweak prompt wording for "end macro with..." * * (20020404.0915): Remove macro debug prints (no longer needed) * * * -- 1.9.5-devel55 -- * * 20020329.0210: Added !uptime command * * (20020329.0200): Fixed macro storage bug (cmd char after ^Q^U during macro * record was not recognized and not changed to ) * * * -- 1.9.5-devel54 -- * * (20020329.0140): authlocal is more careful now about partial lines * * (20020328.1540): Added in world.h for new glibc compilation * * (20020328.1150): authlocal modified to work properly with the new * /proc/net/tcp format in linux 2.4 kernel * * (20020327.1655): Room::_BroadCast no longer puts anything with a hint bit * into lastpublicmsg (^N buffer) * * * * * * * * -- 1.9.5-devel53 -- * * (20011030.0820): Fixed misspelling in response-8ball.h * * * -- 1.9.5-devel52 -- * * 20011012.1445: 8ball messages are now public * * (20011012.1430): room::_BroadCast checks for users who somehow have * user_fd=-1 but state != STATE_NO_CONNECTION; if this is the case, * it prints a discon message and logs them out properly. * (This helps guard against the fact that certain TCP connection losses * are disconnecting users without saying so.) * * (20011012.1420): Makes sure the start of a new day goes in the log * * * -- 1.9.5-devel51 -- * * (20010921.1150): Fixed off-by-one error in malloc'd buffer bounds checking * which should fix a crash while adding/editing a macro. (This buffer * was allocated in the heap, not the stack; there was no exploitable bug, * just a crash-causer due to SIGSEGV.) * * * -- 1.9.5-devel50 -- * * (20010920.0910): If compiled with DUMP_CORE defined, check ulimit -c and * set our working dir to /tmp, so we can dump core there if need be. * * * -- 1.9.5-devel49 -- * * (20010918.1200): Makes sure timers are NOT public by default; previous bug * was that if you set a public timer, and replace it with a non-public * timer, with no detail message, it will keep the public flag set. * * (20010918.1150): No longer sets you away if you're already away and change * your hereidle. * * 20010918.1130: Docs: Alphabetized ctrl key listing, added reflow mode * explanation. * * 20010918.1022: added "dsize" user pref, to set # sides on dice for !roll. * (Also changed dice total to long long, and overhauled the dice display * code to never take up more than one line; it had assumptions about the * size of a single roll (2 chars).) * * 20010917.2321: added reflow mode. * * 20010917.1710: added cmd::c_8ball. * * (20010828.2340): slf_safe_fopen no longer attempts to write to stderr, * since it may be closed; instead, it sets errno. * * * -- 1.9.5-devel48 -- * * 20010807.1355: !who now prints login IP as well * (added struct in_addr user::loginfromip for this) * * 20010807.0005: Can now do !who to print more detailed info. * (Added user::printLoginDetails) * * (20010806.2214): Docs update: features.html/NewFeatures-1.9.5.html mention * and explain !set jetlag * * (20010806.2200): "AWAY" on left side of colon is now AWAY_FROM_USERNAME * in slfprefs.h, for easier adjusting. * * 20010806.2155: "jetlag" code is all done, incl. timers/alarms, EXCEPT * that public timers are always announced/listed with jetlag 0. * * * -- 1.9.5-devel47 -- * * (20010801.0302): "jetlag" conversion all done EXCEPT for timers/alarms. * * 20010801.0200: Attempted kicks no longer beep for everyone, just for the * kicked user, and you can !ignore kicks. * * (20010731.2030): user::Send now expand \201 and \202 to the current user's * local HH:MM and DD MMM HH:MM (taking jetlag into account). * * 20010731.1700: Added 'jetlag' user setting - handles being in a different * timezone than the server. (West coast users set jetlag to -3 if the * server's on the east coast, for example) * * * -- 1.9.5-devel46 -- * * 20010731.1555: Kicks no longer private. * * (20010730.1800): When adding a new virtuser, fill new struct slf_userinfo * with zeroes (NULLs in the pointer fields). This should fix that crash. * * * -- 1.9.5-devel45 -- [internal snapshot] * * (20010618.1710): Holding down will never run off the end of line. * * (20010618.1700): "" replaced by "" when writing out. * (It will still read both and correctly.) * * 20010618.1655: Now warns on entry if you're ignoring public. * * * * -- 1.9.5-devel44 -- [internal snapshot] * * (20010419.1724): resetFieldsToDiscon now doesn't care if user_fd=-1 * when it comes to incrementing empty_slots; it only checks for if * state is not STATE_NO_CONNECTION. This should fix the out-of-slots * problem we saw last night / this afternoon. * * * -- 1.9.5-devel43 -- * * 20010418.1040: Changed c_roll. Max # dice is now 1600 (can change this in * slfprefs.h), but only the first 16 rolls (and total) are shown. * * (20010418.1020): Cosmetic bugfix for error msg if neither banner dir * could be set. * * (20010418.1013): !roll 1 now says "die" not "dice". * * (20010418.0945): No longer says "is away" when whispering to yourself. * * (20010418.0930): Added running_macro flag to ::user, and added * optional handle_tel_iac argument to ManageInputNewChar. * Now deals properly with expanding telnet IAC in a macro. * (Doesn't try to interpret it as IAC) * * (20010418.0842): main prints admin uid, if any, during startup. * * (20010418.0830): fixed room::_BroadCast and room::logprintf to print to * stdout if -nofork specified and not logging to a file * * (20010418.0824): in main, moved perror before fprintf * * (20010418.0820): Minimum port # lowered to 2 (was 128) * * * -- 1.9.5-devel42 -- * * (20010411.1629): ListCurrentMacros now properly escapes IAC. * * (20010411.1615): Added hint message during macro add/edit: * "To enter control characters, precede them with Ctrl-Q." * ( added hint bit HINT_MACRO_CTRLQ ) * * (20010411.1335): The strip-out-ctrl-chars (19990623.2335) code used in * lpcat and room::doBanner now strips IAC (ascii 255) as well; this is * much easier than finding and escaping them. If anyone really really * needs ascii 255 in the login banner or a spam banner, let me know and * I will fix this. * * (20010411.1230): Now correctly doubles IAC characters before echoing * in _sendOut and redisplayEntryLine. * * (20010411.1215): Now correctly handles double IAC on input and puts one * IAC into buffer properly, including echoing back a double IAC. * * (20010410.2200): Bugfix: No longer clears input buffer (through setting the * admin prompt) before expanding a macro. * * * -- 1.9.5-devel41 -- * * (20010407.0001): SECURITY BUGFIX: Change in telnet parameters was causing * remote logins to have local echo on (INCLUDING WHILE TYPING PASSWORD) * * * -- 1.9.5-devel40 -- * * (20010406.1525): Euro char ('ascii' 128) now allowed. (Previously was * rejecting it, as a high-bit-set control character) * * (20010406.1507): Telnet options commented out for now -- they were turning * off the requested features we ask for on connect. But high bit support * still works. * * (20010406.1440): High bit chars now supported properly and by default. * ( note: all high-bit chars fail isprint(c) in glibc-2.1, so i have * to manually check ascii value to decide whether we're calling * the ctrl char handler, or letting the char through. ) * * (20010406.1255): added tel_bin_in, tel_bin_out bools (8-bit telnet binary) * to struct bufinfo; wrote user::negotiate_telnet_binary. * * (20010406.1245): Now replies properly (well, negatively) to telnet options * (user::HandleTelOpt) * * * -- 1.9.5-devel39 -- * * (20010403.1530): New virtual user fields for "email" and "sponsoring user" * are done and fully integrated with the admin menus. * * * -- 1.9.5-devel39-pre1 -- (internal checkpoint for new virtuser code) * * (20010403.1400): new in-db-record virtuser format code is done; but right * now there isn't admin code to edit the new fields. * * (20010403.1200): passwd-db-inc.c: slf_virtuser_get_info: bugfix - * wasn't freeing the newly allocated user struct if password * fails to match; you can see why this would be a problem. * * (20010403.1035): passwd-db-inc.c: pack_pascal_string now treats NULL src * strings as 0-length strings rather than an error. * * (20010402.2330): Created struct slf_userinfo, for holding the extended * fields (email, sponsor) of a virtual user. This is much easier to * expand later than trying to cram more into struct passwd. * * (20010402.1611): Since slforum 2.0 devel could be a while, it's time to * get a little organized. Got off my backside and made "struct bufinfo" * for buffer, yankbuffer, lastbuffer. Also added prefs_t to group all * the user preferences in one place. (These are both in slforumuser.h) * * * -- 1.9.5-devel38 -- * * 20010402.1430: Tabs can now be backspaced through properly: Previously, * repeated spaces were mistaken for tabs, because we didn't remember * whether whitespace was due to tabs or repeated spaces. Now there's * a buffer_tabmask that remembers this; see slforumuser.h for details. * * (20010402.1400): last line sent (^P buffer) now only set for public msgs. * * (20010402.1105): docs: mentioned "!to", "!also", "!to all" / "!!" * * (20010402.1050): "!to all" now typed for you (after a line wrap) if you're * using "!to all" to speak and the line wraps. Before, it was mistakenly * only filling in "!to ". * * (20010330.1240): Merged the 20010330.1140 fix into slf1.9.5-devel. * * -- 1.9.4.1 -- (1.9.4 maintenance release) * * SLF1.9.4: (20010330.1140): Small C++ syntax fix in SLForumCmd from * &(me->wbListAdd) to &SLForumUser::wbListAdd allows more restrictive * GCC's to compile SLForum. * [ the other changes noted below are for 1.9.5-devel ] * * 20010329.1650: ChangeLog-userfeatures updated * * 20010329.1530: Docs updates * * * -- 1.9.5-devel37 -- * * (20010329.1111): If you have no timer set, !timer would not display any * public timers; this has been fixed. * * (20010329.1100): Fixed ANSI C++ warnings in slforumuser.cc; slf195 now * compiles without any warning messages whatsoever. (egcs-1.1.2) * * (20010329.1040): While away, typing a command with leading whitespace will * no longer erroneously un-away you. * * (20010329.0950): Removed debugging code related to line length (not needed) * * (20010329.0940): Fixed the premature line wrap bug. The ^W handler wasn't * subtracting from cur_len. (Well, it was subtracting 0.) * * * -- 1.9.5-devel36 -- * * (20010328.2000): Added extra-paranoid debug to HandleGetLine; * now checks cur_len, cur_pos, macro_input, buf before and after hit ret. * * (20010328.1549): Removed "curr substate" debugging logprintfs in slforumuser * * * -- 1.9.5-devel35 -- * * (20010327.1700): Separated out ManageFullLine and ManageUserReturn * from ManageChangedInputBuffer. * * * -- 1.9.5-devel34 -- * * (20010322.1450): in _i_ignore, changed 0xffffff to (~0) . * * 20010322.1430: Now, if you're ignoring spam, and someone spams, * it will tell you (along with a hint message on how to ignore that * notification in future). * * (20010321.1545): debug: ^U now checks line length and the buffer actual * length, and prints things to the log when it doesn't match * * (20010321.1505): that's fixed for good; now says "we heard the word x" * if and only if the message was public -and- we're ignoring public. * * * -- 1.9.5-devel33 -- * * (20010321.1500): no longer says "we heard the word x" unless ignoring publ. * * 20010321.1355: Removed 19990607.1800 feature: username and pw_gecos are * no longer added to the listen list. (Any words you want to listen to * are saved with the rest of your prefs anyway.) * * (20010206.0900): Due to the change of 20010202.1045, a user logging in * was finding themselves during STATE_FIND_DUPL. Added code to * user::HandleFindDupl() which, if the "found" user == this, calls * GetUserIncremental a second time. * * 20010206.0800: Changed "Room uptime is" display; now just uses days, * not years and months. * * (20010202.1045): Hopefully fixed the "myname to (null)>" prompt bug, * by adding STATE_FIND_DUPL to the states which return true in * user::IsUserAround. In case i didn't, added debug code to * setPromptFromTo which checks for NULL, prints a loud assert failed * message, and dumps the relevant info (from and to indices, and the * current contents of the user array) to the debug log. * * (20010201.0003): Oops. Forum code assumes January is month 1, but localtime * function says it's 0. This explains the "Happy New Year!" chime at the * start of feburary 1. Fixed. * * * -- 1.9.5-devel32 -- * * 20010127.1730: Can now !macro del to get rid of indiv. ones. * * (20010127.1630): Finished llist_remove_start and llist_remove_after * * (20010127.1330): Shortened names for space, enter (CR), * leftbracket (lt); added <^x>, <\nnn>. * * * -- 1.9.5-devel31 -- * * (20010127.0525): Save and restore as much as possible of substate * when managing IAC (telnet commands). This eliminates the * wait-forever-on-incorrect-pw bug. * * (20010127.0500): c_emote: if a user w/ a 9-char-long name emotes, * last char of name no longer cut off * * 20010127.0440: Macros now saved and loaded with prefs! * * (20010127.0330): Eliminiated save during load (checks for running_cmd * just about everywhere we'd call savePrefs if a user was running a cmd) * * (20010127.0040): Added check in redisplayEntryLine for user disconnecting * during testv = uWrite (prompt) (and testv thus being -1). Not having * this check crashed our chat daemon with its 77-day uptime... oops. * * (20010126.2321): changed * cur_len = stringDisplayLength (cp); * to * cur_len = stringDisplayLength (buffer); * which should hopefully fix the line wrap bug * * * * * (20001118.1315): "ignoring banter"; changed to "ignoring public". * * * * * * * -- 1.9.5-devel30 -- * * (20001024.1415): keyDisplayString now returns "" for '<' * because we use '<' at the beginning of all the other display strings. * * (20001024.1350): Now remembers when we're adding a macro, and when we're * editing an old one. Also ASCIIZ's the macro value buffer properly. * (Added "editing" bool field to macro_t struct.) * * 20001024.0830: Can now replace a macro's value with a new one. * (!macro edit works) * * 20001024.0720: -nofork now lets you log to a file too. * * (20001023.1845): Fixed a couple buggy calls to stringDisplayLength * * * -- 1.9.5-devel29 -- * * 20001020.0900: Added !macro clear (clearCurrentMacros). * * (20001020.0800): Added macro_input flag, we now have separate * display and string lengths for the buffer. * * (20001017.0850): added cur_len for sep. from cur_pos * * 20001017.0835: c_to, c_also will now remind you if the person * you're to'ing or also'ing is away. (FEATURE!) * * (20001017.0830): bugfix: sendMessagesTo, sendMessagesAlso now * share code; previously, if someone was logged in multiple * times, sendMessagesAlso would only add one of them to the list. * * (20001016.1900): Removed uchar, as our Makefiles declare _all_ chars * to be unsigned. * * * -- 1.9.5-devel28 -- (not public; macros milestone.) * * (20001015.2010): Okay, basic macro functionality is done. - can make a macro - can play it back - can list 'em - they don't get saved - can't be deleted or edited yet - cur_pos need not be set right - macros not yet shared by all logins of a user, - macros can call macros, but no reentrancy. * All this will be further developed soon. See TODO. :) * * (20001012.0130): Added c_macro (!macro cmd) and printCurrentMacros. * * (20001012.0100): Added code to user::ManageInputNewCtrlChar for ^E. * Rest of macro stuff is done enough for a prelim run. (see TODO) * * (20001011.1420): tryExpandMacro and macro_really_expand done * * (20001011.0200): For entering ctrl chars within a macro: * Added code to user::ManageInputNewCtrlChar and * user::ManageInputNewChar to get into ^Q mode. * (HandleAdminLine takes care of the quoted char.) * * (20001006.0930): Added justSetState optional param to setAdmSubstate * * (20001006.0010): added user::tryExpandMacro, macrolist, updated * resetFieldsToDiscon * * (20001005.2250): added ss_wait_macro_key substate, and handler code for * it (special-case code at top of HandleAdminLine) * * * -- 1.9.5-devel27 -- * * (20001005.1710): Rearranged the TODO file, it looks respectable again * * (20001004.1342): Changed ROLL_MAXDICE from 15 to 16. Bwahaha. * * (20001004.0920): ManageInputNewChar now checks for IAC and goes to * awaitTelCmd to grab telnet esc codes; this takes care of the quotemark * that windows users were seeing on their login prompt since we * removed the STATE_GET_NAME username restrictions in devel26. * * (20001003.1540): Fixed long-standing inconsistency in ManageUser * where a discon would return -1 except for STATE_GET_NAME, where * it would return 0. This hack was from jkchatd (1998!) so someone * disconnecting before they were accepted, wasn't announced as leaving. * We've since developed cleaner ways to do this, of course. * ManageUser now returns true to continue connection, false if it was * disconnected. The HandleNoConnection, HandleGetName, etc methods * should do same, but since we'll be starting 2.0.0 from scratch, * it's not worth the cleanup. * * * -- 1.9.5-devel26 -- * ????? * * Removed STATE_GET_NAME username restrictions * * ??? * -- 1.9.5-devel25 -- * * (20001002.1245): Added MAX_BANNER_LINES brake (defaults to 50). * Also, banners are no longer logged, only their filename. * * (20001002.1040): To make ManageInputNewChar a little shorter, * broke out ctrl char handling into a new method, ManageInputNewCtrlChar. * Also did some other cleaning up in ManageInputNewChar, it is much * shorter and more straightforward now. * * (20001002.1020): Changed all lpwrite calls in user, cmd to uWrite(buf,sz). * ( Except of course the one that implements uWrite(buf,sz). ) * All versions of uWrite now check and set user_fd=-1 . * * (20001002.1015): user::Send methods were returning 0 not -1 if discon :( * * (20001002.0900): Found and fixed longstanding thinko in slforumutil's * lpwrite; if it had to retry, it would write "sz" bytes, but should * write "todo" bytes. * * (20001002.0830): Fix places that should check user_fd==-1 but don't. * (ManageInputBuffer, HandleLockedLine, among others) * * -- 1.9.5-devel25 -- * Added a SIGUSR1 handler that prints all slots' status to the log. * * -- 1.9.5-devel24 -- * Added debugging printfs in places free_slots is changed. * * -- 1.9.5-devel23 -- * * (20000926.1457): user constructor now sets STATE=STATE_NO_CONNECTION * before calling resetFieldsToDiscon. * * (20000926.1448): Added STATE_SETUP_CONN transitory state. * There is now one place in the code where room_empty_slots is increased, * and one place in the code where it is decreased. * This should fix the non-local-users no slots left bug. * * (20000926.1300): resetFieldsToDiscon: moved ++(room->empty_slots) * into user_fd!=-1 . * * (20000926.1250): HandleNoConnection: now calls resetFieldsToDiscon * if user_fd==-1 . * * (20000925.1155): FindSlotForNewUser: changed "break" to "return" after * ManageUser() call. Still need to see why it reported the room * full while saying 2 slots open... * * * -- 1.9.5-devel22 -- * * (20000925.0710): !admin now always goes into interactive mode, since * the batch mode isn't ready yet * * (20000925.0705): passwd-db-inc database ins and outs don't print to the * debug log unless DEBUG_INS_AND_OUTS is defined as 1 * * 200000925.0700: Hourly chime at midnight now announces the new weekday * * 200000925.0650: Can now use !ban none in addition to !ban clear * (and also !listen none). * * * * * * -- 1.9.5-devel21 -- * * (20000912.1200): Added bounds check 0-25 to !set rotamt. * * 20000912.0950: Added rot_offset (!set rotamt), defaults to 13. * * (20000912.0845): You now hear your own emotes even if you're ignoring 'em. * * (20000912.0815): A blank line will never be copied into lastpublicmsg * (^N buffer) or the user's last sent line (^P buffer). Also, * system messages won't be copied into lastpublicmsg. * * 20000912.0810: Added rot13-with-rot10 user pref * * 20000912.0750: ^T now does rot13 of the input buffer * * * -- 1.9.5-devel20 -- * * (20000908.1225): Bugfix and message change for the boundary of setting a * timer for 1440 minutes. The message now correctly says 1439 is the * max # of minutes. * * (20000908.1220): Returning from away by hitting now works again; * a check for alt cmd char had been added, but not a check for * someone with -no- alt cmd char. Fixed! * * (20000830.0310): in ManageChangedInputBuffer, when replacing altcmdchar * with real cmd char, now checks for doubled char (the to-all command) * and fixes that as well. * * (20000830.0300): in user::HandleNoConnection, resets lastkey/lastping * before getting their name, etc. This hopefully will prevent the * go-idle-then-arrive problem. * * (20000822.1050): c_emote now resets idle time as it should. * * * -- 1.9.5-devel19 -- * * (20000818.1140): "seconds" removed from uptime report * * (20000818.0040): tabcomplete for alt cmd char now works * * (20000816.1905): auto-away no longer resets your idle time when it sets * you away. * * (20000816.1600): moved auto-away msg to slfprefs.h from hardcoded, * and changed it from "idle" to "idle, auto-awayed" [and then back] * * * -- 1.9.5-devel18 -- * * (20000816.????): FILE CHANGE: renamed Makefile-linux to * Makefile-linux-nopam, renamed Makefile-linux-pam to Makefile-linux . * * 20000816.1220: added uptime to !version. * (added datediff to slforumutils.c, added room::printRoomUptime(u).) * * (20000815.2323): in user::validateAndDowncaseName, added '@' to list of * nonvalid chars for a guest name; it changes this to 'a'. * * (20000815.1650): in user::HandleGetPw(), check for virtusers so a guest * can't impersonate a virtuser. * * (20000815.1640): added Send * (const char *fromsysusername, * int msgdescflags, const char *text, bool wants_beep) * for private timer announcements. These now beep as they should. * * 20000815.1630: !set altcmd alternate command char added * (ManageChangedInputBuffer changes it to real one while clearing * whitespace from commands, and HandleAdminLine does similar.) * * 20000815.1530: !set autoaway added (auto-away when too idle) * * * -- 1.9.5-devel17 -- * * (20000809.2100): Changed emote format: * jeremy: thumbs.twiddle(); * * dschin emotes vehemently * * jeremy: yep. * * (20000803.1830): c_emote messages now have MSG_SYS so they say EMOTE: * to the left of each line. * * * -- 1.9.5-devel16 -- * * 20000803.1240: FILE LOCATION CHANGE: * virtuser database is now virtuser.db, not virtuserdb.db * user prefs are in /userpref/ instead of . * * 20000803.1220: added !me (c_emote) command, including MSG_EMOTE * msgdesc flags and !ignore emote[s]. Known problem: if topics are * turned on, !me doesn't show up on the brief list of commands; * need to reorganize this. * * (20000803.1200): bugfix: auto-msgchk now beeps as it should. * * * -- 1.9.5-devel15 -- * * (20000731.1000): For non-local login, sets promptlen/realpromptlen * when it uses 'prompt' as scratch space for the DNS lookup. * Fixes an assert crash, even though this "prompt" should never be * displayed. * * (20000719.1255): For non-admin users, !admin gives the "no such command" * response. * * (20000719.1235): Now quits the "add" area if you hit enter at the username * prompt. * * (20000719.1215): RedisplayEntryLine() now properly shows the input line * when redisplaying during admin substate escape to command prompt * * * -- 1.9.5-devel14 -- * * 20000719.1050: "make install" added * * (20000719.1030): slf_virtuser_get_info was closing db after getting the * datum but before unpacking fields... when the db is closed, it corrupts * the static area holding the fetched info from the db. Fixed. * * * -- 1.9.5-devel13 -- * * (20000719.0310): SECURITY FIX: could previously (since 1.9.5-devel7 * or so) see a user's pw onscreen after they unlocked. Fixed. * (forgot to set show_input in lock_me and try_unlock_me back when that * var was moved from a param to a field, around -devel7.) * * (20000719.0230): All admins can now lock screen, if ALLOW_LOCKOUT defined. * * (20000718.1838): Added TCP_NODELAY to socket setup in slforumroom.cc * * * -- 1.9.5-devel12 -- * * (20000718.0110): uses htonl(0x7f000001) instead of inet_aton("127.0.0.1"); * not all libs have inet_aton, but it's a simple thing we need here * * (20000718.0100): added debugging logprintfs to all virtuser-related code * so we can see where and when it's screwing up, if in fact it is still * screwing up. * * (20000718.0040): debugging: Lprintf(fmt,...) now allows C code to * write to the room log * * 200000717.1620: now accepts cmdline params in any order :) * * (20000717.1525): virt users can now change their passwords. (previously * couldn't due to typo in c_zebra) * * (20000717.1510): SECURITY: !admin now accessible only by admins ;) * * (20000715.1440): cleaned up cmdline parsing a little, with * tryGetDirParam and tryGetBoolParam. * * (20000715.1415): cmdline opt reader now checks for when it expects a dirname * and gets something starting with -, and prints an error msg. * * (20000715.1400): fixed bug present in -devel7 and up; coming back from away * wouldn't redisplay entry line. (there were ClearEntryLine() calls, * at line 1701 and 2961 as of -devel11, without corresponding redisplays) * * * -- 1.9.5-devel11 -- * * 20000714.2100: added SLF_MIN_REAL_USERID. If the forum is being ran not as * root but as a user, with this uid or greater, and that user logs in, * they're admin. * * * -- 1.9.5-devel10 -- * * 20000714.2050: added -bd cmdline option (banner dir) * * (20000714.2035): All edit-virtuser-field functions work and don't crash it * anymore. * * (20000714.2020): SECURITY: anyone could access the admin menus by typing * !admin ; fixed. * * (20000714.2010): fixed table entry for ss_nonadmin so show_input is set * properly when exiting the admin system * * (20000714.2000): virtual users can now log in. * * (20000714.1845): fixed bad bug; the check for if we could write to the * virtuser db was truncating it (used wb+ instead of ab+ for mode) * * * -- 1.9.5-devel9 -- * * (20000714.1830): virtusers almost ready; can't log in yet though * * (20000714.1745): done merging fixes from 1.9.4-release into 1.9.5-develx * * (20000714.1414): slforum-username prefs now live in slfhomedir * * (20000714.1305): lockout-users now lives in slfhomedir, not hardcoded path * * (20000714.1300): added tryPrintLoginBanner(); * will try first from slfhomedir, then /etc, * for issue.forum and then issue.net ; slfprefs.h to change. * * * -- 1.9.5-devel8 -- * * (20000702.2325): Sometimes, slfgetch returns \0 ; we return on that * instead of trying to process it, now... * * (20000702.2250): Admin menu: The delete 'area' works properly * * (20000701.1235): All admin prompts for a given 'area' line up * * (20000701.1200): All interactive admin functions fully implemented * * (20000701.1120): Transitions from admin esc mode -> admin mode now properly * sets promptlen=admpromptlen * * * -- 1.9.5-devel7 -- * * (20000701.0930): the showInput param to get-input methods has been * changed to a show_input slforumuser field; this ensures the program * knows when not to show a user's input, even when redisplaying prompt * after sending them info, or 'you have new mail', etc. * * (20000701.0820): Added an end-of-table marker to admInputSSBehavTable, * and a check to SLForumUser constructor (runs once, then sets * checked_admin_ss_table=true) to make sure it's not out of sync with * the enum substate_t declaration. * * (20000630.1900): weird bug (apparent freezeup of user's connection in * ss_editpw) was due to SLForumUser::admInputSSBehavTable being out of * sync w/ enum admin_substate_t... fixed. * * * -- 1.9.5-devel6 -- * * (20000630.1345): All admin substates done * * (20000630.1330): SetAdmPrompt() now always clears the input buffer. * * * -- 1.9.5-devel5 -- * * (20000627.2030): ManageInputBuffer cmd-char handler is now a switch * instead of a bunch of if's. And it now handles the admin substate * escape mode properly. * * 20000627.1210: Very minimal "list" admin fuctionality. * * (20000627.1010): Admin prompts now line up like 'real' prompts; * removed admpromptbuf, admprompt is now a char buffer[USERBUFSIZ] * instead of just a char*. Also changed <= to < in the if(promptlen * <= 12 ) code of setPrompt/setAdmPrompt. * * * -- 1.9.5-devel4 -- * * (20000627.0845): Admin substates (except delete) done. * * -- 1.9.5-devel3 -- * * (20000622.2230): It compiles again. (unix, not yet under win32) * * -- 1.9.5-devel3-inprog7 -- * * (20000622.1955): Moved admin substate handling to new file * slforumuser-adminsubstate.inc.cc, included into slforumuser.cc * * (20000622.1945): !set password is now fully implemented (but not tested). * * * -- 1.9.5-devel3-inprog6 -- * * (20000622.1800): re-merged stuff from work, home editing * * ... much stuff not in here...hmmm.. about admin substates about pw. * * 20000615.0200: added admprompt, admpromptbuf, admpromptlen, realpromptlen * and added setAdmPrompt to switch between real/admin prompt * and added TEMPORARY CODE to RedisplayEntryLine which announces to room * if the expected vs actual prompt length differ... we'll keep this * til we've moved through all possible state transitions. * * (20000615.0030): broke out ManageChangedinputbuffer * * 20000614.0200: user::setPromptFromTo() rewrites the prompt; this code * was all over before. * * 20000613.0900: admin_substate slfuser field, HandleAdminLine() handler * * 20000613.0010: is_virt slfuser field * * 20000613.0000: !admin command * * * -- 1.9.5-devel2 -- * * 20000612.2300: passwd-db-inc.c compiles. * * * -- 1.9.5-devel1 -- * * renamed user::setupListenList to setupRealUserInfo; it now checks to see * if the user's in the admin group. * * passwd-db-inc.c completed. * * added admin_gid, users_gid to SLForumRoom. * * added is_admin to SLForumUser. * * * * -- 1.9.4 -- * * (20000704.0830): Final docs tweaks. * * 20000703.1445: New docs are done! Check 'em out at * http://shadowlands.org/forum/newdoc/ * * (20000703.1200): On startup, prints whether guests and topics are enabled * * * -- 1.9.4-devel37 -- * * (20000628.1500): i_msgchk_check no longer prints an error message, unless * the user's running a command. (If they're not running a command, * i_msgchk_check is being invoked from the room's automsgchk handler.) * It also prints a specific "You have no mailbox." message when it _is_ * printing an error message and the user has none, instead of the less * friendly generic message printer. * * * -- 1.9.4-devel36 -- * * (20000623.1755): Consolidated whisperban check code into * user::CheckBanned. (removed SendCheckBan) Code was * previously in SendCheckBan (for !to sending) * and user::_sendOut (for standard sending) * * (20000623.1720): Bug fix: * Whispers sent via !to weren't being checked * against the whisperban list, and could thus bypass a ban. * (Added user::SendCheckBan method) * * (20000623.1214): world.h: changed // to /*-style comments * * (20000623.1210): Renamed TALKING_TO_SOME to TALKING_TO_MANY * * (20000623.1205): Renamed setupListenList to setupRealUserInfo * * (20000623.1154): Some comment clarifications * * (20000623.1145): streamlined passwd.c; merged some duplicate code there * with the aid of a couple ifdef's. * * * -- 1.9.4-devel35 -- * * One last docs runthrough and 1.9.4 will be ready. * * 20000623.0026: passwd-unix-inc.c:unix_validate now checks to see * if the pwent password's not "x" even though shadow support is on, * and uses that non-shadowed password to validate if that's the case. * (This covers when we're compiling with shadow support, but shadow * is currently not installed.) * * (20000623.0016): c_printwho now tells you when you're talking to all, * instead of just being silent in that case. (cosmetic?) * * (20000623.0007): fixed the occasional "yourname to (null)>" prompt bug. * (FINALLY! it was inadvertently introduced a year and a day ago.) * Cause: When someone you where whispering to is logged in once, * and they log in again and kick the self you were talking to, * the bits are set right, but talkingTo() can't get the name of the * newly logged-in user, because when they started talking to 'em * (through the newly logged-in calling talkToMeToo right before printing * the prompt to kick the old one), so it got (null) instead. * Now uses GetUserByIndex(bitno, true) instead of GetUserByIndex(bitno) * so it doesn't check IsUserAround(), it returns the *user regardless. * * (20000614.2220): cmd::c_zebra: * Cosmetic bugfix; in current settings listings, tabself was misaligned. * * (20000614.1245): user::ManageInputNewChar: * Hitting ^W would do (n) backspaces, where n == # letters * erased, even if showInput was false. (Also, if local mode was * on, would redisplay the input line, even if showInput was false.) * * * -- 1.9.4-devel34 -- * * (20000613.2000): That should conclude development for 1.9.4. * Assuming no new bugs, 1.9.4-devel34 will be released as 1.9.4 * after a test period and doc review (thanks again matt!) * * (20000613.1745): Whispering to self as a command (!to myname blah blah) * no longer displays the line twice. * * (20000613.1110): the code in ManageInputBuffer that actually reads * from the socket has been moved to slfgetch()... it was in several * other places as well, CNP style. The rest has been moved to * ManageInputNewChar. * * 20000612.2200: !lockout renamed to !lock * * * -- 1.9.4-devel33 -- * * 20000610.2000: for c_lockout: LOCKOUTUSERS_FILE lists those who can. * (don't define LOCKOUT_ONLY_LOCKOUTUSERS to allow all users to.) * * * -- 1.9.4-devel32 -- * * 20000610.1100: !ban lets you disallow certain user(s) from * whispering to you. * * * -- 1.9.4-devel31 -- * * 20000610.1034: Guests must use !lockout guest to lock selves out, * to confirm they know they can't unlock * * (20000610.1030): ALLOW_LOCKOUT enables/disables c_lockout(default: disabled) * * 20000609.2030: !set tabself now allows you to tabcomplete to your own * username, making it easier to make quick notes to yourself using chat. * * 20000607.1730?: c_lockout :) * * (20000607.0720): Changed authlocal to disallow connections from uid under * 100... well, they can still log in, but they'll be prompted for * username/pw. * * (20000606.1820): In passwd-unix-inc.c, changed getpwnam to slf_getpwnam * * 20000529.0930: Added /var/lib/slforum/banners as standard banner directory, * with /tmp/.banners as fallback. * * * -- 1.9.4-devel30 -- * * (20000524.1345): Now compiles with topics enabled. * * * -- 1.9.4-devel29 -- * * ^-- this should be the last devel release before 1.9.4... :) * * 20000523.1815: PAM support now works! Had to make a service description * file to stick in /etc/pam.d * * (20000523.1750): Now clears buffer after trying to validate pw, Just in Case * * 20000523.1600: LookForTimers now runs every 30 seconds, at :00 and :30 . * * (20000523.1555): LookForTimers wasn't checking for guest timeouts, because * it used IsUserAccepted instead of IsUserAround... fixed. * * (20000523.1545): Now properly clears entry line before clearing screen * by sending many blank lines. * * 20000523.1540: Prints the long legal hello message at the beginning of * every successful run; previously did so only when ran w/ no params. * * 20000523.1530: Added default port number. (7777) * * * -- 1.9.4-devel28 -- * * 20000514: Added skeleton of PAM support and other auth methods. * * * -- 1.9.4-devel27 -- * * 20000513.1940: SHADOW SUPPORT WORKS. * Problem was, passwd.c wasn't including slfprefs.h, and thus * didn't know when USE_SHADOW was defined. fixed :) * * 20000511.1720: automsgchk notifications now beep. * * * -- 1.9.4-devel26 -- * * (20000511.0910): Bugfix: Was reporting new mail every msgchk interval. * Had a >= where should've been != ... fixed * * (20000511.0705): Tweaked room::LookForTimers so it won't skip a minute * by scheduling SIGALRM 60 seconds from :00 . * * * -- 1.9.4-devel25 -- * * (20000510.1948): Partial command completion wasn't case-insensitive. Fixed. * * (20000510.1940): After ^L, didn't print from: attribution if the person * who sent the last line before ^L, sends the first line after. Fixed. * * (20000510.1933): Alphabetized the !set display, except for command char, * which goes first. * * (20000510.1923): first sked_alarm is right away, not PING_INTERVAL_SEC away * * 20000510.1900: auto-msgchk added (matt's idea) * * (20000508.??): added continue; to room::pingAndCheckTimeout when no user was * in that slot; less wasted cycles * * * -- 1.9.4-devel24 -- * * 20000506.1010: Added final timestamp in the log, ctime format, of when * a run terminates, so we don't need to scroll back through the log * to determine the date on which it ended. * * 20000506.0945: Added -h / -help commandline option. * * 20000506.0900: Added commandline option (+/-aa) for autoaccept guests, * option for print guest-howto-message (+/-ghm), and in theory, can * now accept the arguments after port # in any order. * * * -- 1.9.4-devel23 -- * * 20000505.2040: Added guest auto-accept option at compile time (slfprefs.h). * AUTO_ACCEPT_GUESTS defaults to 0, of course! Also mentioned this * in INSTALL. Also changed GUEST_HOWTO_MESSAGE from an #ifdef to an #if. * * (20000505.1400): Began a separate ChangeLog-userfeatures file, less detailed * than this one, which is really for developers. * * (20000504.1140): Documented user::Send return values * * 20000504.1130: ListenList is now checked only if the message being ignored * is public; this means we no longer check listenlist for hourly chimes, * etc. for folks ignoring those types of messages. * * (20000503.1540): When can't open backup wtmp file, clarified the error * message to "NOT LOGGING LOGINS" from "NOT LOGGING". * * * -- 1.9.4-devel22 -- * * (20000503.0740): If one was ignoring chimes, it would still print the * hintmessage on how to ignore chimes. Fixed. (Had to change * user::Send (const char*, int, bool) to take optional msgdescflags * parameter.) * * * -- 1.9.4-devel21 -- * * (20000502.0615): Fixed null-deref on very low memory condition in * user::pingAndCheckTimeout(). This would probably never happen, * but it's important to fix just in case. * * (20000502.0100): Finished reversing changelog. (Yes, it was in * time-increasing order in every version prior to this one.) * * (20000501.2050): When going from trueidle-off to trueidle-on, * wouldn't update idle after the last keypress used to enter the command * to move into that state. (fixed) * * 20000501.0940: Clarified the !here display; now says "x more people too * idle, not shown" (added the more) * * 20000501.0900: !set now says "Your current settings" to emphasize that * these are per-user preferences. * * * -- 1.9.4-devel20 -- * * 20000430.1240: Listen list now saved and restored with other prefs * * (20000430.1230): listenListAdd now checks for dupes, and won't add a word * if it's already in there. (using strcasecmp) * * 20000430.1200: Added ctrl-o for enable/disable command char * (good for pasting things in.) * * (20000430.1120): Moved prefsfile path from hardcoded to slfprefs.h * * 20000430.1110: Added trueidle user preference (idle time based on last * keypress (this was the old behavior) instead of last public action.) * * (20000430.1100): Cleaned up places where cmd_char was being sprintf'd in * and we can now use \177 instead. * * (20000430.1045): Added reset-idles wherever the user takes a public action, * since it's not set after every key anymore. * * (20000430.0400): c_here (ListUsers with exclude_idleones) now correctly * says how many are _here_ and shown, not how many are logged in. * (changed nu to (nu-notshown) at 20000430.0400 mark in ListUsers) * * (20000430.0005): c_help wasn't using uWriteSubst to print the cmd table, * and neither was rndCommand(). Fixed. * * (20000429.2330): removed !zebra from user-visible commands. (!set remains) * * (20000429.2300): Documented all ctrl-chars in features.html * * * -- 1.9.4-devel19 -- * * 20000429.2200: BEHAVIOR CHANGE in something long-established: * Only public messages reset user idle time. * (added all_keys_reset_idle field) * (!set trueidle on for old behavior) * * * -- 1.9.4-devel18 -- * * 20000429.1155: If the person you're whispering to leaves while you're * typing a command, or typing a line that would be sent public using !!, * that input would have been cleared; this is no longer so. * * (20000429.1130): Added code to HandleFindDupl to get rid of telnet commands * (since these will be sent to this state, which is the initial state if * connecting from localhost with authlocal enabled.) * (Added states to parse telnet options, but they just ignore them at * present.) * * (20000429.1020): Fixed: If whispering to self (possibly among others), you * saw the line sent to yourself twice. (fixed.) * * (20000429.1015): Fixed the timer time-parsing bug that showed up only when * a timer was already set. * * (20000426.1930): added uWriteSubst, and modified Send to substitute cmd char * for all \177; no more !'s in help msgs if your cmd char is % or /, etc. * Went through all .cc files and changed !'s to \177's in help text. * * * * * -- 1.9.4-devel17 -- * * 20000401.1956: Fixed timer bug * * 20000401.1950: Added another second to ^D^D timeout for laggy modem users. * (demaria request) * * * -- 1.9.4-devel16 -- * * 20000321.1405: SECURITY FIX: Wasn't clearing yankbuffer on discon. Fixed. * * 20000321.1400: added lastbuffer to user. (Private, no getter.) * Added ^P to user::ManageInputBuffer so a user can paste in the * last public or private line sent. * Added pasteIntoBuffer private method for ^Y, ^N, ^P. * * 20000321.1330: Added lastpublicmsg field to room. (getLastPublicMsg() * is getter). Added ^N to user::ManageInputBuffer so a user can * paste in the last public message. * * * -- 1.9.4-devel15 -- * * 20000320.1100: added ALL_MESSAGES_TIMESTAMP feature to slfprefs.h, * user::Send. (Implements a feature requested.) * * * -- 1.9.4-devel14 -- * * (20000305.1215): Prep for virtualization: moved all getpw* calls for * getting users from the passwd file into passwd.c * * 20000305.1145: !timer/!alarm now display the old timer being replaced when * setting a new one. * * (20000304.1600): Preferences for slforum now in slfprefs.h, for easy * inclusion into files that don't want any of the prototypes or classes. * (e.g., slforumutil.c) * * * -- 1.9.4-devel13 -- * * (20000229.0001): !msgchk now says "you have old mail waiting", not "you have * no new mail", so we don't see the word 'new' when we in fact have just * old mail. Thanks Demaria for suggestion. * * 20000227.2000: Broadcast messages with hint bits set are no longer logged; * they are usage hints for the current room occupants, useless to the * reader of the log. * * 20000227.1930: Hourly chimes now have a hint message telling how to ignore * them if you so desire. (As with all other hint messages, this only * shows up once for each user, and is not displayed after the first * time.) * * (20000227.0200): !timer/!alarm now lists public timers too * * (20000226.1850): Public timers are now announced to room when set. * * 20000226.1300: High-bit chars now allowed. Any highbit ctrl chars are * tossed out, and any highbit whitespace chars are converted to ASCII 32. * [ note that this still doesn't work right, 20000302 ] * [ need to impl. a state machine to handle telnet option negotiation ] * * (20000225.1605): removed !banner, now just !spam does c_banner * * 20000225.1600: now exits if can't open requested log file during startup. * * * -- 1.9.4-devel12 -- * * 20000219.0700: slforumroom::listusers now says how many users are here but * not shown. * * (20000219.0045): slforumuser::usercmds table now has all possible params * for c_zebra in {|} form, not just W? . * * 20002019.0020: Simplified c_[un]ignore and its bloated help message by * taking out banter and pbeep (demaria idea) * * (20000219.0018): c_showaway now shows the header line, as it should. * * 20000218.2300: rewrote c_msgchk, it should work for everyone now, and * now uses no external commands or files in /tmp :-) * * * -- 1.9.4-devel11 -- * * 20000217.0430: Added SIGHUP handler which closes/reopens the transcript log * file, for use with the logrotate(8) utility. Eventually this handler * will also re-read the slforum global config file, when we have one. * * (20000217.0415): converted "slforum.cc" to "slforumutil.c": this is more * descriptive, slforummain.cc is the startup code and it was confusing * to have an slforum.cc as well. Also, as of this writing, (C vs C++), * slforumutil.o is 33264 bytes; slforum.o was 54536 bytes for same code. * * 20000217.0343: Added option for public timers. * Current syntax: !timer