Blame iptables/iptables.xslt

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