[PENNMUSH-ANNOUNCE] 1.7.4-patch01

dunemush@pennmush.org dunemush at pennmush.org
Fri, 23 Mar 2001 10:25:47 -0600


##### SPECIAL NOTES FOR THIS PATCH #####
### 1. This patch is not fully tested on hpux and may not compile or run
### on hpux. If you have an hpux machine, I would very much like to
### hear how this works out (did it build, does it run, and does @uptime work?)
###
### 2. You will likely get a rejected hunk in game/restrict.cnf
### This is no big deal. Please edit game/restrict.cnf and add a
### blank line at the end.

This is patch01 to PennMUSH 1.7.4. After applying this patch, you will
have version 1.7.4p1

To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:
	patch -p1 < 1.7.4-patch01
        ./Configure
	make update
	make install

If you use GNU patch 2.2, you probably want the above to be 'patch -b -p1',
not just 'patch -p1'.


Then @shutdown and restart your MUSH.
    - Alan/Javelin

In this patch:

Minor changes:
  * Speedup for repeat() function. [TAP]
  * Hint for openbsd, which appears to have a broken IPv6 configuration. [SW]
  * Some OS-dependent defines have been removed.
  * ansi() now only adds a maximum of 7 codes to the string. [TAP]
Fixes:
  * The restrict_command for rob has been removed from restrict.cnf
    Reported by Kyieren@M*U*S*H.
  * Help fixes by Kyieren, rodregis, and Luke @ M*U*S*H, Datron@SW2, 
    and Noltar@Korongil.
  * stripansi() didn't correctly handle multiple ansi codes in
    sequence. Reported by CU5@WCX.
  * Linting for warnings in pcre. [SW]
  * Configure now sends mailing list subscription stuff to the new 
    list address.
  * Updated examples in access.README to use dbrefs.
  * Updated a reference to the rob command in 'give' errors. Noted by
    rodregis@M*U*S*H.
  * median was broken. Reported by Parax@SandsMUSH.
  * Fixes to update.pl's handling of CHAT_TOKEN_ALIAS and the like.
    Noted by rodregis@M*U*S*H

Prereq: 1.7.4p0
*** 1_7_4.32/Patchlevel Thu, 08 Feb 2001 23:01:41 -0600 dunemush (pennmush/5_Patchlevel 1.18 600)
--- 1_7_4.46(w)/Patchlevel Mon, 12 Mar 2001 14:43:17 -0600 dunemush (pennmush/5_Patchlevel 1.19 600)
***************
*** 1,2 ****
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.4p0
--- 1,2 ----
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.4p1
*** 1_7_4.32/README Tue, 09 Jan 2001 17:56:37 -0600 dunemush (pennmush/4_README 1.6 600)
--- 1_7_4.46(w)/README Sun, 11 Mar 2001 17:33:01 -0600 dunemush (pennmush/4_README 1.7 600)
***************
*** 550,558 ****
  There are three places one could get help with a problem:
  
  1. pennmush@pennmush.org is the PennMUSH mailing list.
!    To subscribe, send email to listproc@pennmush.org
!    with the words "subscribe pennmush YourNameHere" in the body
!    of the mesage.
  
     The PennMUSH mailing list should only be used for problems,
     bugs, suggestions, ideas, discussion, etc. that are OF GENERAL INTEREST.
--- 550,556 ----
  There are three places one could get help with a problem:
  
  1. pennmush@pennmush.org is the PennMUSH mailing list.
!    To subscribe, visit http://www.pennmush.org/mailman/listinfo/pennmush
  
     The PennMUSH mailing list should only be used for problems,
     bugs, suggestions, ideas, discussion, etc. that are OF GENERAL INTEREST.
***************
*** 565,570 ****
--- 563,572 ----
     That is, don't report problems with downloading PennMUSH, compilation,
     installation, restarts, or database corruption to the mailing list.
     These are often system specific.
