From: Jarkko Sakkinen Date: Mon, 15 Nov 2010 19:18:02 +0000 (-0800) Subject: smack_remove_user() X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=acc19f2d636b99733795a71edb7ca686463ea14c;p=framework%2Fsecurity%2Fsmack.git smack_remove_user() --- diff --git a/src/smack.h b/src/smack.h index fa2544d..c5dbfd5 100644 --- a/src/smack.h +++ b/src/smack.h @@ -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. * diff --git a/src/smack_rules.c b/src/smack_rules.c index ea351e0..6c11bbd 100644 --- a/src/smack_rules.c +++ b/src/smack_rules.c @@ -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) diff --git a/src/smack_users.c b/src/smack_users.c index b4bd6c5..63809d0 100644 --- a/src/smack_users.c +++ b/src/smack_users.c @@ -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; diff --git a/tests/check_rules.c b/tests/check_rules.c index 17021ca..3c7c785 100644 --- a/tests/check_rules.c +++ b/tests/check_rules.c @@ -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); diff --git a/tests/check_users.c b/tests/check_users.c index 48ead22..009964f 100644 --- a/tests/check_users.c +++ b/tests/check_users.c @@ -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 index 0000000..216f4ad --- /dev/null +++ b/tests/data/remove_user-excepted.txt @@ -0,0 +1 @@ +foo Apple