Skip to content

Commit ecef972

Browse files
committed
improved setting of modified time for root, there seems to be still a timezone issue, see GH #289
1 parent 74c752a commit ecef972

File tree

5 files changed

+34
-10
lines changed

5 files changed

+34
-10
lines changed

pftpd-pojo-lib/src/main/java/org/primftpd/pojo/LsOutputBean.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public class LsOutputBean {
3333
private final String name;
3434
private final String linkTarget;
3535

36+
private final String originalLine;
37+
3638
public LsOutputBean(String name) {
3739
this.exists = false;
3840
this.name = name;
@@ -56,6 +58,7 @@ public LsOutputBean(String name) {
5658
this.user = null;
5759
this.group = null;
5860
this.linkTarget = null;
61+
this.originalLine = null;
5962
}
6063

6164
public LsOutputBean(
@@ -78,7 +81,8 @@ public LsOutputBean(
7881
String user,
7982
String group,
8083
String name,
81-
String linkTarget) {
84+
String linkTarget,
85+
String originalLine) {
8286
this.exists = true;
8387
this.isFile = isFile;
8488
this.isDir = isDir;
@@ -100,6 +104,7 @@ public LsOutputBean(
100104
this.group = group;
101105
this.name = name;
102106
this.linkTarget = linkTarget;
107+
this.originalLine = originalLine;
103108
}
104109

105110
public boolean isExists() {
@@ -185,4 +190,8 @@ public String getName() {
185190
public String getLinkTarget() {
186191
return linkTarget;
187192
}
193+
194+
public String getOriginalLine() {
195+
return originalLine;
196+
}
188197
}

pftpd-pojo-lib/src/main/java/org/primftpd/pojo/LsOutputBuilder.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ class LsOutputBuilder {
3232
private String name;
3333
private String linkTarget;
3434

35+
private String originalLine;
36+
3537
public boolean isFile() {
3638
return isFile;
3739
}
@@ -192,6 +194,14 @@ public void setLinkTarget(String linkTarget) {
192194
this.linkTarget = linkTarget;
193195
}
194196

197+
public String getOriginalLine() {
198+
return originalLine;
199+
}
200+
201+
public void setOriginalLine(String originalLine) {
202+
this.originalLine = originalLine;
203+
}
204+
195205
LsOutputBean build() {
196206
return new LsOutputBean(
197207
isFile,
@@ -213,7 +223,8 @@ LsOutputBean build() {
213223
user,
214224
group,
215225
name,
216-
linkTarget
226+
linkTarget,
227+
originalLine
217228
);
218229
}
219230
}

pftpd-pojo-lib/src/main/java/org/primftpd/pojo/LsOutputParser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public LsOutputBean parseLine(String line) {
5656
}
5757

5858
LsOutputBuilder builder = new LsOutputBuilder();
59+
builder.setOriginalLine(line);
5960

6061
// type
6162
if (firstPart.charAt(0) == '-') {

primitiveFTPd/src/org/primftpd/filesystem/RootFile.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,14 @@ public boolean setLastModified(long time) {
7676
logger.trace("[{}] setLastModified({})", name, time);
7777

7878
String dateStr = Utils.touchDate(time);
79-
return runCommand("touch -t " + dateStr + " " + escapePath(absPath));
79+
return runCommand("touch -m -t " + dateStr + " " + escapePath(absPath));
80+
}
81+
82+
@Override
83+
public long getLastModified() {
84+
logger.trace("[{}] getLastModified()", name);
85+
logger.trace(" original ls-output line: {}", bean.getOriginalLine());
86+
return super.getLastModified();
8087
}
8188

8289
public boolean mkdir() {

primitiveFTPd/src/org/primftpd/filesystem/Utils.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.text.SimpleDateFormat;
55
import java.util.ArrayList;
66
import java.util.List;
7-
import java.util.TimeZone;
7+
import java.util.SimpleTimeZone;
88

99
class Utils {
1010

@@ -68,13 +68,9 @@ static String parent(String path) {
6868

6969
private static final DateFormat TOUCH_DATE_FORMAT = new SimpleDateFormat("yyMMddHHmm.ss");
7070
static {
71-
TOUCH_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
71+
TOUCH_DATE_FORMAT.setTimeZone(new SimpleTimeZone(0, "No-TZ"));
7272
}
7373
static String touchDate(long time) {
74-
return TOUCH_DATE_FORMAT.format(sshTimeToFileTime(time));
75-
}
76-
77-
static long sshTimeToFileTime(long time) {
78-
return time * 1000;
74+
return TOUCH_DATE_FORMAT.format(time);
7975
}
8076
}

0 commit comments

Comments
 (0)