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