smack_remove_user()
authorJarkko Sakkinen <ext-jarkko.2.sakkinen@nokia.com>
Mon, 15 Nov 2010 19:18:02 +0000 (11:18 -0800)
committerJarkko Sakkinen <ext-jarkko.2.sakkinen@nokia.com>
Mon, 15 Nov 2010 19:18:02 +0000 (11:18 -0800)
src/smack.h
src/smack_rules.c
src/smack_users.c
tests/check_rules.c
tests/check_users.c
tests/data/remove_user-excepted.txt [new file with mode: 0644]

index fa2544d..c5dbfd5 100644 (file)
@@ -107,9 +107,10 @@ extern int smack_add_rule(smack_rules_t handle, const char *subject,
  * @param handle handle to a rules
  * @param subject subject of the rule
  * @param object object of the rule
+ * @return 0 if user was found from user db.
  */
-extern void smack_remove_rule(smack_rules_t handle, const char *subject,
-                             const char *object);
+extern int smack_remove_rule(smack_rules_t handle, const char *subject,
+                            const char *object);
 
 /*!
  * Remove all rules with the given subject from a rule set.
@@ -184,6 +185,15 @@ extern int smack_write_users_to_file(smack_users_t handle, const char *path);
 extern int smack_add_user(smack_users_t handle, const char *user,
                          const char *label);
 
+/*! 
+ * Remove user from the user db.
+ *
+ * @param handle handle to the users db
+ * @param user user name
+ * @return 0 if user was found from user db.
+ */
+extern int smack_remove_user(smack_users_t handle, const char *user);
+
 /*!
  * Get label of user.
  *
index ea351e0..6c11bbd 100644 (file)
@@ -167,22 +167,23 @@ int smack_add_rule(smack_rules_t handle, const char *subject,
        return ret == 0 ? 0  : -1;
 }
 
-void smack_remove_rule(smack_rules_t handle, const char *subject,
-                      const char *object)
+int smack_remove_rule(smack_rules_t handle, const char *subject,
+                     const char *object)
 {
        struct smack_subject *s = NULL;
        struct smack_object *o = NULL;
 
        HASH_FIND_STR(handle->subjects, subject, s);
        if (s == NULL)
-               return;
+               return -1;
 
        HASH_FIND_STR(s->objects, object, o);
        if (o == NULL)
-               return;
+               return -1;
 
        HASH_DEL(s->objects, o);
        free(o);
+       return 0;
 }
 
 void smack_remove_rules_by_subject(smack_rules_t handle, const char *subject)
index b4bd6c5..63809d0 100644 (file)
@@ -130,6 +130,19 @@ int smack_add_user(smack_users_t handle, const char *user, const char *label)
        return ret == 0 ? 0  : -1;
 }
 
+int smack_remove_user(smack_users_t handle, const char *user)
+{
+       struct smack_user *u = NULL;
+
+       HASH_FIND_STR(handle->users, user, u);
+       if (u == NULL)
+               return -1;
+
+       HASH_DEL(handle->users, u);
+       free(u);
+       return 0;
+}
+
 const char *smack_get_user_label(smack_users_t handle, const char *user)
 {
        struct smack_user *u;
index 17021ca..3c7c785 100644 (file)
@@ -98,7 +98,8 @@ START_TEST(test_remove_rule)
        fail_unless(rules != NULL, "Ruleset creation failed");
        rc = smack_read_rules_from_file(rules, "data/remove_rule-in.txt", NULL);
        fail_unless(rc == 0, "Failed to read ruleset");
-       smack_remove_rule(rules, "Orange", "Apple");
+       rc = smack_remove_rule(rules, "Orange", "Apple");
+       fail_unless(rc == 0, "Failed to remove rule");
        rc = smack_write_rules_to_file(rules, "remove_rule-result.txt", SMACK_FORMAT_KERNEL);
        fail_unless(rc == 0, "Failed to write ruleset");
        rc = files_equal("remove_rule-result.txt", "data/remove_rule-excepted.txt");
@@ -156,10 +157,11 @@ START_TEST(test_have_access_removed_rule)
 {
        int rc;
        smack_rules_t rules = smack_create_rules();
-       fail_unless(rules != NULL, "Ruleset creation failed");
+       fail_unless(rules != NULL, "Rules creation failed");
        rc = smack_read_rules_from_file(rules, "data/have_access_rule-in.txt", "Orange");
-       fail_unless(rc == 0, "Failed to read ruleset");
-       smack_remove_rule(rules, "Orange", "Apple");
+       fail_unless(rc == 0, "Failed to read rules");
+       rc = smack_remove_rule(rules, "Orange", "Apple");
+       fail_unless(rc == 0, "Failed to remove rule");
        rc = smack_have_access_rule(rules, "Orange", "Apple", "a");
        fail_unless(!rc, "Has access to a removed rule");
        smack_destroy_rules(rules);
index 48ead22..009964f 100644 (file)
@@ -46,6 +46,27 @@ START_TEST(test_add_user)
 }
 END_TEST
 
+START_TEST(test_remove_user)
+{
+       int rc;
+       smack_users_t users = smack_create_users();
+       fail_unless(users != NULL, "Users creation failed");
+       rc = smack_read_users_from_file(users, "data/add_user-in.txt");
+       fail_unless(rc == 0, "Failed to read users");
+
+       rc = smack_remove_user(users, "bar");
+       fail_unless(rc == 0, "Failed to remove user");
+
+       rc = smack_write_users_to_file(users, "remove_user-result.txt");
+       fail_unless(rc == 0, "Failed to write ruleset");
+
+       rc = files_equal("remove_user-result.txt", "data/remove_user-excepted.txt");
+       fail_unless(rc == 1, "Unexcepted result");
+
+       smack_destroy_users(users);
+}
+END_TEST
+
 START_TEST(test_user_label)
 {
        int rc;
@@ -74,6 +95,7 @@ Suite *ruleset_suite (void)
 
        tc_core = tcase_create("Users");
        tcase_add_test(tc_core, test_add_user);
+       tcase_add_test(tc_core, test_remove_user);
        tcase_add_test(tc_core, test_user_label);
        suite_add_tcase(s, tc_core);
 
diff --git a/tests/data/remove_user-excepted.txt b/tests/data/remove_user-excepted.txt
new file mode 100644 (file)
index 0000000..216f4ad
--- /dev/null
@@ -0,0 +1 @@
+foo Apple