private User authenticateRecursive(Host h, String name, String password) { User u = h.doAuthenticate(name, password); if (u != null) { if (log.isTraceEnabled()) { LogUtils.trace( log, "authenticateRecursive: authenticated ok on host: ", h.getName(), "user", name, password, "->", u.getPath()); } return u; } Host hParent = h.getParentHost(); if (hParent == null) { LogUtils.trace(log, "authenticateRecursive: reached null host for user name: ", name); return null; } else { LogUtils.trace(log, "authenticateRecursive: not found here, delegate to parent host"); return authenticateRecursive(hParent, name, password); } }
@Override public User authenticate(Resource r, String user, String password) { // log.debug("authenticate: " + user); if (r instanceof Templatable) { Templatable resource = (Templatable) r; NameAndAuthority na = NameAndAuthority.parse(user); User u = null; if (na.authority == null) { Host h = resource.getHost(); LogUtils.trace(log, "authenticate: no authority given, so use current host", h.getName()); u = authenticateRecursive(h, na.name, password); } else { Host host = findHost(resource, na.authority); if (host == null) { log.warn("authenticate: host not found: " + na.authority); return null; } else { u = host.doAuthenticate(na.name, password); LogUtils.trace( log, "authenticate: authenticating on specified host", host.getName(), "result:", u); } } if (u == null) { log.warn("Authentication failed: " + na.name); } return u; } else { return (User) r.authenticate(user, password); } }