<?Pub UDT _bookmark _target?><?Pub EntList bsol dash hellip gt lt minus?><chapter id="nis2ldap-34"><?Pub Tag atict:info tracking="on" ref="0"?><?Pub Tag atict:user user="sharonr" fullname="Sharon Veach"?><title>Transitioning From NIS to LDAP (Overview/Tasks)</title><indexterm><primary>NIS to LDAP transition</primary><seealso>N2L</seealso>
</indexterm><indexterm><primary>N2L transition</primary><see>NIS to LDAP transition</see>
</indexterm><indexterm><primary>LDAP</primary><secondary>transitioning from NIS</secondary>
</indexterm><indexterm><primary>transitioning NIS to LDAP</primary>
</indexterm><indexterm><primary>NIS to LDAP transition</primary>
</indexterm><highlights><para>This chapter describes how to enable support of NIS clients that use
naming information stored in the LDAP directory. By following the procedures
in this chapter, you can transition from using an NIS naming service to using
LDAP naming services.</para><para>To determine the benefits of transitioning to LDAP, see <olink targetptr="overview-9" remap="internal">LDAP Naming Services Compared to Other Naming Services</olink>.</para><para>The following information is included in this chapter.</para><itemizedlist><listitem><para><olink targetptr="nis2ldap-35" remap="internal">NIS-to-LDAP Service Overview</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-6" remap="internal">Transitioning From NIS to LDAP
(Task Map)</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-15" remap="internal">Prerequisites for the NIS-to-LDAP
Transition</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-2" remap="internal">Setting Up the NIS-to-LDAP Service</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-16" remap="internal">NIS-to-LDAP Best Practices
With Sun Java System Directory Server</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-24" remap="internal">NIS-to-LDAP Restrictions</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-58" remap="internal">NIS-to-LDAP Troubleshooting</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-42" remap="internal">Reverting to NIS</olink></para>
</listitem>
</itemizedlist>
</highlights><sect1 id="nis2ldap-35"><title>NIS-to-LDAP Service Overview</title><para><indexterm><primary>N2L service</primary></indexterm><indexterm><primary>N2L server</primary></indexterm><indexterm><primary><filename>NISLDAPmapping</filename> file</primary></indexterm><indexterm><primary>mapping file</primary><secondary>NIS to LDAP</secondary></indexterm>The NIS&ndash;to&ndash;LDAP transition service
(<emphasis>N2L service</emphasis>) replaces existing NIS daemons on the NIS
master server with NIS&ndash;to&ndash;LDAP transition daemons. The N2L service
also creates an NIS&ndash;to&ndash;LDAP mapping file on that server. The mapping
file specifies the mapping between NIS map entries and equivalent Directory
Information Tree (DIT) entries in LDAP. An NIS master server that has gone
through this transition is referred to as an <emphasis>N2L server</emphasis>.
The slave servers do not have an <filename>NISLDAPmapping</filename> file,
so they continue to function in the usual manner. The slave servers periodically
update their data from the N2L server as if it were a regular NIS master.</para><para>The behavior of the N2L service is controlled by the <filename>ypserv</filename> and <filename>NISLDAPmapping</filename> configuration files. A script, <command>inityp2l</command>,
assists with the initial setup of these configuration files. Once the N2L
server has been established, you can maintain N2L by directly editing the
configuration files.</para><para>The N2L service supports the following:</para><itemizedlist><listitem><para>Import of NIS maps into the LDAP Directory Information Tree
(DIT)</para>
</listitem><listitem><para>Client access to DIT information with the speed and extensibility
of NIS</para>
</listitem>
</itemizedlist><para>In any naming system, only one source of information can be the authoritative
source. In traditional NIS, NIS sources are the authoritative information.
When using the N2L service, the source of authoritative data is the LDAP directory.
The directory is managed by using directory management tools, as described
in <olink targetptr="ldapsecure-1" remap="internal">Chapter&nbsp;9, LDAP Basic Components and
Concepts (Overview)</olink>.</para><para>NIS sources are retained for emergency backup or backout only. After
using the N2L service, you can gradually phase out NIS clients. Eventually,
all NIS clients can be replaced by Solaris LDAP naming services clients.</para><para>Additional overview information is provided in the following subsections:</para><itemizedlist><listitem><para><olink targetptr="nis2ldap-30" remap="internal">NIS-to-LDAP Audience Assumptions</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-3" remap="internal">When Not to Use the NIS-to-LDAP
Service</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-36" remap="internal">Effects of the NIS-to-LDAP
Service on Users</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-12" remap="internal">NIS-to-LDAP Transition Terminology</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-31" remap="internal">NIS-to-LDAP Commands, Files,
and Maps</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-5" remap="internal">Supported Standard Mappings</olink></para>
</listitem>
</itemizedlist><sect2 id="nis2ldap-48"><title>NIS-to-LDAP Tools and the Service Management
Facility</title><indexterm><primary>New Features</primary><secondary>Service Management Facility with NIS-to-LDAP tools</secondary><seealso>NIS, LDAP</seealso>
</indexterm><indexterm><primary>Service Management Facility</primary><secondary>and NIS-to-LDAP tools</secondary><seealso>NIS, LDAP</seealso>
</indexterm><indexterm><primary>NIS-to-LDAP</primary><secondary>Service Management Facility</secondary><seealso>NIS, LDAP</seealso>
</indexterm><para>The NIS and LDAP services are managed by the Service Management Facility.
Administrative actions on these services, such as enabling, disabling, or
restarting, can be performed by using the <command>svcadm</command> command.
You can query the status of services by using the <command>svcs</command> command.
For more information about using SMF with LDAP and NIS, see <olink targetptr="clientsetup-95" remap="internal">LDAP and the Service Management Facility</olink> and <olink targetptr="cnis1-55" remap="internal">NIS and the Service Management Facility</olink>. For
an overview of SMF, refer to <olink targetdoc="sysadv1" targetptr="hbrunlevels-25516" remap="external">Chapter 16, <citetitle remap="chapter">Managing Services (Overview),</citetitle> in <citetitle remap="book">System Administration Guide: Basic Administration</citetitle></olink>. Also refer to the <olink targetdoc="group-refman" targetptr="svcadm-1m" remap="external"><citerefentry><refentrytitle>svcadm</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> and <olink targetdoc="group-refman" targetptr="svcs-1" remap="external"><citerefentry><refentrytitle>svcs</refentrytitle><manvolnum>1</manvolnum></citerefentry></olink> man pages for more details.</para>
</sect2><sect2 id="nis2ldap-30"><title>NIS-to-LDAP Audience Assumptions</title><para>You need to be familiar with NIS and LDAP concepts, terminology, and
IDs to perform the procedures in this chapter. For more information about
the NIS and LDAP naming services, see the following sections of this book.</para><itemizedlist><listitem><para><olink targetptr="anis1-25461" remap="internal">Chapter&nbsp;4, Network Information
Service (NIS) (Overview)</olink>, for an overview of NIS</para>
</listitem><listitem><para><olink targetptr="overview-1" remap="internal">Chapter&nbsp;8, Introduction
to LDAP Naming Services (Overview/Reference)</olink>, for an overview of LDAP</para>
</listitem>
</itemizedlist>
</sect2><sect2 id="nis2ldap-3"><title>When Not to Use the NIS-to-LDAP Service</title><para><indexterm><primary>N2L service</primary><secondary>when not to use</secondary></indexterm>Do not use the N2L service in these situations:</para><itemizedlist><listitem><para>In an environment where there is no plan to share data between
NIS and LDAP naming services clients</para><para>In such an environment, an
N2L server would serve as an excessively complex NIS master server.</para>
</listitem><listitem><para>In an environment where NIS maps are managed by tools that
modify the NIS source files (other than <command>yppasswd</command>)</para><para>Regeneration of NIS sources from DIT maps is an imprecise task that
requires manual checking of the resulting maps. Once the N2L service is used,
regeneration of NIS sources is provided only for backout or reverting to NIS.</para>
</listitem><listitem><para>In an environment with no NIS clients</para><para>In such
an environment, use Solaris LDAP naming services clients and their corresponding
tools.</para>
</listitem>
</itemizedlist>
</sect2><sect2 id="nis2ldap-36"><title>Effects of the NIS-to-LDAP Service on Users</title><para><indexterm><primary><command>inityp2l</command> script</primary></indexterm><indexterm><primary><command>ypmap2src</command> script</primary></indexterm>Simply installing the files that are related to the N2L service
does not change the NIS server's default behavior. At installation, the administrator
will see some changes to NIS man pages and the addition of N2L helper scripts, <command>inityp2l</command> and <command>ypmap2src</command>, on the servers. But as
long as <command>inityp2l</command> is not run or the N2L configuration files
are not created manually on the NIS server, the NIS components continue to
start in traditional NIS mode and function as usual.</para><para>After <command>inityp2l</command> is run, users see some changes in
server and client behavior. Following is a list of NIS and LDAP user types
and a description of what each type of user should notice after the N2L service
is deployed.</para><informaltable frame="topbot" pgwide="100"><tgroup cols="2" colsep="0" rowsep="0"><colspec colname="colspec0" colwidth="26.51*"/><colspec colname="colspec1" colwidth="73.49*"/><thead><row valign="bottom"><entry colname="colspec0" rowsep="1"><para>User Type</para>
</entry><entry colname="colspec1" rowsep="1"><para>Effect of N2L Service</para>
</entry>
</row>
</thead><tbody><row><entry><para>NIS master server administrators</para>
</entry><entry><para>The NIS master server is converted to an N2L server. The <filename>NISLDAPmapping</filename> and <filename>ypserv</filename> configuration files are installed
on the N2L server. After the N2L server is established, you can use LDAP commands
to administer your naming information. </para>
</entry>
</row><row><entry><para>NIS slave server administrators</para>
</entry><entry><para>After the N2L transition, an NIS slave server continues to run NIS in
the usual manner. The N2L server pushes updated NIS maps to the slave server
when <command>yppush</command> is called by <command>ypmake</command>. See
the <olink targetdoc="group-refman" targetptr="ypmake-1m" remap="external"><citerefentry><refentrytitle>ypmake</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man
page.</para>
</entry>
</row><row><entry><para>NIS clients</para>
</entry><entry><para>NIS read operations are no different than traditional NIS. When a Solaris
LDAP naming services client changes information in the DIT, the information
is copied into the NIS maps. The copy operation is complete after a configurable
timeout expires. Such behavior is similar to the behavior of a normal NIS
client when the client is connected to an NIS slave server.</para><para>If an N2L server cannot bind to the LDAP server for a read, the N2L
server returns the information from its own cached copy. Alternatively, the
N2L server can return an internal server error. You can configure the N2L
server to respond either way. See the <olink targetdoc="group-refman" targetptr="ypserv-1m" remap="external"><citerefentry><refentrytitle>ypserv</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man page for more details.</para>
</entry>
</row><row><entry><para>All users</para>
</entry><entry><para>When an NIS client makes a password change request, the change is immediately
visible on the N2L master server and to native LDAP clients.</para><para>If you attempt to change a password on the NIS client, and the LDAP
server is unavailable, then the change is refused and the N2L server returns
an internal server error. This behavior prevents incorrect information from
being written into the cache.</para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect2><sect2 id="nis2ldap-12"><title>NIS-to-LDAP Transition Terminology</title><indexterm><primary>NIS to LDAP transition</primary><secondary>terminology</secondary>
</indexterm><indexterm><primary>N2L server</primary>
</indexterm><para>The following terms are related to the implementation of the N2L service.</para><table frame="topbot" pgwide="100" id="nis2ldap-tbl-43"><title>Terminology
Related to the N2L Transition</title><tgroup cols="2" colsep="0" rowsep="0"><?PubTbl tgroup dispwid="8.62in"?><colspec colname="colspec0" colwidth="19.81*"/><colspec colname="colspec1" colwidth="80.19*"/><thead><row rowsep="1"><entry><para>Term</para>
</entry><entry><para>Description</para>
</entry>
</row>
</thead><tbody><row><entry><para>N2L configuration files</para>
</entry><entry><para>The <filename>/var/yp/NISLDAPmapping</filename> and <filename>/var/yp/ypserv</filename> files that the <command>ypserv</command> daemon uses to start
the master server in N2L mode. See the <command>NISLDAPmapping</command>(4)
and <command>ypserv</command>(4) man pages for details.</para>
</entry>
</row><row><entry><para>map</para>
</entry><entry><para>In the context of the N2L service, the term map is used in two ways:</para><itemizedlist><listitem><para>To refer to a database file in which NIS stores a specific
type of information</para>
</listitem><listitem><para>To describe the process of mapping NIS information to or from
the LDAP DIT</para>
</listitem>
</itemizedlist>
</entry>
</row><row><entry><para>mapping</para>
</entry><entry><para>The process of converting NIS entries to or from LDAP DIT entries.</para>
</entry>
</row><row><entry><para>mapping file</para>
</entry><entry><para>The <filename>NISLDAPmapping</filename> file that establishes how to
map entries between NIS and LDAP files.</para>
</entry>
</row><row><entry><para>standard maps</para>
</entry><entry><para>Commonly used  NIS maps that are supported by the N2L service without
requiring manual modification to the mapping file. A list of supported standard
maps is provided in <olink targetptr="nis2ldap-5" remap="internal">Supported Standard Mappings</olink>.</para>
</entry>
</row><row><entry><para>nonstandard maps</para>
</entry><entry><para>Standard NIS maps that are customized to use mappings between NIS and
the LDAP DIT other than the mappings identified in RFC 2307 or its successor.</para>
</entry>
</row><row><entry><para>custom map</para>
</entry><entry><para>Any map that is not a standard map and therefore requires manual modifications
to the mapping file when transitioning from NIS to LDAP.</para>
</entry>
</row><row><entry><para>LDAP client</para>
</entry><entry><para>Any traditional LDAP client that reads and writes to any LDAP server.
A traditional LDAP client is a system that reads and writes to any LDAP server.
A Solaris LDAP naming services client handles a customized subset of naming
information.</para>
</entry>
</row><row><entry colname="colspec0"><para>LDAP naming services client</para>
</entry><entry colname="colspec1"><para>A Solaris LDAP client that handles a customized subset of naming information.</para>
</entry>
</row><row><entry colname="colspec0"><para>N2L server</para>
</entry><entry colname="colspec1"><para>An NIS master server that has been reconfigured as an N2L server by
using the N2L service. Reconfiguration includes replacing NIS daemons and
adding new configuration files.</para>
</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2><sect2 id="nis2ldap-31"><title>NIS-to-LDAP Commands, Files, and Maps</title><indexterm><primary>NIS to LDAP transition</primary><secondary>commands</secondary>
</indexterm><indexterm><primary>NIS to LDAP transition</primary><secondary>configuration files</secondary>
</indexterm><para>There are two utilities, two configuration files, and a mapping that
are associated with the N2L transition.</para><table frame="topbot" pgwide="100" id="nis2ldap-tbl-33"><title>Descriptions
of N2L Commands, Files, and Maps</title><tgroup cols="2" colsep="0" rowsep="0"><?PubTbl tgroup dispwid="8.64in"?><colspec colname="colspec1" colwidth="22.27*"/><colspec colname="colspec3" colwidth="55.72*"/><thead><row rowsep="1"><entry><para>Command/File/Map</para>
</entry><entry colname="colspec3"><para>Description</para>
</entry>
</row>
</thead><tbody><row><entry><para><command>/usr/lib/netsvc/yp/inityp2l</command></para>
</entry><entry colname="colspec3"><para><indexterm><primary><command>inityp2l</command> script</primary></indexterm>A utility that assists with the creation of the <filename>NISLDAPmapping</filename> and <filename>ypserv</filename> configuration files. This utility
is not a general-purpose tool for the management of these files. An advanced
user can maintain the N2L configuration files or create custom mappings by
using a text editor to examine and customize the <command>inityp2l</command> output.
See the <olink targetdoc="group-refman" targetptr="inityp2l-1m" remap="external"><citerefentry><refentrytitle>inityp2l</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man
page.</para>
</entry>
</row><row><entry><para><command>/usr/lib/netsvc/yp/ypmap2src</command></para>
</entry><entry colname="colspec3"><para><indexterm><primary><command>ypmap2src</command> script</primary></indexterm>A utility that converts standard NIS maps to approximations of
the equivalent NIS source files. The primary use for <command>ypmap2src</command> is
to convert from an N2L transition server to  traditional NIS. See the <olink targetdoc="group-refman" targetptr="ypmap2src-1m" remap="external"><citerefentry><refentrytitle>ypmap2src</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man page.</para>
</entry>
</row><row><entry colname="colspec1"><para><filename>/var/yp/NISLDAPmapping</filename></para>
</entry><entry colname="colspec3"><para><indexterm><primary><filename>NISLDAPmapping</filename> file</primary></indexterm>A configuration file that specifies the mapping between NIS map
entries and equivalent Directory Information Tree (DIT) entries in LDAP. See
the <olink targetdoc="group-refman" targetptr="nisldapmapping-4" remap="external"><citerefentry><refentrytitle>NISLDAPmapping</refentrytitle><manvolnum>4</manvolnum></citerefentry></olink> man page.</para>
</entry>
</row><row><entry colname="colspec1"><para><filename>/var/yp/ypserv</filename></para>
</entry><entry colname="colspec3"><para><indexterm><primary><filename>ypserv</filename> file</primary></indexterm>A
file that specifies configuration information for the NIS&ndash;to&ndash;LDAP
transition daemons. See the <olink targetdoc="group-refman" targetptr="ypserv-4" remap="external"><citerefentry><refentrytitle>ypserv</refentrytitle><manvolnum>4</manvolnum></citerefentry></olink> man
page.</para>
</entry>
</row><row><entry colname="colspec1"><para><literal>ageing.byname</literal></para>
</entry><entry colname="colspec3"><para>A mapping used by <command>yppasswdd</command> to read and write password
aging information to the DIT when the NIS-to-LDAP transition is implemented.</para>
</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2><sect2 id="nis2ldap-5"><title>Supported Standard Mappings</title><para><indexterm><primary>N2L service</primary><secondary>supported mappings</secondary></indexterm>By default, the N2L service supports mappings between the following
list of maps and RFC 2307, or its successors', LDAP entries. These standard
maps do not require manual modification to the mapping file. Any maps on your
system that are not in the following list are considered custom maps and require
manual modification.</para><para>The N2L service also supports automatic mapping of the <filename>auto.*</filename> maps.
However, since most <filename>auto.*</filename> file names and contents are
specific to each network configuration, those files are not specified in this
list. The exceptions to this are the <filename>auto.home</filename> and <filename>auto.master</filename> maps, which are supported as standard maps.</para><screen>audit_user
auth_attr
auto.home
auto.master
bootparams
ethers.byaddr ethers.byname
exec_attr
group.bygid group.byname group.adjunct.byname
hosts.byaddr hosts.byname
ipnodes.byaddr ipnodes.byname
mail.byaddr mail.aliases
netgroup netgroup.byprojid netgroup.byuser netgroup.byhost
netid.byname
netmasks.byaddr
networks.byaddr networks.byname
passwd.byname passwd.byuid passwd.adjunct.byname
printers.conf.byname
prof_attr
project.byname project.byprojectid
protocols.byname protocols.bynumber
publickey.byname
rpc.bynumber
services.byname services.byservicename
timezone.byname
user_attr</screen><para>During the NIS-to-LDAP transition, the <command>yppasswdd</command> daemon
uses the N2L-specific map, <literal>ageing.byname</literal>, to read and write
password aging information to the DIT. If you are not using password aging,
then the <literal>ageing.byname</literal> mapping is ignored.</para>
</sect2>
</sect1><sect1 id="nis2ldap-6"><title>Transitioning From NIS to LDAP (Task Map)</title><para>The following table identifies the procedures needed to install and
manage the N2L service with standard and with custom NIS&ndash;to&ndash;LDAP
mappings.</para><informaltable frame="topbot" pgwide="100"><tgroup cols="3" colsep="0" rowsep="0"><?PubTbl tgroup dispwid="7.96in"?><colspec colname="colspec0" colwidth="29.37*"/><colspec colname="colspec1" colwidth="34.20*"/><colspec colname="colspec2" colwidth="35.42*"/><thead><row rowsep="1"><entry colsep="1" rowsep="1"><para>Task</para>
</entry><entry colsep="1" rowsep="1"><para>Description</para>
</entry><entry colsep="1" rowsep="1"><para>For Instructions</para>
</entry>
</row>
</thead><tbody><row><entry colsep="1" rowsep="1"><para>Complete all prerequisites.</para>
</entry><entry colsep="1" rowsep="1"><para>Be sure that you have properly configured your NIS server and Sun Java System Directory Server (LDAP
server). </para>
</entry><entry colsep="1" rowsep="1"><para><olink targetptr="nis2ldap-15" remap="internal">Prerequisites for the NIS-to-LDAP Transition</olink></para>
</entry>
</row><row><entry colname="colspec0" colsep="1" rowsep="1"><para>Set up the N2L service.</para>
</entry><entry colname="colspec1" colsep="1" rowsep="1"><para>Run <command>inityp2l</command> on the NIS master server to set up one
of these mappings:</para>
</entry><entry colname="colspec2" colsep="1" rowsep="1"><para>&nbsp;</para>
</entry>
</row><row><entry colname="colspec0" colsep="1" rowsep="1"><para>&nbsp;</para>
</entry><entry colname="colspec1" colsep="1" rowsep="1"><para>Standard mappings</para>
</entry><entry colname="colspec2" colsep="1" rowsep="1"><para><olink targetptr="nis2ldap-proc-3" remap="internal">How to Set Up the N2L Service With
Standard Mappings</olink></para>
</entry>
</row><row><entry colname="colspec0" colsep="1" rowsep="1"><para>&nbsp;</para>
</entry><entry colname="colspec1" colsep="1" rowsep="1"><para>Custom or nonstandard mappings</para>
</entry><entry colname="colspec2" colsep="1" rowsep="1"><para><olink targetptr="nis2ldap-proc-18" remap="internal">How to Set Up the N2L Service With
Custom or Nonstandard Mappings</olink></para>
</entry>
</row><row><entry colname="colspec0" colsep="1" rowsep="1"><para>Customize a map.</para>
</entry><entry colname="colspec1" colsep="1" rowsep="1"><para>View examples of how to create custom maps for the N2L transition.</para>
</entry><entry colname="colspec2" colsep="1" rowsep="1"><para><olink targetptr="nis2ldap-63" remap="internal">Examples of Custom Maps</olink></para>
</entry>
</row><row><entry colname="colspec0" colsep="1" rowsep="1"><para>Configure Sun Java System Directory Server with N2L.</para>
</entry><entry colname="colspec1" colsep="1" rowsep="1"><para>Configure and tune Sun Java System Directory Server as your LDAP server for the N2L transition.</para>
</entry><entry colname="colspec2" colsep="1" rowsep="1"><para><olink targetptr="nis2ldap-16" remap="internal">NIS-to-LDAP Best Practices With Sun Java
System Directory Server</olink></para>
</entry>
</row><row><entry colname="colspec0" colsep="1" rowsep="1"><para>Troubleshoot the system.</para>
</entry><entry colname="colspec1" colsep="1" rowsep="1"><para>Identify and resolve common N2L issues.</para>
</entry><entry colname="colspec2" colsep="1" rowsep="1"><para><olink targetptr="nis2ldap-58" remap="internal">NIS-to-LDAP Troubleshooting</olink></para>
</entry>
</row><row><entry colname="colspec0" colsep="1" rowsep="1"><para>Revert to NIS.</para>
</entry><entry colname="colspec1" colsep="1" rowsep="1"><para>Revert to NIS using the appropriate map:</para>
</entry><entry colname="colspec2" colsep="1" rowsep="1"><para>&nbsp;</para>
</entry>
</row><row><entry colname="colspec0" colsep="1" rowsep="1"><para>&nbsp;</para>
</entry><entry colname="colspec1" colsep="1" rowsep="1"><para>Maps based on old NIS source files</para>
</entry><entry colname="colspec2" colsep="1" rowsep="1"><para><olink targetptr="nis2ldap-proc-43" remap="internal">How to Revert to Maps Based on Old
Source Files</olink></para>
</entry>
</row><row><entry colname="colspec0" colsep="1" rowsep="1"><para>&nbsp;</para>
</entry><entry colname="colspec1" colsep="1" rowsep="1"><para>Maps based on the current DIT</para>
</entry><entry colname="colspec2" colsep="1" rowsep="1"><para><olink targetptr="nis2ldap-proc-49" remap="internal">How to Revert to Maps Based on Current
DIT Contents</olink></para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</sect1><sect1 id="nis2ldap-15"><title>Prerequisites for the NIS-to-LDAP Transition</title><para><indexterm><primary>NIS to LDAP transition</primary><secondary>prerequisites</secondary></indexterm><indexterm><primary>NIS to LDAP transition</primary><secondary>using <command>idsconfig</command> command</secondary></indexterm><indexterm><primary>NIS to LDAP transition</primary><secondary><filename>nsswitch.conf</filename> file configuration</secondary></indexterm><indexterm><primary>NIS to LDAP transition</primary><secondary><filename>hosts</filename> file configuration</secondary></indexterm><indexterm><primary>NIS to LDAP transition</primary><secondary><filename>ipnodes</filename> file configuration</secondary></indexterm>Before implementing the N2L service,
you must check or complete the following items.</para><itemizedlist><listitem><para>Make sure that the system is set up as a working traditional
NIS server before running the <command>inityp2l</command> script to enable
N2L mode.</para>
</listitem><listitem><para>Configure the LDAP directory server on your system.</para><para>Sun Java System Directory Server (formerly Sun ONE Directory Server)
and compatible versions of directory servers offered by Sun Microsystems,
Inc., are supported with the NIS-to-LDAP migration tools. If you use Sun Java System Directory Server,
configure the server by using the <command>idsconfig</command> command <emphasis>before</emphasis> you set up the N2L service. For more information about <command>idsconfig</command>, see <olink targetptr="sundssetup-13" remap="internal">Chapter&nbsp;11,
Setting Up Sun Java System Directory Server With LDAP Clients (Tasks)</olink> and
the <olink targetdoc="group-refman" targetptr="idsconfig-1m" remap="external"><citerefentry><refentrytitle>idsconfig</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man
page.</para><para>Other (third party) LDAP servers might work with the N2L service, but
they are not supported by Sun. If you are using an LDAP server other than
the Sun Java System Directory Server or compatible Sun servers, you must manually configure the
server to support RFC 2307, or its successors', schemas <emphasis>before</emphasis> you
set up the N2L service.</para>
</listitem><listitem><para>Make sure that the <filename>nsswitch.conf</filename> file
lists <literal>files</literal> before <literal>nis</literal> for the lookup
order, at least for the <filename>hosts</filename> and <filename>ipnodes</filename> entries.</para>
</listitem><listitem><para>Ensure that the addresses of the N2L master server and the
LDAP server are present in the <filename>hosts</filename> or <filename>ipnodes</filename> files
on the N2L master server. Whether the server addresses must be listed in <filename>hosts</filename>, <filename>ipnodes</filename>, or both files depends on how
your system is configured to resolve local host names.</para><para>An alternative
solution is to list the LDAP server address, not its host name, in <filename>ypserv</filename>. This means that the LDAP server address is listed in another
place, so changing the address of either the LDAP server or the N2L master
server requires additional file modifications.</para>
</listitem>
</itemizedlist>
</sect1><sect1 id="nis2ldap-2"><title>Setting Up the NIS-to-LDAP Service</title><indexterm><primary>N2L service</primary><secondary>setting up</secondary>
</indexterm><para>You can set up the N2L service either by using standard mappings or
by using custom mappings, as described in the next two procedures.</para><para>As part of the NIS-to -LDAP conversion, you need to run the <command>inityp2l</command> command. This command runs an interactive script for which you
must provide configuration information. The following list shows the type
of information you need to provide. See the <olink targetdoc="group-refman" targetptr="ypserv-1m" remap="external"><citerefentry><refentrytitle>ypserv</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man page for explanations
of these attributes.</para><itemizedlist><listitem><para>The name of the configuration file being created (default
= <filename>/etc/default/ypserv</filename>)</para>
</listitem><listitem><para>The DN that stores configuration information in LDAP (default
= <filename>ypserv</filename>)</para>
</listitem><listitem><para>Preferred server list for mapping data to/from LDAP</para>
</listitem><listitem><para>Authentication method for mapping data to/from LDAP</para>
</listitem><listitem><para>Transport Layer Security (TLS) method for mapping data to/from
LDAP</para>
</listitem><listitem><para>Proxy user bind DN to read/write data from/to LDAP</para>
</listitem><listitem><para>Proxy user password to read/write data from/to LDAP</para>
</listitem><listitem><para>Timeout value (in seconds) for LDAP bind operation</para>
</listitem><listitem><para>Timeout value (in seconds) for LDAP search operation</para>
</listitem><listitem><para>Timeout value (in seconds) for LDAP modify operation</para>
</listitem><listitem><para>Timeout value (in seconds) for LDAP add operation</para>
</listitem><listitem><para>Timeout value (in seconds) for LDAP delete operation</para>
</listitem><listitem><para>Time limit (in seconds) for search operation on LDAP server</para>
</listitem><listitem><para>Size limit (in bytes) for search operation on LDAP server</para>
</listitem><listitem><para>Whether N2L should follow LDAP referrals</para>
</listitem><listitem><para>LDAP retrieval error action, number of retrieval attempts,
and timeout (in seconds) between each attempt</para>
</listitem><listitem><para>Store error action, number of attempts, and timeout (in seconds)
between each attempt</para>
</listitem><listitem><para>Mapping file name</para>
</listitem><listitem><para>Whether to generate mapping information for <filename>auto_direct</filename> map</para><para>The script places relevant information regarding
custom maps at appropriate places in the mapping file.</para>
</listitem><listitem><para>The naming context</para>
</listitem><listitem><para>Whether to enable password changes</para>
</listitem><listitem><para>Whether to change the default TTL values for any map</para>
</listitem>
</itemizedlist><note><para><literal>sasl/cram-md5</literal> authentication is <emphasis>not</emphasis> supported
by most LDAP servers, including Sun Java System Directory Server.</para>
</note><task id="nis2ldap-proc-3"><title>How to Set Up the N2L Service With Standard
Mappings</title><tasksummary><para>Use this procedure if you are transitioning the maps listed in <olink targetptr="nis2ldap-5" remap="internal">Supported Standard Mappings</olink>. If you are using
custom or nonstandard maps, see <olink targetptr="nis2ldap-proc-18" remap="internal">How to
Set Up the N2L Service With Custom or Nonstandard Mappings</olink>.</para><para>When the LDAP server has been set up, run the <command>inityp2l</command> script
and supply configuration information when prompted. <command>inityp2l</command> sets
up the configuration and mapping files for standard and <filename>auto.*</filename> maps.</para>
</tasksummary><procedure><step id="nis2ldap-step-34"><para>Complete the prerequisite steps that are
listed in <olink targetptr="nis2ldap-15" remap="internal">Prerequisites for the NIS-to-LDAP
Transition</olink>.</para>
</step><step id="nis2ldap-step-4"><para>On the NIS master server, become superuser
or assume an equivalent role.</para><para>Roles contain authorizations and
privileged commands. For more information about roles, see <olink targetdoc="sysadv6" targetptr="rbactask-1" remap="external">Chapter 9, <citetitle remap="chapter">Using Role-Based Access Control (Tasks),</citetitle> in <citetitle remap="book">System Administration Guide: Security Services</citetitle></olink>.</para>
</step><step id="nis2ldap-step-5"><para>Convert the NIS master server into an N2L
server.</para><screen># <userinput>inityp2l</userinput></screen><para>Run the <command>inityp2l</command> script on the NIS master server
and follow the prompts. See <olink targetptr="nis2ldap-2" remap="internal">Setting Up the NIS-to-LDAP
Service</olink> for a list of the information you need to provide.</para><para>See the <olink targetdoc="group-refman" targetptr="inityp2l-1m" remap="external"><citerefentry><refentrytitle>inityp2l</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man
page for more details.</para>
</step><step id="nis2ldap-step-19"><para>Determine if the LDAP Directory Information
Tree (DIT) is fully initialized.</para><para>The DIT is fully initialized
if it already contains the information necessary to populate all the maps
that are listed in the <filename>NISLDAPmapping</filename> file.</para><itemizedlist><listitem><para>If no, continue with <olink targetptr="nis2ldap-step-11" remap="internal">Step&nbsp;5</olink> and skip Step 6.</para>
</listitem><listitem><para>If yes, skip Step 5 and go to <olink targetptr="nis2ldap-step-6" remap="internal">Step&nbsp;6</olink>.</para>
</listitem>
</itemizedlist>
</step><step id="nis2ldap-step-11"><para>Initialize the DIT for the transition from
the NIS source files.</para><para>Perform these steps only if the DIT has <emphasis>not</emphasis> been fully initialized.</para><substeps><step><para>Make sure that the old NIS maps are up-to-date.</para><screen># <userinput>cd /var/yp</userinput>
# <userinput>make</userinput></screen><para>For more information, see the <olink targetdoc="group-refman" targetptr="ypmake-1m" remap="external"><citerefentry><refentrytitle>ypmake</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man page.</para>
</step><step id="nis2ldap-step-13"><para>Stop the NIS daemons.</para><screen># <userinput>svcadm disable network/nis/server:default</userinput></screen>
</step><step id="nis2ldap-step-14"><para>Copy the old maps to the DIT, then initialize
N2L support for the maps.</para><screen># <userinput>ypserv</userinput> <option>Ir</option><userinput></userinput></screen><para>Wait for <command>ypserv</command> to exit.</para><tip><para>The original NIS <filename>dbm</filename> files are not overwritten.
You can recover these files, if needed.</para>
</tip>
</step><step id="nis2ldap-step-16"><para>Start the NIS daemons to ensure that they
use the new maps.</para><screen># <userinput>svcadm enable network/nis/server:default</userinput></screen><para>This completes the set up of the N2L service with standard maps. You
do not need to complete Step 6.</para>
</step>
</substeps>
</step><step id="nis2ldap-step-6"><para>Initialize the NIS maps.</para><para>Perform
these steps only if the DIT is fully initialized and you skipped Step 5.</para><substeps><step><para>Stop the NIS daemons.</para><screen># <userinput>svcadm disable network/nis/server:default</userinput></screen>
</step><step id="nis2ldap-step-8"><para>Initialize the NIS maps from information
in the DIT.</para><screen># <userinput>ypserv</userinput> <option>r</option><userinput></userinput></screen><para>Wait for <command>ypserv</command> to exit.</para><tip><para>The original NIS <filename>dbm</filename> files are not overwritten.
You can recover these files, if needed.</para>
</tip>
</step><step id="nis2ldap-step-10"><para>Start the NIS daemons to ensure that they
use the new maps.</para><screen># <userinput>svcadm enable network/nis/server:default</userinput></screen>
</step>
</substeps>
</step>
</procedure>
</task><task id="nis2ldap-proc-18"><title>How to Set Up the N2L Service With Custom
or Nonstandard Mappings</title><tasksummary><para>Use this procedure if the following circumstances apply:</para><itemizedlist><listitem><para>You have maps that are not listed in <olink targetptr="nis2ldap-5" remap="internal">Supported Standard Mappings</olink>.</para>
</listitem><listitem><para>You have standard NIS maps that you want to map to non-RFC
2307 LDAP mappings.</para>
</listitem>
</itemizedlist>
</tasksummary><procedure><step id="nis2ldap-step-35"><para>Complete the prerequisite steps that are
listed in <olink targetptr="nis2ldap-15" remap="internal">Prerequisites for the NIS-to-LDAP
Transition</olink>.</para>
</step><step><para>On the NIS master server, become superuser or assume an equivalent
role.</para><para>Roles contain authorizations and privileged commands. For
more information about roles, see <olink targetdoc="sysadv6" targetptr="rbactask-1" remap="external">Chapter 9, <citetitle remap="chapter">Using Role-Based Access Control (Tasks),</citetitle> in <citetitle remap="book">System Administration Guide: Security Services</citetitle></olink>.</para>
</step><step><para>Configure the NIS master server into the N2L server.</para><screen># <userinput>inityp2l</userinput></screen><para>Run the <command>inityp2l</command> script on the NIS master server
and follow the prompts. See <olink targetptr="nis2ldap-2" remap="internal">Setting Up the NIS-to-LDAP
Service</olink> for a list of the information you need to provide.</para><para>See the <olink targetdoc="group-refman" targetptr="inityp2l-1m" remap="external"><citerefentry><refentrytitle>inityp2l</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man
page for more details.</para>
</step><step id="nis2ldap-step-21"><para>Modify the <filename>/var/yp/NISLDAPmapping</filename> file.</para><para>See <olink targetptr="nis2ldap-63" remap="internal">Examples of Custom Maps</olink> for
examples of how to modify the mapping file.</para>
</step><step id="nis2ldap-step-20"><para>Determine if the LDAP Directory Information
Tree (DIT) is fully initialized.</para><para>The DIT is fully initialized
if it already contains the information necessary to populate all the maps
that are listed in the <filename>NISLDAPmapping</filename> file.</para><itemizedlist><listitem><para>If no, complete Step 6, Step 8, and Step 9.</para>
</listitem><listitem><para>If yes, skip Step 6 and complete <olink targetptr="nis2ldap-step-38" remap="internal">Step&nbsp;7</olink>, Step 8, and Step 9.</para>
</listitem>
</itemizedlist>
</step><step><para>Initialize the DIT for the transition from the NIS source files.</para><substeps><step><para>Make sure that the old NIS maps are up-to-date.</para><screen># <userinput>cd /var/yp</userinput>
# <userinput>make</userinput></screen><para>For more information, see the <olink targetdoc="group-refman" targetptr="ypmake-1m" remap="external"><citerefentry><refentrytitle>ypmake</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man page.</para>
</step><step><para>Stop the NIS daemons.</para><screen># <userinput>svcadm disable network/nis/server:default</userinput></screen>
</step><step><para>Copy the old maps to the DIT, then initialize N2L support for
the maps.</para><screen># <userinput>ypserv</userinput> <option>Ir</option><userinput></userinput></screen><para>Wait for <command>ypserv</command> to exit.</para><tip><para>The original NIS <filename>dbm</filename> files are not overwritten.
You can recover these files, if needed.</para>
</tip>
</step><step><para>Start the NIS daemons to ensure that they use the new maps.</para><screen># <userinput>svcadm enable network/nis/server:default</userinput></screen>
</step><step id="nis2ldap-step-36"><para>Skip Step 7 and continue with <olink targetptr="nis2ldap-step-37" remap="internal">Step&nbsp;8</olink>.</para>
</step>
</substeps>
</step><step id="nis2ldap-step-38"><para>Initialize the NIS maps.</para><para>Perform
this step only if the DIT is fully initialized.</para><substeps><step><para>Stop the NIS daemons.</para><screen># <userinput>svcadm disable network/nis/server:default</userinput></screen>
</step><step><para>Initialize the NIS maps from information in the DIT.</para><screen># <userinput>ypserv</userinput> <option>r</option><userinput></userinput></screen><para>Wait for <command>ypserv</command> to exit.</para><tip><para>The original NIS <filename>dbm</filename> files are not overwritten.
You can recover these files, if needed.</para>
</tip>
</step><step><para>Start the NIS daemons to ensure that they use the new maps.</para><screen># <userinput>svcadm enable network/nis/server:default</userinput></screen>
</step>
</substeps>
</step><step id="nis2ldap-step-37"><para>Verify that the LDAP entries are correct.</para><para>If the entries are not correct, then the entries can not be found by
LDAP naming services clients.</para><screen># <userinput>ldapsearch</userinput> <option>h</option> <userinput>server</userinput> <option>s</option> <userinput>sub</userinput> <option>b</option> <userinput>"ou=servdates, dc=..." \</userinput>
<userinput>"objectclass=servDates"</userinput></screen>
</step><step id="nis2ldap-step-23"><para>Verify the contents of the <filename>LDAP_</filename> maps.</para><para>The following sample output shows how to use <command>makedm</command> to
verify the contents of the <literal>hosts.byaddr</literal> map.</para><screen># <userinput>makedbm</userinput> <option>u</option> <userinput>LDAP_servdate.bynumber</userinput>
plato: 1/3/2001
johnson: 2/4/2003,1/3/2001
yeats: 4/4/2002
poe: 3/3/2002,3/4/2000</screen><para>If the contents are as expected, the transition from NIS to LDAP was
successful.</para><para>Note that the original NIS <filename>dbm</filename> files are not overwritten,
so you can always recover those files. See <olink targetptr="nis2ldap-42" remap="internal">Reverting
to NIS</olink> for more information.</para>
</step>
</procedure>
</task><sect2 id="nis2ldap-63"><title>Examples of Custom Maps</title><indexterm><primary>N2L service</primary><secondary>custom map examples</secondary>
</indexterm><para>The following two examples show how you might customize maps. Use your
preferred text editor to modify the <filename>/var/yp/NISLDAPmapping</filename> file
as needed. For more information about file attributes and syntax, see the <olink targetdoc="group-refman" targetptr="nisldapmapping-4" remap="external"><citerefentry><refentrytitle>NISLDAPmapping</refentrytitle><manvolnum>4</manvolnum></citerefentry></olink> man page and the LDAP naming services information
in <olink targetptr="ldapsecure-1" remap="internal">Chapter&nbsp;9, LDAP Basic Components and
Concepts (Overview)</olink>.</para><sect3 id="nis2ldap-44"><title>Example 1&ndash;Moving Host Entries</title><para>This example shows how to move host entries from the default location
to another (nonstandard) location in the DIT.</para><para>Change the <literal>nisLDAPobjectDN</literal> attribute in the <filename>NISLDAPmapping</filename> file to the new base LDAP distinguished name (DN). For this example,
the internal structure of the LDAP objects is unchanged, so <literal>objectClass</literal> entries
are unchanged.</para><para>Change:</para><screen>nisLDAPobjectDN hosts: \
                        ou=hosts,?one?, \
                        objectClass=device, \
                        objectClass=ipHost</screen><para>To:</para><screen>nisLDAPobjectDN hosts: \
                        <emphasis role="strong">ou=newHosts</emphasis>,?one?, \
                        objectClass=device, \
                        objectClass=ipHost</screen><para>This change causes entries to be mapped under</para><para>&nbsp;&nbsp;&nbsp;<literal>dn: ou=newHosts, dom=domain1, dc=sun, dc=com</literal></para><para>instead of under</para><para>&nbsp;&nbsp;&nbsp;<literal>dn: ou=hosts, dom=domain1, dc=sun, dc=com</literal>. </para>
