public FormValidation doTest() { try { String message = NativeUtils.getInstance().checkPamAuthentication(); if (message.startsWith("Error:")) { return FormValidation.error(message.replaceFirst("Error:", "")); } else { return FormValidation.ok(message); } } catch (NativeAccessException exc) { return FormValidation.error("Native Support for PAM Authentication not available."); } }
@Override public GroupDetails loadGroupByGroupname(final String groupname) throws UsernameNotFoundException, DataAccessException { try { if (!NativeUtils.getInstance().checkUnixGroup(groupname)) { throw new UsernameNotFoundException("No such Unix group: " + groupname); } } catch (NativeAccessException exc) { throw new DataAccessException("Failed to find Unix Group", exc) {}; } return new GroupDetails() { @Override public String getName() { return groupname; } }; }
public Authentication authenticate(Authentication authentication) throws AuthenticationException { String username = authentication.getPrincipal().toString(); String password = authentication.getCredentials().toString(); try { Set<String> grps = NativeUtils.getInstance().pamAuthenticate(serviceName, username, password); GrantedAuthority[] groups = new GrantedAuthority[grps.size()]; int i = 0; for (String g : grps) { groups[i++] = new GrantedAuthorityImpl(g); } EnvVars.setHudsonUserEnvVar(username); // I never understood why Spring Security insists on keeping the password... return new UsernamePasswordAuthenticationToken(username, password, groups); } catch (NativeAccessException exc) { throw new BadCredentialsException(exc.getMessage(), exc); } }