summaryrefslogtreecommitdiffstats
path: root/libpoldiff/tests/nomls-tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpoldiff/tests/nomls-tests.c')
-rw-r--r--libpoldiff/tests/nomls-tests.c139
1 files changed, 139 insertions, 0 deletions
diff --git a/libpoldiff/tests/nomls-tests.c b/libpoldiff/tests/nomls-tests.c
new file mode 100644
index 0000000..da7dad2
--- /dev/null
+++ b/libpoldiff/tests/nomls-tests.c
@@ -0,0 +1,139 @@
+/**
+ * @file
+ *
+ * Test the libpoldiff's correctness for MLS versus non-MLS policies.
+ *
+ * @author Paul Rosenfeld prosenfeld@tresys.com
+ *
+ * Copyright (C) 2007 Tresys Technology, LLC
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <config.h>
+
+#include "libpoldiff-tests.h"
+#include "nomls-tests.h"
+#include "policy-defs.h"
+#include <CUnit/Basic.h>
+#include <CUnit/TestDB.h>
+
+#include <poldiff/poldiff.h>
+#include <apol/util.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <errno.h>
+#include <getopt.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
+char *nomls_unchanged_users[] = {
+/* 13.3.17 */
+ "placeholder_u",
+ "su_u",
+ "cyn_u",
+ "devona_u",
+ "danika_u",
+ "mehnlo_u",
+ "meloni_u",
+ "eve_u",
+ "nika_u",
+ "koss_u",
+ "kihm_u",
+ "aidan_u",
+ "chiyo_u",
+ "reyna_u",
+ NULL
+};
+apol_vector_t *unchanged_users_v;
+apol_vector_t *changed_users_v;
+
+char *nomls_changed_users[] = {
+/* 13.3.18 */
+ "timera_u -admin_r",
+ "sheena_u +user_r",
+ "jamei_u -aquarium_r",
+ NULL
+};
+
+int nomls_test_init()
+{
+ if (!(diff = init_poldiff(NOMLS_ORIG_POLICY, NOMLS_MOD_POLICY))) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+static void build_nomls_vecs()
+{
+ const void *item;
+ const apol_vector_t *v = NULL;
+ size_t i, str_len = 0;
+ char *str = NULL;
+ v = poldiff_get_user_vector(diff);
+ for (i = 0; i < apol_vector_get_size(v); ++i) {
+ item = apol_vector_get_element(v, i);
+ poldiff_user_t *u = (poldiff_user_t *) item;
+ const char *name = poldiff_user_get_name(u);
+ const apol_vector_t *added_roles = poldiff_user_get_added_roles(u);
+ const apol_vector_t *removed_roles = poldiff_user_get_removed_roles(u);
+ if (apol_vector_get_size(added_roles) == 0 && apol_vector_get_size(removed_roles) == 0) {
+ apol_vector_append(unchanged_users_v, strdup(name));
+ } else {
+ char *added_roles_str = vector_to_string(added_roles, "", " +");
+ char *removed_roles_str = vector_to_string(removed_roles, "-", " ");
+ apol_str_appendf(&str, &str_len, "%s %s%s", name, added_roles_str, removed_roles_str);
+ free(added_roles_str);
+ free(removed_roles_str);
+ apol_str_trim(str);
+ apol_vector_append(changed_users_v, str);
+ str = NULL;
+ str_len = 0;
+ }
+ }
+}
+void nomls_tests()
+{
+ size_t first_diff = 0;
+ int test_result;
+ unchanged_users_v = apol_vector_create(free);
+ changed_users_v = apol_vector_create(free);
+
+ apol_vector_t *correct_unchanged_users_v = string_array_to_vector(nomls_unchanged_users);
+ apol_vector_t *correct_changed_users_v = string_array_to_vector(nomls_changed_users);
+
+ build_nomls_vecs();
+ apol_vector_sort(unchanged_users_v, compare_str, NULL);
+ apol_vector_sort(correct_unchanged_users_v, compare_str, NULL);
+ CU_ASSERT_FALSE(test_result =
+ apol_vector_compare(unchanged_users_v, correct_unchanged_users_v, compare_str, NULL, &first_diff));
+ if (test_result) {
+ print_test_failure(unchanged_users_v, correct_unchanged_users_v, first_diff, "Unchanged MLS Users");
+ }
+ apol_vector_sort(changed_users_v, compare_str, NULL);
+ apol_vector_sort(correct_changed_users_v, compare_str, NULL);
+ CU_ASSERT_FALSE(test_result =
+ apol_vector_compare(changed_users_v, correct_changed_users_v, compare_str, NULL, &first_diff));
+ if (test_result) {
+ print_test_failure(changed_users_v, correct_changed_users_v, first_diff, "Changed MLS Users");
+ }
+ apol_vector_destroy(&unchanged_users_v);
+ apol_vector_destroy(&changed_users_v);
+ apol_vector_destroy(&correct_unchanged_users_v);
+ apol_vector_destroy(&correct_changed_users_v);
+
+}