+ 
+    (If you don't want to hear these discussions, but do want to be
+    informed of new patches, subscribe to pennmush-announce instead,
+    at http://www.pennmush.org/mailman/listinfo/pennmush-announce)
  
  2. pennmush-bugs@pennmush.org is the bug reporting address 
     for the PennMUSH developers (suggestions go to pennmush-developers,
*** 1_7_4.32/CHANGES.OLD Thu, 08 Feb 2001 23:01:41 -0600 dunemush (pennmush/7_CHANGES.OL 1.7 600)
--- 1_7_4.46(w)/CHANGES.OLD Fri, 16 Mar 2001 16:52:55 -0600 dunemush (pennmush/7_CHANGES.OL 1.8 600)
***************
*** 867,872 ****
--- 867,915 ----
          Suggested by Oleo@M*U*S*H.
        * getstring_noalloc was doing an fgetc into a char variable,
          instead of an int, so wasn't 8-bit clean. Report by Slava.
+ 
+ Version 1.7.2 patchlevel 35                        January 27, 2001
+ 
+ Fixes:
+       * Fixed a bug in filter introduced in p34. Report by Jason Rhodes.
+       * Help for sort() now indicates that 'n' sorts integers. Report by
+         Dave Milford.
+ 
+ 
+ Version 1.7.2 patchlevel 34                        October 2, 2000
+ 
+ Fixes:
+       * filter now looks at the whole result, not just the first
+         character, when checking if the filter function returned '1'. [SW]
+       * raw_input and raw_input_at are now unsigned char *, so
+         they build right on HP/UX and similar. Report by Jeff Hildebrand
+ 
+ 
+ Version 1.7.2 patchlevel 33                        August 17, 2000
+ 
+ Fixes (backported from 1.7.3p4):
+       * Bug in con() patched.
+       * Bug in deciding when to take a penny for queued commands fixed
+         by Stephen Dennis.
+       * Configure portability fixes
+       * Better handling of cases where the maildb has messages from
+         dbrefs that are out of range (due to truncating a db to remove
+         corruption, for example). Suggested by Ashen-Shugar.
+       * Various fixes to better resist crashing due to attacks involving
+         overwhelming connections. 
+       * @mvattr a/b=a/b would clear the attribute. No longer.
+         Reported by Octavian@M*U*S*H
+       * type(obj) would log a "WEIRD OBJECT" message if obj was 
+         a garbage object. Reported by RLM. [TAP]
+       * Small memory leak when doing @cpattr of a standard attribute to a
+         non-standard attribute is fixed.
+       * Tport_anything didn't allow teleporting things to exits. 
+         Noted by Vexon@M*U*S*H.
+       * Z_TEL flag works on ZMO's as promised now. Report by [SW].
+       * Potential crash in moveit fixed. Report by Howie@NF TrekMush
+       * getstring_noalloc was doing an fgetc into a char variable,
+         instead of an int, so wasn't 8-bit clean. Report by Slava.
+ 
  Version 1.7.2 patchlevel 32                        April 17, 2000
  
  Fixes:
*** 1_7_4.32/CHANGES Wed, 07 Mar 2001 09:12:05 -0600 dunemush (pennmush/8_CHANGES 1.170 600)
--- 1_7_4.46(w)/CHANGES Wed, 21 Mar 2001 14:16:34 -0600 dunemush (pennmush/8_CHANGES 1.179 600)
***************
*** 17,22 ****
--- 17,46 ----
  
  ==========================================================================
  
+ Version 1.7.4 patchlevel 1		       March 17, 2001
+ 
+ Minor changes:
+   * Speedup for repeat() function. [TAP]
+   * Hint for openbsd, which appears to have a broken IPv6 configuration. [SW]
+   * Some OS-dependent defines have been removed.
+   * ansi() now only adds a maximum of 7 codes to the string. [TAP]
+ Fixes:
+   * The restrict_command for rob has been removed from restrict.cnf
+     Reported by Kyieren@M*U*S*H.
+   * Help fixes by Kyieren, rodregis, and Luke @ M*U*S*H, Datron@SW2, 
+     and Noltar@Korongil.
+   * stripansi() didn't correctly handle multiple ansi codes in
+     sequence. Reported by CU5@WCX.
+   * Linting for warnings in pcre. [SW]
+   * Configure now sends mailing list subscription stuff to the new 
+     list address.
+   * Updated examples in access.README to use dbrefs.
+   * Updated a reference to the rob command in 'give' errors. Noted by
+     rodregis@M*U*S*H.
+   * median was broken. Reported by Parax@SandsMUSH.
+   * Fixes to update.pl's handling of CHAT_TOKEN_ALIAS and the like.
+     Noted by rodregis@M*U*S*H
+ 
  Version 1.7.4 patchlevel 0                     March 7, 2001
  
  Major Changes:
*** 1_7_4.32/game/txt/hlp/pennvers.hlp Wed, 07 Mar 2001 09:12:05 -0600 dunemush (pennmush/12_pennvers.h 1.125 600)
--- 1_7_4.46(w)/game/txt/hlp/pennvers.hlp Tue, 20 Mar 2001 14:58:14 -0600 dunemush (pennmush/12_pennvers.h 1.132 600)
***************
*** 1,5 ****
  & changes
! & 1.7.4p0
  This is a list of changes in this patchlevel which are probably of
  interest to players. More information about new commands and functions
  can probably be gotten via 'help <name of whatever>'. 'help credits'
--- 1,5 ----
  & changes
! & 1.7.4p1
  This is a list of changes in this patchlevel which are probably of
  interest to players. More information about new commands and functions
  can probably be gotten via 'help <name of whatever>'. 'help credits'
***************
*** 11,16 ****
--- 11,40 ----
  A list of the patchlevels associated with each release can
  be read in 'help patchlevels'.
  
+ Version 1.7.4 patchlevel 1		       March 17, 2001
+ 
+ Minor changes:
+   * Speedup for repeat() function. [TAP]
+   * Hint for openbsd, which appears to have a broken IPv6 configuration. [SW]
+   * Some OS-dependent defines have been removed.
+   * ansi() now only adds a maximum of 7 codes to the string. [TAP]
+ Fixes:
+   * The restrict_command for rob has been removed from restrict.cnf
+     Reported by Kyieren@M*U*S*H.
+   * Help fixes by Kyieren, rodregis, and Luke @ M*U*S*H, and Datron@SW2.
+   * stripansi() didn't correctly handle multiple ansi codes in
+     sequence. Reported by CU5@WCX.
+   * Linting for warnings in pcre. [SW]
+   * Configure now sends mailing list subscription stuff to the new 
+     list address.
+   * Updated examples in access.README to use dbrefs.
+   * Updated a reference to the rob command in 'give' errors. Noted by
+     rodregis@M*U*S*H.
+   * median was broken. Reported by Parax@SandsMUSH.
+   * Fixes to update.pl's handling of CHAT_TOKEN_ALIAS and the like.
+     Noted by rodregis@M*U*S*H
+ 
+ & 1.7.4p0
  Version 1.7.4 patchlevel 0                     March 7, 2001
  
  Major Changes:
***************
*** 951,956 ****
--- 975,1026 ----
          Suggested by Oleo@M*U*S*H.
        * getstring_noalloc was doing an fgetc into a char variable,
          instead of an int, so wasn't 8-bit clean. Report by Slava.
+ 
+ & 1.7.2p35
+ Version 1.7.2 patchlevel 35                        January 27, 2001
+ 
+ Fixes:
+       * Fixed a bug in filter introduced in p34. Report by Jason Rhodes.
+       * Help for sort() now indicates that 'n' sorts integers. Report by
+         Dave Milford.
+ 
+ 
+ & 1.7.2p34
+ Version 1.7.2 patchlevel 34                        October 2, 2000
+ 
+ Fixes:
+       * filter now looks at the whole result, not just the first
+         character, when checking if the filter function returned '1'. [SW]
+       * raw_input and raw_input_at are now unsigned char *, so
+         they build right on HP/UX and similar. Report by Jeff Hildebrand
+ 
+ 
+ & 1.7.2p33
+ Version 1.7.2 patchlevel 33                        August 17, 2000
+ 
+ Fixes (backported from 1.7.3p4):
+       * Bug in con() patched.
+       * Bug in deciding when to take a penny for queued commands fixed
+         by Stephen Dennis.
+       * Configure portability fixes
+       * Better handling of cases where the maildb has messages from
+         dbrefs that are out of range (due to truncating a db to remove
+         corruption, for example). Suggested by Ashen-Shugar.
+       * Various fixes to better resist crashing due to attacks involving
+         overwhelming connections. 
+       * @mvattr a/b=a/b would clear the attribute. No longer.
+         Reported by Octavian@M*U*S*H
+       * type(obj) would log a "WEIRD OBJECT" message if obj was 
+         a garbage object. Reported by RLM. [TAP]
+       * Small memory leak when doing @cpattr of a standard attribute to a
+         non-standard attribute is fixed.
+       * Tport_anything didn't allow teleporting things to exits. 
+         Noted by Vexon@M*U*S*H.
+       * Z_TEL flag works on ZMO's as promised now. Report by [SW].
+       * Potential crash in moveit fixed. Report by Howie@NF TrekMush
+       * getstring_noalloc was doing an fgetc into a char variable,
+         instead of an int, so wasn't 8-bit clean. Report by Slava.
+ 
  & 1.7.2p32
  Version 1.7.2 patchlevel 32                        April 17, 2000
  
***************
*** 4468,4477 ****
      is configurable.
  
  & patchlevels
! 1.7.4: 0
  1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
  1.7.2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
!        19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32
  1.7.1: 0, 1, 2, 3
  1.7.0: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11
  1.6.10: 0, 1, 2, 3, 4, 5, 6, 6
--- 4538,4547 ----
      is configurable.
  
  & patchlevels
! 1.7.4: 0, 1
  1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
  1.7.2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
!        19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35
  1.7.1: 0, 1, 2, 3
  1.7.0: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11
  1.6.10: 0, 1, 2, 3, 4, 5, 6, 6
*** 1_7_4.32/game/txt/hlp/penntop.hlp Tue, 27 Feb 2001 12:35:21 -0600 dunemush (pennmush/13_penntop.hl 1.2.1.26 600)
--- 1_7_4.46(w)/game/txt/hlp/penntop.hlp Wed, 14 Mar 2001 14:27:19 -0600 dunemush (pennmush/13_penntop.hl 1.2.1.27 600)
***************
*** 249,268 ****
          hasflag(<object>,<flag name>) 
    is true (the object has the flag), it will return 1. If it is false, 
    it will return 0. 
!   
!   Now, any string is interpreted as true(1), except for the null string
!   (ie, just a blank), which is considered false (0). Anything that 
!   begins with a #-1 is also considered false. All dbref #s are considered
!   true. Any number except 0 (including negative numbers), is considered
!   true.
!   
  (continued in help boolean2)
! & BOOLEAN2
!   Note that this may differ on some MUSHes, since it is possible to use
!   the Boolean value system from TinyMUSH2.2 instead. '@config tiny' will
!   show if this is the case.
  
!   Examples:     
      not(foo) = 0  
      not(<null string>) = 1
      not(-66) = 0
--- 249,282 ----
          hasflag(<object>,<flag name>) 
    is true (the object has the flag), it will return 1. If it is false, 
    it will return 0. 
! 
!   Other functions expect to operate on boolean values. What they
!   consider "true" or "false", however, depends on the setting of
!   the "tiny_booleans" config option (@config tiny will show this).  
! 
  (continued in help boolean2)
! & BOOLEAN2 
!   If tiny_booleans is...
!   no                       FALSE: null string, 0, any negative db
!                            TRUE:  everything else
!   yes                      TRUE:  numbers other than 0
!                                   strings beginning with numbers other than 0
!                            FALSE: everything else 
!   
!   Or, put another way:
!   Value                 tiny_booleans=no        tiny_booleans=yes  Gotcha
!   0                     FALSE                   FALSE
!   non-zero number       TRUE                    TRUE 
!   #<non-negative>       TRUE                    TRUE
!   #<negative>           FALSE                   TRUE                *
!   null string           FALSE                   FALSE
!   0<non-numbers..>      TRUE                    FALSE               *
!   <non-numbers...>      TRUE                    TRUE
! 
! (continued in help boolean3)
! & BOOLEAN3
  
!   Examples (assuming tiny_booleans is "no"):     
      not(foo) = 0  
      not(<null string>) = 1
      not(-66) = 0
*** 1_7_4.32/game/txt/hlp/pennmail.hlp Thu, 08 Feb 2001 23:01:41 -0600 dunemush (pennmush/15_pennmail.h 1.6 600)
--- 1_7_4.46(w)/game/txt/hlp/pennmail.hlp Wed, 21 Mar 2001 14:16:13 -0600 dunemush (pennmush/15_pennmail.h 1.6 600)
***************
*** 68,75 ****
          be "Forwarded".
  
  & mail-other
!   @mail/clear [<msg-list | all>]
!   @mail/unclear [<msg-list> | all>]
          These commands mark mail in the current folder as cleared or uncleared.
          Mail marked for clearing is deleted when you disconnect, or
          if you use @mail/purge. If no msg-list is specified, all
--- 68,75 ----
          be "Forwarded".
  
  & mail-other
!   @mail/clear [<msg-list> | all]
!   @mail/unclear [<msg-list> | all]
          These commands mark mail in the current folder as cleared or uncleared.
          Mail marked for clearing is deleted when you disconnect, or
          if you use @mail/purge. If no msg-list is specified, all
***************
*** 80,86 ****
          Actually deletes all messages marked for clearing with @mail/clear.
          This is done automatically when you log out.
  
!   @mail/tag [<msg-list | all>]
    @mail/untag [<msg-list> | all>]
          These commands tag or untag mail in the current folder.
          Tagged mail can be later acted on en masse by using "tagged" as
--- 80,86 ----
          Actually deletes all messages marked for clearing with @mail/clear.
          This is done automatically when you log out.
  
!   @mail/tag [<msg-list> | all>]
    @mail/untag [<msg-list> | all>]
          These commands tag or untag mail in the current folder.
          Tagged mail can be later acted on en masse by using "tagged" as
*** 1_7_4.32/game/txt/hlp/pennfunc.hlp Mon, 26 Feb 2001 09:21:53 -0600 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1 600)
--- 1_7_4.46(w)/game/txt/hlp/pennfunc.hlp Fri, 16 Mar 2001 11:02:44 -0600 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2 600)
***************
*** 72,78 ****
  
    For example, 2 is represented as '0010' and 4 as '0100'. If these two
    numbers are bitwise-or'ed together with BOR(), the result is 6, or
