[ https://issues.apache.org/jira/browse/KNOX-3001?focusedWorklogId=900756&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-900756 ]
ASF GitHub Bot logged work on KNOX-3001: ---------------------------------------- Author: ASF GitHub Bot Created on: 19/Jan/24 18:20 Start Date: 19/Jan/24 18:20 Worklog Time Spent: 10m Work Description: pzampino commented on code in PR #834: URL: https://github.com/apache/knox/pull/834#discussion_r1459490179 ########## gateway-topology-simple/src/main/java/org/apache/knox/gateway/topology/simple/SimpleDescriptorHandler.java: ########## @@ -635,6 +635,15 @@ private static Map<String, File> generateTopology(final SimpleDescriptor desc, return result; } + /* + * First, undoes any previous manual XML escape. + * Second applies XML-escape on the result of the first step. + */ + private static String getXmlEscapedValue(String value) { + final String unescapedValue = StringEscapeUtils.unescapeXml(value); Review Comment: Perhaps, even just a check for '&' since I don't think that's expected in unescaped forms of this content? Issue Time Tracking ------------------- Worklog Id: (was: 900756) Time Spent: 1h 10m (was: 1h) > Avoid double XML escaping in SimpleDescriptorHandler > ---------------------------------------------------- > > Key: KNOX-3001 > URL: https://issues.apache.org/jira/browse/KNOX-3001 > Project: Apache Knox > Issue Type: Improvement > Components: Server > Affects Versions: 2.1.0 > Reporter: Sandor Molnar > Assignee: Sandor Molnar > Priority: Major > Fix For: 2.1.0 > > Time Spent: 1h 10m > Remaining Estimate: 0h > > KNOX-2804 added a beneficial improvement in Knox's logic when dealing with > JSON files and turned them into XML topologies: before the generated topology > persisted, the possible values are XML-escaped to avoid errors in SAXParser. > However, this might cause backward-compatible issues in deployments, where > the data in the given shared provider config or descriptor is already given > in XML-friendy way. > For instance, using the following shared provider config will result in a bad > XML topology: > {noformat} > { > "providers" : [ { > "role" : "webappsec", > "name" : "WebAppSec", > "enabled" : true, > "params" : { > "xframe.options.enabled" : "true" > } > }, { > "role" : "authentication", > "name" : "ShiroProvider", > "enabled" : true, > "params" : { > "main.ldapContextFactory" : > "org.apache.knox.gateway.shirorealm.KnoxLdapContextFactory", > "main.ldapRealm" : "org.apache.knox.gateway.shirorealm.KnoxLdapRealm", > "main.ldapRealm.authenticationCachingEnabled" : "false", > "main.ldapRealm.contextFactory" : "$ldapContextFactory", > "main.ldapRealm.contextFactory.authenticationMechanism" : "simple", > "main.ldapRealm.contextFactory.url" : "ldap://localhost:33389", > "main.ldapRealm.userDnTemplate" : > "uid=0ou=people,dc=hadoop,dc=apache,dc=org", > "main.ldapRealm.userSearchFilter" : > "(&(&(objectclass=person)(sAMAccountName={0}))(|(memberOf=CN=SecXX-users,OU=ManagedGroups,OU=Groups,OU=XX,OU=xx,DC=xx,DC=int)(memberOf=CN=SecXX-rls-serviceuser,OU=ManagedGroups,OU=Groups,OU=XX,OU=xx,DC=xx,DC=int)))", > "redirectToUrl" : "/${GATEWAY_PATH}/knoxsso/knoxauth/login.html", > "restrictedCookies" : "rememberme,WWW-Authenticate", > "sessionTimeout" : "30", > "urls./**" : "authcBasic" > } > }, { > "role" : "identity-assertion", > "name" : "Default", > "enabled" : true, > "params" : { } > } ], > "readOnly" : true > } {noformat} > The generated XML: > {noformat} > <?xml version="1.0" encoding="utf-8"?> > <!--==============================================--> > <!-- DO NOT EDIT. This is an auto-generated file. --> > <!--==============================================--> > <topology> > <generated>true</generated> > <gateway> > <provider> > <role>webappsec</role> > <name>WebAppSec</name> > <enabled>true</enabled> > <param> > <name>xframe.options.enabled</name> > <value>true</value> > </param> > </provider> > <provider> > <role>authentication</role> > <name>ShiroProvider</name> > <enabled>true</enabled> > <param> > <name>main.ldapContextFactory</name> > > <value>org.apache.knox.gateway.shirorealm.KnoxLdapContextFactory</value> > </param> > <param> > <name>main.ldapRealm</name> > > <value>org.apache.knox.gateway.shirorealm.KnoxLdapRealm</value> > </param> > <param> > <name>main.ldapRealm.authenticationCachingEnabled</name> > <value>false</value> > </param> > <param> > <name>main.ldapRealm.contextFactory</name> > <value>$ldapContextFactory</value> > </param> > <param> > > <name>main.ldapRealm.contextFactory.authenticationMechanism</name> > <value>simple</value> > </param> > <param> > <name>main.ldapRealm.contextFactory.url</name> > <value>ldap://localhost:33389</value> > </param> > <param> > <name>main.ldapRealm.userDnTemplate</name> > <value>uid=0ou=people,dc=hadoop,dc=apache,dc=org</value> > </param> > <param> > <name>main.ldapRealm.userSearchFilter</name> > > <value>(&amp;(&amp;(objectclass=person)(sAMAccountName={0}))(|(memberOf=CN=SecXX-users,OU=ManagedGroups,OU=Groups,OU=XX,OU=xx,DC=xx,DC=int)(memberOf=CN=SecXX-rls-serviceuser,OU=ManagedGroups,OU=Groups,OU=XX,OU=xx,DC=xx,DC=int)))</value> > </param> > <param> > <name>redirectToUrl</name> > <value>/${GATEWAY_PATH}/knoxsso/knoxauth/login.html</value> > </param> > <param> > <name>restrictedCookies</name> > <value>rememberme,WWW-Authenticate</value> > </param> > <param> > <name>sessionTimeout</name> > <value>30</value> > </param> > <param> > <name>urls./**</name> > <value>authcBasic</value> > </param> > </provider> > <provider> > <role>identity-assertion</role> > <name>Default</name> > <enabled>true</enabled> > </provider> > </gateway> <service> > <role>KNOXSSO</role> > <param> > <name>knoxsso.token.ttl</name> > <value>86400000</value> > </param> > <param> > <name>knoxsso.token.sigalg</name> > <value></value> > </param> > <param> > <name>knoxsso.redirect.whitelist.regex</name> > > <value>^https?:\/\/(.*smolnar\.root\.xyz\.com)(?::[0-9]+)?(?:\/.*)?$</value> > </param> > </service> > <application> > <name>knoxauth</name> > </application> > </topology> {noformat} > As you can see, the value of {{main.ldapRealm.userSearchFilter}} is > double-escaped that makes the topology invalid. > Moreover, the previously added XML escape function is meant for XML 1.1 > documents whereas this code generates XML 1.0, so that this should be changed > too. -- This message was sent by Atlassian Jira (v8.20.10#820010)