Fix service triggers; allow service hostname configuration; fix glitches
[srvx.git] / src / proto-bahamut.c
index d7ffedf70762faa5bd04e15221447e52b372c877..42894749e63cd095b2a0f7c7a2d41b7c2748f062 100644 (file)
@@ -171,7 +171,7 @@ AddUser(struct server* uplink, const char *nick, const char *ident, const char *
 }
 
 struct userNode *
-AddService(const char *nick, const char *desc) {
+AddService(const char *nick, const char *desc, const char *hostname) {
     time_t timestamp = now;
     struct userNode *old_user = GetUserH(nick);
     struct in_addr ipaddr = { INADDR_LOOPBACK };
@@ -180,7 +180,9 @@ AddService(const char *nick, const char *desc) {
             return old_user;
         timestamp = old_user->timestamp - 1;
     }
-    return AddUser(self, nick, nick, self->name, "+oikr", desc, timestamp, ipaddr, 0);
+    if (!hostname)
+        hostname = self->name;
+    return AddUser(self, nick, nick, hostname, "+oikr", desc, timestamp, ipaddr, 0);
 }
 
 struct userNode *
@@ -369,6 +371,11 @@ irc_notice(struct userNode *from, const char *to, const char *message) {
     putsock(":%s NOTICE %s :%s", from->nick, to, message);
 }
 
+void
+irc_notice_user(struct userNode *from, struct userNode *to, const char *message) {
+    putsock(":%s NOTICE %s :%s", from->nick, to->nick, message);
+}
+
 void
 irc_wallchops(UNUSED_ARG(struct userNode *from), UNUSED_ARG(const char *to), UNUSED_ARG(const char *message)) {
 }
@@ -1266,6 +1273,10 @@ mod_chanmode_parse(struct chanNode *channel, char **modes, unsigned int argc, un
                 ch_arg++;
             break;
         }
+        default:
+            if (!(flags & MCP_FROM_SERVER))
+                goto error;
+            break;
         }
     }
     change->argc = argc; /* in case any turned out to be ignored */