-#define DB_LABEL "User::Home"
-#define SET_SMACK_LABEL(x) \
-do { \
- if (smack_setlabel((x), DB_LABEL, SMACK_LABEL_ACCESS)) \
- _LOGE("failed chsmack -a %s %s", DB_LABEL, x); \
- else \
- _LOGD("chsmack -a %s %s", DB_LABEL, x); \
-} while (0)
-
-sqlite3 *pkgmgr_parser_db;
-sqlite3 *pkgmgr_cert_db;
-
-
-#define QUERY_CREATE_TABLE_PACKAGE_INFO "CREATE TABLE IF NOT EXISTS package_info " \
- "(package TEXT PRIMARY KEY NOT NULL, " \
- "package_type TEXT DEFAULT 'tpk', " \
- "package_version TEXT, " \
- "package_api_version TEXT, " \
- "package_tep_name TEXT, " \
- "package_zip_mount_file TEXT, " \
- "install_location TEXT NOT NULL , " \
- "package_size TEXT, " \
- "package_removable TEXT NOT NULL DEFAULT 'true', " \
- "package_preload TEXT NOT NULL DEFAULT 'false', " \
- "package_readonly TEXT NOT NULL DEFAULT 'false', " \
- "package_update TEXT NOT NULL DEFAULT 'false', " \
- "package_appsetting TEXT NOT NULL DEFAULT 'false', " \
- "package_nodisplay TEXT NOT NULL DEFAULT 'false', " \
- "package_system TEXT NOT NULL DEFAULT 'false', " \
- "author_name TEXT, " \
- "author_email TEXT, " \
- "author_href TEXT," \
- "installed_time TEXT, " \
- "installed_storage TEXT, " \
- "storeclient_id TEXT, " \
- "mainapp_id TEXT, " \
- "package_url TEXT, " \
- "root_path TEXT, " \
- "external_path TEXT, " \
- "csc_path TEXT, " \
- "package_support_mode TEXT, " \
- "package_support_disable TEXT NOT NULL DEFAULT 'false', " \
- "package_disable TEXT NOT NULL DEFAULT 'false')"
-
-#define QUERY_CREATE_TABLE_PACKAGE_LOCALIZED_INFO "CREATE TABLE IF NOT EXISTS package_localized_info " \
- "(package TEXT NOT NULL, " \
- "package_locale TEXT NOT NULL DEFAULT 'No Locale', " \
- "package_label TEXT, " \
- "package_icon TEXT, " \
- "package_description TEXT, " \
- "package_license TEXT, " \
- "package_author TEXT, " \
- "PRIMARY KEY(package, package_locale), " \
- "FOREIGN KEY(package) " \
- "REFERENCES package_info(package) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_PRIVILEGE_INFO "CREATE TABLE IF NOT EXISTS package_privilege_info " \
- "(package TEXT NOT NULL, " \
- "privilege TEXT NOT NULL, " \
- "type TEXT NOT NULL, " \
- "PRIMARY KEY(package, privilege, type) " \
- "FOREIGN KEY(package) " \
- "REFERENCES package_info(package) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_INFO "CREATE TABLE IF NOT EXISTS package_app_info " \
- "(app_id TEXT PRIMARY KEY NOT NULL, " \
- "app_component TEXT NOT NULL, " \
- "app_exec TEXT, " \
- "app_nodisplay TEXT NOT NULL DEFAULT 'false', " \
- "app_type TEXT, " \
- "app_onboot TEXT NOT NULL DEFAULT 'false', " \
- "app_multiple TEXT NOT NULL DEFAULT 'false', " \
- "app_autorestart TEXT NOT NULL DEFAULT 'false', " \
- "app_taskmanage TEXT NOT NULL DEFAULT 'false', " \
- "app_hwacceleration TEXT NOT NULL DEFAULT 'use-system-setting', " \
- "app_screenreader TEXT NOT NULL DEFAULT 'use-system-setting', " \
- "app_mainapp TEXT NOT NULL, " \
- "app_recentimage TEXT NOT NULL DEFAULT 'false', " \
- "app_launchcondition TEXT, " \
- "app_indicatordisplay TEXT NOT NULL DEFAULT 'true', " \
- "app_portraitimg TEXT, " \
- "app_landscapeimg TEXT, " \
- "app_guestmodevisibility TEXT NOT NULL DEFAULT 'true', " \
- "app_permissiontype TEXT NOT NULL DEFAULT 'normal', " \
- "app_preload TEXT NOT NULL DEFAULT 'false', " \
- "app_submode TEXT NOT NULL DEFAULT 'false', " \
- "app_submode_mainid TEXT, " \
- "app_installed_storage TEXT NOT NULL, " \
- "app_process_pool TEXT NOT NULL DEFAULT 'false', " \
- "app_launch_mode TEXT NOT NULL DEFAULT 'caller', " \
- "app_ui_gadget TEXT NOT NULL DEFAULT 'false', " \
- "app_support_mode TEXT, " \
- "app_support_disable TEXT NOT NULL DEFAULT 'false', " \
- "app_disable TEXT NOT NULL DEFAULT 'false', " \
- "app_package_type TEXT DEFAULT 'tpk', " \
- "app_package_system TEXT NOT NULL, " \
- "app_removable TEXT NOT NULL DEFAULT 'false', " \
- "app_package_installed_time TEXT, " \
- "app_support_ambient TEXT NOT NULL DEFAULT 'false', " \
- "component_type TEXT, " \
- "package TEXT NOT NULL, " \
- "app_tep_name TEXT, " \
- "app_zip_mount_file TEXT, " \
- "app_background_category INTEGER DEFAULT 0, " \
- "app_root_path TEXT, " \
- "app_api_version TEXT, " \
- "app_effective_appid TEXT, " \
- "app_splash_screen_display TEXT NOT NULL DEFAULT 'true', " \
- "app_external_path TEXT, " \
- "FOREIGN KEY(package) " \
- "REFERENCES package_info(package) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_LOCALIZED_INFO "CREATE TABLE IF NOT EXISTS package_app_localized_info " \
- "(app_id TEXT NOT NULL, " \
- "app_locale TEXT NOT NULL DEFAULT 'No Locale', " \
- "app_label TEXT, " \
- "app_icon TEXT, " \
- "PRIMARY KEY(app_id,app_locale) " \
- "FOREIGN KEY(app_id) " \
- "REFERENCES package_app_info(app_id) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_ICON_SECTION_INFO "CREATE TABLE IF NOT EXISTS package_app_icon_section_info " \
- "(app_id TEXT NOT NULL, " \
- "app_icon TEXT, " \
- "app_icon_section TEXT NOT NULL, " \
- "app_icon_resolution TEXT NOT NULL, " \
- "PRIMARY KEY(app_id,app_icon_section,app_icon_resolution) " \
- "FOREIGN KEY(app_id) " \
- "REFERENCES package_app_info(app_id) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_IMAGE_INFO "CREATE TABLE IF NOT EXISTS package_app_image_info " \
- "(app_id TEXT NOT NULL, " \
- "app_locale TEXT DEFAULT 'No Locale', " \
- "app_image_section TEXT NOT NULL, " \
- "app_image TEXT, " \
- "PRIMARY KEY(app_id,app_image_section) " \
- "FOREIGN KEY(app_id) " \
- "REFERENCES package_app_info(app_id) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_APP_CONTROL "CREATE TABLE IF NOT EXISTS package_app_app_control " \
- "(app_id TEXT NOT NULL, " \
- "app_control TEXT NOT NULL, " \
- "PRIMARY KEY(app_id,app_control) " \
- "FOREIGN KEY(app_id) " \
- "REFERENCES package_app_info(app_id) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_APP_CATEGORY "CREATE TABLE IF NOT EXISTS package_app_app_category " \
- "(app_id TEXT NOT NULL, " \
- "category TEXT NOT NULL, " \
- "PRIMARY KEY(app_id,category) " \
- "FOREIGN KEY(app_id) " \
- "REFERENCES package_app_info(app_id) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_APP_METADATA "CREATE TABLE IF NOT EXISTS package_app_app_metadata " \
- "(app_id TEXT NOT NULL, " \
- "md_key TEXT NOT NULL, " \
- "md_value TEXT, " \
- "PRIMARY KEY(app_id, md_key, md_value) " \
- "FOREIGN KEY(app_id) " \
- "REFERENCES package_app_info(app_id) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_APP_PERMISSION "CREATE TABLE IF NOT EXISTS package_app_app_permission " \
- "(app_id TEXT NOT NULL, " \
- "pm_type TEXT NOT NULL, " \
- "pm_value TEXT NOT NULL, " \
- "PRIMARY KEY(app_id, pm_type, pm_value) " \
- "FOREIGN KEY(app_id) " \
- "REFERENCES package_app_info(app_id) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_SHARE_ALLOWED "CREATE TABLE IF NOT EXISTS package_app_share_allowed " \
- "(app_id TEXT NOT NULL, " \
- "data_share_path TEXT NOT NULL, " \
- "data_share_allowed TEXT NOT NULL, " \
- "PRIMARY KEY(app_id,data_share_path,data_share_allowed) " \
- "FOREIGN KEY(app_id) " \
- "REFERENCES package_app_info(app_id) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_SHARE_REQUEST "CREATE TABLE IF NOT EXISTS package_app_share_request " \
- "(app_id TEXT NOT NULL, " \
- "data_share_request TEXT NOT NULL, " \
- "PRIMARY KEY(app_id,data_share_request) " \
- "FOREIGN KEY(app_id) " \
- "REFERENCES package_app_info(app_id) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_DATA_CONTROL "CREATE TABLE IF NOT EXISTS package_app_data_control " \
- "(app_id TEXT NOT NULL, " \
- "providerid TEXT NOT NULL, " \
- "access TEXT NOT NULL, " \
- "type TEXT NOT NULL, " \
- "PRIMARY KEY(app_id, providerid, access, type) " \
- "FOREIGN KEY(app_id) " \
- "REFERENCES package_app_info(app_id) " \
- "ON DELETE CASCADE)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_INFO_FOR_UID "CREATE TABLE IF NOT EXISTS package_app_info_for_uid " \
- "(app_id TEXT NOT NULL, " \
- "uid INTEGER NOT NULL, " \
- "is_disabled TEXT NOT NULL DEFAULT 'false', " \
- "is_splash_screen_enabled TEXT NOT NULL, " \
- "PRIMARY KEY(app_id, uid))"
-
-#define QUERY_CREATE_TRIGGER_UPDATE_PACKAGE_APP_INFO_FOR_UID \
- "CREATE TRIGGER IF NOT EXISTS update_package_appinfo_for_uid "\
- "AFTER UPDATE ON package_app_info_for_uid " \
- "BEGIN" \
- " DELETE FROM package_app_info_for_uid WHERE " \
- " is_splash_screen_enabled=" \
- " (SELECT package_app_info.app_splash_screen_display FROM " \
- " package_app_info, package_app_info_for_uid WHERE " \
- " package_app_info.app_id=OLD.app_id) AND is_disabled='false';" \
- "END;"
-
-#define QUERY_CREATE_TABLE_PACKAGE_APP_SPLASH_SCREEN \
- "CREATE TABLE IF NOT EXISTS package_app_splash_screen " \
- "(app_id TEXT NOT NULL, " \
- "src TEXT NOT NULL, " \
- "type TEXT NOT NULL, " \
- "orientation TEXT NOT NULL, " \
- "indicatordisplay TEXT, " \
- "operation TEXT NOT NULL, " \
- "color_depth TEXT NOT NULL DEFAULT '24', " \
- "PRIMARY KEY(app_id, orientation, operation) " \
- "FOREIGN KEY(app_id) " \
- "REFERENCES package_app_info(app_id) " \
- "ON DELETE CASCADE)"
-
-
-/* FIXME: duplicated at pkgmgrinfo_db.c */
-#define QUERY_CREATE_TABLE_PACKAGE_CERT_INDEX_INFO \
- "CREATE TABLE IF NOT EXISTS package_cert_index_info( " \
- " cert_info TEXT UNIQUE, " \
- " cert_id INTEGER PRIMARY KEY, " \
- " cert_ref_count INTEGER NOT NULL)"
-
-#define QUERY_CREATE_TABLE_PACKAGE_CERT_INFO \
- "CREATE TABLE IF NOT EXISTS package_cert_info( " \
- " package TEXT PRIMARY KEY, " \
- " package_count INTEGER, " \
- " author_root_cert INTEGER, " \
- " author_im_cert INTEGER, " \
- " author_signer_cert INTEGER, " \
- " dist_root_cert INTEGER, " \
- " dist_im_cert INTEGER, " \
- " dist_signer_cert INTEGER, " \
- " dist2_root_cert INTEGER, " \
- " dist2_im_cert INTEGER, " \
- " dist2_signer_cert INTEGER)"
-
-#define QUERY_CREATE_TRIGGER_UPDATE_CERT_INFO \
- "CREATE TRIGGER IF NOT EXISTS update_cert_info " \
- "AFTER UPDATE ON package_cert_info " \
- "WHEN (NEW.package_count = 0) " \
- "BEGIN" \
- " DELETE FROM package_cert_info WHERE package=OLD.package;" \
- "END;"
-
-#define QUERY_CREATE_TRIGGER_UPDATE_CERT_INFO2 \
- "CREATE TRIGGER IF NOT EXISTS update_cert_info2 " \
- "AFTER UPDATE ON package_cert_info " \
- "WHEN (NEW.package_count = OLD.package_count + 1) " \
- "BEGIN" \
- " UPDATE package_cert_index_info SET" \
- " cert_ref_count = cert_ref_count - 1" \
- " WHERE cert_id = OLD.author_root_cert" \
- " OR cert_id = OLD.author_im_cert" \
- " OR cert_id = OLD.author_signer_cert" \
- " OR cert_id = OLD.dist_root_cert" \
- " OR cert_id = OLD.dist_im_cert" \
- " OR cert_id = OLD.dist_signer_cert" \
- " OR cert_id = OLD.dist2_root_cert" \
- " OR cert_id = OLD.dist2_im_cert" \
- " OR cert_id = OLD.dist2_signer_cert;" \
- "END;"
-
-#define QUERY_CREATE_TRIGGER_DELETE_CERT_INFO \
- "CREATE TRIGGER IF NOT EXISTS delete_cert_info " \
- "AFTER DELETE ON package_cert_info " \
- "BEGIN" \
- " UPDATE package_cert_index_info SET" \
- " cert_ref_count = cert_ref_count - 1" \
- " WHERE cert_id = OLD.author_root_cert" \
- " OR cert_id = OLD.author_im_cert" \
- " OR cert_id = OLD.author_signer_cert" \
- " OR cert_id = OLD.dist_root_cert" \
- " OR cert_id = OLD.dist_im_cert" \
- " OR cert_id = OLD.dist_signer_cert" \
- " OR cert_id = OLD.dist2_root_cert" \
- " OR cert_id = OLD.dist2_im_cert" \
- " OR cert_id = OLD.dist2_signer_cert;" \
- "END;"
-
-#define QUERY_CREATE_TRIGGER_UPDATE_CERT_INDEX_INFO \
- "CREATE TRIGGER IF NOT EXISTS update_cert_index_info " \
- "AFTER UPDATE ON package_cert_index_info " \
- "WHEN ((SELECT cert_ref_count FROM package_cert_index_info " \
- " WHERE cert_id = OLD.cert_id) = 0) "\
- "BEGIN" \
- " DELETE FROM package_cert_index_info WHERE cert_id = OLD.cert_id;" \
- "END;"
-
-static int __insert_application_info(manifest_x *mfx);
-static int __insert_application_appcategory_info(manifest_x *mfx);
-static int __insert_application_appcontrol_info(manifest_x *mfx);
-static int __insert_application_appmetadata_info(manifest_x *mfx);
-static int __insert_application_share_allowed_info(manifest_x *mfx);
-static int __insert_application_share_request_info(manifest_x *mfx);
-static int __insert_application_datacontrol_info(manifest_x *mfx);
-static void __insert_application_locale_info(gpointer data, gpointer userdata);
-static void __insert_pkglocale_info(gpointer data, gpointer userdata);
-static int __insert_manifest_info_in_db(manifest_x *mfx, uid_t uid);
-static int __delete_manifest_info_from_db(manifest_x *mfx, uid_t uid);
-static int __delete_subpkg_info_from_db(char *appid);
-static int __delete_appinfo_from_db(char *db_table, const char *appid);
-static int __initialize_db(sqlite3 *db_handle, const char *db_query);
-static int __exec_query(char *query);
-static void __extract_data(gpointer data, GList *lbl, GList *lcn, GList *icn, GList *dcn, GList *ath,
- char **label, char **license, char **icon, char **description, char **author);
-static gint __comparefunc(gconstpointer a, gconstpointer b, gpointer userdata);
-static GList *__create_locale_list(GList *locale, GList *lbl, GList *lcn, GList *icn, GList *dcn, GList *ath);
-static void __preserve_guestmode_visibility_value(manifest_x *mfx);
-static int __guestmode_visibility_cb(void *data, int ncols, char **coltxt, char **colname);
-static int __pkgmgr_parser_create_db(sqlite3 **db_handle, const char *db_path);
-static int __parserdb_change_perm(const char *db_file, uid_t uid);