!   (In binary) '0100'. These functions are useful for storing small
    lists of toggle (Yes/No) options efficiently.
  
    band()        bnand()       bnot()        bor()         bxor()
--- 72,78 ----
  
    For example, 2 is represented as '0010' and 4 as '0100'. If these two
    numbers are bitwise-or'ed together with BOR(), the result is 6, or
!   (In binary) '0110'. These functions are useful for storing small
    lists of toggle (Yes/No) options efficiently.
  
    band()        bnand()       bnot()        bor()         bxor()
***************
*** 271,277 ****
    effects), while cand() stops evaluation after the first argument
    that evaluates to false.
  
! See also:  BOOLEAN VALUES, or()
  & ANDFLAGS()
    andflags(<object>,<list of flags>)
  
--- 271,277 ----
    effects), while cand() stops evaluation after the first argument
    that evaluates to false.
  
! See also:  BOOLEAN VALUES, or(), xor(), not()
  & ANDFLAGS()
    andflags(<object>,<list of flags>)
  
***************
*** 2044,2056 ****
  
    Returns 1 if all its arguments are false, 0 if one is true.
    Equivalent to not(or()), but more efficient.
  & NOT()
    [not(<boolean value>)]
  
    Takes a boolean value, and returns its inverse.  
    I.E. if the input is equivalent to true(1), it returns a 0, and if 
    the input is equivalent to false(0), it returns a 1.
!   See BOOLEAN VALUES.
  & NUM()
    num(<object>)
  
--- 2044,2062 ----
  
    Returns 1 if all its arguments are false, 0 if one is true.
    Equivalent to not(or()), but more efficient.
+ 
+   See also: and(), or(), xor(), not()
  & NOT()
    [not(<boolean value>)]
  
    Takes a boolean value, and returns its inverse.  
    I.E. if the input is equivalent to true(1), it returns a 0, and if 
    the input is equivalent to false(0), it returns a 1.
! 
!   The definition of truth and falsehood depends on configuration settings;
!   see help BOOLEAN VALUES for details.
!  
!   See also: and(), or(), nor(), xor()
  & NUM()
    num(<object>)
  
***************
*** 2838,2845 ****
  & T()
    t(<expression>)
  
!   Returns a 0 if the expression is null, 0, #-1, #-2, (or any negative db#)
!   Returns a 1 otherwise.
  & TABLE()
    table(<list>,<field width>,<line length>,<delimiter>,<output separator>) 
  
--- 2844,2853 ----
  & T()
    t(<expression>)
  
!   Returns a 0 if the expression is false, and 1 otherwise. 
!   The definition of truth and falsehood depends on configuration settings;
!   see help BOOLEAN VALUES for details.
! 
  & TABLE()
    table(<list>,<field width>,<line length>,<delimiter>,<output separator>) 
  
***************
*** 3320,3325 ****
--- 3328,3335 ----
  
    Takes two booleans, and returns a 1 if one, and only one of the two
    inputs is equivalent to true(1).  See BOOLEAN VALUES.
+ 
+   See also: and(), or(), not(), nor()
  & ZEMIT()
    zemit(<zone>, <message>)
  
