+/**
+ * free after use it
+ */
+int get_native_appid(const char* app_path, char** appid) {
+ int rc = smack_lgetlabel(app_path, appid, SMACK_LABEL_ACCESS);
+
+ if (rc != 0 || *appid == NULL) {
+ _E("smack_lgetlabel fail");
+ return -1;
+ }
+
+ if (strlen(*appid)!=APPID_LEN) {
+ _E("wrong native appid : %s", *appid);
+ return -1;
+ }
+
+ if (strlen(app_path)<sizeof(PATH_NATIVE_APP)+APPID_LEN-1) {
+ _E("wrong native app_path : %s", app_path);
+ return -1;
+ } else if (strncmp(app_path,PATH_NATIVE_APP,sizeof(PATH_NATIVE_APP)-1)
+ || strncmp(&app_path[sizeof(PATH_NATIVE_APP)-1],*appid,APPID_LEN)) {
+ _E("wrong native app_path : %s", app_path);
+ return -1;
+ }
+
+ _D("get_appid return : %s", *appid);
+ return 0;
+}
+
+int apply_smack_rules(const char* subject, const char* object, const char* access_type) {
+ struct smack_accesses *rules = NULL;
+
+ _D("apply_smack_rules : %s %s %s", subject, object, access_type);
+
+ if (smack_accesses_new(&rules)) {
+ _E("smack_accesses_new fail");
+ return -1;
+ }
+
+ if (smack_accesses_add(rules, subject, object, access_type)) {
+ smack_accesses_free(rules);
+ _E("smack_accesses_add fail");
+ return -1;
+ }
+
+ if (smack_accesses_apply(rules)) {
+ smack_accesses_free(rules);
+ _E("smack_accesses_apply fail");
+ return -1;
+ }
+
+ smack_accesses_free(rules);
+
+ return 0;
+}
+