Merge "afm-user-daemon: Remove it by default"
[src/app-framework-main.git] / src / wgtpkg-permissions.c
index 9e061c8..abb4596 100644 (file)
@@ -1,5 +1,5 @@
 /*
- Copyright 2015 IoT.bzh
+ Copyright (C) 2015-2019 IoT.bzh
 
  author: José Bollo <jose.bollo@iot.bzh>
 
@@ -32,18 +32,10 @@ struct permission {
        unsigned level: 3;
 };
 
-static const char prefix_of_permissions[] = FWK_PREFIX_PERMISSION;
-
 static unsigned int nrpermissions = 0;
 static struct permission *permissions = NULL;
 static unsigned int indexiter = 0;
 
-/* check is the name has the correct prefix for permissions */
-int is_standard_permission(const char *name)
-{
-       return 0 == memcmp(name, prefix_of_permissions, sizeof(prefix_of_permissions) - 1);
-}
-
 /* retrieves the permission of name */
 static struct permission *get_permission(const char *name)
 {
@@ -81,7 +73,15 @@ void reset_permissions()
 {
        unsigned int i;
        for (i = 0 ; i < nrpermissions ; i++)
-               permissions[i].granted = 0;
+               permissions[i].granted = permissions[i].requested = 0;
+}
+
+/* remove any requested permission */
+void reset_requested_permissions()
+{
+       unsigned int i;
+       for (i = 0 ; i < nrpermissions ; i++)
+               permissions[i].requested = 0;
 }
 
 /* remove any granting */
@@ -94,7 +94,7 @@ void crop_permissions(unsigned level)
 }
 
 /* add permissions granted for installation */
-void grant_permission_list(const char *list)
+int grant_permission_list(const char *list)
 {
        struct permission *p;
        char *iter, c;
@@ -109,14 +109,15 @@ void grant_permission_list(const char *list)
                iter[n] = 0;
                p = add_permission(iter);
                if (!p) {
-                       ERROR("Can't allocate permission");
-                       exit(1);
+                       errno = ENOMEM;
+                       return -1;
                }
                p->granted = 1;
                iter += n;
                *iter =c;
                iter += strspn(iter, separators);
        }
+       return 0;
 }
 
 /* checks if the permission 'name' is recorded */
@@ -128,13 +129,25 @@ int permission_exists(const char *name)
 /* request the permission, returns 1 if granted or 0 otherwise */
 int request_permission(const char *name)
 {
+#define HACK_ALLOWING_REQUESTED_PERMISSIONS 1
+
        struct permission *p = get_permission(name);
+
+#if defined(HACK_ALLOWING_REQUESTED_PERMISSIONS) && HACK_ALLOWING_REQUESTED_PERMISSIONS
+       if (!p)
+               p = add_permission(name);
+#endif
        if (p) {
+#if defined(HACK_ALLOWING_REQUESTED_PERMISSIONS) && HACK_ALLOWING_REQUESTED_PERMISSIONS
+               p->granted = 1;
+#endif
                p->requested = 1;
                if (p->granted)
                        return 1;
        }
        return 0;
+
+#undef HACK_ALLOWING_REQUESTED_PERMISSIONS
 }
 
 /* iteration over granted and requested permissions */