[PENNMUSH-ANNOUNCE] 1.7.7-patch03

dunemush at tala.mede.uic.edu dunemush at tala.mede.uic.edu
Wed Dec 25 14:15:22 CST 2002


This is patch03 to PennMUSH 1.7.7. After applying this patch, you will
have version 1.7.7p3

To apply this patch, save it to a file in your top-level MUSH directory,
and do the following:
	patch -p1 < 1.7.7-patch03
	make install

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

Unix (or cygwin) users need not worry about failed hunks in src/switchinc.c,
hdrs/switches.h, hdrs/cmds.h, or hdrs/funs.h. These files are automatically
rebuilt on compile.

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

In this patch:

Commands:
  * @sitelock/check <host> tells you which rule, if any, would match.
Fixes:
  * The objdata hashtable routines had a serious bug that could
    cause crashes.


Prereq: 1.7.7p2
*** 1_7_7.81/Patchlevel Tue, 24 Dec 2002 15:20:25 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.4 600)
--- 1_7_7.84(w)/Patchlevel Wed, 25 Dec 2002 14:13:35 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.4 600)
***************
*** 1,2 ****
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.7p2
--- 1,2 ----
  Do not edit this file. It is maintained by the official PennMUSH patches.
! This is PennMUSH 1.7.7p3
*** 1_7_7.81/CHANGES Tue, 24 Dec 2002 15:20:25 -0600 dunemush (pennmush/g/23_CHANGES 1.24 600)
--- 1_7_7.84(w)/CHANGES Wed, 25 Dec 2002 14:13:14 -0600 dunemush (pennmush/g/23_CHANGES 1.25 600)
***************
*** 18,23 ****
--- 18,32 ----
  
  ==========================================================================
  
+ Version 1.7.7 patchlevel 3                      December 25, 2002
+ 
+ Commands:
+   * @sitelock/check <host> tells you which rule, if any, would match.
+ Fixes:
+   * The objdata hashtable routines had a serious bug that could
+     cause crashes.
+ 
+ 
  Version 1.7.7 patchlevel 2                      December 22, 2002
  
  Major Changes:
*** 1_7_7.81/game/txt/hlp/pennvers.hlp Tue, 24 Dec 2002 15:20:25 -0600 dunemush (pennmush/12_pennvers.h 1.169.1.42.1.3.1.2.2.2.1.1.1.3.1.1.1.5.1.4.1.1.1.1.1.1.1.1.1.5.1.1.1.3.1.1.1.3.1.1.1.54.1.10.1.2.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.7.1.1.1.1.1.2.1.1.1.6 600)
--- 1_7_7.84(w)/game/txt/hlp/pennvers.hlp Wed, 25 Dec 2002 14:13:52 -0600 dunemush (pennmush/12_pennvers.h 1.169.1.42.1.3.1.2.2.2.1.1.1.3.1.1.1.5.1.4.1.1.1.1.1.1.1.1.1.5.1.1.1.3.1.1.1.3.1.1.1.54.1.10.1.2.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.7.1.1.1.1.1.2.1.1.1.7 600)
***************
*** 1,5 ****
  & changes
! & 1.7.7p2
  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.7p3
  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,26 ----
  A list of the patchlevels associated with each release can
  be read in 'help patchlevels'.
  
+ Version 1.7.7 patchlevel 3                      December 25, 2002
+ 
+ Commands:
+   * @sitelock/check <host> tells you which rule, if any, would match.
+ Fixes:
+   * The objdata hashtable routines had a serious bug that could
+     cause crashes.
+ 
+ 
+ & 1.7.7p2
  Version 1.7.7 patchlevel 2                      December 22, 2002
  
  Major Changes:
***************
*** 5875,5881 ****
  For information on a specific patchlevel of one of the versions listed,
  type 'help <version>p<patchlevel>'. For example, 'help 1.7.2p3'
  
! 1.7.7: 0, 1, 2
  1.7.6: 0, 1, 2, 3
  1.7.5: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
  1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
--- 5885,5891 ----
  For information on a specific patchlevel of one of the versions listed,
  type 'help <version>p<patchlevel>'. For example, 'help 1.7.2p3'
  
! 1.7.7: 0, 1, 2, 3
  1.7.6: 0, 1, 2, 3
  1.7.5: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
  1.7.4: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
