about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2012-09-10 17:59:15 +0200
committerAlexander Barton <alex@barton.de>2012-09-10 17:59:15 +0200
commita12d6ff257813d47657d53f00699d21bfaf0e301 (patch)
tree7b8915bfd6ff0989eda55f7a8b962c5f65f20381
parent2205227c3b3cbc8788bcf97a037c9e3016f71c9c (diff)
downloadngircd-a12d6ff257813d47657d53f00699d21bfaf0e301.tar.gz
ngircd-a12d6ff257813d47657d53f00699d21bfaf0e301.zip
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.
-rw-r--r--src/ngircd/channel.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/ngircd/channel.c b/src/ngircd/channel.c
index 0f21a459..f0a9525d 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 */