]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/shun.c
Couple of srvx updates.
[irc/evilnet/x3.git] / src / shun.c
index 18097642ac08491a4a4403829339d5991d0601d1..61bed7f176c554aa69468cc6b7dcba5f9b17ff02 100644 (file)
@@ -3,9 +3,9 @@
  *
  * This file is part of x3.
  *
- * srvx is free software; you can redistribute it and/or modify
+ * x3 is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -122,12 +122,6 @@ shun_remove(const char *target, int announce)
             timeq_add(new_first->expires, shun_expire, 0);
         }
     }
-#ifdef WITH_PROTOCOL_BAHAMUT
-    /* Bahamut is sort of lame: It permanently remembers any AKILLs
-     * with durations longer than a day, and will never auto-expire
-     * them.  So when the time comes, we'd better remind it.  */
-    announce = 1;
-#endif
     if (announce)
         irc_unshun(target);
     return res;
@@ -170,8 +164,6 @@ static char *
 shun_alternate_target(const char *target)
 {
     const char *hostname;
-    unsigned long ip;
-    char *res;
 
     /* If no host part, bail. */
     if (!(hostname = strchr(target, '@')))
@@ -179,23 +171,17 @@ shun_alternate_target(const char *target)
     /* If host part contains wildcards, bail. */
     if (hostname[strcspn(hostname, "*?/")])
         return NULL;
-    /* If host part looks like an IP, parse it that way. */
-    if (!hostname[strspn(hostname+1, "0123456789.")+1]) {
-        struct in_addr in;
-        struct hostent *he;
-        if (inet_aton(hostname+1, &in)
-            && (he = gethostbyaddr((char*)&in, sizeof(in), AF_INET))) {
-            res = malloc((hostname - target) + 2 + strlen(he->h_name));
-            sprintf(res, "%.*s@%s", hostname - target, target, he->h_name);
-            return res;
-        } else
-            return NULL;
-    } else if (getipbyname(hostname+1, &ip)) {
-        res = malloc((hostname - target) + 18);
-        sprintf(res, "%.*s@%lu.%lu.%lu.%lu", hostname - target, target, ip & 255, (ip >> 8) & 255, (ip >> 16) & 255, (ip >> 24) & 255);
-        return res;
-    } else
-        return NULL;
+    /* Get parsed address and canonical name for host. */
+#if 0
+    irc_in_addr_t in; /* move this to the right place */
+    if (irc_pton(&in, NULL, hostname+1)) {
+        if (getnameinfo(/*TODO*/))
+              return NULL;
+    } else if (!getaddrinfo(/*TODO*/)) {
+    } else return NULL;
+#else
+    return NULL;
+#endif
 }
 
 struct shun *
@@ -312,7 +298,7 @@ shun_saxdb_write(struct saxdb_context *ctx)
 }
 
 static void
-shun_db_cleanup(void)
+shun_db_cleanup(UNUSED_ARG(void *extra))
 {
     heap_delete(shun_heap);
     dict_delete(shun_dict);
@@ -325,7 +311,7 @@ shun_init(void)
     shun_dict = dict_new();
     dict_set_free_data(shun_dict, free_shun_from_dict);
     saxdb_register("shun", shun_saxdb_read, shun_saxdb_write);
-    reg_exit_func(shun_db_cleanup);
+    reg_exit_func(shun_db_cleanup, NULL);
 }
 
 struct shun_discrim *
@@ -439,3 +425,4 @@ shun_discrim_search(struct shun_discrim *discrim, shun_search_func gsf, void *da
     heap_remove_pred(shun_heap, shun_search_helper, &search);
     return search.hits;
 }
+