</sect3><sect3 id="nis2ldap-45"><title>Example 2&ndash;Implementing a Custom Map</title><para>This example shows how to implement a custom map.</para><para>A hypothetical map, <emphasis>servdate.bynumber</emphasis>, contains
information about the servicing dates for systems. This map is indexed by
the machine's serial number which, in this example, is 123. Each entry consists
of the machine owner's name, a colon, and a comma-separated list of service
dates, such as John Smith:1/3/2001,4/5/2003.</para><para>The old map structure is to be mapped onto LDAP entries of the following
form:</para><screen>dn: number=123,ou=servdates,dc=... \
                 number: 123 \
                 userName: John Smith \
                 date: 1/3/2001 \
                 date: 4/5/2003 \
                  .
                  .
                  .
                 objectClass: servDates</screen><para>By examining the <filename>NISLDAPmapping</filename> file, you can see
that the mapping closest to the required pattern is <literal>group</literal>.
The custom mappings can be modeled on the <literal>group</literal> mapping.
Since there is only one map, no <literal>nisLDAPdatabaseIdMapping</literal> attribute
is required. The attributes to be added to <filename>NISLDAPmapping</filename> are
the following:</para><screen>nisLDAPentryTtl servdate.bynumber:1800:5400:3600

nisLDAPnameFields servdate.bynumber: \
                        ("%s:%s", uname, dates)

