test-expander-users.c revision 255e72915d4cbddceb435e13d81601755714e9f3
1424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)/*
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Authors: Chad Sellers <csellers@tresys.com>
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *          Joshua Brindle <jbrindle@tresys.com>
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *          Chris PeBenito <cpebenito@tresys.com>
5424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) *
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright (C) 2006 Tresys Technology, LLC
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  This library is free software; you can redistribute it and/or
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  modify it under the terms of the GNU Lesser General Public
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  License as published by the Free Software Foundation; either
119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch *  version 2.1 of the License, or (at your option) any later version.
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  This library is distributed in the hope that it will be useful,
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  Lesser General Public License for more details.
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) *  You should have received a copy of the GNU Lesser General Public
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *  License along with this library; if not, write to the Free Software
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "test-expander-users.h"
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <sepol/policydb/policydb.h>
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <CUnit/Basic.h>
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <stdlib.h>
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)extern policydb_t user_expanded;
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)static void check_user_roles(policydb_t * p, char *user_name, char **role_names, int num_roles)
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles){
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	user_datum_t *user;
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	ebitmap_node_t *tnode;
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)	unsigned int i;
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)	int j;
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	unsigned char *found;	/* array of booleans of roles found */
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	int extra = 0;		/* number of extra roles found */
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	user = (user_datum_t *) hashtab_search(p->p_users.table, user_name);
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	if (!user) {
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)		printf("%s not found\n", user_name);
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)		CU_FAIL("user not found");
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)		return;
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	}
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	found = calloc(num_roles, sizeof(unsigned char));
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	CU_ASSERT_FATAL(found != NULL);
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)	ebitmap_for_each_bit(&user->roles.roles, tnode, i) {
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)		if (ebitmap_node_get_bit(tnode, i)) {
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)			extra++;
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			for (j = 0; j < num_roles; j++) {
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)				if (strcmp(role_names[j], p->p_role_val_to_name[i]) == 0) {
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					extra--;
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)					found[j] += 1;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)					break;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)				}
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)			}
58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)		}
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	}
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	for (j = 0; j < num_roles; j++) {
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		if (found[j] != 1) {
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			printf("role %s associated with user %s %d times\n", role_names[j], user_name, found[j]);
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)			CU_FAIL("user mapping failure\n");
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)		}
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	}
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	free(found);
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	CU_ASSERT_EQUAL(extra, 0);
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void test_expander_user_mapping(void)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *roles1[] = { "user_check_1_1_r", "user_check_1_2_r" };
73424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	check_user_roles(&user_expanded, "user_check_1", roles1, 2);
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)