Author: markt Date: Mon Aug 1 10:57:28 2016 New Revision: 1754733 URL: http://svn.apache.org/viewvc?rev=1754733&view=rev Log: Provide a mechanism that enables the container to check if a component (typically a web application) has been granted a given permission when running under a SecurityManager without the current execution stack having to have passed through the component. Use this new mechanism to extend SecurityManager protection to the system property replacement feature of the digester.
Added: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/security/PermissionCheck.java - copied unchanged from r1754728, tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/security/PermissionCheck.java Modified: tomcat/tc6.0.x/trunk/ (props changed) tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/Digester.java tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc6.0.x/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Mon Aug 1 10:57:28 2016 @@ -1,4 +1,4 @@ -/tomcat/tc7.0.x/trunk:1190476,1224802,1243045,1298635,1304471,1311997,1312007,1331772,1333164,1333176,1348992,1354866,1371298,1371302,1371620,1402110,1409014,1413553,1413557,1413563,1430083,1438415,1446641-1446660,1447013,1453106,1453119,1484919,1486877,1500065,1503852,1505844,1513151,1521040,1526470,1536524,1539176-1539177,1544469,1544473,1552805,1558894,1558917,1561368,1561382,1561386,1561552,1561561,1561636,1561641,1561643,1561737,1562748,1564317,1568922,1570163,1577328,1577464-1577465,1578814,1586659,1586897,1586960,1588199,1588997,1589740,1589851,1589997,1590019,1590028,1590337,1590492,1590651,1590838,1590845,1590848,1590912,1593262,1593288,1593371,1593835,1594230,1595174,1595366,1600956,1601333,1601856,1601909,1609079,1609606,1617364,1617374,1617433,1617457-1617458,1624249,1626579,1627420,1627469,1632586,1637686,1637711,1640675,1642045,1643515,1643540,1643572,1643585-1643586,1643642,1643647,1644019,1648817,1656301,1658815,1659523,1659564,1664001,1664176,1665087,1666968,1666989 ,1668541,1668635,1669802,1676557,1681183,1681841,1681865,1681867,1685829,1693109,1694293,1694433,1694875,1696381,1701945,1710353,1712656,1713873,1714000,1714005,1714540,1715213,1716221,1716417,1717107,1717210,1717212,1720236,1720398,1720443,1720464,1721814,1721883,1722645,1722801,1723151,1724435,1724553,1724675,1724797,1724806,1725931,1726631,1726808,1726813,1726815,1726817,1726819,1726917,1726919,1726922-1726924,1727031,1727034,1727043,1727158,1727672,1727903,1728450,1729363,1731010,1731119,1731956,1731978,1732362,1732674-1732675,1733942,1734116,1734134,1734532,1737249,1737253,1737968,1738049,1738186,1739778,1741178,1741184,1741193,1741211,1741218,1741228,1741235,1742281,1743121,1743142,1743649,1744061,1744129,1744155,1744241,1744383,1744689,1745230,1746942,1746994,1749377,1750018,1750980,1751066,1754114,1754147 +/tomcat/tc7.0.x/trunk:1190476,1224802,1243045,1298635,1304471,1311997,1312007,1331772,1333164,1333176,1348992,1354866,1371298,1371302,1371620,1402110,1409014,1413553,1413557,1413563,1430083,1438415,1446641-1446660,1447013,1453106,1453119,1484919,1486877,1500065,1503852,1505844,1513151,1521040,1526470,1536524,1539176-1539177,1544469,1544473,1552805,1558894,1558917,1561368,1561382,1561386,1561552,1561561,1561636,1561641,1561643,1561737,1562748,1564317,1568922,1570163,1577328,1577464-1577465,1578814,1586659,1586897,1586960,1588199,1588997,1589740,1589851,1589997,1590019,1590028,1590337,1590492,1590651,1590838,1590845,1590848,1590912,1593262,1593288,1593371,1593835,1594230,1595174,1595366,1600956,1601333,1601856,1601909,1609079,1609606,1617364,1617374,1617433,1617457-1617458,1624249,1626579,1627420,1627469,1632586,1637686,1637711,1640675,1642045,1643515,1643540,1643572,1643585-1643586,1643642,1643647,1644019,1648817,1656301,1658815,1659523,1659564,1664001,1664176,1665087,1666968,1666989 ,1668541,1668635,1669802,1676557,1681183,1681841,1681865,1681867,1685829,1693109,1694293,1694433,1694875,1696381,1701945,1710353,1712656,1713873,1714000,1714005,1714540,1715213,1716221,1716417,1717107,1717210,1717212,1720236,1720398,1720443,1720464,1721814,1721883,1722645,1722801,1723151,1724435,1724553,1724675,1724797,1724806,1725931,1726631,1726808,1726813,1726815,1726817,1726819,1726917,1726919,1726922-1726924,1727031,1727034,1727043,1727158,1727672,1727903,1728450,1729363,1731010,1731119,1731956,1731978,1732362,1732674-1732675,1733942,1734116,1734134,1734532,1737249,1737253,1737968,1738049,1738186,1739778,1741178,1741184,1741193,1741211,1741218,1741228,1741235,1742281,1743121,1743142,1743649,1744061,1744129,1744155,1744241,1744383,1744689,1745230,1746942,1746994,1749377,1750018,1750980,1751066,1754114,1754147,1754728 /tomcat/tc8.0.x/trunk:1637685,1637709,1640674,1641726,1641729-1641730,1643513,1643539,1643571,1643581-1643582,1644018,1648816,1656300,1658801-1658803,1658811,1659522,1663997,1664175,1665086,1666967,1666988,1668634,1669801,1676556,1681182,1681840,1681864,1685827,1689921,1693108,1694291,1694427,1694873,1696379,1701944,1710347,1712618,1712655,1713872,1713998,1714004,1714538,1715207,1715866,1716216-1716217,1716414,1717208-1717209,1720235,1720396,1720442,1720463,1721813,1721882,1722800,1723130,1724434,1724674,1724792,1724803,1725929,1725963-1725965,1725970,1725974,1726172,1726175,1726179-1726182,1726195-1726198,1726200,1726203,1726226,1726576,1726630,1727029,1727037,1727671,1727900,1728449,1729362,1731009,1731955,1731977,1732360,1732672,1733941,1734115,1734133,1734531,1737967,1738173,1739777,1741217,1743647,1744152 -/tomcat/tc8.5.x/trunk:1737199,1737966,1738044,1741174,1741182,1741191,1741209,1741226,1741233,1742277,1743118,1743139-1743140,1744059,1744127,1744151,1744232,1744377,1744687,1745228,1746940,1749375,1750016,1750976,1751062,1754112,1754144 -/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,656018,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,752323,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770 809,770876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,890139,890265 ,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493,894580,894586,894805,894831,895013,895045,895057,895191,895392,895703,896370,896384,897380-897381,897776,898126,898256,898468,898527,898555,898558,898718,898836,898906,899284,899348,899420,899653,899769-899770,899783,899788,899792,899916,899918-899919,899935,899949,903916,905020,905151,905722,905728,905735,907311,907513,907538,907652,907727,907819,907825,907864,908002,908721,908754,908759,909097,909206,909212,909525,909636,909869,909875,909887,910266,910370,910442,910471,910485,910974,915226,915737,915861,916097,916141,916157,916170,917598,917633,918093,918489,918594,918684,918787,918792,918799,918803,918885,919851,919914,920025,920055,920298,920449,920596,920824,920840,921444,922010,926716,927062,927621,928482,928695,928732,928798,931709,932357,932967,935105,935983,939491,939551,940064,941356,941463,943112,944409,944416,945231,945808,945835,945841,946686,94 8057,950164,950596,950614,950851,950905,951615,953434,954435,955648,955655,956832,957130,957830,958192,960701,961948,962865,962872,962881,962900,963106,963865,963868,964614,966177-966178,966292,966692,966863,981815,988448,991837,993042,1001955,1002185,1002263,1002274,1002349,1002359,1002362,1002481,1002514,1003461,1003481,1003488,1003556,1003572,1003581,1003861,1004393,1004409,1004415,1004868-1004869,1004912,1005452,1005467,1005647,1005802,1022120,1022134,1022323,1022415,1022606,1022623,1024224,1024251,1026042,1026784,1026912,1026920,1029767,1033415,1033448,1033842,1033897,1037715,1037794,1037887,1037924,1038041,1041892,1042022,1042029,1042447,1042452,1042494,1043983,1044944,1044987,1049264,1050249,1055055,1055236,1055458,1055975,1056264,1056828,1056889,1059881,1060486,1061412,1061442,1061446,1061503,1062398,1064652,1066244,1066772,1067039,1067139,1069824,1070139,1070420,1070609,1072042,1073184,1073393,1075458,1076212,1078409,1078412,1079801,1081118,1081334,1088179,1088460,1090022,1 094069,1094089,1095138,1097899,1099575,1099586,1099772,1099789,1100145,1100822,1101094,1101144,1124680,1130774,1133014,1137862,1137996,1138950,1138953,1139280,1140693,1141104,1141441,1142043,1142904,1143134,1143150,1145137,1148216,1148471,1152601,1156171,1156519,1164567,1167394,1172233-1172234,1172236,1173614,1174353,1174882,1174884,1175158,1175190,1176799,1177125,1177245,1177850,1177862,1178228,1178233,1178684,1181028,1181136,1184917,1184919,1185200,1185588,1186011,1186104,1186123,1186137,1186153,1186378,1186712,1186763,1186949,1187381,1189240,1189386,1190388-1190389,1190474,1198622,1201576,1203091,1224801,1233426,1243034,1243038,1244567,1298140,1298628-1298629,1304468,1311997,1331766,1333161,1333173,1342498,1342503,1348425,1348461-1348495,1348989,1350294,1351056,1351636-1351640,1352011,1354685,1354847,1354856,1356125,1359981,1371283,1409007,1413552,1413556,1413562,1417282,1430079,1430481,1430567,1435606,1435636,1435642,1438411,1439054,1441348,1446640,1446650,1447012,1453105,145311 2,1456666-1456678,1456713,1456721,1457968,1460342,1460533,1484862,1486875,1492570,1494143,1500062,1503851,1505843,1513148-1513149,1526469,1533312,1536520,1539157,1539173,1540374,1552804,1555163,1558811,1561054-1561065,1561067-1561070,1561072-1561075,1561083,1561190-1561192,1561635,1561640,1561732,1562742,1562746,1564309,1564312,1568921,1574004,1577315,1577324,1577463,1578812-1578813,1586658,1586894,1586959,1588193,1588197,1589737-1589738,1589763,1589837,1589842,1589980,1590018,1590302,1590646,1590648,1590835,1590842,1590911,1593259,1593261,1593335,1593834,1594229,1595171,1595289,1597532,1600955,1600963,1600978,1600984,1601329-1601330,1601332,1601855,1608963,1609061,1609593,1617362,1617365,1617383,1617456,1623392,1624247,1626579,1627033,1628978,1631155,1631520,1632584,1634117,1634130,1637684,1637695,1640655-1640658,1641656,1641660,1641692,1641707-1641718,1641721-1641722,1642564,1642606,1643045,1643054,1643570,1644017,1648815,1656299,1658799,1658802,1659521,1663995,1664174,1665085,166 6966,1666985,1668630,1669800,1676552,1681837-1681838,1681854,1685826,1687242,1689918,1693105,1694290,1694872,1696378,1701940,1710346,1712617,1712654,1713871,1713997,1714002,1715188,1715206,1716213-1716214,1716413,1716640,1716856,1716858,1716881-1716882,1716886,1716894,1720234,1720394,1720439,1720462,1721812,1721881,1722532,1722799,1722807,1722824,1722828-1722829,1722831,1722859,1723127,1723707,1723736,1724427,1724433,1724673,1724788,1724863,1725113,1725183,1725199,1725202,1725204,1725207,1725263-1725264,1725266,1725278,1725282,1725405,1725646,1725649-1725652,1725696-1725697,1725914,1725926,1726177,1726202,1726628,1726676,1726926,1727162,1727670,1727899,1728448,1729361,1731008,1731953,1731976,1732359,1733940,1734113,1734128,1734192,1737119,1737715,1737834,1737959,1738039,1738043,1739775,1741173,1741181,1741190,1741208,1741213,1741225,1741232,1742090,1742276,1743115,1743117,1743554,1744058,1744125,1744229,1744323,1744684,1745227,1745337,1746939,1748629,1750015,1750975,1751061,1754111, 1754140-1754141 +/tomcat/tc8.5.x/trunk:1737199,1737966,1738044,1741174,1741182,1741191,1741209,1741226,1741233,1742277,1743118,1743139-1743140,1744059,1744127,1744151,1744232,1744377,1744687,1745228,1746940,1749375,1750016,1750976,1751062,1754112,1754144,1754726 +/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,656018,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,752323,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770 809,770876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,890139,890265 ,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493,894580,894586,894805,894831,895013,895045,895057,895191,895392,895703,896370,896384,897380-897381,897776,898126,898256,898468,898527,898555,898558,898718,898836,898906,899284,899348,899420,899653,899769-899770,899783,899788,899792,899916,899918-899919,899935,899949,903916,905020,905151,905722,905728,905735,907311,907513,907538,907652,907727,907819,907825,907864,908002,908721,908754,908759,909097,909206,909212,909525,909636,909869,909875,909887,910266,910370,910442,910471,910485,910974,915226,915737,915861,916097,916141,916157,916170,917598,917633,918093,918489,918594,918684,918787,918792,918799,918803,918885,919851,919914,920025,920055,920298,920449,920596,920824,920840,921444,922010,926716,927062,927621,928482,928695,928732,928798,931709,932357,932967,935105,935983,939491,939551,940064,941356,941463,943112,944409,944416,945231,945808,945835,945841,946686,94 8057,950164,950596,950614,950851,950905,951615,953434,954435,955648,955655,956832,957130,957830,958192,960701,961948,962865,962872,962881,962900,963106,963865,963868,964614,966177-966178,966292,966692,966863,981815,988448,991837,993042,1001955,1002185,1002263,1002274,1002349,1002359,1002362,1002481,1002514,1003461,1003481,1003488,1003556,1003572,1003581,1003861,1004393,1004409,1004415,1004868-1004869,1004912,1005452,1005467,1005647,1005802,1022120,1022134,1022323,1022415,1022606,1022623,1024224,1024251,1026042,1026784,1026912,1026920,1029767,1033415,1033448,1033842,1033897,1037715,1037794,1037887,1037924,1038041,1041892,1042022,1042029,1042447,1042452,1042494,1043983,1044944,1044987,1049264,1050249,1055055,1055236,1055458,1055975,1056264,1056828,1056889,1059881,1060486,1061412,1061442,1061446,1061503,1062398,1064652,1066244,1066772,1067039,1067139,1069824,1070139,1070420,1070609,1072042,1073184,1073393,1075458,1076212,1078409,1078412,1079801,1081118,1081334,1088179,1088460,1090022,1 094069,1094089,1095138,1097899,1099575,1099586,1099772,1099789,1100145,1100822,1101094,1101144,1124680,1130774,1133014,1137862,1137996,1138950,1138953,1139280,1140693,1141104,1141441,1142043,1142904,1143134,1143150,1145137,1148216,1148471,1152601,1156171,1156519,1164567,1167394,1172233-1172234,1172236,1173614,1174353,1174882,1174884,1175158,1175190,1176799,1177125,1177245,1177850,1177862,1178228,1178233,1178684,1181028,1181136,1184917,1184919,1185200,1185588,1186011,1186104,1186123,1186137,1186153,1186378,1186712,1186763,1186949,1187381,1189240,1189386,1190388-1190389,1190474,1198622,1201576,1203091,1224801,1233426,1243034,1243038,1244567,1298140,1298628-1298629,1304468,1311997,1331766,1333161,1333173,1342498,1342503,1348425,1348461-1348495,1348989,1350294,1351056,1351636-1351640,1352011,1354685,1354847,1354856,1356125,1359981,1371283,1409007,1413552,1413556,1413562,1417282,1430079,1430481,1430567,1435606,1435636,1435642,1438411,1439054,1441348,1446640,1446650,1447012,1453105,145311 2,1456666-1456678,1456713,1456721,1457968,1460342,1460533,1484862,1486875,1492570,1494143,1500062,1503851,1505843,1513148-1513149,1526469,1533312,1536520,1539157,1539173,1540374,1552804,1555163,1558811,1561054-1561065,1561067-1561070,1561072-1561075,1561083,1561190-1561192,1561635,1561640,1561732,1562742,1562746,1564309,1564312,1568921,1574004,1577315,1577324,1577463,1578812-1578813,1586658,1586894,1586959,1588193,1588197,1589737-1589738,1589763,1589837,1589842,1589980,1590018,1590302,1590646,1590648,1590835,1590842,1590911,1593259,1593261,1593335,1593834,1594229,1595171,1595289,1597532,1600955,1600963,1600978,1600984,1601329-1601330,1601332,1601855,1608963,1609061,1609593,1617362,1617365,1617383,1617456,1623392,1624247,1626579,1627033,1628978,1631155,1631520,1632584,1634117,1634130,1637684,1637695,1640655-1640658,1641656,1641660,1641692,1641707-1641718,1641721-1641722,1642564,1642606,1643045,1643054,1643570,1644017,1648815,1656299,1658799,1658802,1659521,1663995,1664174,1665085,166 6966,1666985,1668630,1669800,1676552,1681837-1681838,1681854,1685826,1687242,1689918,1693105,1694290,1694872,1696378,1701940,1710346,1712617,1712654,1713871,1713997,1714002,1715188,1715206,1716213-1716214,1716413,1716640,1716856,1716858,1716881-1716882,1716886,1716894,1720234,1720394,1720439,1720462,1721812,1721881,1722532,1722799,1722807,1722824,1722828-1722829,1722831,1722859,1723127,1723707,1723736,1724427,1724433,1724673,1724788,1724863,1725113,1725183,1725199,1725202,1725204,1725207,1725263-1725264,1725266,1725278,1725282,1725405,1725646,1725649-1725652,1725696-1725697,1725914,1725926,1726177,1726202,1726628,1726676,1726926,1727162,1727670,1727899,1728448,1729361,1731008,1731953,1731976,1732359,1733940,1734113,1734128,1734192,1737119,1737715,1737834,1737959,1738039,1738043,1739775,1741173,1741181,1741190,1741208,1741213,1741225,1741232,1742090,1742276,1743115,1743117,1743554,1744058,1744125,1744229,1744323,1744684,1745227,1745337,1746939,1748629,1750015,1750975,1751061,1754111, 1754140-1754141,1754445 Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1754733&r1=1754732&r2=1754733&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Mon Aug 1 10:57:28 2016 @@ -5,9 +5,9 @@ * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -76,26 +76,27 @@ import org.apache.naming.resources.Resou import org.apache.naming.resources.ResourceAttributes; import org.apache.tomcat.util.IntrospectionUtils; import org.apache.tomcat.util.compat.JreCompat; +import org.apache.tomcat.util.security.PermissionCheck; /** * Specialized web application class loader. * <p> - * This class loader is a full reimplementation of the + * This class loader is a full reimplementation of the * <code>URLClassLoader</code> from the JDK. It is designed to be fully * compatible with a normal <code>URLClassLoader</code>, although its internal * behavior may be completely different. * <p> - * <strong>IMPLEMENTATION NOTE</strong> - This class loader faithfully follows - * the delegation model recommended in the specification. The system class - * loader will be queried first, then the local repositories, and only then - * delegation to the parent class loader will occur. This allows the web + * <strong>IMPLEMENTATION NOTE</strong> - This class loader faithfully follows + * the delegation model recommended in the specification. The system class + * loader will be queried first, then the local repositories, and only then + * delegation to the parent class loader will occur. This allows the web * application to override any shared class except the classes from J2SE. * Special handling is provided from the JAXP XML parser interfaces, the JNDI - * interfaces, and the classes from the servlet API, which are never loaded + * interfaces, and the classes from the servlet API, which are never loaded * from the webapp repository. * <p> - * <strong>IMPLEMENTATION NOTE</strong> - Due to limitations in Jasper - * compilation technology, any repository which contains classes from + * <strong>IMPLEMENTATION NOTE</strong> - Due to limitations in Jasper + * compilation technology, any repository which contains classes from * the servlet API will be ignored by the class loader. * <p> * <strong>IMPLEMENTATION NOTE</strong> - The class loader generates source @@ -114,10 +115,8 @@ import org.apache.tomcat.util.compat.Jre * @author Craig R. McClanahan * */ -public class WebappClassLoader - extends URLClassLoader - implements Reloader, Lifecycle - { +public class WebappClassLoader extends URLClassLoader + implements Reloader, Lifecycle, PermissionCheck { protected static org.apache.juli.logging.Log log= org.apache.juli.logging.LogFactory.getLog( WebappClassLoader.class ); @@ -129,7 +128,7 @@ public class WebappClassLoader private static final List<String> JVM_THREAD_GROUP_NAMES = new ArrayList<String>(); - public static final boolean ENABLE_CLEAR_REFERENCES = + public static final boolean ENABLE_CLEAR_REFERENCES = Boolean.valueOf(System.getProperty("org.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES", "true")).booleanValue(); /** @@ -153,7 +152,7 @@ public class WebappClassLoader } private static final String JVN_THREAD_GROUP_SYSTEM = "system"; - + static { JVM_THREAD_GROUP_NAMES.add(JVN_THREAD_GROUP_SYSTEM); JVM_THREAD_GROUP_NAMES.add("RMI Runtime"); @@ -176,7 +175,7 @@ public class WebappClassLoader } - + protected final class PrivilegedGetClassLoader implements PrivilegedAction<ClassLoader> { @@ -186,12 +185,12 @@ public class WebappClassLoader this.clazz = clazz; } - public ClassLoader run() { + public ClassLoader run() { return clazz.getClassLoader(); - } + } } - + // ------------------------------------------------------- Static Variables @@ -224,13 +223,13 @@ public class WebappClassLoader protected static final StringManager sm = StringManager.getManager(Constants.Package); - + /** * Use anti JAR locking code, which does URL rerouting when accessing * resources. */ - boolean antiJARLocking = false; - + boolean antiJARLocking = false; + // ----------------------------------------------------------- Constructors @@ -262,9 +261,9 @@ public class WebappClassLoader public WebappClassLoader(ClassLoader parent) { super(new URL[0], parent); - + this.parent = getParent(); - + system = getSystemClassLoader(); securityManager = System.getSecurityManager(); @@ -482,7 +481,7 @@ public class WebappClassLoader * objects is not performed in a thread-safe manner. */ private boolean clearReferencesThreadLocals = false; - + /** * Should Tomcat call {@link org.apache.juli.logging.LogFactory#release()} * when the class loader is stopped? If not specified, the default value @@ -500,7 +499,7 @@ public class WebappClassLoader * expire however, on a busy system that might not happen for some time. */ private boolean clearReferencesHttpClientKeepAliveThread = true; - + /** * Name of associated context used with logging and JMX to associate with * the right web application. Particularly useful for the clear references @@ -574,8 +573,8 @@ public class WebappClassLoader public boolean getAntiJARLocking() { return antiJARLocking; } - - + + /** * @param antiJARLocking The antiJARLocking to set. */ @@ -692,7 +691,7 @@ public class WebappClassLoader this.loaderDir = new File(workDir, "loader"); if (loaderDir == null) { canonicalLoaderDir = null; - } else { + } else { try { canonicalLoaderDir = loaderDir.getCanonicalPath(); if (!canonicalLoaderDir.endsWith(File.separator)) { @@ -719,7 +718,7 @@ public class WebappClassLoader return (this.clearReferencesStopThreads); } - + /** * Set the clearReferencesStopThreads feature for this Context. * @@ -810,7 +809,7 @@ public class WebappClassLoader clearReferencesHttpClientKeepAliveThread; } - + // ------------------------------------------------------- Reloader Methods @@ -840,7 +839,7 @@ public class WebappClassLoader repositoryURLs = null; } catch (MalformedURLException e) { IllegalArgumentException iae = new IllegalArgumentException - ("Invalid repository: " + repository); + ("Invalid repository: " + repository); iae.initCause(e); throw iae; } @@ -971,7 +970,7 @@ public class WebappClassLoader /** * Return a String array of the current repositories for this class * loader. If there are no repositories, a zero-length array is - * returned.For security reason, returns a clone of the Array (since + * returned.For security reason, returns a clone of the Array (since * String are immutable). */ public String[] findRepositories() { @@ -1006,7 +1005,7 @@ public class WebappClassLoader ((ResourceAttributes) resources.getAttributes(paths[i])) .getLastModified(); if (lastModified != lastModifiedDates[i]) { - if( log.isDebugEnabled() ) + if( log.isDebugEnabled() ) log.debug(" Resource '" + paths[i] + "' was modified; Date is now: " + new java.util.Date(lastModified) + " Was: " @@ -1035,7 +1034,7 @@ public class WebappClassLoader continue; if (!name.equals(jarNames[i])) { // Missing JAR - log.info(" Additional JARs have been added : '" + log.info(" Additional JARs have been added : '" + name + "'"); return (true); } @@ -1043,7 +1042,7 @@ public class WebappClassLoader } if (enumeration.hasMoreElements()) { while (enumeration.hasMoreElements()) { - NameClassPair ncPair = + NameClassPair ncPair = (NameClassPair) enumeration.nextElement(); String name = ncPair.getName(); // Additional non-JAR files are allowed @@ -1217,7 +1216,7 @@ public class WebappClassLoader // Return the class we have located if (log.isTraceEnabled()) log.debug(" Returning class " + clazz); - + if ((log.isTraceEnabled()) && (clazz != null)) { ClassLoader cl; if (Globals.IS_SECURITY_ENABLED){ @@ -1407,13 +1406,13 @@ public class WebappClassLoader // (2) Search local repositories url = findResource(name); if (url != null) { - // Locating the repository for special handling in the case + // Locating the repository for special handling in the case // of a JAR if (antiJARLocking) { ResourceEntry entry = (ResourceEntry) resourceEntries.get(name); try { String repository = entry.codeBase.toString(); - if ((repository.endsWith(".jar")) + if ((repository.endsWith(".jar")) && (!(name.endsWith(".class")))) { // Copy binary content to the work directory if not present File resourceFile = new File(loaderDir, name); @@ -1731,6 +1730,26 @@ public class WebappClassLoader } + public boolean check(Permission permission) { + if (!Globals.IS_SECURITY_ENABLED) { + return true; + } + Policy currentPolicy = Policy.getPolicy(); + if (currentPolicy != null) { + ResourceEntry entry = findResourceInternal("/", "/"); + if (entry != null) { + CodeSource cs = new CodeSource( + entry.codeBase, (java.security.cert.Certificate[]) null); + PermissionCollection pc = currentPolicy.getPermissions(cs); + if (pc.implies(permission)) { + return true; + } + } + } + return false; + } + + /** * Returns the search path of URLs for loading classes and resources. * This includes the original list of URLs specified to the constructor, @@ -1798,7 +1817,7 @@ public class WebappClassLoader /** - * Get the lifecycle listeners associated with this lifecycle. If this + * Get the lifecycle listeners associated with this lifecycle. If this * Lifecycle has no listeners registered, a zero-length array is returned. */ public LifecycleListener[] findLifecycleListeners() { @@ -1850,9 +1869,9 @@ public class WebappClassLoader // Clearing references should be done before setting started to // false, due to possible side effects clearReferences(); - + started = false; - + int length = files.length; for (int i = 0; i < length; i++) { files[i] = null; @@ -1896,13 +1915,13 @@ public class WebappClassLoader /** - * Used to periodically signal to the classloader to release + * Used to periodically signal to the classloader to release * JAR resources. */ public void closeJARs(boolean force) { if (jarFiles.length > 0) { synchronized (jarFiles) { - if (force || (System.currentTimeMillis() + if (force || (System.currentTimeMillis() > (lastJarAccessed + 90000))) { for (int i = 0; i < jarFiles.length; i++) { try { @@ -1924,7 +1943,7 @@ public class WebappClassLoader // ------------------------------------------------------ Protected Methods - + /** * Clear references. */ @@ -1935,10 +1954,10 @@ public class WebappClassLoader // Stop any threads the web application started clearReferencesThreads(); - + // Clear any ThreadLocals loaded by this class loader clearReferencesThreadLocals(); - + // Clear RMI Targets loaded by this class loader if (clearReferencesRmiTargets) { clearReferencesRmiTargets(); @@ -1949,15 +1968,15 @@ public class WebappClassLoader if (ENABLE_CLEAR_REFERENCES) { clearReferencesStaticFinal(); } - + // Clear the IntrospectionUtils cache. IntrospectionUtils.clear(); - + // Clear the classloader reference in common-logging if (clearReferencesLogFactoryRelease) { org.apache.juli.logging.LogFactory.release(this); } - + // Clear the resource bundle cache // This shouldn't be necessary, the cache uses weak references but // it has caused leaks. Oddly, using the leak detection code in @@ -1978,7 +1997,7 @@ public class WebappClassLoader * if it checked the context class loader) b) using reflection would * create a dependency on the DriverManager implementation which can, * and has, changed. - * + * * We can't just create an instance of JdbcLeakPrevention as it will be * loaded by the common class loader (since it's .class file is in the * $CATALINA_HOME/lib directory). This would fail DriverManager's check @@ -1986,7 +2005,7 @@ public class WebappClassLoader * our parent class loader but define the class with this class loader * so the JdbcLeakPrevention looks like a webapp class to the * DriverManager. - * + * * If only apps cleaned up after themselves... */ private final void clearReferencesJdbc() { @@ -2038,7 +2057,7 @@ public class WebappClassLoader private final void clearReferencesStaticFinal() { - + @SuppressWarnings("unchecked") Collection<ResourceEntry> values = ((HashMap<String,ResourceEntry>) resourceEntries.clone()).values(); @@ -2074,7 +2093,7 @@ public class WebappClassLoader for (int i = 0; i < fields.length; i++) { Field field = fields[i]; int mods = field.getModifiers(); - if (field.getType().isPrimitive() + if (field.getType().isPrimitive() || (field.getName().indexOf("$") != -1)) { continue; } @@ -2089,13 +2108,13 @@ public class WebappClassLoader } else { field.set(null, null); if (log.isDebugEnabled()) { - log.debug("Set field " + field.getName() + log.debug("Set field " + field.getName() + " to null in class " + clazz.getName()); } } } catch (Throwable t) { if (log.isDebugEnabled()) { - log.debug("Could not set field " + field.getName() + log.debug("Could not set field " + field.getName() + " to null in class " + clazz.getName(), t); } } @@ -2108,7 +2127,7 @@ public class WebappClassLoader } } } - + } @@ -2120,7 +2139,7 @@ public class WebappClassLoader for (int i = 0; i < fields.length; i++) { Field field = fields[i]; int mods = field.getModifiers(); - if (field.getType().isPrimitive() + if (field.getType().isPrimitive() || (field.getName().indexOf("$") != -1)) { continue; } @@ -2136,24 +2155,24 @@ public class WebappClassLoader if (!loadedByThisOrChild(valueClass)) { if (log.isDebugEnabled()) { log.debug("Not setting field " + field.getName() + - " to null in object of class " + + " to null in object of class " + instance.getClass().getName() + " because the referenced object was of type " + - valueClass.getName() + + valueClass.getName() + " which was not loaded by this WebappClassLoader."); } } else { field.set(instance, null); if (log.isDebugEnabled()) { - log.debug("Set field " + field.getName() + log.debug("Set field " + field.getName() + " to null in class " + instance.getClass().getName()); } } } } catch (Throwable t) { if (log.isDebugEnabled()) { - log.debug("Could not set field " + field.getName() - + " to null in object instance of class " + log.debug("Could not set field " + field.getName() + + " to null in object instance of class " + instance.getClass().getName(), t); } } @@ -2164,7 +2183,7 @@ public class WebappClassLoader @SuppressWarnings("deprecation") private void clearReferencesThreads() { Thread[] threads = getThreads(); - + // Iterate over the set of threads for (Thread thread : threads) { if (thread != null) { @@ -2174,7 +2193,7 @@ public class WebappClassLoader if (thread == Thread.currentThread()) { continue; } - + // JVM controlled threads ThreadGroup tg = thread.getThreadGroup(); if (tg != null && @@ -2187,11 +2206,11 @@ public class WebappClassLoader log.debug(sm.getString( "webappClassLoader.checkThreadsHttpClient")); } - + // Don't warn about remaining JVM controlled threads continue; } - + // Skip threads that have already died if (!thread.isAlive()) { continue; @@ -2213,13 +2232,13 @@ public class WebappClassLoader log.error(sm.getString("webappClassLoader.warnThread", contextName, thread.getName())); } - + // Don't try an stop the threads unless explicitly // configured to do so if (!clearReferencesStopThreads) { continue; } - + // If the thread has been started via an executor, try // shutting down the executor try { @@ -2283,21 +2302,21 @@ public class WebappClassLoader } } - + /* * Look at a threads stack trace to see if it is a request thread or not. It * isn't perfect, but it should be good-enough for most cases. */ private boolean isRequestThread(Thread thread) { - + StackTraceElement[] elements = thread.getStackTrace(); - + if (elements == null || elements.length == 0) { // Must have stopped already. Too late to ignore it. Assume not a // request processing thread. return false; } - + // Step through the methods in reverse order looking for calls to any // CoyoteAdapter method. All request threads will have this unless // Tomcat has been heavily modified - in which case there isn't much we @@ -2311,8 +2330,8 @@ public class WebappClassLoader } return false; } - - + + private void clearReferencesStopTimerThread(Thread thread) { // Need to get references to: @@ -2431,7 +2450,7 @@ public class WebappClassLoader } catch (InvocationTargetException e) { log.warn(sm.getString("webappClassLoader.clearThreadLocalFail", contextName), e); - } + } } @@ -2597,13 +2616,13 @@ public class WebappClassLoader * Get the set of current threads as an array. */ private Thread[] getThreads() { - // Get the current thread group + // Get the current thread group ThreadGroup tg = Thread.currentThread( ).getThreadGroup( ); // Find the root thread group while (tg.getParent() != null) { tg = tg.getParent(); } - + int threadCountGuess = tg.activeCount() + 50; Thread[] threads = new Thread[threadCountGuess]; int threadCountActual = tg.enumerate(threads); @@ -2612,10 +2631,10 @@ public class WebappClassLoader threadCountGuess *=2; threads = new Thread[threadCountGuess]; // Note tg.enumerate(Thread[]) silently ignores any threads that - // can't fit into the array + // can't fit into the array threadCountActual = tg.enumerate(threads); } - + return threads; } @@ -2645,7 +2664,7 @@ public class WebappClassLoader if (objTable == null) { return; } - + // Iterate over the values in the table if (objTable instanceof Map<?,?>) { Iterator<?> iter = ((Map<?,?>) objTable).values().iterator(); @@ -2668,7 +2687,7 @@ public class WebappClassLoader if (implTable == null) { return; } - + // Iterate over the values in the table if (implTable instanceof Map<?,?>) { Iterator<?> iter = ((Map<?,?>) implTable).values().iterator(); @@ -2708,15 +2727,15 @@ public class WebappClassLoader } } } - - + + /** * Clear the {@link ResourceBundle} cache of any bundles loaded by this * class loader or any class loader where this loader is a parent class * loader. Whilst {@link ResourceBundle#clearCache()} could be used there * are complications around the {@link JasperLoader} that mean a reflection * based approach is more likely to be complete. - * + * * The ResourceBundle is using WeakReferences so it shouldn't be pinning the * class loader in memory. However, it is. Therefore clear ou the * references. @@ -2732,20 +2751,20 @@ public class WebappClassLoader // Java 5 uses SoftCache extends Abstract Map // So use Map and it *should* work with both Map<?,?> cacheList = (Map<?,?>) cacheListField.get(null); - + // Get the keys (loader references are in the key) Set<?> keys = cacheList.keySet(); - + Field loaderRefField = null; - + // Iterate over the keys looking at the loader instances Iterator<?> keysIter = keys.iterator(); - + int countRemoved = 0; - + while (keysIter.hasNext()) { Object key = keysIter.next(); - + if (loaderRefField == null) { loaderRefField = key.getClass().getDeclaredField("loaderRef"); @@ -2753,19 +2772,19 @@ public class WebappClassLoader } WeakReference<?> loaderRef = (WeakReference<?>) loaderRefField.get(key); - + ClassLoader loader = (ClassLoader) loaderRef.get(); - + while (loader != null && loader != this) { loader = loader.getParent(); } - + if (loader != null) { keysIter.remove(); countRemoved++; } } - + if (countRemoved > 0 && log.isDebugEnabled()) { log.debug(sm.getString( "webappClassLoader.clearReferencesResourceBundlesCount", @@ -2812,7 +2831,7 @@ public class WebappClassLoader } } return result; - } + } /** @@ -2882,9 +2901,9 @@ public class WebappClassLoader int pos = name.lastIndexOf('.'); if (pos != -1) packageName = name.substring(0, pos); - + Package pkg = null; - + if (packageName != null) { pkg = getPackage(packageName); // Define the package (if null) @@ -2903,7 +2922,7 @@ public class WebappClassLoader pkg = getPackage(packageName); } } - + if (securityManager != null) { // Checking sealing @@ -2920,12 +2939,12 @@ public class WebappClassLoader ("Sealing violation loading " + name + " : Package " + packageName + " is sealed."); } - + } try { clazz = defineClass(name, entry.binaryContent, 0, - entry.binaryContent.length, + entry.binaryContent.length, new CodeSource(entry.codeBase, entry.certificates)); } catch (UnsupportedClassVersionError ucve) { throw new UnsupportedClassVersionError( @@ -2940,7 +2959,7 @@ public class WebappClassLoader entry.manifest = null; entry.certificates = null; } - + return clazz; } @@ -2957,10 +2976,10 @@ public class WebappClassLoader entry.codeBase = getURL(new File(file, path), false); } catch (MalformedURLException e) { return null; - } + } return entry; } - + /** * Find specified resource in local repositories. @@ -3033,7 +3052,7 @@ public class WebappClassLoader int j; - long[] result2 = + long[] result2 = new long[lastModifiedDates.length + 1]; for (j = 0; j < lastModifiedDates.length; j++) { result2[j] = lastModifiedDates[j]; @@ -3068,11 +3087,11 @@ public class WebappClassLoader return null; } for (i = 0; (entry == null) && (i < jarFilesLength); i++) { - + jarEntry = jarFiles[i].getJarEntry(path); - + if (jarEntry != null) { - + entry = new ResourceEntry(); try { entry.codeBase = getURL(jarRealFiles[i], false); @@ -3090,7 +3109,7 @@ public class WebappClassLoader } catch (IOException e) { return null; } - + // Extract resources contained in JAR to the workdir if (antiJARLocking && !(path.endsWith(".class"))) { byte[] buf = new byte[1024]; @@ -3101,7 +3120,7 @@ public class WebappClassLoader jarFiles[i].entries(); while (entries.hasMoreElements()) { JarEntry jarEntry2 = entries.nextElement(); - if (!(jarEntry2.isDirectory()) + if (!(jarEntry2.isDirectory()) && (!jarEntry2.getName().endsWith (".class"))) { resourceFile = new File @@ -3117,7 +3136,7 @@ public class WebappClassLoader throw new IllegalArgumentException( sm.getString("webappClassLoader.validationErrorJarPath", jarEntry2.getName()), ioe); - } + } resourceFile.getParentFile().mkdirs(); FileOutputStream os = null; InputStream is = null; @@ -3153,25 +3172,25 @@ public class WebappClassLoader } } } - + } - + } - + if (entry == null) { synchronized (notFoundResources) { notFoundResources.put(name, name); } return null; } - + if (binaryStream != null) { - + byte[] binaryContent = new byte[contentLength]; - + int pos = 0; try { - + while (true) { int n = binaryStream.read(binaryContent, pos, binaryContent.length - pos); @@ -3196,13 +3215,13 @@ public class WebappClassLoader } } entry.binaryContent = binaryContent; - - // The certificates are only available after the JarEntry + + // The certificates are only available after the JarEntry // associated input stream has been fully read if (jarEntry != null) { entry.certificates = jarEntry.getCertificates(); } - + } } finally { if (binaryStream != null) { @@ -3238,7 +3257,7 @@ public class WebappClassLoader protected boolean isPackageSealed(String name, Manifest man) { String path = name.replace('.', '/') + '/'; - Attributes attr = man.getAttributes(path); + Attributes attr = man.getAttributes(path); String sealed = null; if (attr != null) { sealed = attr.getValue(Name.SEALED); @@ -3297,8 +3316,8 @@ public class WebappClassLoader protected void refreshPolicy() { try { - // The policy file may have been modified to adjust - // permissions, so we're reloading it when loading or + // The policy file may have been modified to adjust + // permissions, so we're reloading it when loading or // reloading a Context Policy policy = Policy.getPolicy(); policy.refresh(); @@ -3312,7 +3331,7 @@ public class WebappClassLoader /** * Filter classes. - * + * * @param name class name * @return true if the class should be filtered */ @@ -3340,12 +3359,12 @@ public class WebappClassLoader /** - * Validate a classname. As per SRV.9.7.2, we must restict loading of - * classes from J2SE (java.*) and classes of the servlet API + * Validate a classname. As per SRV.9.7.2, we must restict loading of + * classes from J2SE (java.*) and classes of the servlet API * (javax.servlet.*). That should enhance robustness and prevent a number * of user error (where an older version of servlet.jar would be present * in /WEB-INF/lib). - * + * * @param name class name * @return true if the name is valid */ Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/Digester.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/Digester.java?rev=1754733&r1=1754732&r2=1754733&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/Digester.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/digester/Digester.java Mon Aug 1 10:57:28 2016 @@ -26,12 +26,14 @@ import java.io.Reader; import java.lang.reflect.InvocationTargetException; import java.net.URI; import java.net.URISyntaxException; +import java.security.Permission; import java.util.EmptyStackException; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.PropertyPermission; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; @@ -40,6 +42,7 @@ import javax.xml.parsers.SAXParserFactor import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.IntrospectionUtils; +import org.apache.tomcat.util.security.PermissionCheck; import org.xml.sax.Attributes; import org.xml.sax.EntityResolver; import org.xml.sax.ErrorHandler; @@ -80,6 +83,13 @@ public class Digester extends DefaultHan private static class SystemPropertySource implements IntrospectionUtils.PropertySource { public String getProperty( String key ) { + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + if (cl instanceof PermissionCheck) { + Permission p = new PropertyPermission(key, "read"); + if (!((PermissionCheck) cl).check(p)) { + return null; + } + } return System.getProperty(key); } } Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=1754733&r1=1754732&r2=1754733&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Mon Aug 1 10:57:28 2016 @@ -109,6 +109,14 @@ <code>dispatchersUseEncodedPaths</code> attribute of the Context. (markt) </fix> + <add> + Provide a mechanism that enables the container to check if a component + (typically a web application) has been granted a given permission when + running under a SecurityManager without the current execution stack + having to have passed through the component. Use this new mechanism to + extend SecurityManager protection to the system property replacement + feature of the digester. (markt) + </add> </changelog> </subsection> <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org