*** 1_7_7.81/game/txt/hlp/penncmd.hlp Tue, 17 Dec 2002 16:03:37 -0600 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.3.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.10.1.1.1.1.1.2 600)
--- 1_7_7.84(w)/game/txt/hlp/penncmd.hlp Wed, 25 Dec 2002 02:21:21 -0600 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.3.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.10.1.1.1.1.1.3 600)
***************
*** 2675,2680 ****
--- 2675,2681 ----
    @sitelock/name <name>
    @sitelock <host-pattern> = <options>[,<name>]
    @sitelock[/<ban|register>] <host-pattern>
+   @sitelock/check <host>
    @sitelock/remove <string>
  
    The @sitelock command adds rules to the access.cnf file, controlling
***************
*** 2683,2689 ****
  
    @sitelock without arguments lists all sites in access.cnf.
    Rules are processed in the order listed, and the first matching
!   rule is applied.
  
    @sitelock/name adds a name to the list of banned player names.
    Use !<name> to remove a name from the list.
--- 2684,2691 ----
  
    @sitelock without arguments lists all sites in access.cnf.
    Rules are processed in the order listed, and the first matching
!   rule is applied. @sitelock/check tells you which rule will match
!   for a given <host>.
  
    @sitelock/name adds a name to the list of banned player names.
    Use !<name> to remove a name from the list.
*** 1_7_7.81/src/wiz.c Sun, 22 Dec 2002 01:19:31 -0600 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7.1.1.1.1.1.1.1.1.1.1.1.8.1.2.2.2.1.2.1.1.1.1.1.1.1.2.1.2 660)
--- 1_7_7.84(w)/src/wiz.c Wed, 25 Dec 2002 14:14:50 -0600 dunemush (pennmush/b/23_wiz.c 1.44.1.1.1.1.1.2.1.7.1.1.1.1.1.1.1.1.1.1.1.8.1.2.2.2.1.2.1.1.1.1.1.1.1.2.1.3 660)
***************
*** 1620,1626 ****
      const char *opts;
      const char *who;
      int type;
