]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/conf.c
add support for predefined-channel configuration of k and l modes
[ngircd-alex.git] / src / ngircd / conf.c
index 7390f22477104d2c1c7e2f1ccc05493abb591c7e..05750f1fc91e8feaad51635c3c2a0ab6d184cf93 100644 (file)
@@ -14,7 +14,7 @@
 
 #include "portab.h"
 
-static char UNUSED id[] = "$Id: conf.c,v 1.96 2006/11/20 19:32:07 fw Exp $";
+static char UNUSED id[] = "$Id: conf.c,v 1.97 2006/12/29 14:09:50 fw Exp $";
 
 #include "imp.h"
 #include <assert.h>
@@ -240,6 +240,8 @@ Conf_Test( void )
                puts( "[CHANNEL]" );
                printf( "  Name = %s\n", Conf_Channel[i].name );
                printf( "  Modes = %s\n", Conf_Channel[i].modes );
+               printf( "  Key = %s\n", Conf_Channel[i].key );
+               printf( "  MaxUsers = %lu\n", Conf_Channel[i].maxusers );
 
                topic = (char*)array_start(&Conf_Channel[i].topic);
                printf( "  Topic = %s\n\n", topic ? topic : "");
@@ -555,6 +557,8 @@ Read_Config( void )
                                        /* Initialize new channel structure */
                                        strcpy( Conf_Channel[Conf_Channel_Count].name, "" );
                                        strcpy( Conf_Channel[Conf_Channel_Count].modes, "" );
+                                       strcpy( Conf_Channel[Conf_Channel_Count].key, "" );
+                                       Conf_Channel[Conf_Channel_Count].maxusers = 0;
                                        array_free(&Conf_Channel[Conf_Channel_Count].topic);
                                        Conf_Channel_Count++;
                                }
@@ -968,6 +972,22 @@ Handle_CHANNEL( int Line, char *Var, char *Arg )
                return;
        }
 
+       if( strcasecmp( Var, "Key" ) == 0 ) {
+               /* Initial Channel Key (mode k) */
+               len = strlcpy(Conf_Channel[chancount].key, Arg, sizeof(Conf_Channel[chancount].key));
+               if (len >= sizeof( Conf_Channel[chancount].key ))
+                       Config_Error_TooLong(Line, Var);
+               return;
+       }
+
+       if( strcasecmp( Var, "MaxUsers" ) == 0 ) {
+               /* maximum user limit, mode l */
+               Conf_Channel[chancount].maxusers = (unsigned long) atol(Arg);
+               if (Conf_Channel[chancount].maxusers == 0)
+                       Config_Error_NaN(Line, Var);
+               return;
+       }
+
        Config_Error( LOG_ERR, "%s, line %d (section \"Channel\"): Unknown variable \"%s\"!",
                                                                NGIRCd_ConfFile, Line, Var );
 } /* Handle_CHANNEL */