Skip to content

Commit a61e930

Browse files
committed
[SSHD-1234] Rooted file system can leak informations
1 parent f9970ab commit a61e930

File tree

16 files changed

+1203
-269
lines changed

16 files changed

+1203
-269
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.apache.sshd.common.file.root;
20+
21+
import java.io.IOException;
22+
import java.nio.file.DirectoryStream;
23+
import java.nio.file.Path;
24+
import java.util.Iterator;
25+
26+
/**
27+
* secure directory stream proxy for a {@link RootedFileSystem}
28+
*
29+
* @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
30+
*/
31+
public class RootedDirectoryStream implements DirectoryStream<Path> {
32+
protected final RootedFileSystem rfs;
33+
protected final DirectoryStream<Path> delegate;
34+
35+
public RootedDirectoryStream(RootedFileSystem rfs, DirectoryStream<Path> delegate) {
36+
this.rfs = rfs;
37+
this.delegate = delegate;
38+
}
39+
40+
@Override
41+
public Iterator<Path> iterator() {
42+
return root(rfs, delegate.iterator());
43+
}
44+
45+
@Override
46+
public void close() throws IOException {
47+
delegate.close();
48+
}
49+
50+
protected Iterator<Path> root(RootedFileSystem rfs, Iterator<Path> iter) {
51+
return new Iterator<Path>() {
52+
@Override
53+
public boolean hasNext() {
54+
return iter.hasNext();
55+
}
56+
57+
@Override
58+
public Path next() {
59+
return rfs.provider().root(rfs, iter.next());
60+
}
61+
};
62+
}
63+
}

sshd-common/src/main/java/org/apache/sshd/common/file/root/RootedFileSystem.java

+5
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ public Iterable<FileStore> getFileStores() {
9494
return rootFs.getFileStores();
9595
}
9696

97+
@Override
98+
protected boolean hostFsHasWindowsSeparator() {
99+
return "\\".equals(getRoot().getFileSystem().getSeparator());
100+
}
101+
97102
@Override
98103
public String toString() {
99104
return rootPath.toString();

0 commit comments

Comments
 (0)