Blame iptables/iptables.xslt

Packit 7b22a4
Packit 7b22a4
Packit 7b22a4
     Copyright 2006 UfoMechanic 
Packit 7b22a4
     Author: azez@ufomechanic.net 
Packit 7b22a4
     This code is distributed and licensed under the terms of GNU GPL v2
Packit 7b22a4
     
Packit 7b22a4
     This sample usage outputs roughly want goes in
Packit 7b22a4
       iptables-save | iptables-xml -c | xsltproc iptables.xslt -
Packit 7b22a4
     -->
Packit 7b22a4
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Packit 7b22a4
  <xsl:output method = "text" />
Packit 7b22a4
  <xsl:strip-space elements="*" />
Packit 7b22a4
Packit 7b22a4
  
Packit 7b22a4
  <xsl:template match="iptables-rules/table/chain/rule/conditions/*">
Packit 7b22a4
    
Packit 7b22a4
         and when -m does not need to be inserted -->
Packit 7b22a4
    <xsl:if test="name() != 'match'">
Packit 7b22a4
      <xsl:text> -m </xsl:text><xsl:value-of select="name()"/>
Packit 7b22a4
    </xsl:if>
Packit 7b22a4
    <xsl:apply-templates select="node()"/>
Packit 7b22a4
  </xsl:template>
Packit 7b22a4
Packit 7b22a4
  
Packit 7b22a4
  <xsl:template match="iptables-rules/table/chain/rule/actions|table/chain/rule/conditions">
Packit 7b22a4
    <xsl:apply-templates select="*"/>
Packit 7b22a4
  </xsl:template>
Packit 7b22a4
Packit 7b22a4
  <xsl:template match="iptables-rules/table/chain/rule/actions/goto">
Packit 7b22a4
    <xsl:text> -g </xsl:text>
Packit 7b22a4
    <xsl:apply-templates select="*"/>
Packit 7b22a4
    <xsl:text>
</xsl:text>
Packit 7b22a4
  </xsl:template>
Packit 7b22a4
  <xsl:template match="iptables-rules/table/chain/rule/actions/call">
Packit 7b22a4
    <xsl:text> -j </xsl:text>
Packit 7b22a4
    <xsl:apply-templates select="*"/>
Packit 7b22a4
    <xsl:text>
</xsl:text>
Packit 7b22a4
  </xsl:template>
Packit 7b22a4
  
Packit 7b22a4
  <xsl:template match="iptables-rules/table/chain/rule/actions/*">
Packit 7b22a4
    <xsl:text> -j </xsl:text><xsl:value-of select="name()"/>
Packit 7b22a4
    <xsl:apply-templates select="*"/>
Packit 7b22a4
    <xsl:text>
</xsl:text>
Packit 7b22a4
  </xsl:template>
Packit 7b22a4
  
Packit 7b22a4
  
Packit 7b22a4
  <xsl:template match="iptables-rules/table/chain/rule/actions//*|iptables-rules/table/chain/rule/conditions//*" priority="0">
Packit 7b22a4
    <xsl:if test="@invert=1"><xsl:text> !</xsl:text></xsl:if>
Packit 7b22a4
    <xsl:text> -</xsl:text>
Packit 7b22a4
    
Packit 7b22a4
    <xsl:if test="string-length(name())>1">
Packit 7b22a4
      <xsl:text>-</xsl:text>
Packit 7b22a4
    </xsl:if>
Packit 7b22a4
    <xsl:value-of select="name()"/>
Packit 7b22a4
    <xsl:text> </xsl:text>
Packit 7b22a4
    <xsl:apply-templates select="node()"/>
Packit 7b22a4
  </xsl:template>
Packit 7b22a4
Packit 7b22a4
  <xsl:template match="iptables-rules/table/chain/rule/actions/call/*|iptables-rules/table/chain/rule/actions/goto/*">
Packit 7b22a4
    <xsl:value-of select="name()"/>
Packit 7b22a4
    
Packit 7b22a4
    <xsl:apply-templates select="node()"/>
Packit 7b22a4
  </xsl:template>
Packit 7b22a4
Packit 7b22a4
  
Packit 7b22a4
  <xsl:template name="rule-head">
Packit 7b22a4
    <xsl:if test="string-length(@packet-count)+string-length(@byte-count)">
Packit 7b22a4
      <xsl:call-template name="counters"><xsl:with-param name="node" select="."/></xsl:call-template>
Packit 7b22a4
      <xsl:text> </xsl:text>
