commit a09034563aa46d99a4d061d182e15e12cc393efd from: Florian Westphal date: Mon Nov 20 19:32:07 2006 UTC predefined channels MUST start with '#', but this is not very intuitive, since # is also used as a comment character in ngircd.conf. Thus we prefix the name with '#' if it is missing. commit - 5b35b101f2c5a208c94840e3b020f50d8c91b64f commit + a09034563aa46d99a4d061d182e15e12cc393efd blob - b54c3f15feaf893608a5e17d563dd7d69b690445 blob + 7390f22477104d2c1c7e2f1ccc05493abb591c7e --- src/ngircd/conf.c +++ src/ngircd/conf.c @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: conf.c,v 1.95 2006/11/10 10:05:08 alex Exp $"; +static char UNUSED id[] = "$Id: conf.c,v 1.96 2006/11/20 19:32:07 fw Exp $"; #include "imp.h" #include @@ -921,7 +921,22 @@ Handle_SERVER( int Line, char *Var, char *Arg ) NGIRCd_ConfFile, Line, Var ); } /* Handle_SERVER */ + +static bool +Handle_Channelname(size_t chancount, const char *name) +{ + size_t size = sizeof( Conf_Channel[chancount].name ); + char *dest = Conf_Channel[chancount].name; + if (*name && *name != '#') { + *dest = '#'; + --size; + ++dest; + } + return size > strlcpy(dest, name, size); +} + + static void Handle_CHANNEL( int Line, char *Var, char *Arg ) { @@ -935,9 +950,7 @@ Handle_CHANNEL( int Line, char *Var, char *Arg ) chancount = Conf_Channel_Count - 1; if( strcasecmp( Var, "Name" ) == 0 ) { - /* Name of the channel */ - len = strlcpy( Conf_Channel[chancount].name, Arg, sizeof( Conf_Channel[chancount].name )); - if (len >= sizeof( Conf_Channel[chancount].name )) + if (!Handle_Channelname(chancount, Arg)) Config_Error_TooLong( Line, Var ); return; }