/* * (C) 2006, 2007 Andreas Gruenbacher * Copyright (c) 2003-2008 Novell, Inc. (All rights reserved) * Copyright 2009-2012 Canonical Ltd. * * The libapparmor library is licensed under the terms of the GNU * Lesser General Public License, version 2.1. Please see the file * COPYING.LGPL. * * 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 program. If not, see . * * * Create a compressed hfa (chfa) from an hfa */ #ifndef __LIBAA_RE_CHFA_H #define __LIBAA_RE_CHFA_H #include #include #include "hfa.h" #include "../perms.h" #define BASE32_FLAGS 0xff000000 #define DiffEncodeBit32 0x80000000 #define MATCH_FLAG_OOB_TRANSITION 0x20000000 #define base_mask_size(X) ((X) & ~BASE32_FLAGS) using namespace std; class CHFA { typedef vector > DefaultBase; typedef vector > NextCheck; public: CHFA(void); CHFA(DFA &dfa, map &eq, optflags const &opts, bool permindex, bool prompt); void dump(ostream & os); void flex_table(ostream &os); void init_free_list(vector > &free_list, size_t prev, size_t start); bool fits_in(vector > &free_list, size_t base, StateTrans &cases); void insert_state(vector > &free_list, State *state, DFA &dfa); void weld_file_to_policy(CHFA &file_chfa, size_t &new_start, bool accept_idx, bool prompt, vector &policy_perms, vector &file_perms); private: vector accept; vector accept2; DefaultBase default_base; NextCheck next_check; const State *start; map num; map eq; transchar max_eq; ssize_t first_free; unsigned int chfaflags; }; #endif /* __LIBAA_RE_CHFA_H */