!   /* 0 = registration, 1 = siteban, 2 = names */
  {
    FILE *fp, *fptmp;
    char buffer[80];
--- 1620,1626 ----
      const char *opts;
      const char *who;
      int type;
!   /* 0 = registration, 1 = siteban, 2 = names, 3 = remove, 4 = check */
  {
    FILE *fp, *fptmp;
    char buffer[80];
***************
*** 1685,1690 ****
--- 1685,1705 ----
        notify_format(player, T("Site %s locked"), site);
        do_log(LT_WIZ, player, NOTHING, "*** SITELOCK *** %s", site);
        break;
+     case 4:{
+ 	struct access *ap;
+ 	char tbuf[BUFFER_LEN], *bp;
+ 	int rulenum;
+ 	if (!site || !*site) {
+ 	  do_list_access(player);
+ 	  return;
+ 	}
+ 	ap = site_check_access(site, AMBIGUOUS, &rulenum);
+ 	bp = tbuf;
+ 	format_access(ap, rulenum, AMBIGUOUS, tbuf, &bp);
+ 	*bp = '\0';
+ 	notify(player, tbuf);
+ 	break;
+       }
      case 3:{
  	int n;
  	n = remove_access_sitelock(site);
*** 1_7_7.81/src/extchat.c Sun, 22 Dec 2002 01:05:36 -0600 dunemush (pennmush/c/23_extchat.c 1.1.1.1.1.1.1.1.1.2.1.1.1.3.1.1.1.5.1.1.1.1.1.5.1.2.1.3.1.3.1.1.1.4.1.2.1.6.1.2.1.1.2.4.2.9.1.2.1.2.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.2.1.1.2.1.1.4 660)
--- 1_7_7.84(w)/src/extchat.c Wed, 25 Dec 2002 14:14:48 -0600 dunemush (pennmush/c/23_extchat.c 1.1.1.1.1.1.1.1.1.2.1.1.1.3.1.1.1.5.1.1.1.1.1.5.1.2.1.3.1.3.1.1.1.4.1.2.1.6.1.2.1.1.2.4.2.9.1.2.1.2.1.3.1.2.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.2.1.1.2.1.1.4 660)
***************
*** 397,403 ****
      return;
    tmp->chan = *ch;
    /* If there's no channels on the list, or if the first channel is already
!    * alphabetically greater, user should be the first entry on the list */
    /* No channels? */
    if (!Chanlist(who)) {
      tmp->next = NULL;
--- 397,403 ----
      return;
    tmp->chan = *ch;
    /* If there's no channels on the list, or if the first channel is already
!    * alphabetically greater, chan should be the first entry on the list */
    /* No channels? */
    if (!Chanlist(who)) {
      tmp->next = NULL;
***************
*** 414,420 ****
      /* Don't add the same channel twice! */
      free_chanlist(tmp);
    } else {
!     /* Otherwise, find which user this user should be inserted after */
      for (;
  	 p->next
  	 && (strcasecoll(ChanName(p->next->chan), ChanName(*ch)) < 0);
--- 414,420 ----
      /* Don't add the same channel twice! */
      free_chanlist(tmp);
    } else {
!     /* Otherwise, find which channel this channel should be inserted after */
      for (;
  	 p->next
  	 && (strcasecoll(ChanName(p->next->chan), ChanName(*ch)) < 0);
*** 1_7_7.81/src/db.c Tue, 24 Dec 2002 15:49:43 -0600 dunemush (pennmush/c/25_db.c 1.26.1.1.1.1.1.10 660)
--- 1_7_7.84(w)/src/db.c Wed, 25 Dec 2002 14:14:48 -0600 dunemush (pennmush/c/25_db.c 1.26.1.1.1.1.1.10 660)
***************
*** 1370,1375 ****
--- 1370,1376 ----
  void *
  set_objdata(dbref thing, const char *keybase, void *data)
  {
+   hashdelete(tprintf("%s_#%d", keybase, thing), &htab_objdata);
    if (data) {
      if (hashadd(tprintf("%s_#%d", keybase, thing), data, &htab_objdata) < 0)
        return NULL;
***************
*** 1377,1387 ****
        char *newkey = strdup(keybase);
        hashadd(keybase, (void *) &newkey, &htab_objdata_keys);
      }
-     return data;
-   } else {
-     hashdelete(tprintf("%s_#%d", keybase, thing), &htab_objdata);
-     return NULL;
    }
  }
  
  void *
--- 1378,1385 ----
        char *newkey = strdup(keybase);
        hashadd(keybase, (void *) &newkey, &htab_objdata_keys);
      }
    }
+   return data;
  }
  
  void *
*** 1_7_7.81/src/command.c Tue, 24 Dec 2002 15:20:25 -0600 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1.1.1.1.2.1.1.1.1.1.5.1.2.1.1.1.1.1.2.1.3.1.10.1.1.2.3 660)
--- 1_7_7.84(w)/src/command.c Wed, 25 Dec 2002 14:14:48 -0600 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1.1.1.1.2.1.1.1.1.1.5.1.2.1.1.1.1.1.2.1.3.1.10.1.1.2.4 660)
***************
*** 235,241 ****
     0},
    {"@SHUTDOWN", "PANIC REBOOT PARANOID", cmd_shutdown, CMD_T_ANY, WIZARD,
     0, 0},
!   {"@SITELOCK", "BAN REGISTER REMOVE NAME", cmd_sitelock,
     CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_RS_ARGS, WIZARD, 0, 0},
    {"@STATS", "TABLES", cmd_stats, CMD_T_ANY, 0, 0, 0},
  
--- 235,241 ----
     0},
    {"@SHUTDOWN", "PANIC REBOOT PARANOID", cmd_shutdown, CMD_T_ANY, WIZARD,
     0, 0},
!   {"@SITELOCK", "BAN CHECK REGISTER REMOVE NAME", cmd_sitelock,
     CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_RS_ARGS, WIZARD, 0, 0},
    {"@STATS", "TABLES", cmd_stats, CMD_T_ANY, 0, 0, 0},
  
*** 1_7_7.81/src/cmds.c Sat, 07 Dec 2002 16:26:26 -0600 dunemush (pennmush/c/37_cmds.c 1.33.1.1.1.2.1.2.2.3.1.1.1.2.1.1.1.3.1.8.1.1.2.2.1.2 660)
--- 1_7_7.84(w)/src/cmds.c Wed, 25 Dec 2002 14:14:48 -0600 dunemush (pennmush/c/37_cmds.c 1.33.1.1.1.2.1.2.2.3.1.1.1.2.1.1.1.3.1.8.1.1.2.2.1.3 660)
***************
*** 818,823 ****
--- 818,825 ----
      do_sitelock(player, arg_left, NULL, NULL, 2);
    else if (SW_ISSET(sw, SWITCH_REMOVE))
      do_sitelock(player, arg_left, NULL, NULL, 3);
