From bd334cff2df0c4a7ec5b2c0de507fdc0db8b4036 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Thu, 9 Jun 2011 15:40:20 -0700 Subject: [PATCH] LDAPBindSecurityRealm.groovy> can be now overridden in $JENKINS_HOME if it exists. See http://jenkins.361315.n4.nabble.com/LDAPBindSecurityRealm-groovy-td3584243.html Originally-Committed-As: 77188bfccf1fbafad14a18a26a0175e54157383e --- .../java/hudson/security/LDAPSecurityRealm.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/security/LDAPSecurityRealm.java b/core/src/main/java/hudson/security/LDAPSecurityRealm.java index e76f43c..fbe5188 100644 --- a/core/src/main/java/hudson/security/LDAPSecurityRealm.java +++ b/core/src/main/java/hudson/security/LDAPSecurityRealm.java @@ -54,6 +54,7 @@ import org.acegisecurity.userdetails.UsernameNotFoundException; import org.acegisecurity.userdetails.ldap.LdapUserDetails; import org.acegisecurity.userdetails.ldap.LdapUserDetailsImpl; import org.apache.commons.collections.map.LRUMap; +import org.apache.commons.io.input.AutoCloseInputStream; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.QueryParameter; import org.springframework.dao.DataAccessException; @@ -66,6 +67,9 @@ import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; @@ -349,7 +353,15 @@ public class LDAPSecurityRealm extends AbstractPasswordBasedSecurityRealm { binding.setVariable("instance", this); BeanBuilder builder = new BeanBuilder(); - builder.parse(Jenkins.getInstance().servletContext.getResourceAsStream("/WEB-INF/security/LDAPBindSecurityRealm.groovy"),binding); + String fileName = "LDAPBindSecurityRealm.groovy"; + try { + File override = new File(Jenkins.getInstance().getRootDir(), fileName); + builder.parse( + override.exists() ? new AutoCloseInputStream(new FileInputStream(override)) : + Jenkins.getInstance().servletContext.getResourceAsStream("/WEB-INF/security/"+ fileName),binding); + } catch (FileNotFoundException e) { + throw new Error("Failed to load "+fileName,e); + } WebApplicationContext appContext = builder.createApplicationContext(); ldapTemplate = new LdapTemplate(findBean(InitialDirContextFactory.class, appContext));