From 2d452f8096ed1de6da92a155e049718c2c6a1259 Mon Sep 17 00:00:00 2001 From: Jarkko Sakkinen Date: Mon, 15 Nov 2010 11:08:48 -0800 Subject: [PATCH] smack_add_user() --- src/smack.h | 14 +++++++++++++- src/smack_users.c | 7 +++++++ tests/check_users.c | 16 ++++++++++------ .../{rw_users-excepted.txt => add_user-excepted.txt} | 1 + tests/data/{rw_users-in.txt => add_user-in.txt} | 0 5 files changed, 31 insertions(+), 7 deletions(-) rename tests/data/{rw_users-excepted.txt => add_user-excepted.txt} (72%) rename tests/data/{rw_users-in.txt => add_user-in.txt} (100%) diff --git a/src/smack.h b/src/smack.h index 5fdc175..fa2544d 100644 --- a/src/smack.h +++ b/src/smack.h @@ -89,7 +89,8 @@ extern int smack_write_rules_to_file(smack_rules_t handle, const char *path, int format); /*! - * Add new rule to a rule set. + * Add new rule to a rule set. Updates existing rule if there is already rule + * for the given subject and object. * * @param handle handle to a rules * @param subject subject of the rule @@ -173,6 +174,17 @@ extern int smack_read_users_from_file(smack_users_t handle, const char *path); extern int smack_write_users_to_file(smack_users_t handle, const char *path); /*! + * Add user to the user db. Updates existing user if user is already in the + * user db. + * + * @param handle handle to the users db + * @param user user name + * @param label user label + */ +extern int smack_add_user(smack_users_t handle, const char *user, + const char *label); + +/*! * Get label of user. * * @param handle handle to an users db diff --git a/src/smack_users.c b/src/smack_users.c index d388915..b4bd6c5 100644 --- a/src/smack_users.c +++ b/src/smack_users.c @@ -123,6 +123,13 @@ int smack_write_users_to_file(smack_users_t handle, const char *path) return 0; } +int smack_add_user(smack_users_t handle, const char *user, const char *label) +{ + int ret; + ret = update_user(&handle->users, user, label); + return ret == 0 ? 0 : -1; +} + const char *smack_get_user_label(smack_users_t handle, const char *user) { struct smack_user *u; diff --git a/tests/check_users.c b/tests/check_users.c index 109603a..48ead22 100644 --- a/tests/check_users.c +++ b/tests/check_users.c @@ -27,16 +27,20 @@ static int files_equal(const char *filename1, const char *filename2); -START_TEST(test_rw_users) +START_TEST(test_add_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/rw_users-in.txt"); + rc = smack_read_users_from_file(users, "data/add_user-in.txt"); fail_unless(rc == 0, "Failed to read users"); - rc = smack_write_users_to_file(users, "rw_users-result.txt"); + + rc = smack_add_user(users, "zip", "Zap"); + fail_unless(rc == 0, "Failed to add user"); + + rc = smack_write_users_to_file(users, "add_user-result.txt"); fail_unless(rc == 0, "Failed to write ruleset"); - rc = files_equal("rw_users-result.txt", "data/rw_users-excepted.txt"); + rc = files_equal("add_user-result.txt", "data/add_user-excepted.txt"); fail_unless(rc == 1, "Unexcepted result"); smack_destroy_users(users); } @@ -50,7 +54,7 @@ START_TEST(test_user_label) smack_users_t users = smack_create_users(); fail_unless(users != NULL, "Users creation failed"); - rc = smack_read_users_from_file(users, "data/rw_users-in.txt"); + rc = smack_read_users_from_file(users, "data/add_user-in.txt"); fail_unless(rc == 0, "Failed to read users"); l = smack_get_user_label(users, "bar"); @@ -69,7 +73,7 @@ Suite *ruleset_suite (void) s = suite_create("User"); tc_core = tcase_create("Users"); - tcase_add_test(tc_core, test_rw_users); + tcase_add_test(tc_core, test_add_user); tcase_add_test(tc_core, test_user_label); suite_add_tcase(s, tc_core); diff --git a/tests/data/rw_users-excepted.txt b/tests/data/add_user-excepted.txt similarity index 72% rename from tests/data/rw_users-excepted.txt rename to tests/data/add_user-excepted.txt index f25a925..d7c0188 100644 --- a/tests/data/rw_users-excepted.txt +++ b/tests/data/add_user-excepted.txt @@ -1,2 +1,3 @@ foo Apple bar Orange +zip Zap diff --git a/tests/data/rw_users-in.txt b/tests/data/add_user-in.txt similarity index 100% rename from tests/data/rw_users-in.txt rename to tests/data/add_user-in.txt -- 2.7.4