mirror of
https://github.com/nicolabs/script-realm-plugin.git
synced 2025-09-21 00:32:17 +02:00
add 'SystemRoot' variable for win to loadGroups
This commit is contained in:
parent
d50ca3cc7a
commit
385345d4b7
|
@ -82,14 +82,13 @@ public class ScriptSecurityRealm extends AbstractPasswordBasedSecurityRealm {
|
||||||
try {
|
try {
|
||||||
StringWriter out = new StringWriter();
|
StringWriter out = new StringWriter();
|
||||||
LocalLauncher launcher = new LoginScriptLauncher(new StreamTaskListener(out));
|
LocalLauncher launcher = new LoginScriptLauncher(new StreamTaskListener(out));
|
||||||
Map<String,String> overrides = new HashMap<String, String>();
|
Map<String, String> overrides = new HashMap<String, String>();
|
||||||
overrides.put("U", username);
|
overrides.put("U", username);
|
||||||
overrides.put("P", password);
|
overrides.put("P", password);
|
||||||
if (System.getProperty("os.name").toLowerCase().contains("win")) {
|
if (isWindows()) {
|
||||||
overrides.put("SystemRoot", System.getenv("SystemRoot"));
|
overrides.put("SystemRoot", System.getenv("SystemRoot"));
|
||||||
}
|
}
|
||||||
if (launcher.launch().cmds(QuotedStringTokenizer.tokenize(commandLine)).stdout(new NullOutputStream()).envs(overrides)
|
if (launcher.launch().cmds(QuotedStringTokenizer.tokenize(commandLine)).stdout(new NullOutputStream()).envs(overrides).join() != 0) {
|
||||||
.join() != 0) {
|
|
||||||
throw new BadCredentialsException(out.toString());
|
throw new BadCredentialsException(out.toString());
|
||||||
}
|
}
|
||||||
GrantedAuthority[] groups = loadGroups(username);
|
GrantedAuthority[] groups = loadGroups(username);
|
||||||
|
@ -129,8 +128,13 @@ public class ScriptSecurityRealm extends AbstractPasswordBasedSecurityRealm {
|
||||||
if (!StringUtils.isBlank(groupsCommandLine)) {
|
if (!StringUtils.isBlank(groupsCommandLine)) {
|
||||||
StringWriter out = new StringWriter();
|
StringWriter out = new StringWriter();
|
||||||
LocalLauncher launcher = new LoginScriptLauncher(new StreamTaskListener(out));
|
LocalLauncher launcher = new LoginScriptLauncher(new StreamTaskListener(out));
|
||||||
|
Map<String, String> overrides = new HashMap<String, String>();
|
||||||
|
overrides.put("U", username);
|
||||||
|
if (isWindows()) {
|
||||||
|
overrides.put("SystemRoot", System.getenv("SystemRoot"));
|
||||||
|
}
|
||||||
OutputStream scriptOut = new ByteArrayOutputStream();
|
OutputStream scriptOut = new ByteArrayOutputStream();
|
||||||
if (launcher.launch().cmds(QuotedStringTokenizer.tokenize(groupsCommandLine)).stdout(scriptOut).envs("U=" + username).join() == 0) {
|
if (launcher.launch().cmds(QuotedStringTokenizer.tokenize(groupsCommandLine)).stdout(scriptOut).envs(overrides).join() == 0) {
|
||||||
StringTokenizer tokenizer = new StringTokenizer(scriptOut.toString().trim(), groupsDelimiter);
|
StringTokenizer tokenizer = new StringTokenizer(scriptOut.toString().trim(), groupsDelimiter);
|
||||||
while (tokenizer.hasMoreTokens()) {
|
while (tokenizer.hasMoreTokens()) {
|
||||||
final String token = tokenizer.nextToken().trim();
|
final String token = tokenizer.nextToken().trim();
|
||||||
|
@ -150,4 +154,9 @@ public class ScriptSecurityRealm extends AbstractPasswordBasedSecurityRealm {
|
||||||
throw new AuthenticationServiceException("Failed", e);
|
throw new AuthenticationServiceException("Failed", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isWindows() {
|
||||||
|
String os = System.getProperty("os.name").toLowerCase();
|
||||||
|
return os.contains("win");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,44 @@
|
||||||
package hudson.plugins.script_realm;
|
package hudson.plugins.script_realm;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
import org.acegisecurity.AuthenticationException;
|
import org.acegisecurity.AuthenticationException;
|
||||||
|
import org.acegisecurity.userdetails.UserDetails;
|
||||||
import org.jvnet.hudson.test.HudsonTestCase;
|
import org.jvnet.hudson.test.HudsonTestCase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Kohsuke Kawaguchi
|
* @author Kohsuke Kawaguchi
|
||||||
*/
|
*/
|
||||||
public class ScriptSecurityRealmTest extends HudsonTestCase {
|
public class ScriptSecurityRealmTest extends HudsonTestCase {
|
||||||
|
|
||||||
|
private File trueScript = new File("src/test/resources/true.sh");
|
||||||
|
private File falseScript = new File("src/test/resources/false.sh");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
if (!trueScript.exists()) {
|
||||||
|
throw new IllegalStateException(trueScript.getAbsolutePath() + " file not found!");
|
||||||
|
}
|
||||||
|
if (!falseScript.exists()) {
|
||||||
|
throw new IllegalStateException(falseScript.getAbsolutePath() + " file not found!");
|
||||||
|
}
|
||||||
|
Runtime.getRuntime().exec("chmod 777 " + trueScript.getAbsolutePath());
|
||||||
|
Runtime.getRuntime().exec("chmod 777 " + falseScript.getAbsolutePath());
|
||||||
|
}
|
||||||
|
|
||||||
public void test1() {
|
public void test1() {
|
||||||
new ScriptSecurityRealm("/bin/true", null, null).authenticate("test",
|
UserDetails user = new ScriptSecurityRealm(trueScript.getAbsolutePath(), null, null).authenticate("test", "test");
|
||||||
"test");
|
System.out.println("**-->" + user);
|
||||||
|
assertTrue("user account not enabled", user.isEnabled());
|
||||||
|
assertTrue("user credentials expired", user.isCredentialsNonExpired());
|
||||||
|
assertTrue("user account locked", user.isAccountNonLocked());
|
||||||
|
assertTrue("user account expired", user.isAccountNonExpired());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void test2() {
|
public void test2() {
|
||||||
try {
|
try {
|
||||||
new ScriptSecurityRealm("/bin/false", null, null).authenticate(
|
new ScriptSecurityRealm(falseScript.getAbsolutePath(), null, null).authenticate("test", "test");
|
||||||
"test", "test");
|
|
||||||
fail();
|
fail();
|
||||||
} catch (AuthenticationException e) {
|
} catch (AuthenticationException e) {
|
||||||
// as expected
|
// as expected
|
||||||
|
|
1
src/test/resources/false.sh
Executable file
1
src/test/resources/false.sh
Executable file
|
@ -0,0 +1 @@
|
||||||
|
exit 1
|
1
src/test/resources/true.sh
Executable file
1
src/test/resources/true.sh
Executable file
|
@ -0,0 +1 @@
|
||||||
|
exit 0
|
Loading…
Reference in a new issue