]>
Commit | Line | Data |
---|---|---|
c91bab60 AM |
1 | diff --git a/src/ftpd.c b/src/ftpd.c |
2 | index 0d5030c..7029d72 100644 | |
3 | --- a/src/ftpd.c | |
4 | +++ b/src/ftpd.c | |
5 | @@ -3565,14 +3565,16 @@ void dofeat(void) | |
6 | # define FEAT_ESTP CRLF " ESTP" | |
7 | # endif | |
8 | ||
9 | - char feat[] = FEAT FEAT_DEBUG FEAT_TLS FEAT_TVFS FEAT_ESTA FEAT_PASV FEAT_ESTP; | |
10 | +# define FEAT_UTF8 CRLF " UTF8" | |
11 | + | |
12 | + char feat[] = FEAT FEAT_DEBUG FEAT_TLS FEAT_UTF8 FEAT_TVFS FEAT_ESTA FEAT_PASV FEAT_ESTP; | |
13 | ||
14 | if (disallow_passive != 0) { | |
15 | - feat[sizeof FEAT FEAT_DEBUG FEAT_TLS FEAT_TVFS FEAT_ESTA] = 0; | |
16 | + feat[sizeof FEAT FEAT_DEBUG FEAT_TLS FEAT_UTF8 FEAT_TVFS FEAT_ESTA] = 0; | |
17 | } | |
18 | # ifndef MINIMAL | |
19 | else if (STORAGE_FAMILY(force_passive_ip) != 0) { | |
20 | - feat[sizeof FEAT FEAT_DEBUG FEAT_TLS FEAT_TVFS FEAT_ESTA FEAT_PASV] = 0; | |
21 | + feat[sizeof FEAT FEAT_DEBUG FEAT_TLS FEAT_UTF8 FEAT_TVFS FEAT_ESTA FEAT_PASV] = 0; | |
22 | } | |
23 | # endif | |
24 | addreply_noformat(0, feat); | |
25 | @@ -4639,7 +4641,20 @@ void doopts(char *args) | |
26 | cmdopts++; | |
27 | (void) cmdopts; | |
28 | } | |
29 | + if (strncasecmp("utf8 ", args, 5) == 0 || | |
30 | + strncasecmp("utf-8 ", args, 6) == 0) { | |
31 | + if (cmdopts == NULL || *cmdopts == 0) { | |
32 | + addreply_noformat(501, "OPTS UTF8: " MSG_MISSING_ARG); | |
33 | + } else if (strncasecmp(cmdopts, "on", sizeof "on" - 1U) == 0) { | |
34 | + addreply_noformat(200, "OK, UTF-8 enabled"); | |
35 | + } else if (strncasecmp(cmdopts, "off", sizeof "off" - 1U)) { | |
36 | + addreply_noformat(200, "OK, UTF-8 disabled"); | |
37 | + } else { | |
38 | + addreply_noformat(502, MSG_UNKNOWN_COMMAND); | |
39 | + } | |
40 | + return; | |
41 | + } | |
42 | if (strncasecmp("mlst ", args, 5) == 0) { | |
43 | addreply_noformat(200, " MLST OPTS " | |
44 | "type;size;sizd;modify;UNIX.mode;UNIX.uid;" | |
45 |