# Connecting SailPoint and IBM Tivoli Directory Server

To connect SailPoint with IBM Tivoli Directory Server, perform the following tasks:

## Adding the Source in SailPoint

To connect to SailPoint, perform the following steps. Once the connection is made, you can configure it to meet your company's needs.

> [!IMPORTANT]
>
> By default, the provisioning feature is **disabled**, and the connector only supports read-only operations. To support provisioning operations, you must manually enable the feature in the source configuration.

**To configure a new source:**

1. Sign in to SailPoint.
2. Go to **Admin \> Connections \> Sources**.
3. Select **Create New**.
4. Search for the connector by entering the name in the search box, and then select **Configure**.
5. In the **Source Name** field, enter a unique and descriptive name for your source. Source names cannot exceed 128 characters.
6. In the **Description** field, provide additional details about the source to help distinguish it from similar sources. This field allows a maximum of 2,000 characters.
7. In the **Source Owner** field, begin typing the name of an owner. Matches appear after you type two or more letters. For more information, refer to [Assigning a Source Owner](<https://documentation.sailpoint.com/saas/help/sources/index.html#assigning-a-source-owner>).
8. Under **Connection Type**, select **Direct Connection** or **Flat File**.

   - **Direct Connection** - A direct connection fetches data from the **Virtual Appliance Cluster** you choose as the application connector for the source. A direct connection configuration allows for real-time updates. For more information about configuring and deploying virtual appliances, refer to the [Virtual Appliance Reference Guide](<https://documentation.sailpoint.com/saas/help/va/index.html>).
   - **Flat File** - Select the flat file if no connector is available, or if another system restricts the connection. This option allows only reading and aggregating data as a generic/delimited application. Provisioning activity is unsupported, and additional configuration pages like connection settings and aggregation settings are unavailable.
9. If you selected **Direct Connection**, in **Virtual Appliance Cluster**, select the virtual appliance cluster that will be used as the application connector for the source.
10. (Optional) Select a governance group to grant its members [source](<https://documentation.sailpoint.com/saas/help/common/users/user_levels.html#source-sub-admin-user-level>) or [role](<https://documentation.sailpoint.com/saas/help/common/users/user_levels.html#role-sub-admin-user-level>) sub-admin level oversight of the source and its access. For more information, refer to [Creating and Managing Governance Groups](<https://documentation.sailpoint.com/saas/help/common/users/governance_groups.html>).
11. If this source represents a primary system containing your organization's personnel records, select the **Authoritative Source** checkbox. For more information, refer to [Creating Identity Profiles](<https://documentation.sailpoint.com/saas/help/setup/identity_profiles.html>).
12. Select **Continue**. The source is created, and you are navigated to the **Source Setup \> Base Configuration** page. Continue to configure your connected source there.

## Base Configuration

Provide the base configuration parameters. Information you entered in the Create New Source dialog is automatically entered into the fields in the Base Configuration page. You can edit this information if necessary.

1. Enter a unique name and description for the source.
2. In the **Source Owner** dropdown list, select the identity that owns this source.

   - To find a source owner, begin entering their name.
3. In the **Virtual Appliance Cluster** dropdown list, select the virtual appliance to use when communicating with your organization's systems. For more information, refer to [SailPoint Virtual Appliances](<https://documentation.sailpoint.com/saas/help/va/index.html>).
4. (Optional) If enabled for your organization, select the **Use a Credential Provider** checkbox to manage the source's authentication using a credential provider.

   > **Note**
   >
   > To add a credential provider, go to **Admin \> Connections \> Credential Providers**. For more information about credential providers, refer to [Credential Providers](<https://documentation.sailpoint.com/connectors/help/credential_providers.html>).
5. Configure the authentication to allow SailPoint to connect to the source. Refer to [Connection Settings](<#connection-settings>) for more information.
6. (Optional) In the **Governance Group for Source Management** dropdown list, select a governance group to associate with this source. For more information about governance groups, refer to [Associating Governance Groups with a Source](<https://documentation.sailpoint.com/saas/help/common/users/governance_groups.html#associating-a-governance-group-with-a-source>).
7. (Optional) Choose whether to enable or disable provisioning for the source. Provisioning is disabled by default.

   - **Enable Provisioning** - Set the toggle to **Enabled** to allow the source to create, update, and deactivate accounts in the connected source system.
   - **Disable Provisioning** - Set the toggle to **Disabled** to disable provisioning for the source. Disabling provisioning will prevent the creation, updating, or deactivating of accounts on this source.
8. Select **Save**.

## Connection Settings

Provide the information required to connect and interact with the source.

> [!NOTE]
>
> **Screenshot**
>
> [![Connection Settings](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_conn.png>)](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_conn.png>)

To configure connection settings, complete the following:

1. Enter the **Service Account** name of the administrator for the instance or server.
2. Enter the **Password** to use when connecting to the server.
3. Enter the **Hostname or IP Address** of the host machine where the IBM Tivoli Directory Server is running.
4. Enter the **Port** number the server is listening to.
5. Under **Authorization Type** select one of the available radio buttons.

   - **None** does not require authorization.
   - **Simple** enables you to use a clear text password for the service account.
6. Select **Enable Transport Layer Security (TLS)** to turn this setting on or off. When this is turned off, you see a black **X**. If it is turned on, you see a blue check mark. Turn this setting on if the connection is over TLS. For more information, refer to [TLS Configuration on Virtual Appliances](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/tls/tls_configuration_on_virtual_appliances.html>) and [Create TLS Communication Between IBM Tivoli Directory Server Source and LDAP Server](<#configure-tls-communication>).
7. Select **Save**.

### Hostname Verification

To disable hostname verification during LDAP communication over TLS for the source, add the `disableLDAPHostnameVerification` attribute using the REST API.

```text
POST <url>/api/source/update/<sourceID>
```

- `<url>` - The URL for the customer's SailPoint instance
- `<sourceID>` - The Source ID (number) obtained through the UI

In the body of the POST, use form-data as follows:

- **Key** - `connector_disableLDAPHostnameVerification`
- **Value** - `true`

> [!NOTE]
>
> For more information on SailPoint's REST APIs, refer to [Best Practices: REST API Authentication](<https://developer.sailpoint.com/docs/api/authentication/>) and [REST API - Update Source (Partial)](<https://developer.sailpoint.com/docs/api/update-source-v-1/>) in the SailPoint Developer Community.

## Account and Group Settings

Provide the information required to search the accounts and groups managed by your system.

### Account Search Scope

> [!NOTE]
>
> **Screenshot**
>
> [![Account Search Scope](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_acc1.png>)](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_acc1.png>)

To configure the account search scope, complete the following:

1. Select one of the following:

   - **Subtree** - Use to search for the specified **Search DN** and all the containers within it.
   - **Base** - Use to only search for the **Search DN**.
   - **One Level** - Use to search for the **Search DN** and the containers one level below it.
2. Enter the **Search DN** (distinguished name) to search for the accounts that you want to load.
3. (Optional) Enter the **LDAP Search Filter** to specify an optional filter that limits the results returned by the **Search DN**. For example, to filter for entries that do not represent a person, enter the following:

   ```text
   (!(objectclass=person))
   ```
4. (Optional) Enter the **Group Member Search DN** to specify the group memberships of the users that you are loading. If no value is provided, then the default scope of Group Membership is the **Search DN** value.
5. (Optional) Enter the **Group Member Search Filter** to specify the LDAP filter for groups membership.
6. (Optional) Enter the **Group Membership Attribute** that contains the group membership information on the managed system.
7. (Optional) Enter an **Additional Filter** that SailPoint applies to the results returned by LDAP. Derived attributes can be included in the filter. For example, to remove a user from the search results with a condition, enter the following:

   ```text
   deleted=="true"
   ```
8. Select **Save**.

### Group Search Scope

> [!NOTE]
>
> **Screenshot**
>
> [![Group Search Scope](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_acc2.png>)](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_acc2.png>)

To configure the group search scope, complete the following:

> [!NOTE]
>
> By default, if the scope is not defined for Groups, the connector uses the Account search scope.

1. Select one of the following:

   - **Subtree** - Use to search the specified **Search DN** and all the containers within it.
   - **Base** - Use to only search the **Search DN**.
   - **One Level** - Use to search the **Search DN** and the containers one level below it.
2. (Optional) Enter the **Search DN** (distinguished name) to search for the accounts that you want to load.
3. (Optional) Enter the **LDAP Search Filter** to specify an optional filter that limits the results returned by the **Search DN**. For example, to filter for entries that do not represent a person, enter the following:

   ```text
   (!(objectclass=person))
   ```
4. (Optional) Enter an **Additional Filter** that SailPoint applies to the results returned by LDAP. Derived attributes can be included in the filter. For example, to remove user from the search results with a condition, enter the following:

   ```text
   deleted=="true"
   ```
5. Select **Save**.

> [!NOTE]
>
> Only `group.iterateSearchFilter` will be respected during group aggregation.

## Additional Configuration

Use the additional settings to configure the NIS Netgroups, POSIX Groups, Delta Aggregation, Provisioning, and Pagination settings.

### NIS Netgroups Settings

> [!NOTE]
>
> **Screenshot**
>
> [![NIS Netgroups Settings](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_add1.png>)](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_add1.png>)

To configure the NIS Netgroups settings, complete the following:

> [!IMPORTANT]
>
> If you want to use this feature, you must add the `nisnetgroups` attribute to the account schema in SailPoint. For more information, refer to [Editing an Account Schema](<https://documentation.sailpoint.com/saas/help/accounts/schema.html#editing-an-account-schema>).

1. Enable **Enable NIS NetGroups** to retrieve an existing NIS Netgroup membership.

   - Enter the **Membership Attribute** you want to retrieve from NIS Netgroups. The only options are `uid` and `cn`.
   - Enter the **NIS Netgroup Triple Brace Override** to specify the type of braces used to provide a value to an NIS Netgroup for `nisNetGroupTriple`. The default is parentheses `()`.
2. Select **Save**.

### POSIX Groups Settings

> [!NOTE]
>
> **Screenshot**
>
> [![POSIX Groups Settings](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_add2.png>)](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_add2.png>)

To configure the POSIX groups settings, complete the following:

> [!NOTE]
>
> If you want to use this feature, you must add the `posixgroups` attribute to the account schema in SailPoint. For more information, refer to [Editing an Account Schema](<https://documentation.sailpoint.com/saas/help/accounts/schema.html#editing-an-account-schema>).

1. Enable **Enable POSIX Groups** to retrieve an existing POSIX group member.

   - Enter the **Membership Attribute** to specify the membership attribute retrieved from POSIX. The only options are `uid` and `cn`.
2. Select **Save**.

### Delta Aggregation Setting

> [!NOTE]
>
> **Screenshot**
>
> [![Delta Aggregation Setting](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_add3.png>)](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_add3.png>)

To enable delta aggregation, complete the following:

1. Select the **Delta Aggregation** checkbox to aggregate accounts that have changed since the last execution.
2. Select **Save**.

### Provisioning Settings

> [!NOTE]
>
> **Screenshot**
>
> [![Provisioning Settings](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_add4.png>)](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_add4.png>)

> [!NOTE]
>
> **Screenshot**
>
> [![Provisioning Settings](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_add5.png>)](<https://documentation.sailpoint.com/connectors/ibm/tivoli_directory_server/va/help/img/tds_add5.png>)

To configure the provisioning settings, complete the following:

1. Do one or both of the following:

   - Enter the **Unique Search DN** to define the scope of aggregation for the unique mentioned `objectType`.
   - Enter the **Page Size** to specify the number of objects to get, per page, when iterating over large numbers of objects. The default is `100`.
2. Select **Save**.

## Review and Test

Perform a test to confirm the connection to SailPoint.

1. Go to **Review and Test**.
2. Confirm that the entries in each field are correct.

   If you note any mistakes, return to the section and make corrections.
3. Select **Test Connection**.

## SailPoint Application Onboarding

SailPoint application onboarding enables you to easily onboard new applications and create sources following the successful onboarding of a discovery source. To use this feature, continue to **Discovered Applications** in the SailPoint user interface.

For more information, refer to [Application Onboarding](<https://documentation.sailpoint.com/saas/help/ai/app_onboarding/index.html>) in the SailPoint SaaS documentation.

## JNDI Configuration

This section covers information on JNDI systems.

### Configure Environment Properties to the JNDI

You can set up the following environment properties using the REST API:

```text
POST <url>/api/source/update/<sourceID>
```

- **\<url\>** - The URL for the customer's SailPoint instance
- **\<sourceID\>** - The Source ID (number) obtained through the UI

In the body of the POST, use form-data as follows:

- **Key** - `connector_com.sun.jndi.ldap.connect.pool with the value 'true'`
- **Key** - `connector_com.sun.jndi.ldap.read.timeout with the vale '120000'`

> [!NOTE]
>
> For more information on SailPoint's REST APIs, refer to [Best Practices: REST API Authentication](<https://developer.sailpoint.com/docs/api/authentication/>) and [REST API - Update Source (Partial)](<https://developer.sailpoint.com/docs/api/update-source-v-1/>) in the SailPoint Developer Community.

## Configure TLS Communication

You can configure TLS communication between the IBM Tivoli Directory Server source and the LDAP Server. For a Java client to connect using TLS and self-signed certificates, you must install the certificate into the JVM keystore.

> [!NOTE]
>
> SailPoint recommends using TLS along with Simple Authentication.

To configure TLS communication between the IBM Tivoli Directory Server and the LDAP server, perform the following:

1. From the IBM Tivoli Directory Server, export the **LDAP X.509 Certificate** and copy it to the SailPoint computer.

   > **Note**
   >
   > Ensure that the SailPoint computer also trusts the CA Root. To do that, add the CA Root certificate to the truststore of JRE running the SailPoint application.
2. If you are using **CAcerts** as the Java default keystore, then run the following command on the SailPoint server:

   ```text
   keytool -keystore <"absolutePathtoJavaKeystoreCAcerts"> -importcert -alias <"userDefinedAliasNameForLDAPCert"> -file <"absoluterPathToLDAPCertificate">
   ```
3. If you are using a custom keystore, then add the following lines into the **catalina.bat** (Tomcat Configuration) and the **iiq.bat** configuration file as follows:

   ```text
   -Djavax.net.ssl.trustStore="<path to keystore>"
   -Djavax.net.ssl.trustStorePassword="<keystore password>"
   ```
4. Restart the application server after the certificate import or after any changes are made to application server configuration.
5. While configuring IBM Tivoli DS - Direct, be sure to select the **Use TLS** checkbox.
