#!/bin/bash
#	Copyright (C) 2005 McAfee, Inc.  All rights reserved
#	All rights reserved.
find_names()
{
	xsltproc - ${1} <<-END
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
    <xsl:for-each select="//Settings">
	<xsl:value-of select="@name"/><xsl:text>&#10;</xsl:text>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>
END
}

find_config_sum() 
{
	xsltproc - ${2} <<-END | sort | md5sum | awk ' { print $1 } '
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
    <xsl:for-each select="//Settings[@name='${1}']">
        <xsl:call-template name="settingsection"/>
    </xsl:for-each>
</xsl:template>

<xsl:template name="settingsection">
    <xsl:for-each select="Attr">
        <xsl:call-template name="attrsection"/>
    </xsl:for-each>
    <xsl:for-each select="NetObjectList">
        <xsl:call-template name="netobjectlist"/>
    </xsl:for-each>
    <xsl:for-each select="List">
        <xsl:call-template name="list"/>
    </xsl:for-each>
    <xsl:for-each select="Bag">
        <xsl:call-template name="bag"/>
    </xsl:for-each>
</xsl:template>

<xsl:template name="bag">
    <xsl:for-each select="Attr">
        <xsl:call-template name="attrsection"/>
    </xsl:for-each>
    <xsl:for-each select="NetObjectList">
        <xsl:call-template name="netobjectlist"/>
    </xsl:for-each>
    <xsl:for-each select="List">
        <xsl:call-template name="list"/>
    </xsl:for-each>
    <xsl:for-each select="Bag">
        <xsl:call-template name="bag"/>
    </xsl:for-each>
</xsl:template>

<xsl:template name="attrsection">
    <xsl:value-of select="@name"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="@value"/>
    <xsl:text>&#10;</xsl:text>
</xsl:template>

<xsl:template name="netobjectlist">
    <xsl:for-each select="NetObject">

        <xsl:value-of select="../@name"/>
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name"/>
        <xsl:text>.Address</xsl:text>
        <xsl:text> </xsl:text>
        <xsl:value-of select="Address/@value"/>
        <xsl:text>&#10;</xsl:text>

        <xsl:value-of select="../@name"/>
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name"/>
        <xsl:text>.NetMask</xsl:text>
        <xsl:text> </xsl:text>
        <xsl:value-of select="NetMask/@value"/>
        <xsl:text>&#10;</xsl:text>

    </xsl:for-each>

    <xsl:value-of select="@name"/>
    <xsl:text>.MTU </xsl:text>
    <xsl:value-of select="MTU/@value"/>
    <xsl:text>&#10;</xsl:text>

    <xsl:value-of select="@name"/>
    <xsl:text>.Duplex </xsl:text>
    <xsl:value-of select="Duplex/@value"/>
    <xsl:text>&#10;</xsl:text>

    <xsl:value-of select="@name"/>
    <xsl:text>.Speed </xsl:text>
    <xsl:value-of select="Speed/@value"/>
    <xsl:text>&#10;</xsl:text>

    <xsl:value-of select="@name"/>
    <xsl:text>.Autonegotiate </xsl:text>
    <xsl:value-of select="Autonegotiate/@value"/>
    <xsl:text>&#10;</xsl:text>

</xsl:template>

<xsl:template name="list">
    <xsl:for-each select="Attr">
        <xsl:value-of select="../@name"/>
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name"/>
        <xsl:text> </xsl:text>
        <xsl:value-of select="@value"/>
        <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>
END
}

find_settings_sums()
{
	LIST=`find_names ${1}`
	for configname in $LIST
	do
		sum=`find_config_sum ${configname} ${1}`
		echo ${sum} ${2}.${configname} 
	done
}

find_settings_sums ${1} ${2}

exit 0
