diff --git a/include/znc/znc.h b/include/znc/znc.h index ecb2b41a..a791a648 100644 --- a/include/znc/znc.h +++ b/include/znc/znc.h @@ -251,6 +251,7 @@ class CZNC : private CCoreTranslationMixin { void DisableConfigTimer(); static void DumpConfig(const CConfig* Config); + static CString UnusualRoot(); private: static CString FormatBindError(); diff --git a/src/Modules.cpp b/src/Modules.cpp index 5aec7805..6f9c34ae 100644 --- a/src/Modules.cpp +++ b/src/Modules.cpp @@ -1899,9 +1899,10 @@ CModules::ModDirList CModules::GetModDirs() { sDir = CZNC::Get().GetModPath() + "/"; ret.push(std::make_pair(sDir, sDir)); + CString sUnusualRoot = CZNC::UnusualRoot(); // and (/lib/znc) - ret.push(std::make_pair(_MODDIR_ + CString("/"), - _DATADIR_ + CString("/modules/"))); + ret.push(std::make_pair(sUnusualRoot + _MODDIR_ + CString("/"), + sUnusualRoot + _DATADIR_ + CString("/modules/"))); return ret; } diff --git a/src/WebModules.cpp b/src/WebModules.cpp index 19ece50a..8ea4d9fa 100644 --- a/src/WebModules.cpp +++ b/src/WebModules.cpp @@ -563,7 +563,7 @@ CString CWebSock::GetSkinPath(const CString& sSkinName) { sRet = CZNC::Get().GetCurPath() + "/webskins/" + sSkinName; if (!CFile::IsDir(sRet)) { - sRet = CString(_SKINDIR_) + "/" + sSkinName; + sRet = CZNC::UnusualRoot() + CString(_SKINDIR_) + "/" + sSkinName; } } diff --git a/src/znc.cpp b/src/znc.cpp index 4e7216ee..dd901497 100644 --- a/src/znc.cpp +++ b/src/znc.cpp @@ -2130,3 +2130,8 @@ void CZNC::DisableConfigTimer() { m_pConfigTimer = nullptr; } } + +CString CZNC::UnusualRoot() { + char* szUnusualRoot = getenv("ZNC_UNUSUAL_ROOT"); + return szUnusualRoot ? szUnusualRoot : ""; +}