*** 1_7_4.32/game/txt/hlp/pennflag.hlp Wed, 24 Jan 2001 16:56:43 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2 600)
--- 1_7_4.46(w)/game/txt/hlp/pennflag.hlp Thu, 08 Mar 2001 11:37:03 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1 600)
***************
*** 598,610 ****
    
    If a player is set UNFINDABLE, he cannot be found by the @whereis 
    command. You also cannot use loc(), locate(), and similar functions
!   to find his location.
    
    If a room is set UNFINDABLE, you cannot locate any of its contents
!   via any means (@whereis, the loc() function, etc.)
    
!   If a wizard is set UNFINDABLE, and he is idle past the allowable 
!   maximum idle time, he will be set DARK automatically.
  & UNINSPECTED 
    Flag: UNINSPECTED (rooms)
  
--- 598,611 ----
    
    If a player is set UNFINDABLE, he cannot be found by the @whereis 
    command. You also cannot use loc(), locate(), and similar functions
!   to find his location, unless you have the see_all power or equivalent.
    
    If a room is set UNFINDABLE, you cannot locate any of its contents
!   via any means (@whereis, the loc() function, etc.) unless you are
!   see_all or equivalent.
    
!   If a player who can @hide and idle is set UNFINDABLE, and he is idle past 
!   the allowable maximum idle time, he will be hidden automatically.
  & UNINSPECTED 
    Flag: UNINSPECTED (rooms)
  
*** 1_7_4.32/game/access.README Fri, 26 May 2000 09:29:12 -0500 dunemush (pennmush/42_access.REA 1.2 600)
--- 1_7_4.46(w)/game/access.README Wed, 14 Mar 2001 14:45:34 -0600 dunemush (pennmush/42_access.REA 1.3 600)
***************
*** 96,131 ****
  
  1. Totally ban specific sites, allow all others
  
! *badsite.com none
! *.twink.edu none
  
  This will totally lock out those sites (like lockout.cnf)
  
  
  2. Allow specific sites and no others
  
! *.berkeley.edu default
! * none
  
  People may connect from .berkeley.edu sites only.
  
  
  3. Allow connection but not creation from some sites
  
! *.twink.edu !create
  
  This is equivalent to the former function of sites.cnf
  
  
  4. Allow connection but not creation or guest-connection from some sites
  
! *.twink.edu !guest !create
  
  
  5. Require that a given site use the 'register' command to register
     players by email. 
  
! *.twink.edu !create register
  
  Using !create prevents people from using the usual create command.
  Adding register allows them to uset the register command.
--- 96,131 ----
  
  1. Totally ban specific sites, allow all others
  
! *badsite.com -2 none
! *.twink.edu -2 none
  
  This will totally lock out those sites (like lockout.cnf)
  
  
  2. Allow specific sites and no others
  
! *.berkeley.edu -2 default
! * -2 none
  
  People may connect from .berkeley.edu sites only.
  
  
  3. Allow connection but not creation from some sites
  
! *.twink.edu -2 !create
  
  This is equivalent to the former function of sites.cnf
  
  
  4. Allow connection but not creation or guest-connection from some sites
  
! *.twink.edu -2 !guest !create
  
  
  5. Require that a given site use the 'register' command to register
     players by email. 
  
! *.twink.edu -2 !create register
  
  Using !create prevents people from using the usual create command.
  Adding register allows them to uset the register command.
***************
*** 134,140 ****
  6. Disable creation from twink.edu sites, and don't let Wizards 
     override this rule with @sitelock
  
! *.twink.edu !create
  @sitelock
  
  Because the rule appears above "@sitelock", and @sitelock rules appear
--- 134,140 ----
  6. Disable creation from twink.edu sites, and don't let Wizards 
     override this rule with @sitelock
  
! *.twink.edu -2 !create
  @sitelock
  
  Because the rule appears above "@sitelock", and @sitelock rules appear
***************
*** 146,152 ****
     later override this rule with @sitelock
  
  @sitelock
! *.twink.edu !create
  
  Because the rule appears below "@sitelock", new @sitelock rules
  (which will be added immediately following "@sitelock") will precede
--- 146,152 ----
     later override this rule with @sitelock
  
  @sitelock
! *.twink.edu -2 !create
  
  Because the rule appears below "@sitelock", new @sitelock rules
  (which will be added immediately following "@sitelock") will precede
***************
*** 173,184 ****
    e) Allow people from somesite.org to connect to Guests only.
    f) Allow @sitelock to override c-e above
  
! localhost.berkeley.edu default
! *.twink.edu !create register suspect
  @sitelock
! *badsite.com none deny_silent
! jerk@netcom.com !guest
! somesite.org !connect !create guest
  
  
  
--- 173,184 ----
    e) Allow people from somesite.org to connect to Guests only.
    f) Allow @sitelock to override c-e above
  
! localhost.berkeley.edu -2 default
! *.twink.edu -2 !create register suspect
  @sitelock
! *badsite.com -2 none deny_silent
! jerk@netcom.com -2 !guest
! somesite.org -2 !connect !create guest
  
  
  
