package org.dcache.ftp.door; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.security.auth.Subject; import diskCacheV111.util.CacheException; import diskCacheV111.util.PermissionDeniedCacheException; import org.dcache.auth.PasswordCredential; import org.dcache.auth.Subjects; import org.dcache.util.NetLoggerBuilder; /** * * @author timur */ public class WeakFtpDoorV1 extends AbstractFtpDoorV1 { private static final Logger LOGGER = LoggerFactory.getLogger(WeakFtpDoorV1.class); private String _user; public WeakFtpDoorV1() { super("Weak FTP", "weakftp"); } @Override protected void logSubject(NetLoggerBuilder log, Subject subject) { log.add("user.name", Subjects.getDisplayName(subject)); } @Override protected void secure_reply(String answer, String code) { } @Override public void ftp_user(String arg) { if (arg.equals("")){ reply(err("USER",arg)); return; } _user = arg; reply("331 Password required for "+_user+"."); } @Override public void ftp_pass(String arg) { Subject subject = new Subject(); subject.getPrivateCredentials().add(new PasswordCredential(_user, arg)); subject.getPrincipals().add(_origin); try { login(subject); reply("230 User " + _user + " logged in", _subject); } catch (PermissionDeniedCacheException e) { LOGGER.warn("Login denied for {}", subject); reply("530 Login denied"); } catch (CacheException e) { LOGGER.error("Login failed for {}: {}", subject, e); reply("530 Login failed: " + e.getMessage()); } } }