repo: ngircd
action: commit
revision: 
path_from: 
revision_from: a12d6ff257813d47657d53f00699d21bfaf0e301:
path_to: 
revision_to: 
git.thebackupbox.net
ngircd
git clone git://git.thebackupbox.net/ngircd
commit a12d6ff257813d47657d53f00699d21bfaf0e301
Author: Alexander Barton 
Date:   Mon Sep 10 17:59:15 2012 +0200

    Create &SERVER channel after predefined channels

    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.

diff --git a/src/ngircd/channel.c b/src/ngircd/channel.c
index 0f21a459c3a6644c0f14b2c581f8a45aca154bdc..
index ..f0a9525d348a5d992596f453fd9ba709cbd47c9a 100644
--- a/src/ngircd/channel.c
+++ b/src/ngircd/channel.c
@@ -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 */


-----END OF PAGE-----