Creating a Password Example: Create Rule

The following style sheet can be used for a create rule. It creates a user, generates a password for the user from the user's Surname and CN attributes, and performs an identity transform (which passes through everything in the document except the events you are trying to intercept and transform).

<?xml version="1.0" encoding="ISO-8859-1"?> 

<!-- This stylesheet has an example of how to replace a create rule with
an XSLT stylesheet and supply an initial password for "User" objects. -->

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform
"version="1.0">

<!-- ensure we have required NDS attributes -->
<xsl:template match="add">
<xsl:if test="add-attr[@attr-name='Surname'] and
add-attr[@attr-name='CN']">
<!-- copy the add through -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<!-- add a <password> element -->
<xsl:call-template name="create-password"/>
</xsl:copy>
</xsl:if>

<!-- if the xsl:if fails, we don't have all the required attributes
so we won't copy the add through, and the create rule will veto the add -->

</xsl:template>

<xsl:template name="create-password">
<password>
<xsl:value-of select="concat(add-attr[@attr-name='Surname']/value,
'-',add-attr[@attr-name='CN']/value)"/>
</password>
</xsl:template>

<!-- identity transform for everything we don't want to change -->

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

</xsl:transform>