]> arthur.barton.de Git - ngircd.git/commitdiff
Create &SERVER channel after predefined channels
authorAlexander Barton <alex@barton.de>
Mon, 10 Sep 2012 15:59:15 +0000 (17:59 +0200)
committerAlexander Barton <alex@barton.de>
Mon, 10 Sep 2012 15:59:15 +0000 (17:59 +0200)
This patch allows you to define &SERVER in a [Channel] block yourself
and to overwrite the built-in topic and channel modes.

Fixes bug #131.

src/ngircd/channel.c

index 0f21a459c3a6644c0f14b2c581f8a45aca154bdc..f0a9525d348a5d992596f453fd9ba709cbd47c9a 100644 (file)
@@ -66,16 +66,8 @@ static void Set_KeyFile PARAMS((CHANNEL *Chan, const char *KeyFile));
 GLOBAL void
 Channel_Init( void )
 {
-       CHANNEL *sc;
-
        My_Channels = NULL;
        My_Cl2Chan = NULL;
-
-       sc = Channel_Create("&SERVER");
-       if (sc) {
-               Channel_SetModes(sc, "mnPt");
-               Channel_SetTopic(sc, Client_ThisServer(), "Server Messages");
-       }
 } /* Channel_Init */
 
 
@@ -103,11 +95,12 @@ Channel_GetListInvites(CHANNEL *c)
 }
 
 
+/**
+ * Generate predefined persistent channels and &SERVER
+ */
 GLOBAL void
 Channel_InitPredefined( void )
 {
-       /* Generate predefined persistent channels */
-
        CHANNEL *new_chan;
        const struct Conf_Channel *conf_chan;
        const char *c;
@@ -160,6 +153,18 @@ Channel_InitPredefined( void )
        }
        if (channel_count)
                array_free(&Conf_Channels);
+
+       /* Make sure the local &SERVER channel exists */
+       if (!Channel_Search("&SERVER")) {
+               new_chan = Channel_Create("&SERVER");
+               if (new_chan) {
+                       Channel_SetModes(new_chan, "mnPt");
+                       Channel_SetTopic(new_chan, Client_ThisServer(),
+                                        "Server Messages");
+               } else
+                       Log(LOG_ERR, "Failed to create \"&SERVER\" channel!");
+       } else
+               LogDebug("Required channel \"&SERVER\" already exists, ok.");
 } /* Channel_InitPredefined */