+ if( strcasecmp( Var, "PredefChannelsOnly" ) == 0 ) {
+ /* Should we only allow pre-defined-channels? (i.e. users cannot create their own channels) */
+ Conf_PredefChannelsOnly = Check_ArgIsTrue( Arg );
+ return;
+ }
+
+ if (CheckLegacyNoOption(Var, Arg)) {
+ Config_Error(LOG_WARNING, "%s, line %d: \"No\"-Prefix has been removed, use \"%s = %s\" in [FEATURES] section instead",
+ NGIRCd_ConfFile, Line, NoNo(Var), InvertArg(Arg));
+ if (strcasecmp(Var, "NoIdent") == 0)
+ WarnIdent(Line);
+ else if (strcasecmp(Var, "NoPam") == 0)
+ WarnPAM(Line);
+ return;
+ }
+#ifdef WANT_IPV6
+ /* the default setting for all the WANT_IPV6 special options is 'true' */
+ if( strcasecmp( Var, "ConnectIPv6" ) == 0 ) {
+ /* connect to other hosts using ipv6, if they have an AAAA record? */
+ Conf_ConnectIPv6 = Check_ArgIsTrue( Arg );
+ return;
+ }
+ if( strcasecmp( Var, "ConnectIPv4" ) == 0 ) {
+ /* connect to other hosts using ipv4.
+ * again, this can be used for ipv6-only setups */
+ Conf_ConnectIPv4 = Check_ArgIsTrue( Arg );
+ return;
+ }
+#endif
+ if( strcasecmp( Var, "OperCanUseMode" ) == 0 ) {
+ /* Are IRC operators allowed to use MODE in channels they aren't Op in? */
+ Conf_OperCanMode = Check_ArgIsTrue( Arg );
+ return;
+ }
+ if( strcasecmp( Var, "OperServerMode" ) == 0 ) {
+ /* Mask IRC operator as if coming from the server? (ircd-irc2 compat hack) */
+ Conf_OperServerMode = Check_ArgIsTrue( Arg );
+ return;
+ }
+ if(strcasecmp(Var, "AllowRemoteOper") == 0) {
+ /* Are remote IRC operators allowed to control this server? */
+ Conf_AllowRemoteOper = Check_ArgIsTrue(Arg);
+ return;
+ }
+ if( strcasecmp( Var, "MaxConnections" ) == 0 ) {
+ /* Maximum number of connections. 0 -> "no limit". */
+ Conf_MaxConnections = atol( Arg );
+ if (!Conf_MaxConnections && strcmp(Arg, "0"))
+ Config_Error_NaN(Line, Var);
+ return;
+ }
+ if( strcasecmp( Var, "MaxConnectionsIP" ) == 0 ) {
+ /* Maximum number of simultaneous connections from one IP. 0 -> "no limit" */
+ Conf_MaxConnectionsIP = atoi( Arg );
+ if (!Conf_MaxConnectionsIP && strcmp(Arg, "0"))
+ Config_Error_NaN(Line, Var);
+ return;
+ }
+ if( strcasecmp( Var, "MaxJoins" ) == 0 ) {
+ /* Maximum number of channels a user can join. 0 -> "no limit". */
+ Conf_MaxJoins = atoi( Arg );
+ if (!Conf_MaxJoins && strcmp(Arg, "0"))
+ Config_Error_NaN(Line, Var);
+ return;
+ }
+ if( strcasecmp( Var, "MaxNickLength" ) == 0 ) {
+ /* Maximum length of a nick name; must be same on all servers
+ * within the IRC network! */
+ Conf_MaxNickLength = Handle_MaxNickLength(Line, Arg);
+ return;
+ }
+ if(strcasecmp(Var, "NoticeAuth") == 0) {
+ /* send NOTICE AUTH messages to clients on connect */
+ Conf_NoticeAuth = Check_ArgIsTrue(Arg);
+ return;
+ }
+
+ if( strcasecmp( Var, "Listen" ) == 0 ) {
+ /* IP-Address to bind sockets */
+ if (Conf_ListenAddress) {
+ Config_Error(LOG_ERR, "Multiple Listen= options, ignoring: %s", Arg);
+ return;
+ }
+ Conf_ListenAddress = strdup_warn(Arg);
+ /*
+ * if allocation fails, we're in trouble:
+ * we cannot ignore the error -- otherwise ngircd
+ * would listen on all interfaces.
+ */
+ if (!Conf_ListenAddress) {
+ Config_Error(LOG_ALERT, "%s exiting due to fatal errors!", PACKAGE_NAME);
+ exit(1);
+ }
+ return;
+ }
+
+#ifdef SSL_SUPPORT
+ if( strcasecmp( Var, "SSLPorts" ) == 0 ) {
+ ports_parse(&Conf_SSLOptions.ListenPorts, Line, Arg);
+ return;
+ }
+
+ if( strcasecmp( Var, "SSLKeyFile" ) == 0 ) {
+ assert(Conf_SSLOptions.KeyFile == NULL );
+ Conf_SSLOptions.KeyFile = strdup_warn(Arg);