summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlexander Barton <alex@barton.de>2013-12-27 23:16:11 +0100
committerAlexander Barton <alex@barton.de>2013-12-27 23:16:11 +0100
commit86bdf6e1d4539da1076afe10b57b177fb54dd147 (patch)
tree1ce8e35d9404ee6067e141102bf91780a761a8ac
parentbd33bd770decd470577487fa4bd399cb1d8426fc (diff)
downloadngircd-86bdf6e1d4539da1076afe10b57b177fb54dd147.tar.gz
ngircd-86bdf6e1d4539da1076afe10b57b177fb54dd147.zip
Implement new configuration option "Network"
The new configuration variable "Network" is used to set the (completely
optional) "network name", to which this instance of the daemon belongs.
When set, this name is used in the ISUPPORT(005) numeric which is sent to
all clients connecting to the server after logging in.

Closes bug #165.
-rw-r--r--doc/sample-ngircd.conf.tmpl6
-rw-r--r--man/ngircd.conf.5.tmpl6
-rw-r--r--src/ngircd/conf.c16
-rw-r--r--src/ngircd/conf.h3
-rw-r--r--src/ngircd/irc-info.c4
-rw-r--r--src/ngircd/messages.h1
6 files changed, 36 insertions, 0 deletions
diff --git a/doc/sample-ngircd.conf.tmpl b/doc/sample-ngircd.conf.tmpl
index 65da3601..ec425bd2 100644
--- a/doc/sample-ngircd.conf.tmpl
+++ b/doc/sample-ngircd.conf.tmpl
@@ -54,6 +54,12 @@
 	# A simple Phrase (<256 chars) if you don't want to use a motd file.
 	;MotdPhrase = "Hello world!"
 
+	# The name of the IRC network to which this server belongs. This name
+	# is optional, should only contain ASCII characters, and can't contain
+	# spaces. It is only used to inform clients. The default is empty,
+	# so no network name is announced to clients.
+	;Network = aIRCnetwork
+
 	# Global password for all users needed to connect to the server.
 	# (Default: not set)
 	;Password = abc
diff --git a/man/ngircd.conf.5.tmpl b/man/ngircd.conf.5.tmpl
index 5ca6ee38..3de2fbe0 100644
--- a/man/ngircd.conf.5.tmpl
+++ b/man/ngircd.conf.5.tmpl
@@ -126,6 +126,12 @@ configuration file.
 \fBMotdPhrase\fR (string)
 A simple Phrase (<256 chars) if you don't want to use a MOTD file.
 .TP
+\fBNetwork\fR (string)
+The name of the IRC network to which this server belongs. This name is
+optional, should only contain ASCII characters, and can't contain spaces.
+It is only used to inform clients. The default is empty, so no network
+name is announced to clients.
+.TP
 \fBPassword\fR (string)
 Global password for all users needed to connect to the server. The default is
 empty, so no password is required. Please note: This feature is not available
diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c
index 16275877..bdbb506f 100644
--- a/src/ngircd/conf.c
+++ b/src/ngircd/conf.c
@@ -369,6 +369,7 @@ Conf_Test( void )
 		printf("  MotdPhrase = %s\n", array_bytes(&Conf_Motd)
 		       ? (const char*) array_start(&Conf_Motd) : "");
 	}
+	printf("  Network = %s\n", Conf_Network);
 #ifndef PAM
 	printf("  Password = %s\n", Conf_ServerPwd);
 #endif
@@ -749,6 +750,7 @@ Set_Defaults(bool InitServers)
 	strcpy(Conf_ServerAdminMail, "");
 	snprintf(Conf_ServerInfo, sizeof Conf_ServerInfo, "%s %s",
 		 PACKAGE_NAME, PACKAGE_VERSION);
+	strcpy(Conf_Network, "");
 	free(Conf_ListenAddress);
 	Conf_ListenAddress = NULL;
 	array_free(&Conf_ListenPorts);
@@ -1409,6 +1411,7 @@ Handle_GLOBAL(const char *File, int Line, char *Var, char *Arg )
 	struct group *grp;
 	size_t len;
 	const char *section;
