rspec = """
<rspec>
+ <context-input>
+ <sfa><user><hrn>plc.princeton.sapan</hrn></user></sfa>
+ </context-input>
+
<sfatables-input>
<rule>
+ <argument>
+ <name>hrn</name>
+ <value>plc</value>
+ </argument>
<argument>
<name>whitelist</name>
<value>plc.princeton</value>
</argument>
<argument>
<name>blacklist</name>
- <value>plc.princeton.planetlab-04</value>
+ <value>plc.tp</value>
</argument>
</rule>
</sfatables-input>
<node name="plc.princeton.planetlab-02"/>
<node name="plc.princeton.planetlab-03"/>
<node name="plc.princeton.planetlab-04"/>
- <node name="plc.mit.csail.planetlab3"/>
+ <node name="plc.tp.planetlab3"/>
</nodespec>
</request>
</rspec>
print "%d rules loaded for OUTGOING chain\n"%len(outgoing.sorted_rule_list)
newrspec = incoming.apply(rspec)
- import pdb
- pdb.set_trace()
+ print newrspec
return
if __name__=="__main__":
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="context-hrn" select="hrn"/>
+
+ <!-- Magic sauce -->
+
+ <xsl:template match="@* | node()">
+ <xsl:apply-templates select="@* | node()"/>
+ </xsl:template>
+
<xsl:template match="user">
<xsl:choose>
<xsl:when test="starts-with($context-hrn, hrn)">
- True <!--Match -->
+ <result verdict="True"/> <!--Match -->
</xsl:when>
<xsl:otherwise>
- False <!-- No match -->
+ <result verdict="False"/> <!-- No match -->
</xsl:otherwise>
</xsl:choose>
- <xsl:value-of select="$result"/>
</xsl:template>
</xsl:stylesheet>
processors = {'match':None,'target':None}
context = {'match':None,'target':None}
- def apply_processor(self, type, rspec):
+ def apply_processor(self, type, rspec, output_xpath_filter=None):
processor = self.processors[type]
# XXX TO CLEAN UP
style = libxslt.parseStylesheetDoc(styledoc)
doc = libxml2.parseDoc(rspec)
result = style.applyStylesheet(doc, None)
- stylesheet_result = style.saveResultToString(result)
+ if (output_xpath_filter):
+ p = result.xpathNewContext()
+ xpath_result = p.xpathEval(output_xpath_filter)
+ if (xpath_result == []):
+ raise Exception("Could not apply processor %s."%processor)
+
+ stylesheet_result = xpath_result[0].content
+ p.xpathFreeContext()
+ else:
+ stylesheet_result = style.saveResultToString(result)
style.freeStylesheet()
doc.freeDoc()
result.freeDoc()
+
return stylesheet_result
def match(self, rspec):
- match_result = self.apply_processor('match',rspec)
+ import pdb
+ pdb.set_trace()
+ match_result = self.apply_processor('match',rspec,"//result/@verdict")
return (match_result=='True')
def target(self, rspec):
- target_result = self.apply_processor('target',rspec)
+ target_result = self.apply_processor('target',rspec,None)
return target_result
def apply_interpreted(self, rspec):