* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd: (C) 2002-2008 InspIRCd Development Team
- * See: http://www.inspircd.org/wiki/index.php/Credits
+ * InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
*
* This program is free but copyrighted software; see
* the file COPYING for details.
/* handy defines */
/** Determines if a channel op is exempt from given mode m,
- * in config of server instance s.
+ * in config of server instance s.
*/
#define CHANOPS_EXEMPT(s, m) (s->Config->ExemptChanOps[(unsigned char)m])
DT_IPADDRESS = 6, /* IP address (v4, v6) */
DT_CHANNEL = 7, /* Channel name */
DT_ALLOW_WILD = 64, /* Allow wildcards/CIDR in DT_IPADDRESS */
- DT_ALLOW_NEWLINE = 128, /* New line characters allowed in DT_CHARPTR */
- DT_BOOTONLY = 256 /* Can only be set on startup, not on rehash */
+ DT_ALLOW_NEWLINE = 128 /* New line characters allowed in DT_CHARPTR */
};
/** The maximum number of values in a core configuration tag. Can be increased if needed.
/** A set of oper types
*/
-typedef std::map<irc::string,char*> opertype_t;
+typedef std::map<irc::string,std::string> opertype_t;
/** Holds an oper class.
*/
* configutation, appending errors to errorstream
* and setting error if an error has occured.
*/
- bool ParseLine(ConfigDataHash &target, const std::string &filename, std::string &line, long &linenumber, std::ostringstream &errorstream);
+ bool ParseLine(const std::string &filename, std::string &line, long &linenumber);
/** Check that there is only one of each configuration item
*/
- bool CheckOnce(const char* tag, ConfigDataHash &newconf);
+ bool CheckOnce(const char* tag);
public:
/** Process an include executable directive
*/
- bool DoPipe(ConfigDataHash &target, const std::string &file, std::ostringstream &errorstream);
+ bool DoPipe(const std::string &file);
/** Process an include file directive
*/
- bool DoInclude(ConfigDataHash &target, const std::string &file, std::ostringstream &errorstream);
-
- /** User that is currently performing a rehash, needed because the
- * rehash code is now threaded and needs to know who to give errors and feedback to.
- */
- std::string RehashUserUID;
-
- /** Rehash parameter, as above
- */
- std::string RehashParameter;
+ bool DoInclude(const std::string &file);
/** Error stream, contains error output from any failed configuration parsing.
*/
- std::ostringstream errstr;
+ std::stringstream errstr;
- /** Holds the new configuration when a rehash occurs so we dont overwrite the existing
- * working config with a broken one without checking it first and swapping pointers.
- */
- ConfigDataHash newconfig;
+ /** True if this configuration is valid enough to run with */
+ bool valid;
/** Set of included files. Do we use this any more?
*/
/** Not used any more as it is named, can probably be removed or renamed.
*/
int DoDownloads();
-
+
/** This holds all the information in the config file,
* it's indexed by tag name to a vector of key/values.
*/
*/
int WhoWasMaxKeep;
+ /** Both for set(g|u)id.
+ */
+ char SetUser[MAXBUF];
+ char SetGroup[MAXBUF];
+
/** Holds the server name of the local server
* as defined by the administrator.
*/
/** Notice to give to users when they are Xlined
*/
char MoronBanner[MAXBUF];
-
+
/* Holds the network name the local server
* belongs to. This is an arbitary field defined
* by the administrator.
* foreground.
*/
bool nofork;
-
+
/** If this value if true then all log
* messages will be output, regardless of
* the level given in the config file.
* option.
*/
bool forcedebug;
-
+
/** If this is true then log output will be
* written to the logfile. This is the default.
* If you put -nolog on the commandline then
*/
bool writelog;
+ /** If set to true, then all opers on this server are
+ * shown with a generic 'is an IRC operator' line rather
+ * than the oper type. Oper types are still used internally.
+ */
+ bool GenericOper;
+
+ /** If this value is true, banned users (+b, not extbans) will not be able to change nick
+ * if banned on any channel, nor to message them.
+ */
+ bool RestrictBannedUsers;
+
/** If this value is true, halfops have been
* enabled in the configuration file.
*/
*/
ClassVector Classes;
- /** A list of the classes for listening ports
- */
- std::vector<ListenSocketBase *> ports;
-
/** The 005 tokens of this server (ISUPPORT)
* populated/repopulated upon loading or unloading
* modules.
* only to operators.
*/
char UserStats[MAXBUF];
-
+
/** The path and filename of the ircd.log file
*/
std::string logpath;
* and initialize this class. All other methods
* should be used only by the core.
*/
- void Read(bool bail, const std::string &useruid);
+ void Read();
+
+ /** Apply configuration changes from the old configuration.
+ */
+ void Apply(ServerConfig* old, const std::string &useruid);
/** Read a file into a file_cache object
*/
bool StartsWithWindowsDriveLetter(const std::string &path);
/** Report a configuration error given in errormessage.
- * @param bail If this is set to true, the error is sent to the console, and the program exits
- * @param useruid If this is set to a non-empty value which is a valid UID, and bail is false,
- * the errors are spooled to this user as SNOTICEs.
- * If the parameter is not a valid UID, the messages are spooled to all opers.
*/
- void ReportConfigError(const std::string &errormessage, bool bail, const std::string &useruid);
+ void ReportConfigError(const std::string &errormessage);
/** Load 'filename' into 'target', with the new config parser everything is parsed into
* tag/key/value at load-time rather than at read-value time.
*/
- bool LoadConf(ConfigDataHash &target, FILE* &conf, const char* filename, std::ostringstream &errorstream);
+ bool LoadConf(FILE* &conf, const char* filename);
/** Load 'filename' into 'target', with the new config parser everything is parsed into
* tag/key/value at load-time rather than at read-value time.
*/
- bool LoadConf(ConfigDataHash &target, FILE* &conf, const std::string &filename, std::ostringstream &errorstream);
-
+ bool LoadConf(FILE* &conf, const std::string &filename);
+
/** Writes 'length' chars into 'result' as a string
*/
- bool ConfValue(ConfigDataHash &target, const char* tag, const char* var, int index, char* result, int length, bool allow_linefeeds = false);
+ bool ConfValue(const char* tag, const char* var, int index, char* result, int length, bool allow_linefeeds = false);
/** Writes 'length' chars into 'result' as a string
*/
- bool ConfValue(ConfigDataHash &target, const char* tag, const char* var, const char* default_value, int index, char* result, int length, bool allow_linefeeds = false);
+ bool ConfValue(const char* tag, const char* var, const char* default_value, int index, char* result, int length, bool allow_linefeeds = false);
/** Writes 'length' chars into 'result' as a string
*/
- bool ConfValue(ConfigDataHash &target, const std::string &tag, const std::string &var, int index, std::string &result, bool allow_linefeeds = false);
+ bool ConfValue(const std::string &tag, const std::string &var, int index, std::string &result, bool allow_linefeeds = false);
/** Writes 'length' chars into 'result' as a string
*/
- bool ConfValue(ConfigDataHash &target, const std::string &tag, const std::string &var, const std::string &default_value, int index, std::string &result, bool allow_linefeeds = false);
-
+ bool ConfValue(const std::string &tag, const std::string &var, const std::string &default_value, int index, std::string &result, bool allow_linefeeds = false);
+
/** Tries to convert the value to an integer and write it to 'result'
*/
- bool ConfValueInteger(ConfigDataHash &target, const char* tag, const char* var, int index, int &result);
+ bool ConfValueInteger(const char* tag, const char* var, int index, int &result);
/** Tries to convert the value to an integer and write it to 'result'
*/
- bool ConfValueInteger(ConfigDataHash &target, const char* tag, const char* var, const char* default_value, int index, int &result);
+ bool ConfValueInteger(const char* tag, const char* var, const char* default_value, int index, int &result);
/** Tries to convert the value to an integer and write it to 'result'
*/
- bool ConfValueInteger(ConfigDataHash &target, const std::string &tag, const std::string &var, int index, int &result);
+ bool ConfValueInteger(const std::string &tag, const std::string &var, int index, int &result);
/** Tries to convert the value to an integer and write it to 'result'
*/
- bool ConfValueInteger(ConfigDataHash &target, const std::string &tag, const std::string &var, const std::string &default_value, int index, int &result);
-
+ bool ConfValueInteger(const std::string &tag, const std::string &var, const std::string &default_value, int index, int &result);
+
/** Returns true if the value exists and has a true value, false otherwise
*/
- bool ConfValueBool(ConfigDataHash &target, const char* tag, const char* var, int index);
+ bool ConfValueBool(const char* tag, const char* var, int index);
/** Returns true if the value exists and has a true value, false otherwise
*/
- bool ConfValueBool(ConfigDataHash &target, const char* tag, const char* var, const char* default_value, int index);
+ bool ConfValueBool(const char* tag, const char* var, const char* default_value, int index);
/** Returns true if the value exists and has a true value, false otherwise
*/
- bool ConfValueBool(ConfigDataHash &target, const std::string &tag, const std::string &var, int index);
+ bool ConfValueBool(const std::string &tag, const std::string &var, int index);
/** Returns true if the value exists and has a true value, false otherwise
*/
- bool ConfValueBool(ConfigDataHash &target, const std::string &tag, const std::string &var, const std::string &default_value, int index);
-
+ bool ConfValueBool(const std::string &tag, const std::string &var, const std::string &default_value, int index);
+
/** Returns the number of occurences of tag in the config file
*/
- int ConfValueEnum(ConfigDataHash &target, const char* tag);
+ int ConfValueEnum(const char* tag);
/** Returns the number of occurences of tag in the config file
*/
- int ConfValueEnum(ConfigDataHash &target, const std::string &tag);
-
+ int ConfValueEnum(const std::string &tag);
+
/** Returns the numbers of vars inside the index'th 'tag in the config file
*/
- int ConfVarEnum(ConfigDataHash &target, const char* tag, int index);
+ int ConfVarEnum(const char* tag, int index);
/** Returns the numbers of vars inside the index'th 'tag in the config file
*/
- int ConfVarEnum(ConfigDataHash &target, const std::string &tag, int index);
+ int ConfVarEnum(const std::string &tag, int index);
/** Validates a hostname value, throwing ConfigException if it is not valid
*/
*/
std::string GetFullProgDir();
- /** Returns true if a directory is valid (within the modules directory).
- * @param dirandfile The directory and filename to check
- * @return True if the directory is valid
- */
- static bool DirValid(const char* dirandfile);
-
/** Clean a filename, stripping the directories (and drives) from string.
* @param name Directory to tidy
* @return The cleaned filename
*/
bool InitClasses(ServerConfig* conf, const char* tag);
-/** Initialize an oper type
+/** Initialize an oper type
*/
bool DoType(ServerConfig* conf, const char* tag, char** entries, ValueList &values, int* types);
/** Initialize x line
*/
bool InitXLine(ServerConfig* conf, const char* tag);
-
+
/** Add a config-defined zline
*/
bool DoZLine(ServerConfig* conf, const char* tag, char** entries, ValueList &values, int* types);
*/
bool DoELine(ServerConfig* conf, const char* tag, char** entries, ValueList &values, int* types);
-
-
-
#endif
-