示例#1
0
QueryData genShellHistory(QueryContext& context) {
  QueryData results;

  QueryData users;
  if (!getuid()) {
    // No uid is available, attempt to select from all users.
    users = SQL::selectAllFrom("users");
  } else {
    // A uid is available, select only the home directory for this user.
    struct passwd* pwd = getpwuid(getuid());
    if (pwd != nullptr && pwd->pw_name != nullptr) {
      users = SQL::selectAllFrom(
          "users", "username", EQUALS, std::string(pwd->pw_name));
    }
  }

  // Iterate over each user
  for (const auto& row : users) {
    if (row.count("username") > 0 && row.count("directory") > 0) {
      genShellHistoryForUser(row.at("username"), row.at("directory"), results);
    }
  }

  return results;
}
示例#2
0
QueryData genShellHistory(QueryContext& context) {
  QueryData results;

  // Select only the home directory for this user.
  QueryData users;
  if (!context.constraints["username"].exists(EQUALS)) {
    users =
        SQL::selectAllFrom("users", "uid", EQUALS, std::to_string(getuid()));
  } else {
    auto usernames = context.constraints["username"].getAll(EQUALS);
    for (const auto& username : usernames) {
      // Use a predicated select all for each user.
      auto user = SQL::selectAllFrom("users", "username", EQUALS, username);
      users.insert(users.end(), user.begin(), user.end());
    }
  }

  // Iterate over each user
  for (const auto& row : users) {
    if (row.count("username") > 0 && row.count("directory") > 0) {
      genShellHistoryForUser(row.at("username"), row.at("directory"), results);
    }
  }

  return results;
}