*** 1_7_4.32/utils/update.pl Sun, 22 Oct 2000 18:25:00 -0500 dunemush (pennmush/43_update.pl 1.4 700)
--- 1_7_4.46(w)/utils/update.pl Tue, 20 Mar 2001 14:56:53 -0600 dunemush (pennmush/43_update.pl 1.5 700)
***************
*** 136,145 ****
  	                             : &def(&ask_simple($1,'define'));
      } elsif ( m!^(/\*\s*)?#define\s+([A-Z0-9_-]+)\s+(.+)\s+(/\*.*\*/)!) {
  	# A define with a value and a comment
! 	$comment = $4; $name = $2;
! 	$def = $3;
  	print OLD defined($defs{$name}) 
! 	    ? &def($name,$comment) : &def(&ask_value($name,$def),$comment,$def);
      } elsif ( m!^#define\s+([A-Z0-9_-]+)\s+(.+)!) {
  	# A define with a value
  	print OLD defined($defs{$1}) ? &def($1) : &def(&ask_value($1,$2));
--- 136,148 ----
  	                             : &def(&ask_simple($1,'define'));
      } elsif ( m!^(/\*\s*)?#define\s+([A-Z0-9_-]+)\s+(.+)\s+(/\*.*\*/)!) {
  	# A define with a value and a comment
!         $maybeundef = $1;
! 	$maybecomment = $4; $name = $2;
! 	$olddef = $def = $3;
! 	$comment = $maybecomment if ($maybecomment =~ /\w/);
! 	$def = "undef" if $maybeundef =~ /./;
  	print OLD defined($defs{$name}) 
! 	    ? &def($name,$comment) : &def(&ask_value($name,$def),$maybecomment,$def eq "undef" ? $olddef : $def);
      } elsif ( m!^#define\s+([A-Z0-9_-]+)\s+(.+)!) {
  	# A define with a value
  	print OLD defined($defs{$1}) ? &def($1) : &def(&ask_value($1,$2));
*** 1_7_4.32/config_h.SH Thu, 01 Feb 2001 14:47:02 -0600 dunemush (pennmush/b/17_config_h.S 1.17 660)
--- 1_7_4.46(w)/config_h.SH Wed, 14 Mar 2001 14:34:33 -0600 dunemush (pennmush/b/17_config_h.S 1.17.1.1 660)
***************
*** 456,461 ****
--- 456,466 ----
  
  #$i_crypt I_CRYPT		/**/
  
+ /* FORCE_IPV4:
+  *	If defined, this system will not use IPv6. Necessary for Openbsd.
+  */
+ #$d_force_ipv4 FORCE_IPV4	/**/
+ 
  /* HAS_FPSETROUND:
   *	This symbol, if defined, indicates that the crypt routine is available
   *	to encrypt passwords and the like.
*** 1_7_4.32/src/strutil.c Mon, 12 Feb 2001 09:57:12 -0600 dunemush (pennmush/b/33_strutil.c 1.28 660)
--- 1_7_4.46(w)/src/strutil.c Mon, 12 Mar 2001 14:51:43 -0600 dunemush (pennmush/b/33_strutil.c 1.28.1.3 660)
***************
*** 700,712 ****
      switch (*q) {
      case ESC_CHAR:
        /* Skip over ansi */
!       while (*q && *q++ != 'm') ;
!       safe_chr(*q, buff, &bp);
        break;
      case TAG_START:
        /* Skip over HTML */
!       while (*q && *q++ != TAG_END) ;
!       safe_chr(*q, buff, &bp);
        break;
      default:
        safe_chr(*q, buff, &bp);
--- 700,710 ----
      switch (*q) {
      case ESC_CHAR:
        /* Skip over ansi */
!       while (*q && *q != 'm') q++;
        break;
      case TAG_START:
        /* Skip over HTML */
!       while (*q && *q != TAG_END) q++;
        break;
      default:
        safe_chr(*q, buff, &bp);
*** 1_7_4.32/src/rob.c Thu, 08 Feb 2001 23:01:41 -0600 dunemush (pennmush/b/42_rob.c 1.18 660)
--- 1_7_4.46(w)/src/rob.c Tue, 20 Mar 2001 11:55:05 -0600 dunemush (pennmush/b/42_rob.c 1.18.1.1 660)
***************
*** 1,4 ****
! /* rob.c */
  
  #include "config.h"
  #include "copyrite.h"
--- 1,4 ----
! /* rob.c, for historical reasons */
  
  #include "config.h"
  #include "copyrite.h"
***************
*** 7,13 ****
  #include <stdlib.h>
  #endif
  
! /* rob and kill */
  
  #include "conf.h"
  #include "mushdb.h"
--- 7,13 ----
  #include <stdlib.h>
  #endif
  
! /* give and kill */
  
  #include "conf.h"
  #include "mushdb.h"
***************
*** 207,213 ****
    amount = atoi(amnt);
    /* do amount consistency check */
    if (amount < 0 && !Wizard(player)) {
!     notify(player, T("Try using the \"rob\" command."));
      return;
    } else if (amount == 0) {
      notify(player,
--- 207,213 ----
    amount = atoi(amnt);
    /* do amount consistency check */
    if (amount < 0 && !Wizard(player)) {
!     notify(player, T("What is this, a holdup?"));
      return;
    } else if (amount == 0) {
      notify(player,
*** 1_7_4.32/src/ident.c Mon, 05 Mar 2001 12:11:07 -0600 dunemush (pennmush/c/8_ident.c 1.18 660)
--- 1_7_4.46(w)/src/ident.c Wed, 14 Mar 2001 11:46:08 -0600 dunemush (pennmush/c/8_ident.c 1.19 660)
***************
*** 377,387 ****
  #endif
  {
  #ifndef WIN32
! #ifdef CAN_TAKE_ARGS_IN_FP
!   Sigfunc (*old_sig) (int);
! #else
!   Sigfunc (*old_sig) ();
! #endif
  #endif
    int res;
    char buf[80];
--- 377,383 ----
  #endif
  {
  #ifndef WIN32
!   Sigfunc old_sig;
  #endif
    int res;
    char buf[80];
*** 1_7_4.32/src/game.c Sun, 25 Feb 2001 13:37:15 -0600 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1 660)
--- 1_7_4.46(w)/src/game.c Wed, 14 Mar 2001 11:39:46 -0600 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1.1.1 660)
***************
*** 220,244 ****
  {
    struct rusage usage;
    int pid;
- #ifndef hpux
    int psize;
- #endif
  
    pid = getpid();
- #ifndef hpux
    psize = getpagesize();
- #endif
    getrusage(RUSAGE_SELF, &usage);
  
    do_rawlog(LT_ERR, T("Process statistics:"));
    do_rawlog(LT_ERR, T("Time used:   %10ld user   %10ld sys"),
  	    usage.ru_utime.tv_sec, usage.ru_stime.tv_sec);
- #ifndef hpux
    do_rawlog(LT_ERR, "Max res mem: %10ld pages  %10ld bytes",
  	    usage.ru_maxrss, (usage.ru_maxrss * psize));
- #else
-   do_rawlog(LT_ERR, "Max res mem: %10 pages", usage.ru_maxrss);
- #endif				/* hpux */
    do_rawlog(LT_ERR, "Integral mem:%10ld shared %10ld private %10ld stack",
  	    usage.ru_ixrss, usage.ru_idrss, usage.ru_isrss);
    do_rawlog(LT_ERR,
--- 220,236 ----
***************
*** 1515,1523 ****
    int i;
  #endif
    int pid;
- #ifndef hpux
    int psize;
- #endif
  #ifdef HAS_GETRUSAGE
    struct rusage usage;
  #endif				/* HAS_GETRUSAGE */
--- 1507,1513 ----
***************
*** 1594,1614 ****
    /* do process stats */
  
    pid = getpid();
- #ifndef hpux
- #ifdef WIN32
-   psize = 1024;			/* NJG: a guess! */
- #else
- #ifdef macintosh
-   psize = 1024;
- #else
    psize = getpagesize();
- #endif				/* macintosh */
- #endif				/* WIN32 */
    notify(player, tprintf(T("\nProcess ID:  %10u        %10d bytes per page"),
  			 pid, psize));
- #else
-   notify(player, tprintf(T("\nProcess ID:  %10u"), pid));
- #endif				/* hpux  */
  
  #ifdef linux
    /* Linux's getrusage() is mostly unimplemented. Just has times, page faults
--- 1584,1592 ----
***************
*** 1716,1727 ****
    getrusage(RUSAGE_SELF, &usage);
    notify(player, tprintf(T("Time used:   %10ld user   %10ld sys"),
  			 usage.ru_utime.tv_sec, usage.ru_stime.tv_sec));
- #ifndef hpux
    notify(player, tprintf("Max res mem: %10ld pages  %10ld bytes",
  			 usage.ru_maxrss, (usage.ru_maxrss * psize)));
- #else
-   notify(player, tprintf("Max res mem: %10ld pages", usage.ru_maxrss));
- #endif				/* hpux */
    notify(player,
  	 tprintf("Integral mem:%10ld shared %10ld private %10ld stack",
  		 usage.ru_ixrss, usage.ru_idrss, usage.ru_isrss));
--- 1694,1701 ----
*** 1_7_4.32/src/funstr.c Wed, 21 Feb 2001 09:25:43 -0600 dunemush (pennmush/c/13_funstr.c 1.28.1.1 660)
--- 1_7_4.46(w)/src/funstr.c Thu, 15 Mar 2001 13:31:03 -0600 dunemush (pennmush/c/13_funstr.c 1.28.1.1.1.2 660)
***************
*** 494,499 ****
--- 494,500 ----
  FUNCTION(fun_repeat)
  {
    int times;
+   char *ap;
  
    if (!is_integer(args[1])) {
      safe_str(T(e_int), buff, bp);
***************
*** 506,514 ****
    }
    if (!*args[0])
      return;
!   while (times--)
!     if (safe_str(args[0], buff, bp) != 0)
!       break;
  }
  
  /* ARGSUSED */
--- 507,526 ----
    }
    if (!*args[0])
      return;
! 
!   /* Do the repeat in O(lg n) time. */
!   /* This takes advantage of the fact that we're given a BUFFER_LEN
!    * buffer for args[0] that we are free to trash.  Huzzah! */
!   ap = args[0] + strlen(args[0]);
!   while (times) {
!     if (times & 1) {
!       if (safe_str(args[0], buff, bp) != 0)
!         break;
!     }
!     safe_str(args[0], args[0], &ap);
!     *ap = '\0';
!     times = times >> 1;
!   }
  }
  
  /* ARGSUSED */
***************
*** 941,1037 ****
  /* ARGSUSED */
  FUNCTION(fun_ansi)
  {
  
!   static char tbuff[BUFFER_LEN], sbuff[BUFFER_LEN], *sbp = sbuff;
!   const char *arg0 = args[0], *arg1 = args[1];
!   char *s = tbuff, *old_sbp = sbp, *tbp = tbuff;
! 
    process_expression(tbuff, &tbp, &arg0, executor, caller, enactor,
  		     PE_DEFAULT, PT_DEFAULT, pe_info);
  
!   *tbp = 0;
  
!   while (*s) {
!     switch (*s) {
      case 'h':			/* hilite */
!       safe_str(ANSI_HILITE, sbuff, &sbp);
        break;
      case 'i':			/* inverse */
!       safe_str(ANSI_INVERSE, sbuff, &sbp);
!       break;
!     case 'f':			/* flash */
!       safe_str(ANSI_BLINK, sbuff, &sbp);
        break;
      case 'u':			/* underscore */
!       safe_str(ANSI_UNDERSCORE, sbuff, &sbp);
        break;
      case 'n':			/* normal */
!       safe_str(ANSI_NORMAL, sbuff, &sbp);
        break;
      case 'x':			/* black fg */
!       safe_str(ANSI_BLACK, sbuff, &sbp);
        break;
      case 'r':			/* red fg */
!       safe_str(ANSI_RED, sbuff, &sbp);
        break;
      case 'g':			/* green fg */
!       safe_str(ANSI_GREEN, sbuff, &sbp);
        break;
      case 'y':			/* yellow fg */
!       safe_str(ANSI_YELLOW, sbuff, &sbp);
        break;
      case 'b':			/* blue fg */
!       safe_str(ANSI_BLUE, sbuff, &sbp);
        break;
      case 'm':			/* magenta fg */
!       safe_str(ANSI_MAGENTA, sbuff, &sbp);
        break;
      case 'c':			/* cyan fg */
!       safe_str(ANSI_CYAN, sbuff, &sbp);
        break;
      case 'w':			/* white fg */
!       safe_str(ANSI_WHITE, sbuff, &sbp);
        break;
      case 'X':			/* black bg */
!       safe_str(ANSI_BBLACK, sbuff, &sbp);
        break;
      case 'R':			/* red bg */
!       safe_str(ANSI_BRED, sbuff, &sbp);
        break;
      case 'G':			/* green bg */
!       safe_str(ANSI_BGREEN, sbuff, &sbp);
        break;
      case 'Y':			/* yellow bg */
!       safe_str(ANSI_BYELLOW, sbuff, &sbp);
        break;
      case 'B':			/* blue bg */
!       safe_str(ANSI_BBLUE, sbuff, &sbp);
        break;
      case 'M':			/* magenta bg */
!       safe_str(ANSI_BMAGENTA, sbuff, &sbp);
        break;
      case 'C':			/* cyan bg */
!       safe_str(ANSI_BCYAN, sbuff, &sbp);
        break;
      case 'W':			/* white bg */
!       safe_str(ANSI_BWHITE, sbuff, &sbp);
        break;
      }
-     s++;
    }
  
!   *sbp = 0;
!   safe_str(old_sbp, buff, bp);
! 
    process_expression(buff, bp, &arg1, executor, caller, enactor,
  		     PE_DEFAULT, PT_DEFAULT, pe_info);
  
    safe_str(ANSI_NORMAL, buff, bp);
- 
-   sbp = old_sbp;
-   *sbp = 0;
-   safe_str(sbuff, buff, bp);
- 
  }
  
  /* ARGSUSED */
--- 953,1085 ----
  /* ARGSUSED */
  FUNCTION(fun_ansi)
  {
+   static char tbuff[BUFFER_LEN], slots[7];
+   char const *arg0, *arg1;
+   char *tbp;
+   int j;
  
!   tbp = tbuff;
!   arg0 = args[0];
    process_expression(tbuff, &tbp, &arg0, executor, caller, enactor,
  		     PE_DEFAULT, PT_DEFAULT, pe_info);
+   *tbp = '\0';
  
!   memset(slots, '\0', 7);
  
!   for (tbp = tbuff; *tbp; tbp++) {
!     switch (*tbp) {
!     case 'n':			/* normal */
!       memset(slots, '\0', 6);
!       slots[0] = *tbp;
!       break;
!     case 'f':			/* flash */
!       slots[1] = *tbp;
!       break;
      case 'h':			/* hilite */
!       slots[2] = *tbp;
        break;
      case 'i':			/* inverse */
!       slots[3] = *tbp;
        break;
      case 'u':			/* underscore */
!       slots[4] = *tbp;
!       break;
!     case 'b':			/* blue fg */
!     case 'c':			/* cyan fg */
!     case 'g':			/* green fg */
!     case 'm':			/* magenta fg */
!     case 'r':			/* red fg */
!     case 'w':			/* white fg */
!     case 'x':			/* black fg */
!     case 'y':			/* yellow fg */
!       slots[5] = *tbp;
!       break;
!     case 'B':			/* blue bg */
!     case 'C':			/* cyan bg */
!     case 'G':			/* green bg */
!     case 'M':			/* magenta bg */
!     case 'R':			/* red bg */
!     case 'W':			/* white bg */
!     case 'X':			/* black bg */
!     case 'Y':			/* yellow bg */
!       slots[6] = *tbp;
        break;
+     }
+   }
+ 
+   for (j = 0; j < 7; j++) {
+     switch (slots[j]) {
      case 'n':			/* normal */
!       safe_str(ANSI_NORMAL, buff, bp);
!       break;
!     case 'f':			/* flash */
!       safe_str(ANSI_BLINK, buff, bp);
!       break;
!     case 'h':			/* hilite */
!       safe_str(ANSI_HILITE, buff, bp);
!       break;
!     case 'i':			/* inverse */
!       safe_str(ANSI_INVERSE, buff, bp);
!       break;
!     case 'u':			/* underscore */
!       safe_str(ANSI_UNDERSCORE, buff, bp);
        break;
      case 'x':			/* black fg */
!       safe_str(ANSI_BLACK, buff, bp);
        break;
      case 'r':			/* red fg */
!       safe_str(ANSI_RED, buff, bp);
        break;
      case 'g':			/* green fg */
!       safe_str(ANSI_GREEN, buff, bp);
        break;
      case 'y':			/* yellow fg */
!       safe_str(ANSI_YELLOW, buff, bp);
        break;
      case 'b':			/* blue fg */
!       safe_str(ANSI_BLUE, buff, bp);
        break;
      case 'm':			/* magenta fg */
!       safe_str(ANSI_MAGENTA, buff, bp);
        break;
      case 'c':			/* cyan fg */
!       safe_str(ANSI_CYAN, buff, bp);
        break;
      case 'w':			/* white fg */
!       safe_str(ANSI_WHITE, buff, bp);
        break;
      case 'X':			/* black bg */
!       safe_str(ANSI_BBLACK, buff, bp);
        break;
      case 'R':			/* red bg */
!       safe_str(ANSI_BRED, buff, bp);
        break;
      case 'G':			/* green bg */
!       safe_str(ANSI_BGREEN, buff, bp);
        break;
      case 'Y':			/* yellow bg */
!       safe_str(ANSI_BYELLOW, buff, bp);
        break;
      case 'B':			/* blue bg */
!       safe_str(ANSI_BBLUE, buff, bp);
        break;
      case 'M':			/* magenta bg */
!       safe_str(ANSI_BMAGENTA, buff, bp);
        break;
      case 'C':			/* cyan bg */
!       safe_str(ANSI_BCYAN, buff, bp);
        break;
      case 'W':			/* white bg */
!       safe_str(ANSI_BWHITE, buff, bp);
        break;
      }
    }
  
!   arg1 = args[1];
    process_expression(buff, bp, &arg1, executor, caller, enactor,
  		     PE_DEFAULT, PT_DEFAULT, pe_info);
  
    safe_str(ANSI_NORMAL, buff, bp);
  }
  
  /* ARGSUSED */
*** 1_7_4.32/src/funmath.c Wed, 28 Feb 2001 13:26:42 -0600 dunemush (pennmush/c/15_funmath.c 1.38 660)
--- 1_7_4.46(w)/src/funmath.c Tue, 20 Mar 2001 12:20:40 -0600 dunemush (pennmush/c/15_funmath.c 1.39 660)
***************
*** 1881,1887 ****
  #endif
  {
    const NVAL *x = a, *y = b;
!   const double epsilon = pow(10, FLOAT_PRECISION);
    int eq = (fabs(*x - *y) <= (epsilon * fabs(*x)));
    return eq ? 0 : (*x > *y ? 1 : -1);
  }
--- 1881,1887 ----
  #endif
  {
    const NVAL *x = a, *y = b;
!   const double epsilon = pow(10, -FLOAT_PRECISION);
    int eq = (fabs(*x - *y) <= (epsilon * fabs(*x)));
    return eq ? 0 : (*x > *y ? 1 : -1);
  }
*** 1_7_4.32/hdrs/version.h Wed, 07 Mar 2001 09:12:05 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2 660)
--- 1_7_4.46(w)/hdrs/version.h Fri, 16 Mar 2001 17:17:35 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2.1.2 660)
***************
*** 1,2 ****
! #define VERSION "PennMUSH version 1.7.4 patchlevel 0 [03/07/2001]"
! #define SHORTVN "PennMUSH 1.7.4p0"
--- 1,2 ----
! #define VERSION "PennMUSH version 1.7.4 patchlevel 1 [03/17/2001]"
! #define SHORTVN "PennMUSH 1.7.4p1"
*** 1_7_4.32/hdrs/getpgsiz.h Mon, 24 Jul 2000 10:53:54 -0500 dunemush (pennmush/d/11_getpgsiz.h 1.2 660)
--- 1_7_4.46(w)/hdrs/getpgsiz.h Wed, 14 Mar 2001 11:38:11 -0600 dunemush (pennmush/d/11_getpgsiz.h 1.3 660)
***************
*** 26,32 ****
--- 26,36 ----
  #ifdef NBPC
  #define getpagesize() NBPC
  #else				/* no NBPC either? Bummer */
+ #ifdef PAGESIZE
  #define getpagesize() PAGESIZE
+ #else				/* Sigh. Time for a total guess. */
+ #define getpagesize() 1024
+ #endif				/* no PAGESIZE */
  #endif				/* no NBPC */
  #endif				/* no NBPG */
  #endif				/* no EXEC_PAGESIZE */
*** 1_7_4.32/Configure Thu, 01 Feb 2001 14:47:02 -0600 dunemush (pennmush/d/32_Configure 1.21 710)
--- 1_7_4.46(w)/Configure Wed, 14 Mar 2001 14:34:33 -0600 dunemush (pennmush/d/32_Configure 1.21.1.2 710)
***************
*** 269,274 ****
--- 269,275 ----
  cryptlib=''
  d_crypt=''
  i_crypt=''
+ d_force_ipv4=''
  d_fpsetmask=''
  d_fpsetround=''
  i_floatingpoint=''
***************
*** 3850,3855 ****
--- 3851,3860 ----
  set crypt.h i_crypt
  eval $inhdr
  
+ : Do nothing by default
+ val="$undef"
+ set d_force_ipv4; eval $setvar
+ 
  echo " "
  : see if floatingpoint.h can be included
  set floatingpoint.h i_floatingpoint
***************
*** 6328,6336 ****
  done
  
  : offer to join the mailing list
! list_request='listproc@pennmush.org'
! list_sub="subscribe pennmush $cf_email"
! list_unsub="unsubscribe pennmush $cf_email"
  list_name="pennmush"
  $cat <<EOM
  
--- 6333,6341 ----
  done
  
  : offer to join the mailing list
! list_request='pennmush-request@pennmush.org'
! list_sub="subscribe"
! list_unsub="unsubscribe"
  list_name="pennmush"
  $cat <<EOM
  
***************
*** 6530,6535 ****
--- 6535,6541 ----
  d_const='$d_const'
  d_crypt='$d_crypt'
  d_eunice='$d_eunice'
+ d_force_ipv4='$d_force_ipv4'
  d_fpsetmask='$d_fpsetmask'
  d_fpsetround='$d_fpsetround'
  d_gaistr='$d_gaistr'
*** 1_7_4.32/src/pcre.c Sun, 25 Feb 2001 13:37:15 -0600 dunemush (pennmush/d/36_pcre.c 1.4.1.3.1.3.1.1 660)
--- 1_7_4.46(w)/src/pcre.c Tue, 13 Mar 2001 11:50:05 -0600 dunemush (pennmush/d/36_pcre.c 1.4.1.3.1.3.1.1.1.1 660)
***************
*** 5081,5104 ****
  	  const char *subject, int length, int start_offset, int options,
  	  int *offsets, int offsetcount)
  {
-   int resetcount, ocount;
-   int first_char = -1;
-   int req_char = -1;
-   int req_char2 = -1;
-   unsigned long int ims = 0;
    volatile match_data match_block;
-   const uschar *start_bits = NULL;
-   const uschar *start_match = (const uschar *) subject + start_offset;
-   const uschar *end_subject;
-   const uschar *req_char_ptr = start_match - 1;
-   const real_pcre *re = (const real_pcre *) external_re;
-   const real_pcre_extra *extra = (const real_pcre_extra *) external_extra;
    volatile BOOL using_temporary_offsets = FALSE;
-   BOOL anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
-   BOOL startline = (re->options & PCRE_STARTLINE) != 0;
  
  #ifdef BACKTRACK_LIMIT
-   /* This makes gcc throw a lot of errors that can be ignored */
    backtrack_count = 0;
    if (setjmp(backtrack_jmp)) {
      /* Too much backtracking! */
--- 5081,5090 ----
***************
*** 5107,5115 ****
        free(match_block.offset_vector);
      }
      return PCRE_ERROR_BACKTRACKING;
!   }
  #endif
! 
  
    if ((options & ~PUBLIC_EXEC_OPTIONS) != 0)
      return PCRE_ERROR_BADOPTION;
--- 5093,5114 ----
        free(match_block.offset_vector);
      }
      return PCRE_ERROR_BACKTRACKING;
!   } else
  #endif
!   {
!     int resetcount, ocount;
!     int first_char = -1;
!     int req_char = -1;
!     int req_char2 = -1;
!     unsigned long int ims = 0;
!     const uschar *start_bits = NULL;
!     const uschar *start_match = (const uschar *) subject + start_offset;
!     const uschar *end_subject;
!     const uschar *req_char_ptr = start_match - 1;
!     const real_pcre *re = (const real_pcre *) external_re;
!     const real_pcre_extra *extra = (const real_pcre_extra *) external_extra;
!     BOOL anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
!     BOOL startline = (re->options & PCRE_STARTLINE) != 0;
  
    if ((options & ~PUBLIC_EXEC_OPTIONS) != 0)
      return PCRE_ERROR_BADOPTION;
***************
*** 5370,5375 ****
--- 5369,5376 ----
    }
  
    DPRINTF((">>>> returning %d\n", match_block.errorcode));
+ 
+   }
  
    return match_block.errorcode;
  }
