Fix bugs; better handle oplevels from ircu2.10.12
authorMichael Poole <mdpoole@troilus.org>
Mon, 6 Sep 2004 13:35:59 +0000 (13:35 +0000)
committerMichael Poole <mdpoole@troilus.org>
Mon, 6 Sep 2004 13:35:59 +0000 (13:35 +0000)
* Fix order of port and IP in sample socks4 proxy test.

* Fix a bug in dict_remove2() that corrupted the tree order if a
cleanup function tried to delete another node.

* Fix a buffer overflow in cmd_joiner.

* Get rid of free_nick_info() since it is really just free().

* If our P10 uplink sends an oplevel in a burst, treat it as a chanop.
git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-78

ChangeLog
sockcheck.conf.example
src/dict-splay.c
src/modcmd.c
src/nickserv.c
src/proto-p10.c

index d48ffe0db21fd12ea78c2d09e7068bcff5fc9fc1..4791b38d2ccfaa5b634b17b89c4bcd08d5f660aa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,29 @@
 # arch-tag: automatic-ChangeLog--srvx@srvx.net--2004-srvx/srvx--devo--1.3
 #
 
+2004-09-06 13:35:59 GMT        Michael Poole <mdpoole@troilus.org>     patch-78
+
+    Summary:
+      Fix bugs; better handle oplevels from ircu2.10.12
+    Revision:
+      srvx--devo--1.3--patch-78
+
+    * Fix order of port and IP in sample socks4 proxy test.
+    
+    * Fix a bug in dict_remove2() that corrupted the tree order if a
+    cleanup function tried to delete another node.
+    
+    * Fix a buffer overflow in cmd_joiner.
+    
+    * Get rid of free_nick_info() since it is really just free().
+    
+    * If our P10 uplink sends an oplevel in a burst, treat it as a chanop.
+
+    modified files:
+     ChangeLog sockcheck.conf.example src/dict-splay.c src/modcmd.c
+     src/nickserv.c src/proto-p10.c
+
+
 2004-08-12 16:06:55 GMT        Zoot <zoot@gamesurge.net>       patch-77
 
     Summary:
index a421a909a3cd5df607ca9116ca14d6968ecb9ee3..b8b684c5f4d107acca8a3903c04b1376a4d7f133 100644 (file)
@@ -17,7 +17,7 @@
  * It would be generally wise to replace the $p$i with a hard-coded
  * one; many insecure proxies refuse to connect to themselves.
  */
-"1080:0401$i$p=p=r=o=x=y00" {
+"1080:0401$p$i=p=r=o=x=y00" {
        "..5a...." "reject:Unsecured socks4";
 };
 
index 38117cdb7eac59500baf748ccf2b98ff071f26c9..42bb9025778342b5107b190ee4f70cc0ac04b55c 100644 (file)
@@ -202,7 +202,7 @@ dict_insert(dict_t dict, const char *key, void *data)
 int
 dict_remove2(dict_t dict, const char *key, int no_dispose)
 {
-    struct dict_node *new_root;
+    struct dict_node *new_root, *old_root;
 
     if (!dict->root)
         return 0;
@@ -220,13 +220,14 @@ dict_remove2(dict_t dict, const char *key, int no_dispose)
     if (dict->first == dict->root) dict->first = dict->first->next;
     if (dict->root->next) dict->root->next->prev = dict->root->prev;
     if (dict->last == dict->root) dict->last = dict->last->prev;
+    old_root = dict->root;
+    dict->root = new_root;
+    dict->count--;
     if (no_dispose) {
-        free(dict->root);
+        free(old_root);
     } else {
-        dict_dispose_node(dict->root, dict->free_keys, dict->free_data);
+        dict_dispose_node(old_root, dict->free_keys, dict->free_data);
     }
-    dict->root = new_root;
-    dict->count--;
     return 1;
 }
 
index 933c79123625c971ae2f3d626fc7bc1138a9f262..6e4e59f2a4e93c7100182797e45dbf3fc22caa41 100644 (file)
@@ -1464,7 +1464,7 @@ static MODCMD_FUNC(cmd_god) {
 }
 
 static MODCMD_FUNC(cmd_joiner) {
-    char cmdname[80];
+    char cmdname[MAXLEN];
 
     if (argc < 2) {
         int len = sprintf(cmdname, "%s ", cmd->name);
index d48ecab68393043229808f5bc0c5dc8c9bcbb6ac..d11c80ad15f2631a334da0fab3080cddf390141e 100644 (file)
@@ -428,13 +428,6 @@ register_nick(const char *nick, struct handle_info *owner)
     dict_insert(nickserv_nick_dict, ni->nick, ni);
 }
 
-static void
-free_nick_info(void *vni)
-{
-    struct nick_info *ni = vni;
-    free(ni);
-}
-
 static void
 delete_nick(struct nick_info *ni)
 {
@@ -3826,7 +3819,7 @@ init_nickserv(const char *nick)
     dict_set_free_keys(nickserv_id_dict, free);
 
     nickserv_nick_dict = dict_new();
-    dict_set_free_data(nickserv_nick_dict, free_nick_info);
+    dict_set_free_data(nickserv_nick_dict, free);
 
     nickserv_allow_auth_dict = dict_new();
 
index 937398595277874f71de34931e6e2ab8de40720a..37eb33445040081cdd174fd3bed899005419d21a 100644 (file)
@@ -1076,7 +1076,10 @@ static CMD_FUNC(cmd_burst)
                     mode |= MODE_CHANOP;
                 else if (sep == 'v')
                     mode |= MODE_VOICE;
-                else
+                else if (isdigit(sep)) {
+                    mode |= MODE_CHANOP;
+                    while (isdigit(*end)) end++;
+                } else
                     break;
             }
             if (rel_age < 0)