]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/conf.c
LINE_LEN -> COMMAND_LEN
[ngircd-alex.git] / src / ngircd / conf.c
index 423221cbbb108262e10de17e37b8e66a82712e2b..e46dcfee43669644091285586fd956b9c9a6c94c 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
  *
  * 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
@@ -54,6 +54,7 @@ static CONF_SERVER New_Server;
 static int New_Server_Idx;
 
 static char Conf_MotdFile[FNAME_LEN];
+static char Conf_HelpFile[FNAME_LEN];
 
 static void Set_Defaults PARAMS(( bool InitServers ));
 static bool Read_Config PARAMS(( bool TestOnly, bool IsStarting ));
@@ -108,6 +109,28 @@ ConfSSL_Init(void)
        array_free(&Conf_SSLOptions.ListenPorts);
 }
 
+/**
+ * Check if the current configuration uses/requires SSL.
+ *
+ * @returns true if SSL is used and should be initialized.
+ */
+GLOBAL bool
+Conf_SSLInUse(void)
+{
+       int i;
+
+       /* SSL listen ports configured? */
+       if (array_bytes(&Conf_SSLOptions.ListenPorts))
+               return true;
+
+       for (i = 0; i < MAX_SERVERS; i++) {
+               if (Conf_Server[i].port > 0
+                   && Conf_Server[i].SSLConnect)
+                       return true;
+       }
+       return false;
+}
+
 /**
  * Make sure that a configured file is readable.
  *
@@ -316,6 +339,7 @@ Conf_Test( void )
        printf("  AdminInfo1 = %s\n", Conf_ServerAdmin1);
        printf("  AdminInfo2 = %s\n", Conf_ServerAdmin2);
        printf("  AdminEMail = %s\n", Conf_ServerAdminMail);
+       printf("  HelpFile = %s\n", Conf_HelpFile);
        printf("  Info = %s\n", Conf_ServerInfo);
        printf("  Listen = %s\n", Conf_ListenAddress);
        if (Using_MotdFile) {
@@ -346,6 +370,7 @@ Conf_Test( void )
 
        puts("[LIMITS]");
        printf("  ConnectRetry = %d\n", Conf_ConnectRetry);
+       printf("  IdleTimeout = %d\n", Conf_IdleTimeout);
        printf("  MaxConnections = %d\n", Conf_MaxConnections);
        printf("  MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP);
        printf("  MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1);
@@ -701,14 +726,18 @@ Set_Defaults(bool InitServers)
        Conf_ListenAddress = NULL;
        array_free(&Conf_ListenPorts);
        array_free(&Conf_Motd);
+       array_free(&Conf_Helptext);
        strlcpy(Conf_MotdFile, SYSCONFDIR, sizeof(Conf_MotdFile));
        strlcat(Conf_MotdFile, MOTD_FILE, sizeof(Conf_MotdFile));
+       strlcpy(Conf_HelpFile, DOCDIR, sizeof(Conf_HelpFile));
+       strlcat(Conf_HelpFile, HELP_FILE, sizeof(Conf_HelpFile));
        strcpy(Conf_ServerPwd, "");
        strlcpy(Conf_PidFile, PID_FILE, sizeof(Conf_PidFile));
        Conf_UID = Conf_GID = 0;
 
        /* Limits */
        Conf_ConnectRetry = 60;
+       Conf_IdleTimeout = 0;
        Conf_MaxConnections = 0;
        Conf_MaxConnectionsIP = 5;
        Conf_MaxJoins = 10;
@@ -803,8 +832,8 @@ Read_TextFile(const char *Filename, const char *Name, array *Destination)
 
        fp = fopen(Filename, "r");
        if (!fp) {
-               Config_Error(LOG_WARNING, "Can't read %s file \"%s\": %s",
-                                       Name, Filename, strerror(errno));
+               Config_Error(LOG_ERR, "Can't read %s file \"%s\": %s",
+                            Name, Filename, strerror(errno));
                return false;
        }
 
@@ -814,7 +843,7 @@ Read_TextFile(const char *Filename, const char *Name, array *Destination)
 
                /* add text including \0 */
                if (!array_catb(Destination, line, strlen(line) + 1)) {
-                       Log(LOG_WARNING, "Cannot read/add \"%s\", line %d: %s",
+                       Log(LOG_ERR, "Cannot read/add \"%s\", line %d: %s",
                            Filename, line_no, strerror(errno));
                        break;
                }
@@ -1047,6 +1076,12 @@ Read_Config(bool TestOnly, bool IsStarting)
                        Using_MotdFile = true;
        }
 
+       /* Try to read ngIRCd help text file. */
+       (void)Read_TextFile(Conf_HelpFile, "help text", &Conf_Helptext);
+       if (!array_bytes(&Conf_Helptext))
+               Config_Error(LOG_WARNING,
+                   "No help text available, HELP command will be of limited use.");
+
 #ifdef SSL_SUPPORT
        /* Make sure that all SSL-related files are readable */
        CheckFileReadable("CertFile", Conf_SSLOptions.CertFile);
@@ -1208,6 +1243,7 @@ CheckLegacyGlobalOption(int Line, char *Var, char *Arg)
                return "[Options]";
        }
        if (strcasecmp(Var, "ConnectRetry") == 0
+           || strcasecmp(Var, "IdleTimeout") == 0
            || strcasecmp(Var, "MaxConnections") == 0
            || strcasecmp(Var, "MaxConnectionsIP") == 0
            || strcasecmp(Var, "MaxJoins") == 0
@@ -1312,6 +1348,12 @@ Handle_GLOBAL( int Line, char *Var, char *Arg )
                        Config_Error_TooLong(Line, Var);
                return;
        }
+       if (strcasecmp(Var, "HelpFile") == 0) {
+               len = strlcpy(Conf_HelpFile, Arg, sizeof(Conf_HelpFile));
+               if (len >= sizeof(Conf_HelpFile))
+                       Config_Error_TooLong(Line, Var);
+               return;
+       }
        if (strcasecmp(Var, "Listen") == 0) {
                if (Conf_ListenAddress) {
                        Config_Error(LOG_ERR,
@@ -1451,6 +1493,12 @@ Handle_LIMITS(int Line, char *Var, char *Arg)
                }
                return;
        }
+       if (strcasecmp(Var, "IdleTimeout") == 0) {
+               Conf_IdleTimeout = atoi(Arg);
+               if (!Conf_IdleTimeout && strcmp(Arg, "0"))
+                       Config_Error_NaN(Line, Var);
+               return;
+       }
        if (strcasecmp(Var, "MaxConnections") == 0) {
                Conf_MaxConnections = atoi(Arg);
                if (!Conf_MaxConnections && strcmp(Arg, "0"))