From 073b11b1e33c2c52a0796b75920b588c937eb6e9 Mon Sep 17 00:00:00 2001 From: John Crygier Date: Tue, 10 Apr 2012 13:50:51 -0500 Subject: [PATCH] Documentation for LDAP. Covers the setup case that is in the JUnit Integration Test. --- docs/01_setup.mkd | 61 +++++++++++++++++++++++++++++++++++++++++++- docs/ldapSample.png | Bin 0 -> 34151 bytes 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 docs/ldapSample.png diff --git a/docs/01_setup.mkd b/docs/01_setup.mkd index 75b51419..a7b4cdaa 100644 --- a/docs/01_setup.mkd +++ b/docs/01_setup.mkd @@ -447,4 +447,63 @@ Nothing special to configure, EGit figures out everything.
https://yourserver/git/your/repository
- **Command-line Git** My testing indicates that your username must be embedded in the url. YMMV. -
https://username@yourserver/git/your/repository
\ No newline at end of file +
https://username@yourserver/git/your/repository
+ +## LDAP Support +*SINCE 1.0.0* + +LDAP can be used with Gitblit to read Users and the Teams that they belong to. If configured, LDAP will be queried upon every login to the system, and synchronize that information with the traditional Gitblit backed file (.conf or .properties). This "lazy" reading approach provides for fast reaction times, but will force a user to log in before you can maintain them (or their teams). + +### Example Diagram (with attributes) +![block diagram](ldapSample.png "LDAP Sample") + +Please see /tests/com/gitblit/tests/resources/ldapUserServiceSampleData.ldif to see the data in LDAP that reflects the above picture. + +### GitBlit Properties (See gitblit.properties for full description) +The following is are descriptions of the properties that would follow the sample layout of an LDAP (or Active Directory) setup above. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
realm.ldap.serverldap://localhost:389Tells Gitblit to connect to the LDAP server on localhost, port 389. URL Must be of form ldap(s)://: with port being optional (389 for ldap, 636 for ldaps).
realm.ldap.usernamecn=Directory ManagerThe credentials that will log into this gitblit server
realm.ldap.passwordpasswordThe credentials that will log into this gitblit server
realm.ldap.backingUserServiceusers.confWhere to store all information that is used by Gitblit. All information will be synced here upon user login.
realm.ldap.maintainTeamstrueAre users maintained in LDAP (true), or manually in Gitblit (false).
realm.ldap.accountBaseOU=Users,OU=UserControl,OU=MyOrganization,DC=MyDomainWhat is the root node for all users in this LDAP system. Searches will be subtree searches starting from this node.
realm.ldap.accountPattern(&(objectClass=person)(sAMAccountName=${username}))The LDAP Search filter that will match a particular user in LDAP. ${username} will be replaced with whatever the user types in as their user name.
realm.ldap.groupBaseOU=Groups,OU=UserControl,OU=MyOrganization,DC=MyDomainWhat is the root node for all teams in this LDAP system. Searches will be subtree searches starting from this node.
realm.ldap.groupMemberPattern(&(objectClass=group)(member=${dn}))The LDAP Search filter that will match all teams for the logging in user in LDAP. ${username} will be replaced with whatever the user types in as their user name. Anything else in ${} will be replaced by Attributes on the User node.
realm.ldap.admins@Git_AdminsA space delimited list of users and teams (if starting with @) that indicate admin status in Gitblit.
+ +You may notice that there are no properties to find the password on the User record. This is intentional, and the service utilizes the LDAP login process to verify that the user credentials are correct. + +You can also start Gitblit GO with an in-memory (backed by an LDIF file) LDAP server by using the --ldapLdifFile property. It will always start at ldap://localhost:389, so be sure to set that in gitblit.settings. It reads the user / password in gitblit.settings to create the root user login. + +Finally, writing back to LDAP is not implemented at this time, so do not worry about corrupting your corporate LDAP. Many orgnizations are likely to go through a different flow to update their LDAP, so it's unlikely that this will become a feature. \ No newline at end of file diff --git a/docs/ldapSample.png b/docs/ldapSample.png new file mode 100644 index 0000000000000000000000000000000000000000..fd8c999a61f1af78685e76eec0496afd7b247a6f GIT binary patch literal 34151 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