Verify authned user is in expected domain
diff --git a/src/com/google/enterprise/adaptor/googleauthn/GoogleAuthnAdaptor.java b/src/com/google/enterprise/adaptor/googleauthn/GoogleAuthnAdaptor.java index f726f71..32dd282 100644 --- a/src/com/google/enterprise/adaptor/googleauthn/GoogleAuthnAdaptor.java +++ b/src/com/google/enterprise/adaptor/googleauthn/GoogleAuthnAdaptor.java
@@ -174,9 +174,11 @@ } private List<String> getAllGroups(String username) throws IOException { + // Username known to be valid and trusted. + String userDomain = username.split("@", 2)[1]; AppsGroupsService groupService; try { - groupService = new AppsGroupsService(domain, PROGRAM_NAME); + groupService = new AppsGroupsService(userDomain, PROGRAM_NAME); } catch (AuthenticationException ex) { throw new IOException("Failed to create groups service", ex); } @@ -309,6 +311,20 @@ return; } log.log(Level.FINE, "User {0} authenticated", email); + String[] parts = email.split("@", 2); + if (parts.length != 2) { + log.log(Level.WARNING, + "Authn failed: Could not determine user's domain: {0}", email); + callback.userAuthenticated(ex, null); + return; + } + if (!domain.equals(parts[1])) { + log.log(Level.WARNING, + "Authn failed: User {0} has domain {1} which is not the expected " + + "domain {2}", new Object[] {email, parts[1], domain}); + callback.userAuthenticated(ex, null); + return; + } final Set<String> groups; try { groups = Collections.unmodifiableSet(