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();
}
Example #2
0
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();
}