+	char *ptr;
 
 	assert(File != NULL);
 	assert(Line > 0);
@@ -1491,6 +1494,19 @@ Handle_GLOBAL(const char *File, int Line, char *Var, char *Arg )
 		Using_MotdFile = false;
 		return;
 	}
+	if (strcasecmp(Var, "Network") == 0) {
+		len = strlcpy(Conf_Network, Arg, sizeof(Conf_Network));
+		if (len >= sizeof(Conf_Network))
+			Config_Error_TooLong(File, Line, Var);
+		ptr = strchr(Conf_Network, ' ');
+		if (ptr) {
+			Config_Error(LOG_WARNING,
+				     "%s, line %d: \"Network\" can't contain spaces!",
+				     File, Line);
+			*ptr = '\0';
+		}
+		return;
+	}
 	if(strcasecmp(Var, "Password") == 0) {
 		len = strlcpy(Conf_ServerPwd, Arg, sizeof(Conf_ServerPwd));
 		if (len >= sizeof(Conf_ServerPwd))
diff --git a/src/ngircd/conf.h b/src/ngircd/conf.h
index 02d23315..aa80b8dd 100644
--- a/src/ngircd/conf.h
+++ b/src/ngircd/conf.h
@@ -109,6 +109,9 @@ GLOBAL char Conf_ServerAdmin1[CLIENT_INFO_LEN];
 GLOBAL char Conf_ServerAdmin2[CLIENT_INFO_LEN];
 GLOBAL char Conf_ServerAdminMail[CLIENT_INFO_LEN];
 
+/** Network name (optional, no spaces allowed) */
+GLOBAL char Conf_Network[CLIENT_INFO_LEN];
+
 /** Message of the day (MOTD) of this server */
 GLOBAL array Conf_Motd;
 
diff --git a/src/ngircd/irc-info.c b/src/ngircd/irc-info.c
index 56cae2ac..aa98a5b5 100644
--- a/src/ngircd/irc-info.c
+++ b/src/ngircd/irc-info.c
@@ -1539,6 +1539,10 @@ IRC_Send_NAMES(CLIENT * Client, CHANNEL * Chan)
 GLOBAL bool
 IRC_Send_ISUPPORT(CLIENT * Client)
 {
+	if (Conf_Network[0] && !IRC_WriteStrClient(Client, RPL_ISUPPORTNET_MSG,
+						   Client_ID(Client),
+						   Conf_Network))
+		return DISCONNECTED;
 	if (!IRC_WriteStrClient(Client, RPL_ISUPPORT1_MSG, Client_ID(Client),
 				CHANTYPES, CHANTYPES, Conf_MaxJoins))
 		return DISCONNECTED;
diff --git a/src/ngircd/messages.h b/src/ngircd/messages.h
index 53b96581..f3a0ba44 100644
--- a/src/ngircd/messages.h
+++ b/src/ngircd/messages.h
@@ -21,6 +21,7 @@
 #define RPL_YOURHOST_MSG		"002 %s :Your host is %s, running version ngircd-%s (%s/%s/%s)"
 #define RPL_CREATED_MSG			"003 %s :This server has been started %s"
 #define RPL_MYINFO_MSG			"004 %s %s ngircd-%s %s %s"
+#define RPL_ISUPPORTNET_MSG		"005 %s NETWORK=%s :is my network name"
 #define RPL_ISUPPORT1_MSG		"005 %s RFC2812 IRCD=ngIRCd CHARSET=UTF-8 CASEMAPPING=ascii PREFIX=(qaohv)~&@%%+ CHANTYPES=%s CHANMODES=beI,k,l,imMnOPQRstVz CHANLIMIT=%s:%d :are supported on this server"
 #define RPL_ISUPPORT2_MSG		"005 %s CHANNELLEN=%d NICKLEN=%d TOPICLEN=%d AWAYLEN=%d KICKLEN=%d MODES=%d MAXLIST=beI:%d EXCEPTS=e INVEX=I PENALTY :are supported on this server"