SourceRootInfo::SourceRootInfo(const char *host) : m_sandboxCond(RuntimeOption::SandboxMode ? SandboxOn : SandboxOff) { s_path.destroy(); s_phproot.destroy(); if (!sandboxOn()) return; Variant matches; Variant r = preg_match(String(RuntimeOption::SandboxPattern.c_str(), RuntimeOption::SandboxPattern.size(), AttachLiteral), host, matches); if (!r.same(1)) { m_sandboxCond = SandboxOff; return; } if (RuntimeOption::SandboxFromCommonRoot) { String sandboxName = matches.rvalAt(1).toString(); createFromCommonRoot(sandboxName); } else { Array pair = StringUtil::Explode(matches.rvalAt(1), "-", 2); m_user = pair.rvalAt(0).toString(); bool defaultSb = pair.size() == 1; if (defaultSb) { m_sandbox = "default"; } else { m_sandbox = pair.rvalAt(1).toString(); } createFromUserConfig(); } *s_path.getCheck() = m_path.c_str(); }
SourceRootInfo::SourceRootInfo(Transport* transport) : m_sandboxCond(RuntimeOption::SandboxMode ? SandboxCondition::On : SandboxCondition::Off) { s_path.destroy(); s_phproot.destroy(); auto documentRoot = transport->getDocumentRoot(); if (!documentRoot.empty()) { m_user = s___builtin; m_sandbox = s_default; // The transport take precedence over the config file m_path = documentRoot; *s_path.getCheck() = documentRoot; return; } if (!sandboxOn()) return; auto host = transport->getHeader("Host"); Variant matches; Variant r = preg_match(String(RuntimeOption::SandboxPattern.c_str(), RuntimeOption::SandboxPattern.size(), CopyString), host, &matches); if (!same(r, 1)) { m_sandboxCond = SandboxCondition::Off; return; } if (RuntimeOption::SandboxFromCommonRoot) { auto sandboxName = tvCastToString(matches.toArray().rvalAt(1).tv()); createFromCommonRoot(sandboxName); } else { Array pair = StringUtil::Explode( tvCastToString(matches.toArray().rvalAt(1).tv()), "-", 2 ).toArray(); m_user = tvCastToString(pair.rvalAt(0).tv()); bool defaultSb = pair.size() == 1; if (defaultSb) { m_sandbox = s_default; } else { m_sandbox = tvCastToString(pair.rvalAt(1).tv()); } createFromUserConfig(); } *s_path.getCheck() = m_path.c_str(); }