+   else if (SW_ISSET(sw, SWITCH_CHECK))
+     do_sitelock(player, arg_left, NULL, NULL, 4);
    else
      do_sitelock(player, arg_left, args_right[1], args_right[2], 0);
  }
*** 1_7_7.81/src/access.c Sat, 30 Nov 2002 15:49:22 -0600 dunemush (pennmush/c/43_access.c 1.11.1.2.1.4 660)
--- 1_7_7.84(w)/src/access.c Wed, 25 Dec 2002 14:14:48 -0600 dunemush (pennmush/c/43_access.c 1.11.1.2.1.6 660)
***************
*** 81,95 ****
  #include "flags.h"
  #include "confmagic.h"
  
- /* A linked list data structure to hold the access info */
- struct access {
-   char host[BUFFER_LEN];
-   char comment[BUFFER_LEN];
-   dbref who;
-   int can;
-   int cant;
-   struct access *next;
- };
  
  
  typedef struct a_acsflag acsflag;
--- 81,86 ----
***************
*** 368,373 ****
--- 359,439 ----
    return 1;
  }
  
+ /* Like above, but returns the details of the first-matching rule */
+ struct access *
+ site_check_access(const char *hname, dbref who, int *rulenum)
+ {
+   struct access *ap;
+   char *p;
+ 
+   *rulenum = 0;
+   if (!hname || !*hname)
+     return 0;
+ 
+   if ((p = strchr(hname, '@')))
+     p++;
+ 
+   for (ap = access_top; ap; ap = ap->next) {
+     (*rulenum)++;
+     if (!(ap->can & ACS_SITELOCK)
+ 	&& ((ap->can & ACS_REGEXP)
+ 	    ? (regexp_match_case(ap->host, hname, 0)
+ 	       || (p && regexp_match_case(ap->host, p, 0)))
+ 	    : (quick_wild(ap->host, hname)
+ 	       || (p && quick_wild(ap->host, p))))
+ 	&& (ap->who == AMBIGUOUS || ap->who == who)) {
+       /* Got one */
+       return ap;
+     }
+   }
+   return NULL;
+ }
+ 
+ int
+ format_access(struct access *ap, int rulenum,
+ 	      dbref who __attribute__ ((__unused__)), char *buff, char **bp)
+ {
+   if (ap) {
+     safe_format(buff, bp, T("Matched line %d: %s %s"), rulenum, ap->host,
+ 		(ap->can & ACS_REGEXP) ? "(regexp)" : "");
+     safe_chr('\n', buff, bp);
+     safe_format(buff, bp, T("Comment: %s"), ap->comment);
+     safe_chr('\n', buff, bp);
+     safe_str(T("Connections allowed by: "), buff, bp);
+     if (ap->cant & ACS_CONNECT)
+       safe_str(T("No one"), buff, bp);
+     else if (ap->cant & ACS_ADMIN)
+       safe_str(T("All but admin"), buff, bp);
+     else if (ap->cant & ACS_WIZARD)
+       safe_str(T("All but wizards"), buff, bp);
+     else if (ap->cant & ACS_GOD)
+       safe_str(T("All but God"), buff, bp);
+     else
+       safe_str(T("All"), buff, bp);
+     safe_chr('\n', buff, bp);
+     if (ap->cant & ACS_GUEST)
+       safe_str(T("Guest connections are NOT allowed"), buff, bp);
+     else
+       safe_str(T("Guest connections are allowed"), buff, bp);
+     safe_chr('\n', buff, bp);
+     if (ap->cant & ACS_CREATE)
+       safe_str(T("Creation is NOT allowed"), buff, bp);
+     else
+       safe_str(T("Creation is allowed"), buff, bp);
+     safe_chr('\n', buff, bp);
+     if (ap->can & ACS_REGISTER)
+       safe_str(T("Email registration is allowed"), buff, bp);
+     if (ap->can & ACS_SUSPECT)
+       safe_str(T("Players connecting are set SUSPECT"), buff, bp);
+     if (ap->can & ACS_DENY_SILENT)
+       safe_str(T("Denied connections are not logged"), buff, bp);
+   } else {
+     safe_str(T("No matching access rule"), buff, bp);
+   }
+   return 0;
+ }
+ 
+ 
  /* Add an entry to the linked list after the @sitelock entry.
   * If there is no @sitelock entry, add one to the end of the list
   * and then add the entry.
***************
*** 473,481 ****
--- 539,549 ----
    struct access *ap;
    acsflag *c;
    char flaglist[BUFFER_LEN];
+   int rulenum = 0;
    char *bp;
  
    for (ap = access_top; ap; ap = ap->next) {
+     rulenum++;
      if (ap->can != ACS_SITELOCK) {
        bp = flaglist;
        for (c = acslist; c->name; c++) {
***************
*** 493,500 ****
        }
        *bp = '\0';
        notify_format(player,
! 		    "SITE: %-20s  DBREF: %-6s FLAGS:%s", ap->host,
! 		    unparse_dbref(ap->who), flaglist);
        notify_format(player, " COMMENT: %s", ap->comment);
      } else {
        notify(player,
--- 561,568 ----
        }
        *bp = '\0';
        notify_format(player,
! 		    "%3d SITE: %-20s  DBREF: %-6s FLAGS:%s", rulenum,
! 		    ap->host, unparse_dbref(ap->who), flaglist);
        notify_format(player, " COMMENT: %s", ap->comment);
      } else {
        notify(player,
*** 1_7_7.81/hdrs/version.h Tue, 24 Dec 2002 15:20:25 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2.1.7.1.9.1.1.1.17.1.5 660)
--- 1_7_7.84(w)/hdrs/version.h Wed, 25 Dec 2002 14:14:51 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2.1.7.1.9.1.1.1.17.1.5 660)
***************
*** 1,2 ****
! #define VERSION "PennMUSH version 1.7.7 patchlevel 2 [12/22/2002]"
! #define SHORTVN "PennMUSH 1.7.7p2"
--- 1,2 ----
! #define VERSION "PennMUSH version 1.7.7 patchlevel 3 [12/25/2002]"
! #define SHORTVN "PennMUSH 1.7.7p3"
*** 1_7_7.81/hdrs/extchat.h Sun, 22 Dec 2002 01:05:36 -0600 dunemush (pennmush/d/17_extchat.h 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.3.1.1.1.1.2.1 660)
--- 1_7_7.84(w)/hdrs/extchat.h Wed, 25 Dec 2002 14:14:51 -0600 dunemush (pennmush/d/17_extchat.h 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.3.1.1.1.1.2.1 660)
***************
*** 91,98 ****
    struct chanlist *next;
  };
  
! #define Chanlist(x) get_objdata(x, "CHANNELS")
! #define s_Chanlist(x, y) set_objdata(x, "CHANNELS", y)
  
  /* Channel type flags and macros */
  #define CHANNEL_PLAYER  0x1	/* Players may join */
