1# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com> 2# 3# Copyright (C) 2006 Red Hat 4# see file 'COPYING' for use and warranty information 5# 6# This program is free software; you can redistribute it and/or 7# modify it under the terms of the GNU General Public License as 8# published by the Free Software Foundation; version 2 only 9# 10# This program is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with this program; if not, write to the Free Software 17# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18# 19 20import unittest 21import sepolgen.refparser as refparser 22import sepolgen.refpolicy as refpolicy 23 24interface_example = """######################################## 25## <summary> 26## Search the content of /etc. 27## </summary> 28## <param name="domain"> 29## <summary> 30## Domain allowed access. 31## </summary> 32## </param> 33# 34interface(`files_search_usr',` 35 gen_require(` 36 type usr_t; 37 ') 38 39 allow $1 usr_t:dir search; 40 allow { domain $1 } { usr_t usr_home_t }:{ file dir } { read write getattr }; 41 typeattribute $1 file_type; 42 43 if (foo) { 44 allow $1 foo:bar baz; 45 } 46 47 if (bar) { 48 allow $1 foo:bar baz; 49 } else { 50 allow $1 foo:bar baz; 51 } 52') 53 54######################################## 55## <summary> 56## List the contents of generic 57## directories in /usr. 58## </summary> 59## <param name="domain"> 60## <summary> 61## Domain allowed access. 62## </summary> 63## </param> 64# 65interface(`files_list_usr',` 66 gen_require(` 67 type usr_t; 68 ') 69 70 allow $1 usr_t:dir { read getattr }; 71 72 optional_policy(` 73 search_usr($1) 74 ') 75 76 tunable_policy(`foo',` 77 whatever($1) 78 ') 79 80') 81 82######################################## 83## <summary> 84## Execute generic programs in /usr in the caller domain. 85## </summary> 86## <param name="domain"> 87## <summary> 88## Domain allowed access. 89## </summary> 90## </param> 91# 92interface(`files_exec_usr_files',` 93 gen_require(` 94 type usr_t; 95 ') 96 97 allow $1 usr_t:dir read; 98 allow $1 usr_t:lnk_file { read getattr }; 99 can_exec($1,usr_t) 100 can_foo($1) 101 102') 103""" 104 105class TestParser(unittest.TestCase): 106 def test_interface_parsing(self): 107 h = refparser.parse(interface_example) 108 #print "" 109 #refpolicy.print_tree(h) 110 #self.assertEqual(len(h.interfaces), 3) 111 112 name = "files_search_usr" 113 #i = h.interfaces[name] 114 #self.assertEqual(i.name, name) 115 #self.assertEqual(len(i.rules), 1) 116 #rule = i.rules[0] 117 #self.assertTrue(isinstance(rule, refpolicy.AVRule)) 118 119 120 121