/*!
* Read users from a given file.
*
- * @param handle handle to a users db
+ * @param handle handle to an users db
* @param path path to the file containing users
* @return 0 on success
*/
/*!
* Write users to a given file.
*
- * @param handle handle to a users db
+ * @param handle handle to an users db
* @param path path to the users file
* @return 0 on success
*/
extern int smack_write_users_to_file(smack_users_t handle, const char *path);
/*!
+ * Get label of user.
+ *
+ * @param handle handle to an users db
+ * @param user user name
+ *
+ * @return pointer to a string containing label of the user. Returns NULL
+ * on failure.
+ */
+const char *smack_get_user_label(smack_users_t handle, const char *user);
+
+/*!
* Set SMACK64 security attribute for a given path.
*
* @param path path to a file
return 0;
}
+const char *smack_get_user_label(smack_users_t handle, const char *user)
+{
+ struct smack_user *u;
+
+ HASH_FIND_STR(handle->users, user, u);
+
+ if (u == NULL)
+ return;
+
+ return u->label;
+}
+
static int update_user(struct smack_user **users,
const char *user, const char *label)
{
if (u == NULL) {
u = calloc(1, sizeof(struct smack_user));
u->user = strdup(user);
- HASH_ADD_STR(*users, user, u);
+ HASH_ADD_KEYPTR( hh, *users, u->user, strlen(u->user), u);
}
strcpy(u->label, label);
Suite *s;
TCase *tc_core;
- s = suite_create("Smack");
+ s = suite_create("Rules");
tc_core = tcase_create("Rules");
tcase_add_test(tc_core, test_add_new_rule);
}
END_TEST
+START_TEST(test_user_label)
+{
+ int rc;
+ const char *l;
+
+ 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");
+ fail_unless(rc == 0, "Failed to read users");
+
+ l = smack_get_user_label(users, "bar");
+ fail_unless(l != NULL, "Label not found");
+ fail_unless(strcmp(l, "Orange") == 0, "Unexcepted label %s", l);
+
+ smack_destroy_users(users);
+}
+END_TEST
+
Suite *ruleset_suite (void)
{
Suite *s;
TCase *tc_core;
- s = suite_create("Smack");
+ s = suite_create("User");
tc_core = tcase_create("Users");
tcase_add_test(tc_core, test_rw_users);
+ tcase_add_test(tc_core, test_user_label);
suite_add_tcase(s, tc_core);
return s;
Suite *s;
TCase *tc_core;
- s = suite_create("Smack");
+ s = suite_create("Xattr");
tc_core = tcase_create("Xattr");
tcase_add_test(tc_core, test_set_smack_to_file);