Write the config file on restart and shutdown

ZNC now writes its config file just before it shuts down. If this fails it
aborts the shutdown. One can then either fix whatever went wrong or force a
shutdown.

This also cleans the code up a little by unifying shutdown and restart.

Patch by flakes, thanks!


git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1641 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
psychon
2009-10-04 17:15:05 +00:00
parent 4d35bd482e
commit 24978bd0eb

View File

@@ -204,24 +204,27 @@ void CClient::UserCommand(CString& sLine) {
PutStatus("Cleared MOTD");
} else if (m_pUser->IsAdmin() && sCommand.Equals("BROADCAST")) {
CZNC::Get().Broadcast(sLine.Token(1, true));
} else if (m_pUser->IsAdmin() && sCommand.Equals("SHUTDOWN")) {
} else if (m_pUser->IsAdmin() && (sCommand.Equals("SHUTDOWN") || sCommand.Equals("RESTART"))) {
bool bRestart = sCommand.Equals("RESTART");
CString sMessage = sLine.Token(1, true);
bool bForce = false;
if (sMessage.empty()) {
sMessage = "ZNC is being shutdown NOW!!";
if (sMessage.Token(0).Equals("FORCE")) {
bForce = true;
sMessage = sMessage.Token(1, true);
}
CZNC::Get().Broadcast(sMessage);
throw CException(CException::EX_Shutdown);
} else if (m_pUser->IsAdmin() && sCommand.Equals("RESTART")) {
CString sMessage = sLine.Token(1, true);
if (sMessage.empty()) {
sMessage = "ZNC is being restarted NOW!!";
sMessage = (bRestart ? "ZNC is being restarted NOW!" : "ZNC is being shut down NOW!");
}
CZNC::Get().Broadcast(sMessage);
throw CException(CException::EX_Restart);
if(!CZNC::Get().WriteConfig() && !bForce) {
PutStatus("ERROR: Writing config file to disk failed! Aborting. Use " +
sCommand.AsUpper() + " FORCE to ignore.");
} else {
CZNC::Get().Broadcast(sMessage);
throw CException(bRestart ? CException::EX_Restart : CException::EX_Shutdown);
}
} else if (sCommand.Equals("JUMP") || sCommand.Equals("CONNECT")) {
if (!m_pUser->HasServers()) {
PutStatus("You don't have any servers added.");