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)