nisLDAPobjectDN servdate.bynumber: \
                        ou=servdates, ?one? \
                        objectClass=servDates:

nisLDAPattributeFromField servdate.bynumber: \
                        dn=("number=%s,", rf_key), \
                        number=rf_key, \
                        userName=uname, \
                        (date)=(dates, ",")

nisLDAPfieldFromAttribute servdate.bynumber: \
                        rf_key=number, \
                        uname=userName, \
                        dates=("%s,", (date), ",")  </screen>
</sect3>
</sect2>
</sect1><sect1 id="nis2ldap-16"><title>NIS-to-LDAP Best Practices With Sun Java System Directory Server</title><indexterm><primary>NIS to LDAP transition</primary><secondary>with Sun Java System Directory Server</secondary>
</indexterm><para>The N2L service supports Sun Java System Directory Server (formerly Sun ONE Directory Server) and compatible
versions of directory servers offered by Sun Microsystems, Inc. Other (third
party) LDAP servers might work with the N2L service, but they are not supported
by Sun. If you are using an LDAP server other than the Sun Java System Directory Server or compatible
Sun servers, you must manually configure the server to support RFC 2307, or
its successors', schemas.</para><para>If you are using the Sun Java System Directory Server, you can enhance the directory server
to improve performance. To make these enhancements, you must have LDAP administrator
privileges on the Sun Java System Directory Server. In addition, the directory server might need
to be rebooted, a task that must be coordinated with the server's LDAP clients.
The Sun Java System Directory Server (and Sun ONE and iPlanet Directory Server) documentation is
available on the <ulink url="http://docs.sun.com/coll/1224.3" type="text_url">Sun
Java System Directory Server Enterprise Edition 6.2</ulink> web site.</para><sect2 id="nis2ldap-39"><title>Creating Virtual List View Indexes With Sun Java System Directory Server</title><indexterm><primary>NIS to LDAP transition</primary><secondary>using virtual list views (VLVs)</secondary>
</indexterm><para>For large maps, LDAP virtual list view (VLV) indexes must be used to
ensure LDAP searches return complete results. For information about setting
up VLV indexes on the Sun Java System Directory Server, see the <ulink url="http://docs.sun.com/coll/1224.3" type="text_url">Sun Java System Directory
Server Enterprise Edition 6.2</ulink> documentation.</para><para>VLV search results use a fixed page size of 50000. If VLVs are used
with Sun Java System Directory Server, both the LDAP server and N2L server must be able to handle
transfers of  this size. If all of your maps are known to be smaller than
this limit, you do not need to use VLV indexes. However, if your maps are
larger than the size limit, or you are unsure of the size of all maps, use
VLV indexes to avoid incomplete returns.</para><para>If you are using VLV indexes, set up the appropriate size limits as
follows.</para><itemizedlist><listitem><para>On the Sun Java System Directory Server: <literal>nsslapd-sizelimit</literal> attribute
must be set greater than or equal to 50000 or <option>1</option>.  See the <olink targetdoc="group-refman" targetptr="idsconfig-1m" remap="external"><citerefentry><refentrytitle>idsconfig</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man page.</para>
</listitem><listitem><para>On the N2L server: <literal>nisLDAPsearchSizelimit</literal> attribute
must be set greater than or equal to 50000 or zero.  For more information,
see the <olink targetdoc="group-refman" targetptr="nisldapmapping-4" remap="external"><citerefentry><refentrytitle>NISLDAPmapping</refentrytitle><manvolnum>4</manvolnum></citerefentry></olink> man page.</para>
</listitem>
</itemizedlist><para>Once VLV indexes have been created, activate them by running <command>directoryserver</command> with the <literal>vlvindex</literal> option on the Sun Java System Directory Server.
See the <olink targetdoc="group-refman" targetptr="directoryserver-1m" remap="external"><citerefentry><refentrytitle>directoryserver</refentrytitle><manvolnum>1M</manvolnum></citerefentry></olink> man page for more information.</para><sect3 id="nis2ldap-1"><title>VLVs for Standard Maps</title><para>Use the Sun Java System Directory Server <command>idsconfig</command> command to set up VLVs
if the following conditions apply:</para><itemizedlist><listitem><para>You are using the Sun Java System Directory Server.</para>
</listitem><listitem><para>You are mapping standard maps to RFC 2307 LDAP entries.</para>
</listitem>
</itemizedlist><para>VLVs are domain specific, so each time <command>idsconfig</command> is
run, VLVs are created for one NIS domain. Therefore, during the NIS&ndash;to&ndash;LDAP
transition, you must run <command>idsconfig</command> once for <emphasis>each</emphasis> <literal>nisLDAPdomainContext</literal> attribute included in the <filename>NISLDAPmapping</filename> file.</para>
</sect3><sect3 id="nis2ldap-4"><title>VLVs for Custom and Nonstandard Maps</title><para>You must manually create new Sun Java System Directory Server VLVs for maps, or copy and
modify existing VLV indexes, if the following conditions apply:</para><itemizedlist><listitem><para>You are using the Sun Java System Directory Server.</para>
</listitem><listitem><para>You have large custom maps or have standard maps that are
mapped to nonstandard DIT locations.</para>
</listitem>
</itemizedlist><para>To view existing VLV indexes, type the following:</para><screen># <userinput>ldapsearch</userinput> <option>h</option> <userinput><replaceable>hostname</replaceable></userinput> <option>s</option> <userinput>sub</userinput> <option>b</option> <userinput>"cn=ldbm database,cn=plugins,cn=config" \</userinput>
<userinput>"objectClass=vlvSearch"</userinput></screen>
</sect3>
</sect2><sect2 id="nis2ldap-43"><title>Avoiding Server Timeouts With Sun Java System Directory Server</title><indexterm><primary>NIS to LDAP transition</primary><secondary>server timeouts</secondary>
</indexterm><para>When the N2L server refreshes a map, the result might be a large LDAP
directory access. If the Sun Java System Directory Server is not correctly configured, the refresh
operation might time out before completion. To avoid directory server timeouts,
modify the following Sun Java System Directory Server attributes manually or by running the <command>idsconfig</command> command.</para><para>For example, to increase the minimum amount of time in seconds that
the server should spend performing the search request, modify these attributes:</para><screen>dn: cn=config
nsslapd-timelimit: -1</screen><para>For testing purposes, you can use an attribute value of <option>1</option>,
which indicates no limit. When you have determined the optimum limit value,
change the attribute value. Do <emphasis>not</emphasis> maintain any attribute
settings at <option>1</option> on a production server. With no limits, the
server might be vulnerable to Denial of Service attacks.</para><para>For more information about configuring Sun Java System Directory Server with LDAP, see <olink targetptr="sundssetup-13" remap="internal">Chapter&nbsp;11, Setting Up
Sun Java System Directory Server With LDAP Clients (Tasks)</olink> of this
book.</para>
</sect2><sect2 id="nis2ldap-40"><title>Avoiding Buffer Overruns With Sun Java System Directory Server</title><indexterm><primary>NIS to LDAP transition</primary><secondary>buffer overruns</secondary>
</indexterm><para>To avoid buffer overruns, modify the Sun Java System Directory Server attributes manually
or by running the <command>idsconfig</command> command.</para><orderedlist><listitem><para>For example, to increase the maximum number of entries that
are returned for a client search query, modify these attributes:</para><screen>dn: cn=config
nsslapd-sizelimit: -1</screen>
</listitem><listitem><para>To increase the maximum number of entries that are verified
for a client search query, modify these attributes:</para><screen>dn: cn=config, cn=ldbm database, cn=plugins, cn=config
nsslapd-lookthroughlimit: -1</screen>
</listitem>
</orderedlist><para>For testing purposes, you can use an attribute value of <option>1</option>,
which indicates no limit. When you have determined the optimum limit value,
change the attribute value. Do <emphasis>not</emphasis> maintain any attribute
settings at <option>1</option> on a production server. With no limits, the
server might be vulnerable to Denial of Service attacks.</para><para>If VLVs are being used, the <literal>sizelimit</literal> attribute values
should be set as defined in <olink targetptr="nis2ldap-39" remap="internal">Creating Virtual
List View Indexes With Sun Java System Directory Server</olink>. If VLVs are
not being used, the size limit should be set large enough to accommodate the
largest container.</para><para>For more information about configuring Sun Java System Directory Server with LDAP, see <olink targetptr="sundssetup-13" remap="internal">Chapter&nbsp;11, Setting Up Sun Java System Directory
Server With LDAP Clients (Tasks)</olink>.</para>
</sect2>
</sect1><sect1 id="nis2ldap-24"><title>NIS-to-LDAP Restrictions</title><indexterm><primary>NIS to LDAP transition</primary><secondary>restrictions</secondary>
</indexterm><para>When the N2L server has been set up, the NIS source files are no longer
used. Therefore, do not run <command>ypmake</command> on an N2L server. If <command>ypmake</command> is accidentally run, such as for an existing <literal>cron</literal> job,
the N2L service is unaffected. However, a warning is logged suggesting that <command>yppush</command> should be called explicitly.</para>
</sect1><sect1 id="nis2ldap-58"><title>NIS-to-LDAP Troubleshooting</title><indexterm><primary>NIS to LDAP transition</primary><secondary>troubleshooting</secondary>
</indexterm><para>This section covers two areas of troubleshooting:</para><itemizedlist><listitem><para><olink targetptr="nis2ldap-10" remap="internal">Common LDAP Error Messages</olink></para>
</listitem><listitem><para><olink targetptr="nis2ldap-59" remap="internal">NIS-to-LDAP Issues</olink></para>
</listitem>
</itemizedlist><sect2 id="nis2ldap-10"><title>Common LDAP Error Messages</title><indexterm><primary>NIS to LDAP transition</primary><secondary>LDAP error codes</secondary>
</indexterm><para>Sometimes the N2L server logs errors that relate to internal LDAP problems,
resulting in LDAP-related error messages. Although the errors are nonfatal,
they indicate problems to investigate. For example, the N2L server might continue
to operate, but provide out-of-date or incomplete results.</para><para>The following list includes some of the common LDAP error messages that
you might encounter when implementing the N2L service. Error descriptions,
and possible causes and solutions for the errors, are included.</para><para><literal>Administrative limit exceeded</literal></para><itemizedlist mark="none"><listitem><para><emphasis role="strong">Error Number</emphasis>: 11</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>: An LDAP search was
made that was larger than allowed by the directory server's <literal>nsslapd-sizelimit</literal> attribute. Only partial information will be returned.</para>
</listitem><listitem><para><emphasis role="strong">Solution</emphasis>: Increase the
value of the <literal>nsslapd-sizelimit</literal> attribute, or implement
a VLV index for the failing search.</para>
</listitem>
</itemizedlist><para><literal>Invalid DN Syntax</literal></para><itemizedlist mark="none"><listitem><para><emphasis role="strong">Error Number</emphasis>: 34</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>: An attempt has been
made to write an LDAP entry with a DN that contains illegal characters. The
N2L server attempts to escape illegal characters, such as the + symbol, that
are generated in DNs.</para>
</listitem><listitem><para><emphasis role="strong">Solution</emphasis>: Check the LDAP
server error log to find out which illegal DNs were written, then modify the <filename>NISLDAPmapping</filename> file that generated the illegal DNs.</para>
</listitem>
</itemizedlist><para><literal>Object class violation</literal></para><itemizedlist mark="none"><listitem><para><emphasis role="strong">Error Number</emphasis>: 65</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>: An attempt has been
made to write an LDAP entry that is invalid. Generally, this error is due
to missing <literal>MUST</literal> attributes that can be caused by either
of the following circumstances.</para><itemizedlist><listitem><para>Bugs in the <filename>NISLDAPmapping</filename> file that
create entries with missing attributes</para>
</listitem><listitem><para>Attempts to add an <literal>AUXILIARY</literal> attribute
to an object that does not exist</para><para>For example, if a user name has
not yet been created from the <literal>passwd.byxxx</literal> map, an attempt
to add auxiliary information to that user will fail.</para>
</listitem>
</itemizedlist>
</listitem><listitem><para><emphasis role="strong">Solution</emphasis>: For bugs in the <filename>NISLDAPmapping</filename> file, check what was written in the server error
log to determine the nature of the problem.</para>
</listitem>
</itemizedlist><para><literal>Can't contact LDAP server</literal></para><itemizedlist mark="none"><listitem><para><emphasis role="strong">Error Number</emphasis>: 81</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>: The <filename>ypserv</filename> file
might be incorrectly configured to point to the wrong LDAP directory server.
Alternatively, the directory server might not be running.</para>
</listitem><listitem><para><emphasis role="strong">Solution</emphasis>:</para><itemizedlist><listitem><para>Reconfigure the <filename>ypserv</filename> file to point
to the correct LDAP directory server.</para>
</listitem><listitem><para>To confirm that the LDAP server is running, become superuser,
or assume an equivalent role, on the directory server and type:</para><screen># <userinput>pgrep</userinput> <option>l</option> <userinput>slapd</userinput></screen>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist><para><literal>Timeout</literal></para><itemizedlist mark="none"><listitem><para><emphasis role="strong">Error Number</emphasis>: 85</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>: An LDAP operation
timed out, typically while updating a  map from the DIT. The map might now
contain out-of-date information.</para>
</listitem><listitem><para><emphasis role="strong">Solution</emphasis>: Increase the <literal>nisLDAPxxxTimeout</literal> attributes in the <filename>ypserv</filename> configuration
file.</para>
</listitem>
</itemizedlist>
</sect2><sect2 id="nis2ldap-59"><title>NIS-to-LDAP Issues</title><indexterm><primary>NIS to LDAP transition</primary><secondary>issues</secondary>
</indexterm><para>The following problems could occur while running the N2L server. Possible
causes and solutions are provided.</para><sect3 id="nis2ldap-9"><title>Debugging the <filename>NISLDAPmapping</filename> File</title><indexterm><primary>NIS to LDAP transition</primary><secondary>debugging the <filename>NISLDAPmapping</filename> file</secondary>
</indexterm><para>The mapping file, <filename>NISLDAPmapping</filename>, is complex. Many
 potential errors might cause the mapping to behave in unexpected ways. Use