*** 1_7_4.32/game/restrict.cnf Fri, 19 Jan 2001 09:27:13 -0600 dunemush (pennmush/e/43_restrict.c 1.2.1.1.1.1 600)
--- 1_7_4.46(w)/game/restrict.cnf Wed, 21 Mar 2001 14:03:00 -0600 dunemush (pennmush/e/43_restrict.c 1.2.1.1.1.1.1.1 600)
***************
*** 34,42 ****
  restrict_command @lock noguest
  restrict_command @unlock noguest
  
- # Don't let players rob each other
- restrict_command rob nobody
- 
  # Don't allow kill (slay still works)
  #restrict_command kill nobody
  
--- 34,39 ----
***************
*** 48,51 ****
  #restrict_function wipe nobody
  #restrict_function create nobody
  #restrict_function clone nobody
! #restrict_function tel nobody
--- 45,49 ----
  #restrict_function wipe nobody
  #restrict_function create nobody
  #restrict_function clone nobody
! #restrict_function tel nobody
! 
*** 1_7_4.32/src/mysocket.c Sun, 04 Mar 2001 18:27:45 -0600 dunemush (pennmush/f/0_mysocket.c 1.16.1.1.1.1 660)
--- 1_7_4.46(w)/src/mysocket.c Wed, 14 Mar 2001 11:46:29 -0600 dunemush (pennmush/f/0_mysocket.c 1.16.1.1.1.1.1.1 660)
***************
*** 167,183 ****
    hints.ai_family = AF_UNSPEC;	/* Try to use IPv6 if available */
    hints.ai_socktype = SOCK_STREAM;
  
