提交 af5e06a9 编写于 作者: J Jesse Glick

Merge branch 'master' into BuildStep-Job

......@@ -662,11 +662,11 @@ public class User extends AbstractModelObject implements AccessControlled, Descr
public void doConfigSubmit( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException, FormException {
checkPermission(Jenkins.ADMINISTER);
fullName = req.getParameter("fullName");
description = req.getParameter("description");
JSONObject json = req.getSubmittedForm();
fullName = json.getString("fullName");
description = json.getString("description");
List<UserProperty> props = new ArrayList<UserProperty>();
int i = 0;
for (UserPropertyDescriptor d : UserProperty.all()) {
......
......@@ -39,7 +39,6 @@ import jenkins.model.Jenkins;
import net.sf.json.JSONObject;
import org.acegisecurity.Authentication;
import org.acegisecurity.acls.sid.Sid;
import org.kohsuke.stapler.StaplerRequest;
/**
......@@ -242,11 +241,6 @@ public abstract class AuthorizationStrategy extends AbstractDescribableImpl<Auth
public @Nonnull AuthorizationStrategy newInstance(StaplerRequest req, JSONObject formData) throws FormException {
return UNSECURED;
}
@Override
public String getHelpFile() {
return "/help/security/no-authorization.html";
}
}
}
}
......@@ -68,10 +68,5 @@ public class FullControlOnceLoggedInAuthorizationStrategy extends AuthorizationS
public AuthorizationStrategy newInstance(StaplerRequest req, JSONObject formData) throws FormException {
return new FullControlOnceLoggedInAuthorizationStrategy();
}
@Override
public String getHelpFile() {
return "/help/security/full-control-once-logged-in.html";
}
};
}
......@@ -81,6 +81,8 @@ import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
/**
* {@link SecurityRealm} that performs authentication by looking up {@link User}.
......@@ -130,6 +132,11 @@ public class HudsonPrivateSecurityRealm extends AbstractPasswordBasedSecurityRea
return !disableSignup;
}
@Restricted(NoExternalUse.class) // Jelly
public boolean getAllowsSignup() {
return allowsSignup();
}
/**
* Checks if captcha is enabled on user signup.
*
......@@ -681,11 +688,6 @@ public class HudsonPrivateSecurityRealm extends AbstractPasswordBasedSecurityRea
public String getDisplayName() {
return Messages.HudsonPrivateSecurityRealm_DisplayName();
}
@Override
public String getHelpFile() {
return "/help/security/private-realm.html";
}
}
private static final Filter CREATE_FIRST_USER_FILTER = new Filter() {
......
......@@ -57,10 +57,6 @@ public final class LegacyAuthorizationStrategy extends AuthorizationStrategy {
return Messages.LegacyAuthorizationStrategy_DisplayName();
}
public String getHelpFile() {
return "/help/security/legacy-auth-strategy.html";
}
public LegacyAuthorizationStrategy newInstance(StaplerRequest req, JSONObject formData) throws FormException {
return new LegacyAuthorizationStrategy();
}
......
......@@ -97,9 +97,5 @@ public final class LegacySecurityRealm extends SecurityRealm implements Authenti
public String getDisplayName() {
return Messages.LegacySecurityRealm_Displayname();
}
public String getHelpFile() {
return "/help/security/container-realm.html";
}
};
}
......@@ -175,20 +175,15 @@ public class Shell extends CommandInterpreter {
}
@Override
public Builder newInstance(StaplerRequest req, JSONObject data) {
return new Shell(data.getString("command"));
}
@Override
public boolean configure(StaplerRequest req, JSONObject data) {
setShell(req.getParameter("shell"));
return true;
public boolean configure(StaplerRequest req, JSONObject data) throws FormException {
req.bindJSON(this, data);
return super.configure(req, data);
}
/**
* Check the existence of sh in the given location.
*/
public FormValidation doCheck(@QueryParameter String value) {
public FormValidation doCheckShell(@QueryParameter String value) {
// Executable requires admin permission
return FormValidation.validateExecutable(value);
}
......
......@@ -29,6 +29,7 @@ import hudson.ExtensionPoint;
import hudson.model.AbstractDescribableImpl;
import hudson.util.CaseInsensitiveComparator;
import org.apache.commons.lang.StringUtils;
import org.kohsuke.stapler.DataBoundConstructor;
import javax.annotation.Nonnull;
import java.util.Comparator;
......@@ -138,6 +139,9 @@ public abstract class IdStrategy extends AbstractDescribableImpl<IdStrategy> imp
*/
public static class CaseInsensitive extends IdStrategy {
@DataBoundConstructor
public CaseInsensitive() {}
@Override
@Nonnull
public String filenameOf(@Nonnull String id) {
......@@ -178,6 +182,9 @@ public abstract class IdStrategy extends AbstractDescribableImpl<IdStrategy> imp
*/
public static class CaseSensitive extends IdStrategy {
@DataBoundConstructor
public CaseSensitive() {}
/**
* {@inheritDoc}
*/
......@@ -255,6 +262,9 @@ public abstract class IdStrategy extends AbstractDescribableImpl<IdStrategy> imp
*/
public static class CaseSensitiveEmailAddress extends CaseSensitive {
@DataBoundConstructor
public CaseSensitiveEmailAddress() {}
/**
* {@inheritDoc}
*/
......
......@@ -31,11 +31,12 @@ THE SOFTWARE.
<st:include page="sidepanel.jelly" />
<l:main-panel>
<f:form method="post" action="configSubmit" name="config">
<j:set var="instance" value="${it}"/>
<f:entry title="${%Full name}" help="/help/user/fullName.html">
<f:textbox name="fullName" value="${it.fullName}" />
<f:textbox field="fullName"/>
</f:entry>
<f:entry title="${%Description}" help="/help/user/description.html">
<f:textarea name="description" value="${it.description}"/>
<f:textarea field="description"/>
</f:entry>
<!-- user property configurations -->
......
......@@ -25,8 +25,8 @@ THE SOFTWARE.
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson"
xmlns:f="/lib/form">
<f:entry title="" help="/help/security/private-realm/allow-signup.html">
<f:checkbox name="privateRealm.allowsSignup" checked="${h.defaultToTrue(instance.allowsSignup())}" title="${%Allow users to sign up}" />
<f:entry field="allowsSignup">
<f:checkbox default="true" title="${%Allow users to sign up}"/>
</f:entry>
<j:if test="${size(h.captchaSupportDescriptors) gt 0}">
<f:entry>
......
......@@ -41,8 +41,8 @@ THE SOFTWARE.
<f:entry title="${%POM}" help="/plugin/maven-plugin/root-pom.html">
<f:textbox field="pom"/>
</f:entry>
<f:entry title="${%Properties}" help="/help/tasks/maven/properties.html">
<f:textarea field="properties"/>
<f:entry field="properties" title="${%Properties}">
<f:textarea/>
</f:entry>
<f:entry title="${%JVM Options}" help="/plugin/maven-plugin/maven-opts.html">
<f:expandableTextbox field="jvmOptions"/>
......@@ -52,13 +52,6 @@ THE SOFTWARE.
</f:entry>
<f:dropdownDescriptorSelector title="${%Settings file}" field="settings" default="${descriptor.defaultSettingsProvider}"/>
<!--
<f:entry help="/help/tasks/maven/maven-settings.html">
</f:entry>
<f:entry help="/help/tasks/maven/maven-settings.html">
</f:entry>
-->
<f:dropdownDescriptorSelector title="${%Global Settings file}" field="globalSettings" default="${descriptor.defaultGlobalSettingsProvider}"/>
</f:advanced>
</j:jelly>
\ No newline at end of file
......@@ -25,7 +25,7 @@ package hudson.tasks.Shell;
f=namespace(lib.FormTagLib)
f.section(title:_("Shell")) {
f.entry(title:_("Shell executable"),help:"/help/shell/shellexe.html") {
f.textbox(name:"shell",value:descriptor.shell,checkUrl:"'${rootURL}/builder/Shell/check?value='+encodeURIComponent(this.value)")
f.entry(field: 'shell', title:_("Shell executable")) {
f.textbox()
}
}
<!--
The MIT License
Copyright (c) 2014, Stephen Connolly.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" />
......@@ -365,7 +365,7 @@ public class UserTest {
auth.add(Jenkins.READ, user2.getId());
SecurityContextHolder.getContext().setAuthentication(user.impersonate());
HtmlForm form = j.createWebClient().login(user.getId(), "password").goTo(user2.getUrl() + "/configure").getFormByName("config");
form.getInputByName("fullName").setValueAttribute("Alice Smith");
form.getInputByName("_.fullName").setValueAttribute("Alice Smith");
j.submit(form);
assertEquals("User should have full name Alice Smith.", "Alice Smith", user2.getFullName());
SecurityContextHolder.getContext().setAuthentication(user2.impersonate());
......@@ -380,7 +380,7 @@ public class UserTest {
}
form = j.createWebClient().login(user2.getId(), "password").goTo(user2.getUrl() + "/configure").getFormByName("config");
form.getInputByName("fullName").setValueAttribute("John");
form.getInputByName("_.fullName").setValueAttribute("John");
j.submit(form);
assertEquals("User should be albe to configure himself.", "John", user2.getFullName());
......
<div>
One of the searches Jenkins does on LDAP is to locate the list of groups for a user.
<p>
This field determines the query to be run to identify the organizational unit that
contains groups. The query is almost always <tt>"ou=groups"</tt> so try that first,
though this field may be left blank to search from the root DN.
</p><p>
If login attempts result in "Administrative Limit Exceeded" or similar error, try to
make this setting as specific as possible for your LDAP structure, to reduce the scope
of the query. If the error persists, you may need to edit the
<tt>WEB-INF/security/LDAPBindSecurityRealm.groovy</tt> file that is included in
<tt>jenkins.war</tt>. Change the line with: <br/>
<tt>groupSearchFilter = "(| (member={0}) (uniqueMember={0}) (memberUid={1}))";</tt><br/>
to query only of the field used in your LDAP for group membership, such as: <br/>
<tt>groupSearchFilter = "(member={0})";</tt><br/>
Then restart Jenkins and retry the login.
</p>
</div>
<div>
Jenkins ermittelt per LDAP die Liste der Gruppen, denen ein Benutzer angehört.
<p>
Dieses Feld enthält die Abfrage zur Identifikation der Organisationseinheit,
welche Gruppen enthält. Die Abfrage ist fast immer <tt>"ou=groups"</tt>, so daß
Sie diesen Wert zuerst versuchen sollten. Sie können das Feld aber auch leer
lassen, um vom Stamm-DN aus zu suchen.
</p>
<p>
Wenn Anmeldeversuche mit der Meldung "Administrative Limit Exceeded" oder
ähnlichen Fehlern fehlschlagen, versuchen Sie, die Abfrage so spezifisch wie
möglich für Ihre LDAP-Struktur zu machen, um so den Umfang der Suche zu verringern.
Wenn der Fehler weiterhin besteht, müssen Sie gegebenfalls die Datei
<tt>WEB-INF/security/LDAPBindSecurityRealm.groovy</tt> ändern, die sich in
<tt>jenkins.war</tt> befindet. Ändern Sie die Zeile<br/>
<tt>groupSearchFilter = "(| (member={0}) (uniqueMember={0}) (memberUid={1}))";</tt><br/>
so ab, daß nur das Feld für Gruppenzugehörigkeit in der Stuktur Ihres LDAP-Systems verwendet wird, z.B.: <br/>
<tt>groupSearchFilter = "(member={0})";</tt><br/>
Dann starten Sie Jenkins neu und versuchen, sich anzumelden.
</p>
</div>
\ No newline at end of file
<div>
Une des recherches faites par Jenkins sur LDAP consiste en la localisation de la liste des groupes
d'un utilisateur.
<p>
Ce champ détermine la requète à lancer pour identifier l'unité organisationnelle qui contient des groupes.
La requète est presque toujours <tt>"ou=groups"</tt>; dans la plupart des cas, vous devriez donc laisser
ce champ vide et laisser cette requète par défaut s'exécuter.
</div>
\ No newline at end of file
<div>
Jenkinsが行うLDAPの検索の1つに、与えられたユーザー名を持つグループリストの検索があります。
<p>
この項目は、グループを含むユニット名を特定するクエリーを決めます。
root DNから検索する際にこの項目が未入力でも、 このクエリーは通常<tt>"ou=groups"</tt>なので、まず<tt>"ou=groups"</tt>で検索します。
</p>
<p>
もし、ログイン時に"Administrative Limit Exceeded"や同様のエラーが発生する場合は、
できるだけあなたのLDAPの構造にあわせた設定を行って、クエリーの範囲を絞ってください。
それでもエラーが発生するようであれば、<tt>jenkins.war</tt>に含まれている
<tt>WEB-INF/security/LDAPBindSecurityRealm.groovy</tt>を編集します。<br />
次の行:<br />
<tt>groupSearchFilter = "(| (member={0}) (uniqueMember={0}) (memberUid={1}))";</tt><br/>
をLDAPで使用されている項目だけを問い合わせるように変更します。<br />
<tt>groupSearchFilter = "(member={0})";</tt><br/>
変更したら、Jenkinsを再起動してログインしてください。
</p>
</div>
<div>
Bir kullan&#305;c&#305;n&#305;n dahil oldu&#287;u gruplar&#305;n listesini bulmak i&#231;in Jenkins'&#305;n LDAP &#252;zerinde yapt&#305;&#287;&#305; aramalardan bir tanesidir
<p>
Bu alan, gruplar&#305; i&#231;eren organizasyonel birimlerin belirlenmesi i&#231;in &#231;al&#305;&#351;t&#305;r&#305;lacak sorguyu belirtir.
Sorgu &#231;o&#287;unlukla <tt>"ou=groups"</tt> &#351;eklindedir, baz&#305; durumlarda bu k&#305;sm&#305; bo&#351; b&#305;rakman&#305;z ve varsay&#305;lan ayarlar ile
&#231;al&#305;&#351;mas&#305;n&#305; sa&#287;laman&#305;z gerekebilir.
</div>
\ No newline at end of file
<div>
Jenkins 對 LDAP 的查詢之一,用來找出使用者的群組清單。
<p>
這個欄位設定用來找出包含群組的單位組織 (Organizational Unit; OU) 的查詢字串。
大概都是 <code>"ou=groups"</code>,所以就算欄位不填也會先從根 DN 開始用這個查詢字串搜尋。
</p><p>
如果登入嘗試結果是 "Administrative Limit Exceeded" 或類似錯誤,請盡可能依據您的 LDAP
結構將欄位設得越明確越好,縮小查詢查詢的範圍。如果還是一直有錯,說不定您要編輯
<code>jenkins.war</code> 裡的 <code>WEB-INF/security/LDAPBindSecurityRealm.groovy</code>。將這一行:<br/>
<code>groupSearchFilter = "(| (member={0}) (uniqueMember={0}) (memberUid={1}))";</code><br/>
改成只查詢您 LDAP 群組成員的欄位,例如: <br/>
<code>groupSearchFilter = "(member={0})";</code><br/>
之後重新啟動 Jenkins 再登入看看。
</p>
</div>
<div>
If your LDAP server doesn't support <a href="http://www.google.com/?q=LDAP+anonymous+bind">anonymous binding</a>
(IOW, if your LDAP server doesn't even allow a query without authentication),
then Jenkins would have to first authenticate itself against the LDAP server,
and Jenkins does that by sending "manager" DN and password.
<p>
A DN typically looks like <tt>CN=MyUser,CN=Users,DC=mydomain,DC=com</tt>
although the exact sequence of tokens depends on the LDAP server configuration.
It can be any valid DN as long as LDAP allows this user to query data.
<p>
This configuration is also useful when you are connecting to Active Directory
from a Unix machine, as AD doesn't allow anonymous bind by default. But
if you can't figure this out, you can also change AD setting to allow
anonymous bind. See <a href="http://www.novell.com/coolsolutions/appnote/15120.html">this document</a> for how to.
</div>
\ No newline at end of file
<div>
Wenn Ihr LDAP-Server kein <a href="http://www.google.com/?q=LDAP+anonymous+bind">anonymes Binding</a>
unterstützt (mit anderen Worten: Wenn Ihre LDAP-Server keine Abfragen ohne
vorausgehende Authentifizierung erlaubt), muss Jenkins sich zunächst gegenüber
dem LDAP-Server authentifizieren. Dies erfolgt durch Senden eines
"Manager"-DNs mit Passwort.
<p>
Ein DN sieht üblicherweise wie <tt>CN=MyUser,CN=Users,DC=mydomain,DC=com</tt>
aus, wenngleich die genaue Folge der Bestandteile von der Konfiguration des
LDAP-Servers abhängt. Jeder gültige DN ist erlaubt, solange LDAP-Server diesem
Benutzer Abfragen gestattet.
<p>
Diese Konfiguration ist insbesondere nützlich wenn Sie von einem Unix-Rechner
auf ein Active Directory zugreifen, da Active Directory standardmäßig kein
anonymes Bindung erlaubt. Sollten Sie diesen Modus nicht zum Laufen bringen,
können Sie auch das Active Directory so konfigurieren, dass es anonymes Binden
erlaubt. Eine Anleitung dazu finden Sie
<a href="http://www.novell.com/coolsolutions/appnote/15120.html">hier</a>.
</div>
\ No newline at end of file
<div>
Si votre serveur LDAP ne supporte pas le <a href="http://www.google.com/?q=LDAP+anonymous+bind">binding anonyme</a>
(c'est-à-dire, si votre serveur LDAP ne permet pas le requêtage sans authentification),
alors Jenkins va devoir s'authentifier auprès du serveur. Il fait cela en envoyant le
DN et le mot de passe du "gestionnaire".
<p>
Un DN ressemble typiquement à <tt>CN=MyUser,CN=Users,DC=mydomain,DC=com</tt>
bien que la séquence exacte des éléments dépend de la configuration du serveur LDAP.
Cela peut être tout DN valide, tant que LDAP autorise cet utilisateur à lancer des
requêtes sur les données.
<p>
Cette configuration est également utile quand vous êtes connectés à Active Directory
à partir d'une machine Unix, car AD ne permet pas le bind anonyme par défaut. Si cette
configuration vous parait trop complexe, vous pouvez simplement changer les paramètres de
AD afin d'authoriser le binding anonyme.
Voir <a href="http://www.novell.com/coolsolutions/appnote/15120.html">ce document</a>
pour plus d'explications.
</div>
\ No newline at end of file
<div>
LDAPサーバーが<a href="http://www.google.com/search?lr=lang_ja&q=LDAP+anonymous+bind">匿名バインド</a>をサポートしない場合
(言い換えると、LDAPサーバーが認証なしのクエリーを許可しない場合)、
Jenkinsは。最初にLDAPサーバーに対して自分自身の認証を行う必要があるので、
"管理者"のDNとパスワードをLDAPセーバーに送信します。
<p>
DNは、正確な並びはLDAPサーバーの設定に依存しますが、
一般的に<tt>CN=MyUser,CN=Users,DC=mydomain,DC=com</tt>のようなものです。
クエリーの発行が許可されている限り、有効であればどんなDNでもかまいません。
<p>
Active Directory(AD)はデフォルトでは匿名バインドを許可していないので、
UnixマシーンからADに接続するときにも便利です。
この設定が分からないのであれば、匿名バインドを許可するようにADの設定を変更することもできます。
変更方法については、
<a href="http://www.novell.com/coolsolutions/appnote/15120.html">このドキュメント</a>を参照してください。
</div>
<div>
Se seu servidor LDAP n&#227;o suportar <a href="http://www.google.com/?q=LDAP+anonymous+bind">binding an&#244;nimo</a>
(Em outras palavras, se seu servidor LDAP n&#227;o permite uma consulta sem autentica&#231;&#227;o),
ent&#227;o o Jenkins teria que primeiro se autenticar no servidor LDAP,
e o Jenkins faz isto enviando o DN e senha do "administrador".
<p>
Um DN tipicamente se parece com <tt>CN=MeuUsuario,CN=Usuarios,DC=meudominio,DC=com</tt>
embora a sequ&#234;ncia exata dos valores dependem da configura&#231;&#227;o do servidor LDAP.
Pode ser qualquer DN v&#225;lido desde que o LDAP permita que este usu&#225;rio consulte os dados.
<p>
Esta configura&#231;&#227;o tamb&#233;m &#233; &#250;til quando voc&#234; estiver conectando ao Active Directory
de uma m&#225;quina Unix, j&#225; o AD n&#227;o permite binding an&#244;nimo por padr&#227;o. Mas
se voc&#234; n&#227;o pode resolver isto, voc&#234; tamb&#233;m pode mudar as configura&#231;&#245;es do AD para
permitir binding an&#244;nimo. Veja <a href="http://www.novell.com/coolsolutions/appnote/15120.html">este documento</a> para saber como.
</div>
<div>
If your LDAP server doesn't support <a href="http://www.google.com/?q=LDAP+anonymous+bind">anonymous binding</a>
(IOW, if your LDAP server doesn't even allow a query without authentication),
then Jenkins would have to first authenticate itself against the LDAP server,
and Jenkins does that by sending "manager" DN and password.
<p>
A DN typically looks like <tt>CN=MyUser,CN=Users,DC=mydomain,DC=com</tt>
although the exact sequence of tokens depends on the LDAP server configuration.
It can be any valid DN as long as LDAP allows this user to query data.
<p>
This configuration is also useful when you are connecting to Active Directory
from a Unix machine, as AD doesn't allow anonymous bind by default. But
if you can't figure this out, you can also change AD setting to allow
anonymous bind. See <a href="http://www.novell.com/coolsolutions/appnote/15120.html">this document</a> for how to.
</div>
\ No newline at end of file
<div>
如果您的 LDAP 伺服器不支援<a href="http://www.google.com/?q=LDAP+anonymous+bind">匿名繫結 (Anonymous Binding)</a>
(換句話說就是: 如果您的 LDAP 伺服器沒有驗證通過就不能查詢),Jenkins
就要先在 LDAP 伺服器上認證過自己,Jenkins 的作法就是送出「管理人員」的 DN 及密碼。
<p>
DN 一般看起來像 <code>CN=MyUser,CN=Users,DC=mydomain,DC=com</code>,但是正確的元素順序跟 LDAP 伺服器設定有關。
可以填任何一個有效的 DN,只要 LDAP 允許這個使用者查詢資訊。
<p>
由 Unix 主機連線到 Active Directory 時也很有用,因為 AD 預設不支援匿名繫結。
如果您不懂,那也可以參考<a href="http://www.novell.com/coolsolutions/appnote/15120.html">這份文件</a>修改設定讓
AD 允許匿名繫結。
</div>
\ No newline at end of file
<div>
Password for the manager DN specified above.
</div>
\ No newline at end of file
<div>
Passwort für den oben angegebenen Manager-DN.
</div>
\ No newline at end of file
<div>
Le mot de passe du gestionnaire DN spécifié ci-dessus.
</div>
\ No newline at end of file
<div>
上記で指定した管理者のDNのパスワードです。
</div>
<div>
Senha para o DN administrador especificado acima.
</div>
<div>
Yukar&#305;da belirtilen y&#246;netici DN'in &#351;ifresidir.
</div>
\ No newline at end of file
<div>
上列那個管理員 DN 的密碼。
</div>
\ No newline at end of file
<div>
For authenticating user and determing the roles given to this user, Jenkins performs
multiple LDAP queries.
Since an LDAP database is conceptually a big tree and the search is performed recursively,
in theory if we can start a search starting at a sub-node (as opposed to root), you get
a better performance because it narrows down the scope of a search.
This field specifies the DN of such a subtree.
<p>
But in practice, LDAP servers maintain an extensive index over the data, so specifying
this field is rarely necessary &mdash; you should just let Jenkins figure this out
by talking to LDAP.
<p>
If you do specify this value, the field normally looks something like <tt>"dc=sun,dc=com"</tt>
</div>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册