Example #1
0
bool isGateKeeperDevIdEnabled() {
  sqlite3* db = nullptr;
  auto rc = sqlite3_open_v2(
      kPolicyDb.c_str(),
      &db,
      (SQLITE_OPEN_READONLY | SQLITE_OPEN_PRIVATECACHE | SQLITE_OPEN_NOMUTEX),
      nullptr);
  if (rc != SQLITE_OK || db == nullptr) {
    VLOG(1) << "Cannot open Gatekeeper DB: " << rc << " "
            << getStringForSQLiteReturnCode(rc);
    if (db != nullptr) {
      sqlite3_close(db);
    }
    return false;
  }

  std::string query =
      "SELECT disabled FROM authority WHERE label = 'Developer ID'";
  sqlite3_stmt* stmt = nullptr;
  rc = sqlite3_prepare_v2(db, query.c_str(), -1, &stmt, nullptr);

  while ((sqlite3_step(stmt)) == SQLITE_ROW) {
    int value = sqlite3_column_int(stmt, 0);
    if (value == 1) {
      // Clean up.
      sqlite3_finalize(stmt);
      sqlite3_close(db);
      // return false if any rows say "disabled"
      return false;
    }
  }
  sqlite3_finalize(stmt);
  sqlite3_close(db);
  return true;
}
Example #2
0
QueryData genPkgPackages(QueryContext& context) {
  QueryData results;

  sqlite3* db = nullptr;

  auto rc = sqlite3_open_v2(
      kPkgDb.c_str(),
      &db,
      (SQLITE_OPEN_READONLY | SQLITE_OPEN_PRIVATECACHE | SQLITE_OPEN_NOMUTEX),
      nullptr);
  if (rc != SQLITE_OK || db == nullptr) {
    VLOG(1) << "Cannot open pkgdb: " << rc << " "
            << getStringForSQLiteReturnCode(rc);
    if (db != nullptr) {
      free(db);
    }
  }

  std::string query = "SELECT name, version, flatsize, arch FROM packages;";
  sqlite3_stmt* stmt = nullptr;
  rc = sqlite3_prepare_v2(db, query.c_str(), -1, &stmt, nullptr);
  while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
    Row r;

    genPkgRow(stmt, r);

    results.push_back(r);
  }

  // Clean up.
  sqlite3_finalize(stmt);
  free(db);

  return results;
}
Example #3
0
QueryData genQuicklookCache(QueryContext& context) {
  QueryData results;

  // There may be several quick look caches.
  // Apply a GLOB search since the folder is randomized.
  std::vector<std::string> databases;
  if (!resolveFilePattern(kQuicklookPattern, databases)) {
    return results;
  }

  for (const auto& index : databases) {
    sqlite3* db = nullptr;
    auto rc = sqlite3_open_v2(
        index.c_str(), &db,
        (SQLITE_OPEN_READONLY | SQLITE_OPEN_PRIVATECACHE | SQLITE_OPEN_NOMUTEX),
        nullptr);
    if (rc != SQLITE_OK || db == nullptr) {
      VLOG(1) << "Cannot open " << index << " read only: "
              << rc << " " << getStringForSQLiteReturnCode(rc);
      if (db != nullptr) {
        sqlite3_close(db);
      }
      continue;
    }

    // QueryData file_results;
    std::string query =
        "SELECT f.*, last_hit_date, hit_count, icon_mode FROM (SELECT rowid, * "
        "FROM files) f, (SELECT *, max(last_hit_date) AS last_hit_date FROM "
        "thumbnails GROUP BY file_id) t WHERE t.file_id = rowid;";
    sqlite3_stmt* stmt = nullptr;
    rc = sqlite3_prepare_v2(db, query.c_str(), -1, &stmt, nullptr);
    while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
      Row r;
      genQuicklookRow(stmt, r);

      // For each row added to the results from this database, add the path to
      // the database, then move into the table's result set.
      r["cache_path"] = index;
      results.push_back(r);
    }

    // Clean up.
    sqlite3_finalize(stmt);
    sqlite3_close(db);
  }

  return results;
}
Example #4
0
QueryData genGateKeeperApprovedApps(QueryContext& context) {
  QueryData results;

  sqlite3* db = nullptr;

  auto rc = sqlite3_open_v2(
      kPolicyDb.c_str(),
      &db,
      (SQLITE_OPEN_READONLY | SQLITE_OPEN_PRIVATECACHE | SQLITE_OPEN_NOMUTEX),
      nullptr);
  if (rc != SQLITE_OK || db == nullptr) {
    VLOG(1) << "Cannot open Gatekeeper DB: " << rc << " "
            << getStringForSQLiteReturnCode(rc);
    if (db != nullptr) {
      sqlite3_close(db);
    }
    return results;
  }

  const std::string query =
      "SELECT remarks as path, requirement, ctime, mtime from authority WHERE "
      "disabled = 0 AND JULIANDAY('now') < expires AND (flags & 1) = 0 AND "
      "label is NULL";
  sqlite3_stmt* stmt = nullptr;
  rc = sqlite3_prepare_v2(db, query.c_str(), -1, &stmt, nullptr);
  while ((sqlite3_step(stmt)) == SQLITE_ROW) {
    Row r;
    genGateKeeperApprovedAppRow(stmt, r);
    results.push_back(r);
  }

  // Clean up.
  sqlite3_finalize(stmt);
  sqlite3_close(db);

  return results;
}