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; }
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; }
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; }
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; }