mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-07-07 04:13:13 +02:00
Fixed a problem with config loading and module errors
This commit is contained in:
@@ -2842,3 +2842,4 @@ seen. gmtime warning still there
|
||||
what you can do about it in a (hopefully) simple and understandable language ;).
|
||||
- Fixed a snomask bug reported by Cat / HERZ (#0001531).
|
||||
- Started using the umode->allowed stuff a bit ourselves, just to be sure.
|
||||
- Fixed a problem with module reloading (#0001533) reported by penna.
|
||||
|
||||
+9
-4
@@ -6353,6 +6353,7 @@ int _conf_loadmodule(ConfigFile *conf, ConfigEntry *ce)
|
||||
config_status("%s:%i: loadmodule %s: failed to load: %s",
|
||||
ce->ce_fileptr->cf_filename, ce->ce_varlinenum,
|
||||
files.gl_pathv[i], ret);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
globfree(&files);
|
||||
@@ -6366,15 +6367,19 @@ int _conf_loadmodule(ConfigFile *conf, ConfigEntry *ce)
|
||||
return -1;
|
||||
}
|
||||
if ((ret = Module_Create(FindData.cFileName))) {
|
||||
config_status("%s:%i: loadmodule %s: failed to load: %s",
|
||||
ce->ce_fileptr->cf_filename, ce->ce_varlinenum,
|
||||
FindData.cFileName, ret);
|
||||
config_status("%s:%i: loadmodule %s: failed to load: %s",
|
||||
ce->ce_fileptr->cf_filename, ce->ce_varlinenum,
|
||||
FindData.cFileName, ret);
|
||||
return -1;
|
||||
}
|
||||
while (FindNextFile(hFind, &FindData) != 0) {
|
||||
if (((ret = Module_Create(FindData.cFileName))))
|
||||
if ((ret = Module_Create(FindData.cFileName)))
|
||||
{
|
||||
config_status("%s:%i: loadmodule %s: failed to load: %s",
|
||||
ce->ce_fileptr->cf_filename, ce->ce_varlinenum,
|
||||
FindData.cFileName, ret);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
FindClose(hFind);
|
||||
#else
|
||||
|
||||
+128
-54
@@ -3035,73 +3035,147 @@ CMD_FUNC(m_rehash)
|
||||
*/
|
||||
CMD_FUNC(m_restart)
|
||||
{
|
||||
int x;
|
||||
if (MyClient(sptr) && !OPCanRestart(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
if (!MyClient(sptr) && !IsNetAdmin(sptr)
|
||||
&& !IsULine(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
if (parc > 3)
|
||||
{
|
||||
/* Remote restart. */
|
||||
if (MyClient(sptr) && !IsNetAdmin(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
char *reason = NULL;
|
||||
/* Check permissions */
|
||||
if (MyClient(sptr) && !OPCanRestart(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
if (!MyClient(sptr) && !IsNetAdmin(sptr)
|
||||
&& !IsULine(sptr))
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((x =
|
||||
hunt_server_token(cptr, sptr, MSG_RESTART, TOK_RESTART, "%s %s :%s", 2, parc,
|
||||
parv)) != HUNTED_ISME)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (conf_drpass)
|
||||
/* Syntax: /restart */
|
||||
if (parc == 1)
|
||||
{
|
||||
if (parc < 2)
|
||||
if (conf_drpass)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name,
|
||||
parv[0], "RESTART");
|
||||
return 0;
|
||||
parv[0], "RESTART");
|
||||
return 0;
|
||||
}
|
||||
x = Auth_Check(cptr, conf_drpass->restartauth, parv[1]);
|
||||
if (x == -1)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_PASSWDMISMATCH), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
if (x < 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
/* Hack to make the code after this if { } easier: we assign the comment to the
|
||||
* first param, as if we had not had an X:line. We do not need the password
|
||||
* now anyways. Accordingly we decrement parc ;) -- NikB
|
||||
*/
|
||||
parv[1] = parv[2];
|
||||
parc--;
|
||||
}
|
||||
else if (parc == 2)
|
||||
{
|
||||
int ret;
|
||||
ret = hunt_server_token_quiet(cptr, sptr, MSG_RESTART, TOK_RESTART,
|
||||
"%s", 1, parc, parv);
|
||||
/* Syntax: /rehash <server> */
|
||||
if (ret == HUNTED_PASS)
|
||||
return 0;
|
||||
else if (ret == HUNTED_ISME)
|
||||
{
|
||||
if (conf_drpass)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name,
|
||||
parv[0], "RESTART");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
/* Syntax: /restart <pass> */
|
||||
else if (conf_drpass)
|
||||
{
|
||||
int ret;
|
||||
ret = Auth_Check(cptr, conf_drpass->restartauth, parv[1]);
|
||||
if (ret == -1)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_PASSWDMISMATCH), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
if (ret < 1)
|
||||
return 0;
|
||||
}
|
||||
/* Syntax: /rehash <reason> */
|
||||
else
|
||||
reason = parv[1];
|
||||
}
|
||||
else if (parc == 3)
|
||||
{
|
||||
int ret;
|
||||
/* Syntax: /restart <server> <pass> & /restart <server> <reason> */
|
||||
ret = hunt_server_token_quiet(cptr, sptr, MSG_RESTART, TOK_RESTART,
|
||||
"%s :%s", 1, parc, parv);
|
||||
if (ret == HUNTED_PASS)
|
||||
return 0;
|
||||
else if (ret == HUNTED_ISME)
|
||||
{
|
||||
if (conf_drpass)
|
||||
{
|
||||
int ret;
|
||||
ret = Auth_Check(cptr, conf_drpass->restartauth, parv[2]);
|
||||
if (ret == -1)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_PASSWDMISMATCH), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
if (ret < 1)
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
reason = parv[2];
|
||||
}
|
||||
/* Syntax: /restart <pass> <reason> */
|
||||
else
|
||||
{
|
||||
if (conf_drpass)
|
||||
{
|
||||
int ret;
|
||||
ret = Auth_Check(cptr, conf_drpass->restartauth, parv[1]);
|
||||
if (ret == -1)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_PASSWDMISMATCH), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
if (ret < 1)
|
||||
return 0;
|
||||
}
|
||||
reason = parv[2];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hunt_server_token(cptr, sptr, MSG_RESTART, TOK_RESTART, "%s %s :%s", 1,
|
||||
parc, parv) != HUNTED_ISME)
|
||||
return 0;
|
||||
else
|
||||
{
|
||||
if (conf_drpass)
|
||||
{
|
||||
int ret;
|
||||
ret = Auth_Check(cptr, conf_drpass->restartauth, parv[2]);
|
||||
if (ret == -1)
|
||||
{
|
||||
sendto_one(sptr, err_str(ERR_PASSWDMISMATCH), me.name,
|
||||
parv[0]);
|
||||
return 0;
|
||||
}
|
||||
if (ret < 1)
|
||||
return 0;
|
||||
}
|
||||
reason = parv[3];
|
||||
}
|
||||
}
|
||||
|
||||
if (cptr != sptr)
|
||||
{
|
||||
sendto_serv_butone(&me,
|
||||
":%s GLOBOPS :%s is remotely restarting server (%s)",
|
||||
me.name, sptr->name, parv[3]);
|
||||
me.name, sptr->name, reason ? reason : "No reason");
|
||||
sendto_ops("%s is remotely restarting IRCd (%s)", parv[0],
|
||||
parv[3]);
|
||||
reason ? reason : "No reason");
|
||||
|
||||
}
|
||||
|
||||
sendto_ops("Server is Restarting by request of %s", parv[0]);
|
||||
server_reboot((!MyClient(sptr) ? (parc > 2 ? parv[3] : "No reason")
|
||||
: (parc > 1 ? parv[2] : "No reason")));
|
||||
else
|
||||
sendto_ops("Server is Restarting by request of %s", parv[0]);
|
||||
sendto_ops("REASON: %s", reason ? reason : "No reason");
|
||||
// server_reboot(reason ? reason : "No reason");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user