--- 91,98 ----
    struct chanlist *next;
  };
  
! #define Chanlist(x) ((struct chanlist *)get_objdata(x, "CHANNELS"))
! #define s_Chanlist(x, y) set_objdata(x, "CHANNELS", (void *)y)
  
  /* Channel type flags and macros */
  #define CHANNEL_PLAYER  0x1	/* Players may join */
*** 1_7_7.81/hdrs/access.h Tue, 09 Apr 2002 11:29:01 -0500 dunemush (pennmush/d/28_access.h 1.5.1.2 660)
--- 1_7_7.84(w)/hdrs/access.h Wed, 25 Dec 2002 14:14:50 -0600 dunemush (pennmush/d/28_access.h 1.5.1.3 660)
***************
*** 1,6 ****
--- 1,17 ----
  #ifndef __ACCESS_H
  #define __ACCESS_H
  
+ /* A linked list data structure to hold the access info */
+ struct access {
+   char host[BUFFER_LEN];
+   char comment[BUFFER_LEN];
+   dbref who;
+   int can;
+   int cant;
+   struct access *next;
+ };
+ 
+ 
  /* These flags are can/can't - a site may or may not be allowed to do them */
  #define ACS_CONNECT     0x1	/* Connect to non-guests */
  #define ACS_CREATE      0x2	/* Create new players */
***************
*** 33,38 ****
--- 44,53 ----
  int read_access_file(void);
  void write_access_file(void);
  int site_can_access(const char *hname, int flag, dbref who);
+ struct access *site_check_access(const char *hname, dbref who, int *rulenum);
+ int format_access(struct access *ap, int rulenum,
+ 		  dbref who
+ 		  __attribute__ ((__unused__)), char *buff, char **bp);
  int add_access_sitelock(dbref player, const char *host, dbref who, int can,
  			int cant);
  int remove_access_sitelock(const char *pattern);


More information about the Pennmush-announce mailing list