18c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 28c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android/* 38c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * Author : Stephen Smalley, <sds@epoch.ncsc.mil> 48c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android */ 58c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 68c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android/* Updated: David Caplan, <dac@tresys.com> 78c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * 88c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * Added conditional policy language extensions 98c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * 108c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * Jason Tang <jtang@tresys.com> 118c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * 128c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * Added support for binary policy modules 138c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * 148c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * Copyright (C) 2003-5 Tresys Technology, LLC 158c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * This program is free software; you can redistribute it and/or modify 168c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * it under the terms of the GNU General Public License as published by 178c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android * the Free Software Foundation, version 2. 188c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android */ 198c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 208c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android/* FLASK */ 218c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 228c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android%{ 238c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android#include <sys/types.h> 248c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android#include <limits.h> 258c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android#include <stdint.h> 268c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android#include <string.h> 278c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 288c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidtypedef int (* require_func_t)(); 298c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 303fab9cdeebb5bd40681a59f9f3f3406ff600cfebStephen Smalley#ifdef ANDROID 313fab9cdeebb5bd40681a59f9f3f3406ff600cfebStephen Smalley#include "policy_parse.h" 323fab9cdeebb5bd40681a59f9f3f3406ff600cfebStephen Smalley#else 338c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android#include "y.tab.h" 343fab9cdeebb5bd40681a59f9f3f3406ff600cfebStephen Smalley#endif 358c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 368c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidstatic char linebuf[2][255]; 378c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidstatic unsigned int lno = 0; 388c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidint yywarn(char *msg); 398c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 408c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidvoid set_source_file(const char *name); 418c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 428c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidchar source_file[PATH_MAX]; 438c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidunsigned long source_lineno = 1; 448c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 458c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidunsigned long policydb_lineno = 1; 468c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 478c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidunsigned int policydb_errors = 0; 488c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android%} 498c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 503fab9cdeebb5bd40681a59f9f3f3406ff600cfebStephen Smalley%option noinput nounput noyywrap 518c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 528c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android%array 538c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidletter [A-Za-z] 548c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androiddigit [0-9] 558c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidalnum [a-zA-Z0-9] 568c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidhexval [0-9A-Fa-f] 578c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 588c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android%% 598c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android\n.* { strncpy(linebuf[lno], yytext+1, 255); 608c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android linebuf[lno][254] = 0; 618c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android lno = 1 - lno; 628c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android policydb_lineno++; 638c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android source_lineno++; 648c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android yyless(1); } 658c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidCLONE | 668c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidclone { return(CLONE); } 678c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidCOMMON | 688c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidcommon { return(COMMON); } 698c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidCLASS | 708c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidclass { return(CLASS); } 718c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidCONSTRAIN | 728c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidconstrain { return(CONSTRAIN); } 738c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidVALIDATETRANS | 748c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidvalidatetrans { return(VALIDATETRANS); } 758c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidINHERITS | 768c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidinherits { return(INHERITS); } 778c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidSID | 788c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidsid { return(SID); } 798c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidROLE | 808c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidrole { return(ROLE); } 818c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidROLES | 828c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidroles { return(ROLES); } 838c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidROLEATTRIBUTE | 848c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidroleattribute { return(ROLEATTRIBUTE);} 858c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidATTRIBUTE_ROLE | 868c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidattribute_role { return(ATTRIBUTE_ROLE);} 878c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidTYPES | 888c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidtypes { return(TYPES); } 898c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidTYPEALIAS | 908c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidtypealias { return(TYPEALIAS); } 918c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidTYPEATTRIBUTE | 928c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidtypeattribute { return(TYPEATTRIBUTE); } 938c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidTYPEBOUNDS | 948c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidtypebounds { return(TYPEBOUNDS); } 958c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidTYPE | 968c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidtype { return(TYPE); } 978c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidBOOL | 988c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidbool { return(BOOL); } 99cd88c5c44f93ca14828bdae024fae6e0287ba71dStephen SmalleyTUNABLE | 100cd88c5c44f93ca14828bdae024fae6e0287ba71dStephen Smalleytunable { return(TUNABLE); } 1018c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidIF | 1028c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidif { return(IF); } 1038c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidELSE | 1048c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidelse { return(ELSE); } 1058c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidALIAS | 1068c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidalias { return(ALIAS); } 1078c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidATTRIBUTE | 1088c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidattribute { return(ATTRIBUTE); } 1098c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidTYPE_TRANSITION | 1108c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidtype_transition { return(TYPE_TRANSITION); } 1118c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidTYPE_MEMBER | 1128c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidtype_member { return(TYPE_MEMBER); } 1138c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidTYPE_CHANGE | 1148c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidtype_change { return(TYPE_CHANGE); } 1158c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidROLE_TRANSITION | 1168c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidrole_transition { return(ROLE_TRANSITION); } 1178c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidRANGE_TRANSITION | 1188c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidrange_transition { return(RANGE_TRANSITION); } 1198c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidSENSITIVITY | 1208c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidsensitivity { return(SENSITIVITY); } 1218c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidDOMINANCE | 1228c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androiddominance { return(DOMINANCE); } 1238c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidCATEGORY | 1248c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidcategory { return(CATEGORY); } 1258c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidLEVEL | 1268c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidlevel { return(LEVEL); } 1278c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidRANGE | 1288c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidrange { return(RANGE); } 1298c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidMLSCONSTRAIN | 1308c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidmlsconstrain { return(MLSCONSTRAIN); } 1318c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidMLSVALIDATETRANS | 1328c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidmlsvalidatetrans { return(MLSVALIDATETRANS); } 1338c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidUSER | 1348c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androiduser { return(USER); } 1358c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidNEVERALLOW | 1368c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidneverallow { return(NEVERALLOW); } 1378c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidALLOW | 1388c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidallow { return(ALLOW); } 1398c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidAUDITALLOW | 1408c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidauditallow { return(AUDITALLOW); } 1418c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidAUDITDENY | 1428c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidauditdeny { return(AUDITDENY); } 1438c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidDONTAUDIT | 1448c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androiddontaudit { return(DONTAUDIT); } 1458c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidSOURCE | 1468c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidsource { return(SOURCE); } 1478c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidTARGET | 1488c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidtarget { return(TARGET); } 1498c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidSAMEUSER | 1508c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidsameuser { return(SAMEUSER);} 1518c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidmodule|MODULE { return(MODULE); } 1528c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidrequire|REQUIRE { return(REQUIRE); } 1538c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidoptional|OPTIONAL { return(OPTIONAL); } 1548c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidOR | 1558c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidor { return(OR);} 1568c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidAND | 1578c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidand { return(AND);} 1588c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidNOT | 1598c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidnot { return(NOT);} 1608c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidxor | 1618c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidXOR { return(XOR); } 1628c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androideq | 1638c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidEQ { return(EQUALS);} 1648c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidtrue | 1658c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidTRUE { return(CTRUE); } 1668c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidfalse | 1678c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidFALSE { return(CFALSE); } 1688c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androiddom | 1698c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidDOM { return(DOM);} 1708c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androiddomby | 1718c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidDOMBY { return(DOMBY);} 1728c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidINCOMP | 1738c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidincomp { return(INCOMP);} 1748c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidfscon | 1758c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidFSCON { return(FSCON);} 1768c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidportcon | 1778c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidPORTCON { return(PORTCON);} 1788c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidnetifcon | 1798c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidNETIFCON { return(NETIFCON);} 1808c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidnodecon | 1818c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidNODECON { return(NODECON);} 1828c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidpirqcon | 1838c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidPIRQCON { return(PIRQCON);} 1848c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidiomemcon | 1858c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidIOMEMCON { return(IOMEMCON);} 1868c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidioportcon | 1878c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidIOPORTCON { return(IOPORTCON);} 1888c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidpcidevicecon | 1898c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidPCIDEVICECON { return(PCIDEVICECON);} 1908c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidfs_use_xattr | 1918c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidFS_USE_XATTR { return(FSUSEXATTR);} 1928c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidfs_use_task | 1938c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidFS_USE_TASK { return(FSUSETASK);} 1948c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidfs_use_trans | 1958c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidFS_USE_TRANS { return(FSUSETRANS);} 1968c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidgenfscon | 1978c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidGENFSCON { return(GENFSCON);} 1988c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidr1 | 1998c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidR1 { return(R1); } 2008c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidr2 | 2018c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidR2 { return(R2); } 2028c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidr3 | 2038c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidR3 { return(R3); } 2048c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidu1 | 2058c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidU1 { return(U1); } 2068c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidu2 | 2078c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidU2 { return(U2); } 2088c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidu3 | 2098c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidU3 { return(U3); } 2108c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidt1 | 2118c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidT1 { return(T1); } 2128c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidt2 | 2138c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidT2 { return(T2); } 2148c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidt3 | 2158c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidT3 { return(T3); } 2168c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidl1 | 2178c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidL1 { return(L1); } 2188c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidl2 | 2198c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidL2 { return(L2); } 2208c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidh1 | 2218c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidH1 { return(H1); } 2228c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidh2 | 2238c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidH2 { return(H2); } 2248c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidpolicycap | 2258c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidPOLICYCAP { return(POLICYCAP); } 2268c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidpermissive | 2278c48de15b1afeb1cd01a753195a29b1a7811dbfSE AndroidPERMISSIVE { return(PERMISSIVE); } 228ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen Smalleydefault_user | 229ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen SmalleyDEFAULT_USER { return(DEFAULT_USER); } 230ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen Smalleydefault_role | 231ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen SmalleyDEFAULT_ROLE { return(DEFAULT_ROLE); } 232ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen Smalleydefault_range | 233ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen SmalleyDEFAULT_RANGE { return(DEFAULT_RANGE); } 234ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen Smalleylow-high | 235ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen SmalleyLOW-HIGH { return(LOW_HIGH); } 236ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen Smalleyhigh | 237ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen SmalleyHIGH { return(HIGH); } 238ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen Smalleylow | 239ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen SmalleyLOW { return(LOW); } 2408c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"/"({alnum}|[_\.\-/])* { return(PATH); } 241ba8e9924f575e267f1503b7669fe3120d68d4e1fStephen Smalley\"({alnum}|[_\.\-\+\~])+\" { return(FILENAME); } 2428c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android{letter}({alnum}|[_\-])*([\.]?({alnum}|[_\-]))* { return(IDENTIFIER); } 2438c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android{alnum}*{letter}{alnum}* { return(FILESYSTEM); } 2448c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android{digit}+|0x{hexval}+ { return(NUMBER); } 2458c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android{digit}{1,3}(\.{digit}{1,3}){3} { return(IPV4_ADDR); } 2468c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android{hexval}{0,4}":"{hexval}{0,4}":"({hexval}|[:.])* { return(IPV6_ADDR); } 2478c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android{digit}+(\.({alnum}|[_.])*)? { return(VERSION_IDENTIFIER); } 2488c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android#line[ ]1[ ]\"[^\n]*\" { set_source_file(yytext+9); } 2498c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android#line[ ]{digit}+ { source_lineno = atoi(yytext+6)-1; } 2508c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android#[^\n]* { /* delete comments */ } 2518c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android[ \t\f]+ { /* delete whitespace */ } 2528c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"==" { return(EQUALS); } 2538c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"!=" { return (NOTEQUAL); } 2548c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"&&" { return (AND); } 2558c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"||" { return (OR); } 2568c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"!" { return (NOT); } 2578c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"^" { return (XOR); } 2588c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"," | 2598c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android":" | 2608c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android";" | 2618c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"(" | 2628c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android")" | 2638c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"{" | 2648c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"}" | 2658c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"[" | 2668c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"-" | 2678c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"." | 2688c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"]" | 2698c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"~" | 2708c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android"*" { return(yytext[0]); } 2718c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android. { yywarn("unrecognized character");} 2728c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android%% 2738c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidint yyerror(char *msg) 2748c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android{ 2758c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android if (source_file[0]) 2768c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android fprintf(stderr, "%s:%ld:", 2778c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android source_file, source_lineno); 2788c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android else 2798c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android fprintf(stderr, "(unknown source)::"); 2808c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android fprintf(stderr, "ERROR '%s' at token '%s' on line %ld:\n%s\n%s\n", 2818c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android msg, 2828c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android yytext, 2838c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android policydb_lineno, 2848c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android linebuf[0], linebuf[1]); 2858c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android policydb_errors++; 2868c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android return -1; 2878c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android} 2888c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 2898c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidint yywarn(char *msg) 2908c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android{ 2918c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android if (source_file[0]) 2928c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android fprintf(stderr, "%s:%ld:", 2938c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android source_file, source_lineno); 2948c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android else 2958c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android fprintf(stderr, "(unknown source)::"); 2968c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android fprintf(stderr, "WARNING '%s' at token '%s' on line %ld:\n%s\n%s\n", 2978c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android msg, 2988c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android yytext, 2998c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android policydb_lineno, 3008c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android linebuf[0], linebuf[1]); 3018c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android return 0; 3028c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android} 3038c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android 3048c48de15b1afeb1cd01a753195a29b1a7811dbfSE Androidvoid set_source_file(const char *name) 3058c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android{ 3068c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android source_lineno = 1; 3078c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android strncpy(source_file, name, sizeof(source_file)-1); 3088c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android source_file[sizeof(source_file)-1] = '\0'; 3098c48de15b1afeb1cd01a753195a29b1a7811dbfSE Android} 310