1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.ftp.core.command.rfc4217;
21
22 import org.waarp.common.command.ReplyCode;
23 import org.waarp.common.command.exception.CommandAbstractException;
24 import org.waarp.common.command.exception.Reply501Exception;
25 import org.waarp.common.command.exception.Reply503Exception;
26 import org.waarp.common.command.exception.Reply504Exception;
27 import org.waarp.common.command.exception.Reply534Exception;
28 import org.waarp.common.logging.WaarpLogger;
29 import org.waarp.common.logging.WaarpLoggerFactory;
30 import org.waarp.ftp.core.command.AbstractCommand;
31
32
33
34
35
36
37
38
39
40
41
42 public class AUTH extends AbstractCommand {
43
44
45
46 private static final WaarpLogger logger =
47 WaarpLoggerFactory.getLogger(AUTH.class);
48
49 @Override
50 public final void exec() throws CommandAbstractException {
51 if (!getSession().getConfiguration().getFtpInternalConfiguration()
52 .isAcceptAuthProt()) {
53 throw new Reply534Exception("AUTH SSL / TLS not supported");
54 }
55 if (getSession().isSsl()) {
56
57 throw new Reply503Exception("Session already using SSL / TLS");
58 }
59
60 if (!hasArg()) {
61
62 throw new Reply501Exception("Missing Parameter: TLS or SSL");
63 }
64 final String[] types = getArgs();
65 if ("TLS".equalsIgnoreCase(types[0])) {
66
67 logger.debug("Start TLS");
68 getSession().rein();
69 getSession().setNextCommand(this);
70 getSession().setReplyCode(
71 ReplyCode.REPLY_234_SECURITY_DATA_EXCHANGE_COMPLETE, null);
72 } else if ("SSL".equalsIgnoreCase(types[0])) {
73
74 logger.debug("Start SSL");
75 getSession().rein();
76 getSession().setNextCommand(this);
77 getSession().setReplyCode(
78 ReplyCode.REPLY_234_SECURITY_DATA_EXCHANGE_COMPLETE, null);
79 getSession().setDataSsl(true);
80 } else {
81 throw new Reply504Exception("Unknown Parameter: " + types[0]);
82 }
83 logger.debug("End of AUTH {}", types[0]);
84 }
85
86 }