!   sprintf(cport, "%d", port);
  
    if ((res = getaddrinfo(host, cport, &hints, &server)) != 0) {
      fprintf(stderr, "In getaddrinfo: %s\n", gai_strerror(res));
!     fprintf(stderr, "Host: %s Port %d\n", host, port);
      fflush(stderr);
      return -1;
    }
  
    if (!server) {
!     fprintf(stderr, "Couldn't get address for host %s port %d\n", host, port);
      fflush(stderr);
      return -1;
    }
--- 167,183 ----
    hints.ai_family = AF_UNSPEC;	/* Try to use IPv6 if available */
    hints.ai_socktype = SOCK_STREAM;
  
!   sprintf(cport, "%hu", port);
  
    if ((res = getaddrinfo(host, cport, &hints, &server)) != 0) {
      fprintf(stderr, "In getaddrinfo: %s\n", gai_strerror(res));
!     fprintf(stderr, "Host: %s Port %hu\n", host, port);
      fflush(stderr);
      return -1;
    }
  
    if (!server) {
!     fprintf(stderr, "Couldn't get address for host %s port %hu\n", host, port);
      fflush(stderr);
      return -1;
    }
***************
*** 216,222 ****
     */
    if (server == NULL && port != IDPORT) {
  #endif
!     fprintf(stderr, "Couldn't connect to %s on port %d\n", host, port);
      fflush(stderr);
      return -1;
    }
