<?xml version="1.0" encoding="UTF-8"?><driver-configuration dn="PassExp0.DriverSet.services" driver-set-dn="DriverSet.services" name="PassExp0">
	<attributes>
		<application-schema>
			<schema-def hierarchical="false">
				<class-def class-name="User">
					<attr-def attr-name="LastName" multi-valued="false"/>
					<attr-def attr-name="FirstName" multi-valued="false"/>
					<attr-def attr-name="Title" multi-valued="false"/>
					<attr-def attr-name="Email" multi-valued="false"/>
					<attr-def attr-name="WorkPhone" multi-valued="false"/>
					<attr-def attr-name="Fax" multi-valued="false"/>
					<attr-def attr-name="WirelessPhone" multi-valued="false"/>
					<attr-def attr-name="Description" multi-valued="false"/>
				</class-def>
			</schema-def>
		</application-schema>
		<configuration-manifest>
			<manifest>
				<capability name="password-sync"/>
				<capability name="password-subscribe"/>
			</manifest>
		</configuration-manifest>
		<global-config-values>
			<configuration-values>
				<definitions>
					<definition display-name="Application accepts passwords from Identity Manager" name="enable-password-subscribe" type="boolean">
						<description>If true, allows passwords to flow from the Identity Vault to the connected system.</description>
						<value>true</value>
					</definition>
					<definition display-name="Identity Manager accepts passwords from application" name="enable-password-publish" type="boolean">
						<description>If true, allows passwords to flow from the connected system to the Identity Vault.</description>
						<value>true</value>
					</definition>
					<definition display-name="Publish passwords to NDS password" name="publish-password-to-nds" type="boolean">
						<description>Use the password from the connected system to set the non-reversible NDS password in the Identity Vault.</description>
						<value>true</value>
					</definition>
					<definition display-name="Publish passwords to Distribution Password" name="publish-password-to-dp" type="boolean">
						<description>Use the password from the connected system to set the NMAS Distribution Password used for Identity Manager password synchronization.</description>
						<value>false</value>
					</definition>
					<definition display-name="Require password policy validation before publishing passwords" name="enforce-password-policy" type="boolean">
						<description>If true, applies NMAS password policies during publish password operations. Password is not written to the Identity Vault if it does not comply.</description>
						<value>true</value>
					</definition>
					<definition display-name="Reset user's external system password to the Identity Manager password on failure" name="reset-external-password-on-failure" type="boolean">
						<description>If true, on a publish Distribution Password failure, attempt to reset the password in the connected system using the Distribution Password from the Identity Vault.</description>
						<value>true</value>
					</definition>
					<definition display-name="Notify the user of password synchronization failure via e-mail" name="notify-user-on-password-dist-failure" type="boolean">
						<description>If true, send e-mail notification of any password synchronization failures.</description>
						<value>true</value>
					</definition>
					<definition display-name="Connected System or Driver Name" name="ConnectedSystemName" type="string">
						<description>The name of the connected system, application or Identity Manager driver. This value is used by the e-mail notification templates.</description>
						<value xml:space="preserve">PassExp0</value>
					</definition>
				</definitions>
			</configuration-values>
		</global-config-values>
		<global-engine-values>
			<configuration-values>
				<definitions>
					<definition display-name="Subscriber channel retry interval in seconds" display-name-ref="ecnm_rint" name="dirxml.engine.retry-interval" range-lo="1" type="integer">
						<description description-ref="ecds_rint">The subscriber channel retry interval controls how frequently the DirXML Engine will retry the processing of a cached transaction after the application shim's Subscriber object returns a retry status.</description>
						<value>30</value>
					</definition>
					<definition display-name="Qualified form for DN-syntax attribute values" display-name-ref="ecnm_dnvf" name="dirxml.engine.qualified-dn-values" type="boolean">
						<description description-ref="ecds_dnvf">The qualified form for DN-syntax attribute values controls whether values for DN-syntax attribute values are presented in unqualified slash form or qualified slash form. A "true" setting means the values are presented in qualified form.</description>
						<value>false</value>
					</definition>
					<definition display-name="Qualified form for rename events" display-name-ref="ecnm_refm" name="dirxml.engine.qualified-rename-values" type="boolean">
						<description description-ref="ecds_refm">The qualified form for rename events controls whether the new-name portion of rename events coming from the Identity Vault are presented to the Subscriber channel with type qualifier(s) (e.g. CN=). A "true" setting means the names are presented in qualified form.</description>
						<value>false</value>
					</definition>
					<definition display-name="Maximum eDirectory replication wait time in seconds" display-name-ref="ecnm_mrpw" name="dirxml.engine.max-replication-wait" range-lo="1" type="integer">
						<description description-ref="ecds_mrpw">The maximum eDirectory replication wait time controls the maximum time that the DirXML Engine will wait for a particular change to replicate between the local replica and a remote replica. This only affects operations where the DirXML Engine is required to contact a remote eDirectory server in the same tree to perform an operation and may need to wait until some change has replicated to or from the remote server before the operation can be completed (e.g. object moves when the DirXML server does not hold the master replica of the moved object ;file system rights operations for Users created from a template.)</description>
						<value>180</value>
					</definition>
					<definition display-name="Use non-compliant backwards-compatible mode for XSLT" display-name-ref="ecnm_xbcm" name="dirxml.engine.xslt-bc-mode" type="boolean">
						<description description-ref="ecds_xbcm">This control sets the XSLT processor used by the DirXML Engine to a backwards-compatible mode. The backwards-compatible mode causes the XSLT processor to use one or more behaviors that are not XPath 1.0 and/or XSLT 1.0 standards-compliant. This is done in the interest of backwards-compatiblity with existing DirXML stylesheets that depend on the non-standard behavior(s). 
 
 In particular: 
 
 The behavior of the XPath "!=" operator when one operand is a node-set and the other operand is other than a node-set is incorrect in DirXML releases up to and including DirXML 2.0 (Novell Identity Manager 2.0). This behavior has been corrected; however, the corrected behavior is disabled by default through this control in favor of backwards-compatibility with existing DirXML stylesheets.</description>
						<value>true</value>
					</definition>
					<definition display-name="Maximum application objects to migrate at once" display-name-ref="ecnm_mxappm" name="dirxml.engine.max-migrate-app-count" range-lo="1" type="integer">
						<description description-ref="ecds_mxappm">This control is used to limit the number of application objects that the DirXML Engine will request from an application during a single query that is performed as part of a "migrate objects from application" operation. 
 
 If "java.lang.OutOfMemoryError" errors are encountered during a migrate from application operation then this number should be set lower than the default. 
 
 Note that this control does not limit the number of application objects that can be migrated; it merely limits the "batch size".</description>
						<value>50</value>
					</definition>
					<definition display-name="Set creatorsName on objects created in Identity Vault" display-name-ref="ecnm_scrnm" name="dirxml.engine.set-creators-name" type="boolean">
						<description description-ref="ecds_scrnm">This control is used by the DirXML Engine to determine if the creatorsName attribute should be set to the DN of this driver on all objects created in the Identity Vault by this driver.
 
 Setting the creatorsName attribute allows for easily identifying objects created by this driver, but also carries a performance penalty. If not set, the creatorsName attribute will default to the DN of the NCP Server object that is hosting the driver.</description>
						<value>false</value>
					</definition>
					<definition display-name="Write pending associations" display-name-ref="ecnm_pass" name="dirxml.engine.use-pending-association" type="boolean">
						<description description-ref="ecds_pass">This control determines whether the DirXML Engine will write a pending association on an object during subscriber channel processing.
 
 Writing a pending association confers little or no benefit but does incur a performance penalty. Nevertheless, the option exists to turn it on for backward compatibility.</description>
						<value>false</value>
					</definition>
					<definition display-name="Use password event values" display-name-ref="ecnm_pevvl" name="dirxml.engine.use-password-event-values" type="boolean">
						<description description-ref="ecds_pevvl">This control determines the source of the value reported for the nspmDistributionPassword attribute for subscriber channel add and modify events.
 
 Setting the control to false means that the current value of nspmDistributionPassword is obtained and reported as the value of the attribute event. This means that only the current password value is available. This is the default behavior.
 
 Setting the control to true means that the value recorded with the eDirectory event will be decrypted and reported as the value of the attribute event. This means that both the old password value (if it exists) and the replacement password value at the time of the event are available. This is useful for synchronizing passwords to certain applications that require the old password to enable setting a new password.</description>
						<value>false</value>
					</definition>
					<definition display-name="Enable password synchronization status reporting" display-name-ref="ecnm_pss" name="dirxml.engine.pwd-sync-status" type="boolean">
						<description description-ref="ecds_pss">This control determines whether the DirXML Engine will report the status of subscriber channel password change events. 
 
 Reporting the status of subscriber channel password change events allows applications such as the Identity Manager User Application to monitor the synchronization progress of a password change that should be synchronized to the connected application.</description>
						<value>true</value>
					</definition>
				</definitions>
			</configuration-values>
		</global-engine-values>
		<driver-filter-xml>
			<filter>
				<filter-class class-name="User" publisher="ignore" subscriber="sync">
					<filter-attr attr-name="nspmDistributionPassword" merge-authority="edir" publisher="ignore" publisher-optimize-modify="false" subscriber="sync"/>
					<filter-attr attr-name="CN" merge-authority="edir" publisher="ignore" publisher-optimize-modify="true" subscriber="sync"/>
				</filter-class>
			</filter>
		</driver-filter-xml>
		<driver-image><![CDATA[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]]></driver-image>
		<java-module value="com.novell.nds.dirxml.driver.delimitedtext.DelimitedTextDriver"/>
		<driver-start-option value="1"/>
		<driver-cache-limit value="0"/>
		<shim-config-info-xml>
			<driver-config name="Delimited Text">
				<driver-options>
					<field-delimiter display-name="Field Delimiter:">,</field-delimiter>
					<field-names display-name="Field Names (Field1, Field2, Field3...):">cn,nspmdistributionpassword</field-names>
					<object-class-name display-name="Object Class Name:">User</object-class-name>
					<allow-loopback display-name="Allow Driver to Consume Its Own Output?">no</allow-loopback>
				</driver-options>
				<subscriber-options>
					<output-dir display-name="Output File Path:">/home/userapp/idm/passexp0/output</output-dir>
					<output-ext display-name="Output File Extension:">.csv</output-ext>
					<output-char-encoding display-name="Destination File Character Encoding (leave blank for default):"/>
					<transactions-per-file display-name="Maximum Number of Transactions per Output File:">200</transactions-per-file>
					<file-time-out display-name="Maximum Time in Seconds before Flushing All Transactions:">30</file-time-out>
					<time-of-day display-name="Time of Day (Local Time) to Flush All Transactions:"/>
				</subscriber-options>
				<publisher-options>
					<input-dir display-name="Input File Path:">/home/userapp/idm/passexp/input</input-dir>
					<input-ext display-name="Input File Extension:">.csv</input-ext>
					<input-char-encoding display-name="Source File Character Encoding (leave blank for default):"/>
					<input-rename-ext display-name="Rename File Extension:">.bak</input-rename-ext>
					<input-poll-rate display-name="Polling Rate (in seconds):">10</input-poll-rate>
				</publisher-options>
			</driver-config>
		</shim-config-info-xml>
		<driver-password-query/>
		<shim-auth-password-query/>
		<policy-linkage>
			<linkage-item dn="MappingRule.PassExp0.DriverSet.services" order="0" policy-set="0" policy-set-name="Schema mapping"/>
			<linkage-item dn="OutputTransformSS.PassExp0.DriverSet.services" order="0" policy-set="2" policy-set-name="Output transform"/>
			<linkage-item dn="Password(Sub)-Pub Email Notifications.PassExp0.DriverSet.services" order="1" policy-set="2" policy-set-name="Output transform"/>
			<linkage-item dn="SubscriberEventTransformSS.Subscriber.PassExp0.DriverSet.services" order="0" policy-set="4" policy-set-name="Subscriber event transform"/>
		</policy-linkage>
	</attributes>
	<children>
		<publisher name="Publisher">
			<attributes/>
			<children/>
		</publisher>
		<subscriber name="Subscriber">
			<attributes/>
			<children>
				<stylesheet name="SubscriberEventTransformSS">
					<xsl:stylesheet version="1.0" xmlns:query="http://www.novell.com/nxsl/java/com.novell.nds.dirxml.driver.XdsQueryProcessor" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
						<xsl:param name="srcQueryProcessor"/>
						<!-- The first two templates implement the identity transform.	-->
						<!-- anything that doesn't match a more specific template will	-->
						<!-- be copied as is to the output 								-->
						<xsl:template match="/">
							<xsl:apply-templates select="node()|@*"/>
						</xsl:template>
						<xsl:template match="node()|@*">
							<xsl:copy>
								<xsl:apply-templates select="node()|@*"/>
							</xsl:copy>
						</xsl:template>
						<xsl:template match="modify|sync">
							<!-- convert modify or sync with an assocition to an instance so that -->
							<!-- output transform can create a complete output record -->
							<xsl:variable name="associationValue" select="string(association/text())"/>
							<xsl:choose>
								<xsl:when test="association[@state = 'disabled']">
									<!-- ignore if the association is disabled -->
								</xsl:when>
								<xsl:otherwise>
									<!-- if a modify on an associated object the association replace it with the instance -->
									<!-- returned by querying the object -->
									<xsl:variable name="query">
										<nds dtdversion="1.0" ndsversion="8.5">
											<input>
												<!-- may want to specifiy a dest-dn here to specify the root of the search -->
												<query class-name="User" dest-dn="{@src-dn}" dest-entry-id="{@src-entry-id}" scope="entry">
													<!-- this should match the attributes in the subscriber filter -->
													<read-attr attr-name="CN"/>
													<read-attr attr-name="nspmDistributionPassword"/>
												</query>
											</input>
										</nds>
									</xsl:variable>
									<!-- query NDS -->
									<xsl:variable name="result" select="query:query($srcQueryProcessor,$query)"/>
									<!-- copy the instance into the output -->
									<xsl:copy-of select="$result//instance"/>
								</xsl:otherwise>
							</xsl:choose>
						</xsl:template>
					</xsl:stylesheet>
				</stylesheet>
			</children>
		</subscriber>
		<rule name="MappingRule">
			<attr-name-map>
				<class-name>
					<nds-name>User</nds-name>
					<app-name>User</app-name>
				</class-name>
				<attr-name class-name="User">
					<nds-name>CN</nds-name>
					<app-name>cn</app-name>
				</attr-name>
				<attr-name class-name="User">
					<nds-name>nspmDistributionPassword</nds-name>
					<app-name>nspmdistributionpassword</app-name>
				</attr-name>
			</attr-name-map>
		</rule>
		<rule name="Password(Sub)-Pub Email Notifications">
			<policy>
				<description>Email notifications for failed password publications</description>
				<rule>
					<description>Send e-mail for a failed publish password operation</description>
					<conditions>
						<and>
							<if-global-variable mode="nocase" name="notify-user-on-password-dist-failure" op="equal">true</if-global-variable>
							<if-operation op="equal">status</if-operation>
							<if-xpath op="true">self::status[@level != 'success']/operation-data/password-publish-status</if-xpath>
						</and>
					</conditions>
					<actions>
						<!-- generate email notification -->
						<do-send-email-from-template notification-dn="cn=security\cn=Default Notification Collection" template-dn="cn=security\cn=Default Notification Collection\cn=Password Sync Fail">
							<arg-string name="UserFullName">
								<token-src-attr name="Full Name">
									<arg-association>
										<token-xpath expression="self::status/operation-data/password-publish-status/association"/>
									</arg-association>
								</token-src-attr>
							</arg-string>
							<arg-string name="UserGivenName">
								<token-src-attr name="Given Name">
									<arg-association>
										<token-xpath expression="self::status/operation-data/password-publish-status/association"/>
									</arg-association>
								</token-src-attr>
							</arg-string>
							<arg-string name="UserLastName">
								<token-src-attr name="Surname">
									<arg-association>
										<token-xpath expression="self::status/operation-data/password-publish-status/association"/>
									</arg-association>
								</token-src-attr>
							</arg-string>
							<arg-string name="ConnectedSystemName">
								<token-global-variable name="ConnectedSystemName"/>
							</arg-string>
							<arg-string name="to">
								<token-src-attr name="Internet EMail Address">
									<arg-association>
										<token-xpath expression="self::status/operation-data/password-publish-status/association"/>
									</arg-association>
								</token-src-attr>
							</arg-string>
							<arg-string name="FailureReason">
								<token-text/>
								<token-xpath expression="self::status/child::text()"/>
							</arg-string>
						</do-send-email-from-template>
					</actions>
				</rule>
			</policy>
		</rule>
		<stylesheet name="InputTransformSS">
			<xsl:stylesheet extension-element-prefixes="nxsl" version="1.0" xmlns:nxsl="http://www.novell.com/nxsl" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
				<!-- each application must fill in the name of the field that provides the association key -->
				<xsl:variable name="association-field-name" select="'Email'"/>
				<!-- The following two fields will be concatinated to form the CN of the user -->
				<xsl:variable name="srcdn-field-name1" select="'FirstName'"/>
				<xsl:variable name="srcdn-field-name2" select="'LastName'"/>
				<!-- each application must fill in the name of the class that the delimited text represents -->
				<xsl:variable name="object-class" select="'User'"/>
				<xsl:template match="/">
					<xsl:choose>
						<!-- if document element is delimited-text, then we need to do the transformation -->
						<xsl:when test="delimited-text">
							<nds dtdversion="1.1" ndsversion="8.6" xml:space="default">
								<input>
									<!-- for each record, do an add -->
									<xsl:for-each select="delimited-text/record">
										<!-- see NDSDTD doc on web for Add verb syntax & details -->
										<!-- get the association id into a variable -->
										<xsl:variable name="association" select="field[@name=$association-field-name]"/>
										<!-- get the src-dn id into a variable, replacing invalid DN characters with a dash -->
										<xsl:variable name="temp1" select="concat(field[@name=$srcdn-field-name1],' ')"/>
										<xsl:variable name="temp2" select="concat($temp1,field[@name=$srcdn-field-name2])"/>
										<xsl:variable name="srcdn" select="translate($temp2,'+=,.\','-----')"/>
										<!-- generate the add event -->
										<add class-name="{$object-class}" src-dn="{$srcdn}">
											<!-- generate the association -->
											<association>
												<xsl:value-of select="$association"/>
											</association>
											<!-- handle each field -->
											<xsl:for-each select="field[string()]">
												<xsl:variable name="fieldValue" select="normalize-space(.)"/>
												<!-- generate the add-attr -->
												<add-attr attr-name="{@name}">
													<!-- based on the field name, may want to do some special handling -->
													<!--
                                                    <xsl:choose>
                                                    <xsl:when test="@name='Some field that needs special handling'">
                                                    <nxsl:assign-variable name="fieldValue" select="some operation on $fieldValue"/>
                                                    </xsl:when>
                                                    <xsl:otherwise>
                                                    </xsl:otherwise>
                                                    </xsl:choose>
                                                    -->
													<!-- generate the value element using string syntax -->
													<!-- note that attributes that require a structured or octet syntax -->
													<!-- may require special handling here -->
													<value type="string">
														<xsl:value-of select="$fieldValue"/>
													</value>
												</add-attr>
											</xsl:for-each>
										</add>
									</xsl:for-each>
								</input>
							</nds>
						</xsl:when>
						<xsl:otherwise>
							<!-- if the document element is not <delimited-text> copy as is-->
							<xsl:copy-of select="."/>
						</xsl:otherwise>
					</xsl:choose>
				</xsl:template>
			</xsl:stylesheet>
		</stylesheet>
		<stylesheet name="OutputTransformSS">
			<xsl:stylesheet version="1.0" xmlns:cmd="http://www.novell.com/nxsl/java/com.novell.nds.dirxml.driver.XdsCommandProcessor" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
				<xsl:param name="srcCommandProcessor"/>
				<!-- each application must fill in the name of the field that provides the association key -->
				<xsl:variable name="association-field-name" select="'Email'"/>
				<!-- change the following line to change the delimiter from a comma to any other desired delimiter -->
				<xsl:variable name="delimiter" select="','"/>
				<xsl:template match="nds[input]">
					<!-- only look at <add> events and <instances> apply a template for each add transaction-->
					<xsl:apply-templates select="//add|//instance"/>
				</xsl:template>
				<xsl:template match="nds[output]">
					<xsl:copy-of select="."/>
				</xsl:template>
				<!-- now here's the template -->
				<xsl:template match="input/add|input/instance">
					<!-- create association if needed and we have enough info -->
					<xsl:variable name="hasAssociation" select="string(association) != ''"/>
					<xsl:variable name="associationValue" select="*[(@attr-name = $association-field-name)][1]/value[1]/text()"/>
					<xsl:if test="not($hasAssociation) and $associationValue">
						<xsl:variable name="dummy">
							<add-association dest-dn="{@src-dn}" dest-entry-id="{@src-entry-id}">
								<xsl:value-of select="$associationValue"/>
							</add-association>
						</xsl:variable>
						<xsl:variable name="dummy2" select="cmd:execute($srcCommandProcessor, $dummy)"/>
					</xsl:if>
					<!-- output the fields in order -->
					<xsl:call-template name="output-field">
						<xsl:with-param name="field-value" select="*[(@attr-name = 'cn')][1]/value[1]"/>
					</xsl:call-template>
					<xsl:value-of select="$delimiter"/>
					<xsl:call-template name="output-field">
						<xsl:with-param name="field-value" select="*[(@attr-name = 'nspmdistributionpassword')][1]/value[1]"/>
					</xsl:call-template>
					<!-- finish the record with a newline -->
					<!-- uncomment next line to have DOS style end of line (0D0A), otherwise just 0A -->
					<!-- <xsl:value-of select="'&#x0D;'"/> -->
					<xsl:value-of select="&apos;&#xa;&apos;"/>
				</xsl:template>
				<xsl:template name="output-field">
					<xsl:param name="field-value"/>
					<xsl:choose>
						<xsl:when test="contains($field-value, $delimiter)">
							<!-- if the field value contains a delimiter, then enclose in quotes -->
							<xsl:text>"</xsl:text>
							<xsl:value-of select="$field-value"/>
							<xsl:text>"</xsl:text>
						</xsl:when>
						<xsl:otherwise>
							<!-- otherwise output it raw -->
							<xsl:value-of select="$field-value"/>
						</xsl:otherwise>
					</xsl:choose>
				</xsl:template>
			</xsl:stylesheet>
		</stylesheet>
	</children>
	<global-config-values>
		<configuration-values>
			<definitions/>
		</configuration-values>
	</global-config-values>
</driver-configuration>