the following techniques to resolve such problems.</para><para><emphasis role="strong">Console Message Displays When</emphasis> <command>ypserv</command> <option>ir</option> <emphasis role="strong">(or</emphasis> <option>Ir</option><emphasis role="strong">) Runs</emphasis></para><itemizedlist mark="none"><listitem><para><emphasis role="strong">Problem</emphasis>: A simple message
is displayed on the console and the server exits (a detailed description is
written to <filename>syslog</filename>).</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>: The syntax of the
mapping file might be incorrect.</para>
</listitem><listitem><para><emphasis role="strong">Solution</emphasis>: Check and correct
the syntax in the <filename>NISLDAPmapping</filename> file.</para>
</listitem>
</itemizedlist><para><emphasis role="strong">NIS Daemon Exits at Startup</emphasis></para><itemizedlist mark="none"><listitem><para><emphasis role="strong">Problem</emphasis>:  When <command>ypserv</command> or other NIS daemons run, an LDAP-related error message is logged
and the daemon exits.</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>:  The cause might
be one of the following:</para><itemizedlist><listitem><para>The LDAP server cannot be contacted.</para>
</listitem><listitem><para>An entry found in an NIS map or in the DIT is incompatible
with the mapping specified.</para>
</listitem><listitem><para>An attempt to read or write to the LDAP server returns an
error.</para>
</listitem>
</itemizedlist>
</listitem><listitem><para><emphasis role="strong">Solution</emphasis>: Examine the error
log on the LDAP server. See the LDAP errors that are listed in <olink targetptr="nis2ldap-10" remap="internal">Common LDAP Error Messages</olink>.</para>
</listitem>
</itemizedlist><para><emphasis role="strong">Unexpected Results From NIS Operations</emphasis></para><itemizedlist mark="none"><listitem><para><emphasis role="strong">Problem</emphasis>: NIS operations
do not return the expected results, but no errors are logged.</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>: Incorrect entries
might exist in the LDAP or NIS maps, which results in mappings not completing
as intended.</para>
</listitem><listitem><para><emphasis role="strong">Solution</emphasis>: Check and correct
entries in the LDAP DIT and in the N2L versions of the NIS maps.</para><orderedlist><listitem><para>Check that the correct entries exist in the LDAP DIT, and
correct the entries as needed.</para><para>If you are using the Sun Java System Directory Server,
start the management console by running <command>directoryserver startconsole</command>.</para>
</listitem><listitem><para>Check that the N2L versions of the NIS maps in the <filename>/var/yp</filename> directory contain the expected entries by comparing the newly
generated map to the  original map. Correct entries as needed.</para><screen># <userinput>cd /var/yp/<replaceable>domainname</replaceable></userinput>
# <userinput>makedbm</userinput> <option>u</option> <userinput><replaceable>test.byname</replaceable></userinput>
# <userinput>makedbm</userinput> <option>u</option> <userinput>LDAP_<replaceable>test.byname</replaceable></userinput></screen><para>Be aware of the following when checking the output for the maps:</para><itemizedlist><listitem><para>The order of entries might not be the same in both files.</para><para>Use the <command>sort</command> command before comparing output.</para>
</listitem><listitem><para>The use of white space might not be the same in both files.</para><para>Use the <command>diff</command> <option>b</option> command when comparing
output.</para>
</listitem>
</itemizedlist>
</listitem>
</orderedlist>
</listitem>
</itemizedlist><para><emphasis role="strong">Processing Order of NIS Maps</emphasis></para><itemizedlist mark="none"><listitem><para><emphasis role="strong">Problem</emphasis>: Object class violations
occur.</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>: When the <command>ypserv</command> <option>i</option> command is run, each NIS map is read and its
contents are written into the DIT. Several maps might contribute attributes
to the same DIT object. Generally, one map creates most of the object, including
all the object's <literal>MUST</literal> attributes. Other maps contribute
additional <literal>MAY</literal> attributes.</para><para>Maps are processed
in the same order that <literal>nisLDAPobjectDN</literal> attributes appear
in the <filename>NISLDAPmapping</filename> file. If maps containing <literal>MAY</literal> attributes
get processed before maps containing <literal>MUST</literal> attributes, then
object class violations occur. See Error 65 in <olink targetptr="nis2ldap-10" remap="internal">Common
LDAP Error Messages</olink> for more information about this error.</para>
</listitem><listitem><para><emphasis role="strong">Solution</emphasis>: Reorder the <literal>nisLDAPobjectDN</literal> attributes so that maps are processed in the correct
order.</para><para>As a temporary fix, rerun the <command>ypserv</command> <option>i</option> command several times. Each time the command is executed, more
of the LDAP entry is built up.</para>
</listitem>
</itemizedlist><note><para>Mapping in such a way that all of an object's <literal>MUST</literal> attributes
cannot be created from at least one map is <emphasis>not</emphasis> supported.</para>
</note>
</sect3><sect3 id="nis2ldap-22"><title>N2L Server Timeout Issue</title><itemizedlist mark="none"><listitem><para><emphasis role="strong">Problem</emphasis>: The server times
out.</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>: When the N2L server
refreshes a map, the result might be a large LDAP directory access. If the Sun Java System Directory Server is
not correctly configured, this operation might time out before completion.</para>
</listitem><listitem><para><indexterm><primary>NIS to LDAP transition</primary><secondary>server timeouts</secondary></indexterm><emphasis role="strong">Solution</emphasis>:
To avoid directory server timeouts, modify the Sun Java System Directory Server attributes manually
or by running the <command>idsconfig</command> command. See <olink targetptr="nis2ldap-10" remap="internal">Common LDAP Error Messages</olink> and <olink targetptr="nis2ldap-16" remap="internal">NIS-to-LDAP Best Practices With Sun Java System Directory
Server</olink> for details.</para>
</listitem>
</itemizedlist>
</sect3><sect3 id="nis2ldap-11"><title>N2L Lock File Issue</title><itemizedlist mark="none"><listitem><para><emphasis role="strong">Problem</emphasis>: The <command>ypserv</command> command
starts but does not respond to NIS requests.</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>: The N2L server lock
files are not correctly synchronizing access to the NIS maps. This should
never happen.</para>
</listitem><listitem><para><indexterm><primary>NIS to LDAP transition</primary><secondary>lock files</secondary></indexterm><emphasis role="strong">Solution</emphasis>:
Type the following commands on the N2L server.</para><screen># <userinput>svcadm disable network/nis/server:default</userinput>
# <userinput>rm /var/run/yp_maplock /var/run/yp_mapupdate</userinput>
# <userinput>svcadm enable network/nis/server:default</userinput></screen>
</listitem>
</itemizedlist>
</sect3><sect3 id="nis2ldap-13"><title>N2L Deadlock Issue</title><itemizedlist mark="none"><listitem><para><emphasis role="strong">Problem</emphasis>: The N2L server
deadlocks.</para>
</listitem><listitem><para><emphasis role="strong">Cause</emphasis>: If the addresses
of the N2L master server and the LDAP server are not listed properly in the <filename>hosts</filename>, <filename>ipnodes</filename>, or <filename>ypserv</filename> files,
a deadlock might result. See <olink targetptr="nis2ldap-15" remap="internal">Prerequisites
for the NIS-to-LDAP Transition</olink> for details about proper address configuration
for N2L.</para><para>For an example of a deadlock scenario, consider the following
sequence of events:</para><orderedlist><listitem><para>An NIS client tries to look up an IP address.</para>
</listitem><listitem><para>The N2L server finds that the <literal>hosts</literal> entry
is out-of-date.</para>
</listitem><listitem><para>The N2L server tries to update the <literal>hosts</literal> entry
from LDAP.</para>
</listitem><listitem><para>The N2L server gets the name of its LDAP server from <filename>ypserv</filename>, then does a search by using <filename>libldap</filename>.</para>
</listitem><listitem><para><filename>libldap</filename> tries to convert the LDAP server's
name to an IP address by making a call to the name service switch.</para>
</listitem><listitem><para>The name service switch might make an NIS call to the N2L
server, which deadlocks.</para>
</listitem>
</orderedlist>
</listitem><listitem><para><emphasis role="strong">Solution</emphasis>: List the addresses
of the N2L master server and the LDAP server in the <filename>hosts</filename> or <filename>ipnodes</filename> files on the N2L master server. Whether the server addresses
must be listed in <filename>hosts</filename>, <filename>ipnodes</filename>,
or both files depends on how these files are configured to resolve local host
names. Also, check that the <filename>hosts</filename> and <filename>ipnodes</filename> entries
in the <filename>nsswitch.conf</filename> file list <literal>files</literal> before <literal>nis</literal> in the lookup order.</para><para><indexterm><primary>NIS to LDAP transition</primary><secondary>deadlock</secondary></indexterm>An alternative
solution to this deadlock problem is to list the LDAP server address, not
its host name, in the <filename>ypserv</filename> file. This means that the
LDAP server address would be listed in another place. Therefore, changing
the address of either the LDAP server or the N2L server would require slightly
more effort.</para>
</listitem>
</itemizedlist>
</sect3>
</sect2>
</sect1><sect1 id="nis2ldap-42"><title>Reverting to NIS</title><indexterm><primary>NIS to LDAP transition</primary><secondary>reverting to NIS</secondary>
</indexterm><indexterm><primary>LDAP</primary><secondary>reverting to NIS</secondary>
</indexterm><indexterm><primary>reverting to NIS from LDAP</primary>
</indexterm><para>A site that has transitioned from NIS to LDAP using the N2L service
is expected to gradually replace all NIS clients with Solaris LDAP naming
services clients. Support for NIS clients eventually becomes redundant. However,
if required, the N2L service provides two ways to return to traditional NIS,
as explained in the next two procedures.</para><tip><para>Traditional NIS ignores the N2L versions of the NIS maps if those
maps are present. After reverting to NIS, if you leave the N2L versions of
the maps on the server, the N2L maps do not cause problems. Therefore, it
might be useful to keep the N2L maps in case you later decide to re-enable
N2L. However, the maps do take up disk space.</para>
</tip><task id="nis2ldap-proc-43"><title>How to Revert to Maps Based on Old Source
Files</title><procedure><step><para>Become superuser or assume an equivalent role.</para><para>Roles
contain authorizations and privileged commands. For more information about
roles, see <olink targetdoc="sysadv6" targetptr="rbactask-1" remap="external">Chapter 9, <citetitle remap="chapter">Using Role-Based Access Control (Tasks),</citetitle> in <citetitle remap="book">System Administration Guide: Security Services</citetitle></olink>.</para>
</step><step id="nis2ldap-step-44"><para>Stop the <literal>NIS</literal> daemons.</para><screen># <userinput>svcadm disable network/nis/server:default</userinput></screen>
</step><step id="nis2ldap-step-45"><para>Disable N2L.</para><para>This command backs
up and moves the N2L mapping file.</para><screen># <userinput>mv /var/yp/NISLDAPmapping <replaceable>backup_filename</replaceable></userinput></screen>
</step><step id="nis2ldap-step-27"><para>Set the <literal>NOPUSH</literal> environment
variable so the new maps are not pushed by <command>ypmake</command>.</para><screen># <userinput>NOPUSH=1</userinput></screen>
</step><step id="nis2ldap-step-46"><para>Make a new set of NIS maps that are based
on the old sources.</para><screen># <userinput>cd /var/yp</userinput>
# <userinput>make</userinput></screen>
</step><step id="nis2ldap-step-47"><para>(<emphasis role="strong">Optional</emphasis>)
Remove N2L versions of the NIS maps.</para><screen># <userinput>rm /var/yp/<replaceable>domainname</replaceable>/LDAP_*</userinput></screen>
</step><step id="nis2ldap-step-48"><para>Start the <literal>NIS</literal> daemons.</para><screen># <userinput>svcadm enable network/nis/server:default</userinput></screen>
</step>
</procedure>
</task><task id="nis2ldap-proc-49"><title>How to Revert to Maps Based on Current
DIT Contents</title><tasksummary><para>Back up the old NIS source files before performing this procedure. </para>
</tasksummary><procedure><step><para>Become superuser or assume an equivalent role.</para><para>Roles
contain authorizations and privileged commands. For more information about
roles, see <olink targetdoc="sysadv6" targetptr="rbactask-1" remap="external">Chapter 9, <citetitle remap="chapter">Using Role-Based Access Control (Tasks),</citetitle> in <citetitle remap="book">System Administration Guide: Security Services</citetitle></olink>.</para>
</step><step id="nis2ldap-step-50"><para>Stop the <literal>NIS</literal> daemons.</para><screen># <userinput>svcadm disable network/nis/server:default</userinput></screen>
</step><step id="nis2ldap-step-51"><para>Update the maps from the DIT.</para><screen># <userinput>ypserv</userinput> <option>r</option><userinput></userinput></screen><para>Wait for <command>ypserv</command> to exit.</para>
</step><step id="nis2ldap-step-53"><para>Disable N2L.</para><para>This command backs
up and moves the N2L mapping file.</para><screen># <userinput>mv /var/yp/NISLDAPmapping <replaceable>backup_filename</replaceable></userinput></screen>
</step><step id="nis2ldap-step-54"><para>Regenerate the NIS source files.</para><screen># <userinput>ypmap2src</userinput></screen>
</step><step id="nis2ldap-step-55"><para>Manually check that regenerated NIS source
files have the correct content and structure.</para>
</step><step id="nis2ldap-step-49"><para>Move the regenerated NIS source files to
the appropriate directories.</para>
</step><step id="nis2ldap-step-56"><para>(<emphasis role="strong">Optional</emphasis>)
Remove the N2L versions of the mapping files.</para><screen># <userinput>rm /var/yp/<replaceable>domainname</replaceable>/LDAP_*</userinput></screen>
</step><step id="nis2ldap-step-57"><para>Start the <literal>NIS</literal> daemons.</para><screen># <userinput>svcadm enable network/nis/server:default</userinput></screen>
</step>
</procedure>
</task>
</sect1>
</chapter><?Pub *0000076976 0?>