Samba LDAP バックエンド
===================================

概要
-----

::

    unicornidm.conf, templates/<name>.py

説明
------

バックエンドセクションのうち、 *type* が *samba_ldap* となっているバックエンドは、
Samba と連携している LDAP サーバーへの接続に関する設定を行います。

各バックエンドには必ずテンプレートファイルを用意する必要があります。
テンプレートファイルとは Unicorn ID Manager の任意属性 (フロントエンド属性) を
バックエンド固有の属性 (バックエンド属性) にマッピングするためのものです。

パラメーター
--------------

:doc:`ldap` のパラメーターに加えて以下のパラメーターを設定します。

samba_domain_sid
    Samba のドメイン SID を指定します。

テンプレート
-------------

以下は、 samba_ldap のテンプレートファイルの例です。

::

    User = {
        "objectClass": [
            "top",
            "person",
            "organizationalPerson",
            "inetOrgPerson",
            "posixAccount",
            "sambaSamAccount",
        ],
        "uid": userName,
        "cn": userName,
        "uidNumber": default(uidNumber),
        "gidNumber": default(gidNumber, 100),
        "loginShell": default(loginShell, "/bin/bash"),
        "homeDirectory": default(unixHomeDirectory, "/home/%(userName)s"),
        "sn": familyName,
        "givenName": givenName,
        "userPassword": password,
        "mail": mail,
        "description": default(description),
        "displayName": default(displayName, "%(familyName)s %(givenName)s"),
        "sambaAcctFlags": default(sambaAcctFlags, "[UX         ]"),
    }


    Group = {
        "objectClass": [
            "top",
            "posixGroup",
            "sambaGroupMapping",
            ],
        "cn": groupName,
        "gidNumber": default(gidNumber),
        "description": default(description),
    }


注意すべき点は以下のとおりです。

* User と Group の辞書には必ず、 *objectClass* を list 型で指定する必要があること

* *objectClass* で必須のバックエンド属性を必ず含めること


samba_ldap バックエンド特有のバックエンド属性
-------------------------------------------------

sambaSID
    テンプレートファイルに *sambaSID* バックエンド属性が
    定義されていない場合、ユーザーの場合 *uidNumber* から、
    グループの場合 *gidNumber* から、 *sambaSID* を自動生成します。

parentOu
    *parentOu* バックエンド属性はユーザーやグループの所属 OU を指定するための
    バックエンド属性です。この値がセットされた場合、 *parentOu* と
    *suffix* パラメーターを結合したサフィックスが適用されます。
    *parentOu* が存在しない場合 *suffix_user* か *suffix_group* が適用されます。

    例::

        backend_primary_key_user = "uid"
        userName = "user1
        parentOu = "ou=org1"
        suffix = "dc=example,dc=com"
        suffix_user = "ou=Users,%(suffix)s"

            ===> "uid=user1,ou=org1,dc=example,dc=com"

        backend_primary_key_user = "uid"
        userName = "user1
        parentOu = None
        suffix = "dc=example,dc=com"
        suffix_user = "ou=Users,%(suffix)s"

            ===> "uid=user1,ou=Users,dc=example,dc=com"

.. versionadded:: 3.3.0

     parentOu で所属 OU を変更できるようになりました。