Packit 7b22a4
    </xsl:if>
Packit 7b22a4
    <xsl:text>-A </xsl:text>
Packit 7b22a4
    <xsl:value-of select="../@name" />
Packit 7b22a4
    <xsl:apply-templates select="conditions"/>
Packit 7b22a4
  </xsl:template>
Packit 7b22a4
Packit 7b22a4
  
Packit 7b22a4
  <xsl:template match="iptables-rules/table/chain/rule">
Packit 7b22a4
    <xsl:choose>
Packit 7b22a4
      <xsl:when test="count(actions/*)>0">
Packit 7b22a4
        <xsl:for-each select="actions/*">
Packit 7b22a4
          
Packit 7b22a4
          <xsl:for-each select="../..">
Packit 7b22a4
            <xsl:call-template name="rule-head"/>
Packit 7b22a4
          </xsl:for-each>
Packit 7b22a4
          
Packit 7b22a4
          <xsl:apply-templates select="."/>
Packit 7b22a4
        </xsl:for-each>
Packit 7b22a4
      </xsl:when>
Packit 7b22a4
      <xsl:otherwise>
Packit 7b22a4
        
Packit 7b22a4
        <xsl:call-template name="rule-head"/>
Packit 7b22a4
        <xsl:text>
</xsl:text>
Packit 7b22a4
      </xsl:otherwise>
Packit 7b22a4
    </xsl:choose>
Packit 7b22a4
  </xsl:template>
Packit 7b22a4
Packit 7b22a4
  <xsl:template match="iptables-rules/table">
Packit 7b22a4
    <xsl:text># Generated by iptables.xslt
</xsl:text>
Packit 7b22a4
    <xsl:text>*</xsl:text><xsl:value-of select="@name"/><xsl:text>
</xsl:text>
Packit 7b22a4
    
Packit 7b22a4
    <xsl:for-each select="chain">
Packit 7b22a4
      <xsl:text>:</xsl:text>
Packit 7b22a4
      <xsl:value-of select="@name"/>
Packit 7b22a4
      <xsl:text> </xsl:text>
Packit 7b22a4
      <xsl:choose>
Packit 7b22a4
        <xsl:when test="not(string-length(@policy))"><xsl:text>-</xsl:text></xsl:when>
Packit 7b22a4
        <xsl:otherwise><xsl:value-of select="@policy"/></xsl:otherwise>
Packit 7b22a4
      </xsl:choose>
Packit 7b22a4
      <xsl:text> </xsl:text>
Packit 7b22a4
      <xsl:call-template name="counters"><xsl:with-param name="node" select="."/></xsl:call-template>
Packit 7b22a4
      <xsl:text>
</xsl:text>
Packit 7b22a4
    </xsl:for-each>
Packit 7b22a4
    
Packit 7b22a4
    <xsl:apply-templates select="node()"/>
Packit 7b22a4
    <xsl:text>COMMIT
# Completed
</xsl:text>
Packit 7b22a4
  </xsl:template>
Packit 7b22a4
  
Packit 7b22a4
  <xsl:template name="counters">
Packit 7b22a4
    <xsl:param name="node"/>
Packit 7b22a4
    <xsl:text>[</xsl:text>
Packit 7b22a4
    <xsl:if test="string-length($node/@packet-count)"><xsl:value-of select="$node/@packet-count"/></xsl:if>
Packit 7b22a4
    <xsl:if test="string-length($node/@packet-count)=0">0</xsl:if>
Packit 7b22a4
    <xsl:text>:</xsl:text>
Packit 7b22a4
    <xsl:if test="string-length($node/@byte-count)"><xsl:value-of select="$node/@byte-count"/></xsl:if>
Packit 7b22a4
    <xsl:if test="string-length($node/@byte-count)=0">0</xsl:if>
Packit 7b22a4
    <xsl:text>]</xsl:text>
Packit 7b22a4
  </xsl:template>  
Packit 7b22a4
  
Packit 7b22a4
  
Packit 7b22a4
  <xsl:template match="@*|node()">
Packit 7b22a4
    <xsl:copy>
Packit 7b22a4
      
Packit 7b22a4
      <xsl:apply-templates select="@*"/>
Packit 7b22a4
      <xsl:apply-templates select="node()"/>
Packit 7b22a4
    </xsl:copy>
Packit 7b22a4
  </xsl:template>
Packit 7b22a4
Packit 7b22a4
</xsl:transform>