Module: ngircd.git
Branch: master
Commit: 20276f7cc967ec1a472715574adc6792b1598314
URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=20276f7c…
Author: Florian Westphal <fw(a)strlen.de>
Date: Wed Feb 17 22:23:14 2010 +0100
configure.in: only add -lnsl when needed
dpkg-shlibdeps: warning: dependency on libnsl.so.1 [..]
(they use none of its symbols).
As shown via commit 2b14234abc252383679bae2d23861b773dc9713e
(dpkg-shlibdeps: warning: dependency on libnsl.so.1) and the
following revert of that commit, we cannot simply drop
the AC_CHECK_LIB(nsl). Although -lnsl is indeed unneeded
when glibc is used, some platforms (e.g. Solaris) need it.
Use AC_SEARCH_LIBS instead to only link when the library exports
a particular symbol.
---
configure.in | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/configure.in b/configure.in
index 10a72d3..f80e8a9 100644
--- a/configure.in
+++ b/configure.in
@@ -131,9 +131,11 @@ AC_CHECK_MEMBER([struct sockaddr_in.sin_len], AC_DEFINE(HAVE_sockaddr_in_len),,
# -- Libraries --
+# A/UX needs this.
AC_CHECK_LIB(UTIL,memmove)
+# needed on solaris. GNU libc also has a libnsl, but we do not need it.
+AC_SEARCH_LIBS(gethostbyname,nsl)
AC_CHECK_LIB(socket,bind)
-AC_CHECK_LIB(nsl,gethostent)
# -- Functions --
Module: ngircd.git
Branch: master
Commit: 6e8cf51bb216f956e7a6fdb5c61b0f2799bf8d2d
URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=6e8cf51b…
Author: Alexander Barton <alex(a)barton.de>
Date: Thu Feb 11 00:01:53 2010 +0100
Implement WEBIRC command
The WEBIRC command is used by some Web-to-IRC gateways to set the correct
user name and host name of users instead of their own.
Syntax: WEBIRC <password> <username> <hostname> <ip-address>
The <password> must be set using the new configuration variable "WebircPassword" in the [Global] section of ngircd.conf.
Please note that the <ip-address> is currently not used by ngIRCd (we don't store it in the CLIENT structure, only the resolved hostname).
---
doc/sample-ngircd.conf | 8 +++++++-
man/ngircd.conf.5.tmpl | 5 +++++
src/ngircd/conf.c | 30 +++++++++++++++++++-----------
src/ngircd/conf.h | 5 ++++-
src/ngircd/conn.c | 12 ++++++++----
src/ngircd/irc-login.c | 27 ++++++++++++++++++++++++++-
src/ngircd/irc-login.h | 3 ++-
src/ngircd/parse.c | 3 ++-
8 files changed, 73 insertions(+), 20 deletions(-)
diff --git a/doc/sample-ngircd.conf b/doc/sample-ngircd.conf
index b945224..db326c9 100644
--- a/doc/sample-ngircd.conf
+++ b/doc/sample-ngircd.conf
@@ -28,9 +28,15 @@
# LINKS requests for example.
Info = Server Info Text
- # Global password for all users needed to connect to the server
+ # Global password for all users needed to connect to the server.
+ # (Default: not set)
;Password = abc
+ # Password required for using the WEBIRC command used by some
+ # Web-to-IRC gateways. If not set/empty, the WEBIRC command can't
+ # be used. (Default: not set)
+ ;WebircPassword = xyz
+
# Information about the server and the administrator, used by the
# ADMIN command. Not required by server but by RFC!
;AdminInfo1 = Description
diff --git a/man/ngircd.conf.5.tmpl b/man/ngircd.conf.5.tmpl
index 4d55592..46e0308 100644
--- a/man/ngircd.conf.5.tmpl
+++ b/man/ngircd.conf.5.tmpl
@@ -73,6 +73,11 @@ example.
Global password for all users needed to connect to the server. The default
is empty, so no password is required.
.TP
+\fBWebircPassword\fR
+Password required for using the WEBIRC command used by some Web-to-IRC
+gateways. If not set or empty, the WEBIRC command can't be used.
+Default: not set.
+.TP
\fBAdminInfo1\fR, \fBAdminInfo2\fR, \fBAdminEMail\fR
Information about the server and the administrator, used by the ADMIN
command.
diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c
index fae2a28..694b5d4 100644
--- a/src/ngircd/conf.c
+++ b/src/ngircd/conf.c
@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2009 Alexander Barton (alex(a)barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex(a)barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -291,16 +291,17 @@ Conf_Test( void )
}
puts( "[GLOBAL]" );
- printf( " Name = %s\n", Conf_ServerName );
- printf( " Info = %s\n", Conf_ServerInfo );
- printf( " Password = %s\n", Conf_ServerPwd );
- printf( " AdminInfo1 = %s\n", Conf_ServerAdmin1 );
- printf( " AdminInfo2 = %s\n", Conf_ServerAdmin2 );
- printf( " AdminEMail = %s\n", Conf_ServerAdminMail );
- printf( " MotdFile = %s\n", Conf_MotdFile );
- printf( " MotdPhrase = %s\n", Conf_MotdPhrase );
- printf( " ChrootDir = %s\n", Conf_Chroot );
- printf( " PidFile = %s\n", Conf_PidFile);
+ printf(" Name = %s\n", Conf_ServerName);
+ printf(" Info = %s\n", Conf_ServerInfo);
+ printf(" Password = %s\n", Conf_ServerPwd);
+ printf(" WebircPassword = %s\n", Conf_WebircPwd);
+ printf(" AdminInfo1 = %s\n", Conf_ServerAdmin1);
+ printf(" AdminInfo2 = %s\n", Conf_ServerAdmin2);
+ printf(" AdminEMail = %s\n", Conf_ServerAdminMail);
+ printf(" MotdFile = %s\n", Conf_MotdFile);
+ printf(" MotdPhrase = %s\n", Conf_MotdPhrase);
+ printf(" ChrootDir = %s\n", Conf_Chroot);
+ printf(" PidFile = %s\n", Conf_PidFile);
printf(" Listen = %s\n", Conf_ListenAddress);
fputs(" Ports = ", stdout);
ports_puts(&Conf_ListenPorts);
@@ -845,6 +846,13 @@ Handle_GLOBAL( int Line, char *Var, char *Arg )
Config_Error_TooLong( Line, Var );
return;
}
+ if (strcasecmp(Var, "WebircPassword") == 0) {
+ /* Password required for WEBIRC command */
+ len = strlcpy(Conf_WebircPwd, Arg, sizeof(Conf_WebircPwd));
+ if (len >= sizeof(Conf_WebircPwd))
+ Config_Error_TooLong(Line, Var);
+ return;
+ }
if( strcasecmp( Var, "AdminInfo1" ) == 0 ) {
/* Administrative info #1 */
len = strlcpy( Conf_ServerAdmin1, Arg, sizeof( Conf_ServerAdmin1 ));
diff --git a/src/ngircd/conf.h b/src/ngircd/conf.h
index 0180515..5764d0f 100644
--- a/src/ngircd/conf.h
+++ b/src/ngircd/conf.h
@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex(a)barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex(a)barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -188,6 +188,9 @@ GLOBAL bool Conf_AddServer PARAMS(( const char *Name, UINT16 Port, const char *H
GLOBAL bool Conf_IsService PARAMS((int ConfServer, const char *Nick));
+/* Password required by WEBIRC command */
+GLOBAL char Conf_WebircPwd[CLIENT_PASS_LEN];
+
#endif
diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
index 1e4ba0a..cd350a8 100644
--- a/src/ngircd/conn.c
+++ b/src/ngircd/conn.c
@@ -1999,10 +1999,14 @@ cb_Read_Resolver_Result( int r_fd, UNUSED short events )
c = Conn_GetClient( i );
assert( c != NULL );
- /* Only update client information of unregistered clients */
- if( Client_Type( c ) == CLIENT_UNKNOWN ) {
- strlcpy(My_Connections[i].host, readbuf, sizeof( My_Connections[i].host));
- Client_SetHostname( c, readbuf);
+ /* Only update client information of unregistered clients.
+ * Note: user commands (e. g. WEBIRC) are always read _after_ reading
+ * the resolver results, so we don't have to worry to override settings
+ * from these commands here. */
+ if(Client_Type(c) == CLIENT_UNKNOWN) {
+ strlcpy(My_Connections[i].host, readbuf,
+ sizeof(My_Connections[i].host));
+ Client_SetHostname(c, readbuf);
#ifdef IDENTAUTH
++identptr;
if (*identptr) {
diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c
index 7b73d40..2de4bd5 100644
--- a/src/ngircd/irc-login.c
+++ b/src/ngircd/irc-login.c
@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex(a)barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex(a)barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -557,6 +557,31 @@ IRC_SERVICE(CLIENT *Client, REQUEST *Req)
} /* IRC_SERVICE */
+/**
+ * Handler for the IRC command "WEBIRC".
+ * Syntax: WEBIRC <password> <username> <real-hostname> <real-IP-address>
+ */
+GLOBAL bool
+IRC_WEBIRC(CLIENT *Client, REQUEST *Req)
+{
+ /* Exactly 4 parameters are requited */
+ if (Req->argc != 4)
+ return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ Client_ID(Client), Req->command);
+
+ if (!Conf_WebircPwd[0] || strcmp(Req->argv[0], Conf_WebircPwd) != 0)
+ return IRC_WriteStrClient(Client, ERR_PASSWDMISMATCH_MSG,
+ Client_ID(Client));
+
+ LogDebug("Connection %d: got valid WEBIRC command: user=%s, host=%s, ip=%s",
+ Client_Conn(Client), Req->argv[1], Req->argv[2], Req->argv[3]);
+
+ Client_SetUser(Client, Req->argv[1], true);
+ Client_SetHostname(Client, Req->argv[2]);
+ return CONNECTED;
+} /* IRC_WEBIRC */
+
+
GLOBAL bool
IRC_QUIT( CLIENT *Client, REQUEST *Req )
{
diff --git a/src/ngircd/irc-login.h b/src/ngircd/irc-login.h
index 0b92038..1504e0b 100644
--- a/src/ngircd/irc-login.h
+++ b/src/ngircd/irc-login.h
@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex(a)barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex(a)barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,6 +19,7 @@ GLOBAL bool IRC_PASS PARAMS((CLIENT *Client, REQUEST *Req));
GLOBAL bool IRC_NICK PARAMS((CLIENT *Client, REQUEST *Req));
GLOBAL bool IRC_USER PARAMS((CLIENT *Client, REQUEST *Req));
GLOBAL bool IRC_SERVICE PARAMS((CLIENT *Client, REQUEST *Req));
+GLOBAL bool IRC_WEBIRC PARAMS((CLIENT *Client, REQUEST *Req));
GLOBAL bool IRC_PING PARAMS((CLIENT *Client, REQUEST *Req));
GLOBAL bool IRC_PONG PARAMS((CLIENT *Client, REQUEST *Req));
GLOBAL bool IRC_QUIT PARAMS((CLIENT *Client, REQUEST *Req));
diff --git a/src/ngircd/parse.c b/src/ngircd/parse.c
index 2c28a30..3710d70 100644
--- a/src/ngircd/parse.c
+++ b/src/ngircd/parse.c
@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex(a)barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex(a)barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -103,6 +103,7 @@ static COMMAND My_Commands[] =
{ "USERS", IRC_USERS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "VERSION", IRC_VERSION, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "WALLOPS", IRC_WALLOPS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
+ { "WEBIRC", IRC_WEBIRC, CLIENT_UNKNOWN, 0, 0, 0 },
{ "WHO", IRC_WHO, CLIENT_USER, 0, 0, 0 },
{ "WHOIS", IRC_WHOIS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
{ "WHOWAS", IRC_WHOWAS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
Module: ngircd.git
Branch: master
Commit: 53fc0ebff6fe09bb6a3ae3b134647b3499fc6618
URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=53fc0ebf…
Author: Alexander Barton <alex(a)barton.de>
Date: Wed Feb 10 23:47:05 2010 +0100
ngircd.conf.5: Document missing "Password" variable
---
man/ngircd.conf.5.tmpl | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/man/ngircd.conf.5.tmpl b/man/ngircd.conf.5.tmpl
index d9e6f46..4d55592 100644
--- a/man/ngircd.conf.5.tmpl
+++ b/man/ngircd.conf.5.tmpl
@@ -69,6 +69,10 @@ IRC network and must contain at least one dot (".") character.
Info text of the server. This will be shown by WHOIS and LINKS requests for
example.
.TP
+\fBPassword\fR
+Global password for all users needed to connect to the server. The default
+is empty, so no password is required.
+.TP
\fBAdminInfo1\fR, \fBAdminInfo2\fR, \fBAdminEMail\fR
Information about the server and the administrator, used by the ADMIN
command.
Module: ngircd.git
Branch: master
Commit: f1bbc92b391f2dabd8c07234689f4f36207f81c6
URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=f1bbc92b…
Author: Alexander Barton <alex(a)barton.de>
Date: Fri Feb 5 00:24:33 2010 +0100
New README-Interix.txt for running ngIRCd on MS SFU and MS SUA
---
doc/README-Interix.txt | 37 +++++++++++++++++++++++++++++++++++++
1 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/doc/README-Interix.txt b/doc/README-Interix.txt
new file mode 100644
index 0000000..8f5451f
--- /dev/null
+++ b/doc/README-Interix.txt
@@ -0,0 +1,37 @@
+
+ ngIRCd - Next Generation IRC Server
+
+ (c)2001-2010 Alexander Barton,
+ alex(a)barton.de, http://www.barton.de/
+
+ ngIRCd is free software and published under the
+ terms of the GNU General Public License.
+
+
+ -- README-Interix.txt --
+
+
+ngIRCd release 15 has successfully been tested on Microsoft Windows XP
+Professional using the Services for UNIX (SFU) version 3.5 and Microsoft
+Windows 7 with the bundled Subsystem for UNIX Applications (SUA).
+
+SFU are supported on Windows 2000, Windows 2000 Server, Windows XP, and
+Windows Server 2003. SUA is supported on Windows Server 2003 R2, Windows
+Server 2008 & 2008 R2, Windows Vista, and Windows 7 -- so ngIRCd should be
+able to run on all of these platforms.
+
+But please note that the poll() API function is not fully implemented by
+SFU/SUA and therefore can't be used by ngIRCd -- which normally would be
+the default. Please see <http://www.suacommunity.com/faqs.aspx> section
+4.25 for details:
+
+ "If you do try to use the poll() API your program will block on the
+ API call forever. You must direct your program to build using the
+ select() API."
+
+So when running the ./configure script, you HAVE TO DISABLE poll() support:
+
+ ./configure --without-poll
+
+ngIRCd then defaults to using the select() API function which works fine.
+
Module: ngircd.git
Branch: master
Commit: 1da3e25e65c7bcc3e47d18f114f7c4e76e274250
URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=1da3e25e…
Author: Alexander Barton <alex(a)barton.de>
Date: Fri Jan 22 18:26:26 2010 +0100
Added "i586/pc/interix3.5" (MS Services for UNIX) to Platforms.txt
---
doc/Platforms.txt | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/doc/Platforms.txt b/doc/Platforms.txt
index 85b3afa..8629252 100644
--- a/doc/Platforms.txt
+++ b/doc/Platforms.txt
@@ -49,6 +49,7 @@ i386/unknown/netbsdelf3.0.1 gcc 3.3.3 0.10.0-p1 06-08-30 alex Y Y Y Y (3)
i386/unknown/netbsdelf4.0 gcc 4.1.2 14.1 09-07-28 alex Y Y Y Y (3)
i386/unknown/openbsd3.9 gcc 3.3.5 0.10.0-p1 06-08-30 alex Y Y Y Y (3)
i386/unknown/openbsd4.1 gcc 3.3.5 14.1 09-07-28 alex Y Y Y Y (3)
+i586/pc/interix3.5 gcc 3.3 15 10-01-22 alex Y Y N Y
i686/pc/cygwin gcc 3.3.1 0.8.0 04-05-30 alex Y Y n Y
i686/pc/linux-gnu gcc 2.95.4 0.8.0 04-05-30 alex Y Y Y Y (1)
i686/pc/linux-gnu gcc 3.3.5 14.1 09-08-04 alex Y Y Y Y (1)
Module: ngircd.git
Branch: master
Commit: 9f58418765576950983b4a95c4f5f71f068f424f
URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=9f584187…
Author: Alexander Barton <alex(a)barton.de>
Date: Sun Jan 17 14:19:35 2010 +0100
Implemented new "secure clients only" channel mode: +z
Only clients using a SSL encrypted connection to the server are
allowed to join such a channel.
But please note three things:
a) already joined clients are not checked when setting this mode,
b) IRC operators are always allowed to join every channel, and
c) remote clients using a server not supporting this mode are not
checked either and therefore always allowed to join.
---
NEWS | 12 +++++++++++-
src/ngircd/defines.h | 2 +-
src/ngircd/irc-channel.c | 14 +++++++++++---
src/ngircd/irc-mode.c | 3 ++-
src/ngircd/messages.h | 1 +
5 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/NEWS b/NEWS
index 5a0a9dd..3457312 100644
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,7 @@
ngIRCd - Next Generation IRC Server
- (c)2001-2009 Alexander Barton,
+ (c)2001-2010 Alexander Barton,
alex(a)barton.de, http://www.barton.de/
ngIRCd is free software and published under the
@@ -10,6 +10,16 @@
-- NEWS --
+ngIRCd Release 16
+
+ - A new channel mode "secure connections only" (+z) has been implemented:
+ Only clients using a SSL encrypted connection to the server are allowed
+ to join such a channel.
+ But please note three things: a) already joined clients are not checked
+ when setting this mode, b) IRC operators are always allowed to join
+ every channel, and c) remote clients using a server not supporting this
+ mode are not checked either and therefore always allowed to join.
+
ngIRCd Release 15 (2009-11-07)
ngIRCd 15~rc1 (2009-10-15)
diff --git a/src/ngircd/defines.h b/src/ngircd/defines.h
index 010dd8e..94c7dd1 100644
--- a/src/ngircd/defines.h
+++ b/src/ngircd/defines.h
@@ -81,7 +81,7 @@
in seconds. */
#define USERMODES "aiorsw" /* Supported user modes. */
-#define CHANMODES "biIklmnoPstv" /* Supported channel modes. */
+#define CHANMODES "biIklmnoPstvz" /* Supported channel modes. */
#define CONNECTED true /* Internal status codes. */
#define DISCONNECTED false
diff --git a/src/ngircd/irc-channel.c b/src/ngircd/irc-channel.c
index 010be35..1014d3a 100644
--- a/src/ngircd/irc-channel.c
+++ b/src/ngircd/irc-channel.c
@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex(a)barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex(a)barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -93,7 +93,7 @@ join_allowed(CLIENT *Client, CHANNEL *chan, const char *channame,
}
channel_modes = Channel_Modes(chan);
- if ((strchr(channel_modes, 'i')) && !is_invited) {
+ if (strchr(channel_modes, 'i') && !is_invited) {
/* Channel is "invite-only" and client is not on invite list */
IRC_WriteStrClient(Client, ERR_INVITEONLYCHAN_MSG,
Client_ID(Client), channame);
@@ -108,7 +108,7 @@ join_allowed(CLIENT *Client, CHANNEL *chan, const char *channame,
return false;
}
- if ((strchr(channel_modes, 'l')) &&
+ if (strchr(channel_modes, 'l') &&
(Channel_MaxUsers(chan) <= Channel_MemberCount(chan))) {
/* There are more clints joined to this channel than allowed */
IRC_WriteStrClient(Client, ERR_CHANNELISFULL_MSG,
@@ -116,6 +116,14 @@ join_allowed(CLIENT *Client, CHANNEL *chan, const char *channame,
return false;
}
+ if (strchr(channel_modes, 'z') && !Conn_UsesSSL(Client_Conn(Client))) {
+ /* Only "secure" clients are allowed, but clients doesn't
+ * use SSL encryption */
+ IRC_WriteStrClient(Client, ERR_SECURECHANNEL_MSG,
+ Client_ID(Client), channame);
+ return false;
+ }
+
return true;
}
diff --git a/src/ngircd/irc-mode.c b/src/ngircd/irc-mode.c
index 9509fb0..d22d32f 100644
--- a/src/ngircd/irc-mode.c
+++ b/src/ngircd/irc-mode.c
@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2008 Alexander Barton (alex(a)barton.de)
+ * Copyright (c)2001-2010 Alexander Barton (alex(a)barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -401,6 +401,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
case 'n': /* Only members can write */
case 's': /* Secret channel */
case 't': /* Topic locked */
+ case 'z': /* Secure connections only */
if (modeok)
x[0] = *mode_ptr;
else
diff --git a/src/ngircd/messages.h b/src/ngircd/messages.h
index 59c6cdb..e15bf16 100644
--- a/src/ngircd/messages.h
+++ b/src/ngircd/messages.h
@@ -113,6 +113,7 @@
#define ERR_ALREADYREGISTRED_MSG "462 %s :Connection already registered"
#define ERR_PASSWDMISMATCH_MSG "464 %s :Invalid password"
#define ERR_CHANNELISFULL_MSG "471 %s %s :Cannot join channel (+l)"
+#define ERR_SECURECHANNEL_MSG "471 %s %s :Cannot join channel (+z)"
#define ERR_UNKNOWNMODE_MSG "472 %s: %c :is unknown mode char for %s"
#define ERR_INVITEONLYCHAN_MSG "473 %s %s :Cannot join channel (+i)"
#define ERR_BANNEDFROMCHAN_MSG "474 %s %s :Cannot join channel (+b)"