Duplicated path error ignored
[platform/core/security/libprivilege-control.git] / db / rules-db.sql
index f6f590c..a7fba4c 100644 (file)
@@ -6,15 +6,14 @@
 -- 2. If you change definition of tables
 --    update the schema counter at the bottom!!
 
--- TODO: Use "USING" in joins whenever possible
-
 .load librules-db-sql-udf.so
 PRAGMA foreign_keys = ON;
 PRAGMA auto_vacuum = NONE;
 
 BEGIN EXCLUSIVE TRANSACTION;
 
--- PRAGMA cache_size = 2000;
+-- Update here on every schema change! Integer value.
+PRAGMA user_version = 2;
 
 CREATE TABLE IF NOT EXISTS  app (
     app_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
@@ -43,6 +42,7 @@ CREATE TABLE IF NOT EXISTS app_path (
     path TEXT NOT NULL,
     label_id INTEGER NOT NULL,
     access INTEGER NOT NULL,
+    access_reverse INTEGER NOT NULL,
     app_path_type_id INTEGER NOT NULL ,
 
     -- TODO:
@@ -149,7 +149,6 @@ CREATE TABLE IF NOT EXISTS all_smack_binary_rules(
 
 -- TEMPORARY TABLES ------------------------------------------------------------
 -- Definitions are repeated in code.
-
 CREATE TEMPORARY TABLE history_smack_rule(
     subject TEXT NOT NULL,
     object  TEXT NOT NULL,
@@ -525,6 +524,7 @@ SELECT  application_view.name   AS owner_app_label_name,
         app_path.path           AS path,
         label.name              AS path_label_name,
         app_path.access         AS access,
+        app_path.access_reverse AS access_reverse,
         app_path_type.name      AS path_type_name
 
 FROM    app_path
@@ -544,11 +544,12 @@ BEGIN
     INSERT OR IGNORE INTO label(name) VALUES (NEW.path_label_name);
 
     -- Add the path
-    INSERT INTO app_path(app_id, path, label_id, access, app_path_type_id)
+    INSERT OR IGNORE INTO app_path(app_id, path, label_id, access, access_reverse, app_path_type_id)
     SELECT  application_view.app_id,
             NEW.path,
             label.label_id,
             str_to_access(NEW.access),
+            str_to_access(NEW.access_reverse),
             app_path_type.app_path_type_id
     FROM    application_view, app_path_type, label
     WHERE   application_view.name = NEW.owner_app_label_name AND
@@ -767,6 +768,19 @@ INNER JOIN  application_view USING(app_id)
 INNER JOIN  label USING(label_id);
 
 
+-- PERMISSION FROM PATHS TO APPLICATIONS ---------------------------------------
+-- ltl = label to label
+DROP VIEW IF EXISTS ltl_app_path_reverse_view;
+CREATE VIEW ltl_app_path_reverse_view AS
+SELECT      label.name                AS subject,
+            application_view.name     AS object,
+            app_path.access_reverse   AS access
+FROM        app_path
+INNER JOIN  application_view USING(app_id)
+INNER JOIN  label USING(label_id)
+WHERE       app_path.access_reverse != 0 ;
+
+
 -- SMACK RULES VIEWS -----------------------------------------------------------
 DROP VIEW IF EXISTS all_smack_binary_rules_view;
 CREATE VIEW all_smack_binary_rules_view AS
@@ -788,6 +802,9 @@ FROM   (SELECT subject, object, access, is_volatile
         UNION ALL
         SELECT subject, object, access, 0
         FROM   ltl_app_path_view
+        UNION ALL
+        SELECT subject, object, access, 0
+        FROM   ltl_app_path_reverse_view
        )
 GROUP BY subject, object
 ORDER BY subject, object ASC;
@@ -864,8 +881,4 @@ FROM    (
         )
 ORDER BY subject, object ASC;
 
-
--- Update here!
-PRAGMA schema_version = 1;
-
-COMMIT TRANSACTION;
+COMMIT TRANSACTION;
\ No newline at end of file