--- 216,222 ----
     */
    if (server == NULL && port != IDPORT) {
  #endif
!     fprintf(stderr, "Couldn't connect to %s on port %hu\n", host, port);
      fflush(stderr);
      return -1;
    }
***************
*** 252,275 ****
  
    memset(&hints, 0, sizeof(struct addrinfo));
    hints.ai_flags = AI_PASSIVE;
    hints.ai_family = AF_UNSPEC;	/* Try to use IPv6 if available */
    hints.ai_socktype = SOCK_STREAM;
  
!   sprintf(cport, "%d", port);
  
    if (strlen(host) == 0)
      host = NULL;
  
    if ((res = getaddrinfo(host, cport, &hints, &server)) != 0) {
      fprintf(stderr, "In getaddrinfo: %s\n", gai_strerror(res));
!     fprintf(stderr, "Host: %s Port %d\n", host, port);
      exit(3);
    }
  
    save = server;
  
    if (!server) {
!     fprintf(stderr, "Couldn't get address for host %s port %d\n", host, port);
      exit(3);
    }
  
--- 252,280 ----
  
    memset(&hints, 0, sizeof(struct addrinfo));
    hints.ai_flags = AI_PASSIVE;
+ #ifdef FORCE_IPV4
+   hints.ai_family = AF_INET; /* OpenBSD apparently doesn't properly
+                                 map IPv4 connections to IPv6 servers. */
+ #else
    hints.ai_family = AF_UNSPEC;	/* Try to use IPv6 if available */
+ #endif
    hints.ai_socktype = SOCK_STREAM;
  
!   sprintf(cport, "%hu", port);
  
    if (strlen(host) == 0)
      host = NULL;
  
    if ((res = getaddrinfo(host, cport, &hints, &server)) != 0) {
      fprintf(stderr, "In getaddrinfo: %s\n", gai_strerror(res));
!     fprintf(stderr, "Host: %s Port %hu\n", host, port);
      exit(3);
    }
  
    save = server;
  
    if (!server) {
!     fprintf(stderr, "Couldn't get address for host %s port %hu\n", host, port);
      exit(3);
    }