* @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.
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.
*
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)
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;
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");
{
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);
}
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;
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);