<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<sect3 id="zend.ldap.api.reference.zend-ldap-node-rootdse">
    <title>Zend_Ldap_Node_RootDse</title>

    <para>The following methods are available on all vendor-specific subclasses.</para>

    <para>
        <classname>Zend_Ldap_Node_RootDse</classname> includes the magic property accessors
        <methodname>__get()</methodname> and <methodname>__isset()</methodname> to access the
        attributes by their name. They proxy to
        <methodname>Zend_Ldap_Node_RootDse::getAttribute()</methodname> and
        <methodname>Zend_Ldap_Node_RootDse::existsAttribute()</methodname> respectively.
        <methodname>__set()</methodname> and <methodname>__unset()</methodname> are also implemented
        but they throw a <code>BadMethodCallException</code> as modifications are not allowed on
        RootDSE nodes. Furthermore the class implements <code>ArrayAccess</code> for
        array-style-access to the attributes. <methodname>offsetSet()</methodname> and
        <methodname>offsetUnset()</methodname> also throw a <code>BadMethodCallException</code> due
        ro obvious reasons.
    </para>

    <table id="zend.ldap.api.reference.zend-ldap-node-rootdse.table">
        <title>Zend_Ldap_Node_RootDse API</title>

        <tgroup cols="2">
            <thead>
                <row>
                    <entry>Method</entry>
                    <entry>Description</entry>
                </row>
            </thead>

            <tbody>
                <row>
                    <entry><code>Zend_Ldap_Dn getDn()</code></entry>

                    <entry>
                        Gets the DN of the current node as a <classname>Zend_Ldap_Dn</classname>.
                    </entry>
                </row>

                <row>
                    <entry><code>string getDnString(string $caseFold)</code></entry>
                    <entry>Gets the DN of the current node as a string.</entry>
                </row>

                <row>
                    <entry><code>array getDnArray(string $caseFold)</code></entry>
                    <entry>Gets the DN of the current node as an array.</entry>
                </row>

                <row>
                    <entry><code>string getRdnString(string $caseFold)</code></entry>
                    <entry>Gets the <acronym>RDN</acronym> of the current node as a string.</entry>
                </row>

                <row>
                    <entry><code>array getRdnArray(string $caseFold)</code></entry>
                    <entry>Gets the <acronym>RDN</acronym> of the current node as an array.</entry>
                </row>

                <row>
                    <entry><code>array getObjectClass()</code></entry>
                    <entry>Returns the objectClass of the node.</entry>
                </row>

                <row>
                    <entry><code>string toString()</code></entry>

                    <entry>
                        Returns the DN of the current node - proxies to
                        <methodname>Zend_Ldap_Dn::getDnString()</methodname>.
                    </entry>
                </row>

                <row>
                    <entry><code>string __toString()</code></entry>

                    <entry>
                        Casts to string representation - proxies to
                        <methodname>Zend_Ldap_Dn::toString()</methodname>.
                    </entry>
                </row>

                <row>
                    <entry><code>array toArray(boolean $includeSystemAttributes)</code></entry>

                    <entry>
                        Returns an array representation of the current node. If
                        <varname>$includeSystemAttributes</varname> is <constant>FALSE</constant>
                        (defaults to <constant>TRUE</constant>) the system specific attributes are
                        stripped from the array. Unlike
                        <methodname>Zend_Ldap_Node_RootDse::getAttributes()</methodname> the
                        resulting array contains the DN with key <code>'dn'</code>.
                    </entry>
                </row>

                <row>
                    <entry><code>string toJson(boolean $includeSystemAttributes)</code></entry>

                    <entry>
                        Returns a <acronym>JSON</acronym> representation of the current node using
                        <methodname>Zend_Ldap_Node_RootDse::toArray()</methodname>.
                    </entry>
                </row>

                <row>
                    <entry><code>array getData(boolean $includeSystemAttributes)</code></entry>

                    <entry>
                        Returns the node's attributes. The array contains all
                        attributes in its internal format (no conversion).
                    </entry>
                </row>

                <row>
                    <entry>
                        <code>boolean existsAttribute(string $name, boolean $emptyExists)</code>
                    </entry>

                    <entry>
                        Checks whether a given attribute exists. If
                        <varname>$emptyExists</varname> is <constant>FALSE</constant>, empty
                        attributes (containing only array()) are treated as non-existent returning
                        <constant>FALSE</constant>. If <varname>$emptyExists</varname> is
                        <constant>TRUE</constant>, empty attributes are treated as existent
                        returning <constant>TRUE</constant>. In this case the method returns
                        <constant>FALSE</constant> only if the attribute name is missing in the
                        key-collection.
                    </entry>
                </row>

                <row>
                    <entry>
                        <code>boolean attributeHasValue(string $name, mixed|array $value)</code>
                    </entry>

                    <entry>
                        Checks if the given value(s) exist in the attribute. The
                        method returns <constant>TRUE</constant> only if all values in
                        <varname>$value</varname> are present in the attribute. Comparison is
                        done strictly (respecting the data type).
                    </entry>
                </row>

                <row>
                    <entry><code>integer count()</code></entry>

                    <entry>
                        Returns the number of attributes in the node. Implements Countable.
                    </entry>
                </row>

                <row>
                    <entry>
                        <code>mixed getAttribute(string $name, integer|null $index)</code>
                    </entry>

                    <entry>
                        Gets a <acronym>LDAP</acronym> attribute. Data conversion is applied using
                        <methodname>Zend_Ldap_Attribute::getAttribute()</methodname>.
                    </entry>
                </row>

                <row>
                    <entry>
                        <code>array getAttributes(boolean $includeSystemAttributes)</code>
                    </entry>

                    <entry>
                        Gets all attributes of node. If
                        <varname>$includeSystemAttributes</varname> is <constant>FALSE</constant>
                        (defaults to <constant>TRUE</constant>) the system specific attributes are
                        stripped from the array.
                    </entry>
                </row>

                <row>
                    <entry>
                        <code>array|integer getDateTimeAttribute(string $name,
                            integer|null $index)</code>
                    </entry>

                    <entry>
                        Gets a <acronym>LDAP</acronym> date/time attribute. Data conversion is
                        applied using
                        <methodname>Zend_Ldap_Attribute::getDateTimeAttribute()</methodname>.
                    </entry>
                </row>

                <row>
                    <entry><code>Zend_Ldap_Node_RootDse reload(Zend_Ldap $ldap)</code></entry>

                    <entry>
                        Reloads the current node's attributes from the given <acronym>LDAP</acronym>
                        server.
                    </entry>
                </row>

                <row>
                    <entry>
                        <emphasis><code>Zend_Ldap_Node_RootDse create(Zend_Ldap
                            $ldap)</code></emphasis>
                    </entry>

                    <entry>Factory method to create the RootDSE.</entry>
                </row>

                <row>
                    <entry><code>array getNamingContexts()</code></entry>
                    <entry>Gets the namingContexts.</entry>
                </row>

                <row>
                    <entry><code>string|null getSubschemaSubentry()</code></entry>
                    <entry>Gets the subschemaSubentry.</entry>
                </row>

                <row>
                    <entry><code>boolean supportsVersion(string|int|array $versions)</code></entry>
                    <entry>Determines if the <acronym>LDAP</acronym> version is supported.</entry>
                </row>

                <row>
                    <entry>
                        <code>boolean supportsSaslMechanism(string|array $mechlist)</code>
                    </entry>

                    <entry>Determines if the sasl mechanism is supported.</entry>
                </row>

                <row>
                    <entry><code>integer getServerType()</code></entry>

                    <entry>
                        Gets the server type. Returns

                        <variablelist>
                            <varlistentry>
                                <term>
                                    <constant>Zend_Ldap_Node_RootDse::SERVER_TYPE_GENERIC</constant>
                                </term>

                                <listitem>
                                    <para>for unknown <acronym>LDAP</acronym> servers</para>
                                </listitem>
                            </varlistentry>

                            <varlistentry>
                                <term>
                                    <constant>Zend_Ldap_Node_RootDse::SERVER_TYPE_OPENLDAP</constant>
                                </term>

                                <listitem><para>for OpenLDAP servers</para></listitem>
                            </varlistentry>

                            <varlistentry>
                                <term>
                                    <constant>Zend_Ldap_Node_RootDse::SERVER_TYPE_ACTIVEDIRECTORY</constant>
                                </term>

                                <listitem>
                                    <para>for Microsoft ActiveDirectory servers</para>
                                </listitem>
                            </varlistentry>

                            <varlistentry>
                                <term>
                                    <constant>Zend_Ldap_Node_RootDse::SERVER_TYPE_EDIRECTORY</constant>
                                </term>

                                <listitem><para>For Novell eDirectory servers</para></listitem>
                            </varlistentry>
                        </variablelist>
                    </entry>
                </row>

                <row>
                    <entry><code>Zend_Ldap_Dn getSchemaDn()</code></entry>
                    <entry>Returns the schema DN.</entry>
                </row>
            </tbody>
        </tgroup>
    </table>

    <sect4 id="zend.ldap.api.reference.zend-ldap-node-rootdse.openldap">
        <title>OpenLDAP</title>

        <para>
            Additionally the common methods above apply to instances of
            <classname>Zend_Ldap_Node_RootDse_OpenLdap</classname>.
        </para>

        <note>
            <para>
                Refer to
                <ulink url="http://www.zytrax.com/books/ldap/ch3/#operational">LDAP
                Operational Attributes and Objects</ulink>for information on the attributes
                of OpenLDAP RootDSE.
            </para>
        </note>

        <table id="zend.ldap.api.reference.zend-ldap-node-rootdse.openldap.table">
            <title>Zend_Ldap_Node_RootDse_OpenLdap API</title>

            <tgroup cols="2">
                <thead>
                    <row>
                        <entry>Method</entry>
                        <entry>Description</entry>
                    </row>
                </thead>

                <tbody>
                    <row>
                        <entry><code>integer getServerType()</code></entry>

                        <entry>
                            Gets the server type. Returns
                            <constant>Zend_Ldap_Node_RootDse::SERVER_TYPE_OPENLDAP</constant>
                        </entry>
                    </row>

                    <row>
                        <entry><code>string|null getConfigContext()</code></entry>
                        <entry>Gets the configContext.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getMonitorContext()</code></entry>
                        <entry>Gets the monitorContext.</entry>
                    </row>

                    <row>
                        <entry><code>boolean supportsControl(string|array $oids)</code></entry>
                        <entry>Determines if the control is supported.</entry>
                    </row>

                    <row>
                        <entry><code>boolean supportsExtension(string|array $oids)</code></entry>
                        <entry>Determines if the extension is supported.</entry>
                    </row>

                    <row>
                        <entry><code>boolean supportsFeature(string|array $oids)</code></entry>
                        <entry>Determines if the feature is supported.</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </sect4>

    <sect4 id="zend.ldap.api.reference.zend-ldap-node-rootdse.activedirectory">
        <title>ActiveDirectory</title>

        <para>
            Additionally the common methods above apply to instances of
            <classname>Zend_Ldap_Node_RootDse_ActiveDirectory</classname>.
        </para>

        <note>
            <para>
                Refer to
                <ulink url="http://msdn.microsoft.com/en-us/library/ms684291(VS.85).aspx">
                RootDSE</ulink>for information on the attributes of Microsoft
                ActiveDirectory RootDSE.
            </para>
        </note>

        <table id="zend.ldap.api.reference.zend-ldap-node-rootdse.activedirectory.table">
            <title>Zend_Ldap_Node_RootDse_ActiveDirectory API</title>

            <tgroup cols="2">
                <thead>
                    <row>
                        <entry>Method</entry>
                        <entry>Description</entry>
                    </row>
                </thead>

                <tbody>
                    <row>
                        <entry><code>integer getServerType()</code></entry>

                        <entry>
                            Gets the server type. Returns
                            <constant>Zend_Ldap_Node_RootDse::SERVER_TYPE_ACTIVEDIRECTORY</constant>
                        </entry>
                    </row>

                    <row>
                        <entry><code>string|null getConfigurationNamingContext()</code></entry>
                        <entry>Gets the configurationNamingContext.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getCurrentTime()</code></entry>
                        <entry>Gets the currentTime.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getDefaultNamingContext()</code></entry>
                        <entry>Gets the defaultNamingContext.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getDnsHostName()</code></entry>
                        <entry>Gets the dnsHostName.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getDomainControllerFunctionality()</code></entry>
                        <entry>Gets the domainControllerFunctionality.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getDomainFunctionality()</code></entry>
                        <entry>Gets the domainFunctionality.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getDsServiceName()</code></entry>
                        <entry>Gets the dsServiceName.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getForestFunctionality()</code></entry>
                        <entry>Gets the forestFunctionality.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getHighestCommittedUSN()</code></entry>
                        <entry>Gets the highestCommittedUSN.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getIsGlobalCatalogReady()</code></entry>
                        <entry>Gets the isGlobalCatalogReady.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getIsSynchronized()</code></entry>
                        <entry>Gets the isSynchronized.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getLdapServiceName()</code></entry>
                        <entry>Gets the ldapServiceName.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getRootDomainNamingContext()</code></entry>
                        <entry>Gets the rootDomainNamingContext.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getSchemaNamingContext()</code></entry>
                        <entry>Gets the schemaNamingContext.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getServerName()</code></entry>
                        <entry>Gets the serverName.</entry>
                    </row>

                    <row>
                        <entry><code>boolean supportsCapability(string|array $oids)</code></entry>
                        <entry>Determines if the capability is supported.</entry>
                    </row>

                    <row>
                        <entry><code>boolean supportsControl(string|array $oids)</code></entry>
                        <entry>Determines if the control is supported.</entry>
                    </row>

                    <row>
                        <entry><code>boolean supportsPolicy(string|array $policies)</code></entry>
                        <entry>Determines if the version is supported.</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </sect4>

    <sect4 id="zend.ldap.api.reference.zend-ldap-node-rootdse.edirectory">
        <title>eDirectory</title>

        <para>
            Additionally the common methods above apply to instances of
            <code>Zend_Ldap_Node_RootDse_eDirectory</code>.
        </para>

        <note>
            <para>
                Refer to <ulink
                    url="http://www.novell.com/documentation/edir88/edir88/index.html?page=/documentation/edir88/edir88/data/ah59jqq.html">Getting
                    Information about the <acronym>LDAP</acronym> Server</ulink>for information on
                the attributes of Novell eDirectory RootDSE.
            </para>
        </note>

        <table id="zend.ldap.api.reference.zend-ldap-node-rootdse.edirectory.table">
            <title>Zend_Ldap_Node_RootDse_eDirectory API</title>

            <tgroup cols="2">
                <thead>
                    <row>
                        <entry>Method</entry>
                        <entry>Description</entry>
                    </row>
                </thead>

                <tbody>
                    <row>
                        <entry><code>integer getServerType()</code></entry>

                        <entry>
                            Gets the server type. Returns
                            <constant>Zend_Ldap_Node_RootDse::SERVER_TYPE_EDIRECTORY</constant>
                        </entry>
                    </row>

                    <row>
                        <entry><code>boolean supportsExtension(string|array $oids)</code></entry>
                        <entry>Determines if the extension is supported.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getVendorName()</code></entry>
                        <entry>Gets the vendorName.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getVendorVersion()</code></entry>
                        <entry>Gets the vendorVersion.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getDsaName()</code></entry>
                        <entry>Gets the dsaName.</entry>
                    </row>

                    <row>
                        <entry><code>string|null getStatisticsErrors()</code></entry>
                        <entry>Gets the server statistics "errors".</entry>
                    </row>

                    <row>
                        <entry><code>string|null getStatisticsSecurityErrors()</code></entry>
                        <entry>Gets the server statistics "securityErrors".</entry>
                    </row>

                    <row>
                        <entry><code>string|null getStatisticsChainings()</code></entry>
                        <entry>Gets the server statistics "chainings".</entry>
                    </row>

                    <row>
                        <entry><code>string|null getStatisticsReferralsReturned()</code></entry>
                        <entry>Gets the server statistics "referralsReturned".</entry>
                    </row>

                    <row>
                        <entry><code>string|null getStatisticsExtendedOps()</code></entry>
                        <entry>Gets the server statistics "extendedOps".</entry>
                    </row>

                    <row>
                        <entry><code>string|null getStatisticsAbandonOps()</code></entry>
                        <entry>Gets the server statistics "abandonOps".</entry>
                    </row>

                    <row>
                        <entry><code>string|null getStatisticsWholeSubtreeSearchOps()</code></entry>
                        <entry>Gets the server statistics "wholeSubtreeSearchOps".</entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </sect4>
</sect3>

