summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/satserver/util/Archive.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/satserver/util/Archive.java')
-rw-r--r--src/main/java/org/openslx/satserver/util/Archive.java25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/main/java/org/openslx/satserver/util/Archive.java b/src/main/java/org/openslx/satserver/util/Archive.java
index 8ad2123..25285e7 100644
--- a/src/main/java/org/openslx/satserver/util/Archive.java
+++ b/src/main/java/org/openslx/satserver/util/Archive.java
@@ -28,6 +28,7 @@ import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream
import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream;
import org.apache.commons.compress.compressors.xz.XZCompressorOutputStream;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
public class Archive
{
@@ -102,13 +103,27 @@ public class Archive
public static TarArchiveEntry createTarArchiveEntry( ArchiveEntry inEntry, int defaultUser, int defaultGroup, int defaultDirMode, int defaultFileMode )
{
- if ( inEntry instanceof TarArchiveEntry ) {
- // Source is tar - easy
- return (TarArchiveEntry)inEntry;
+ String name = inEntry.getName();
+ if ( Util.isEmpty( name ) )
+ return null;
+ if ( !name.startsWith( "/" ) ) {
+ name = "/" + name;
}
- final TarArchiveEntry outEntry = new TarArchiveEntry( inEntry.getName() );
+ name = FilenameUtils.normalize( name );
+ if ( name == null )
+ return null;
+ if ( Util.isEmpty( name ) )
+ return null;
+ final TarArchiveEntry outEntry = new TarArchiveEntry( name );
outEntry.setSize( inEntry.getSize() );
- if ( inEntry instanceof ArArchiveEntry ) {
+ if ( inEntry instanceof TarArchiveEntry ) {
+ // Source is tar - easy
+ outEntry.setUserName( ( (TarArchiveEntry)inEntry ).getUserName() );
+ outEntry.setGroupName( ( (TarArchiveEntry)inEntry ).getGroupName() );
+ outEntry.setIds( ( (TarArchiveEntry)inEntry ).getUserId(), ( (TarArchiveEntry)inEntry ).getGroupId() );
+ outEntry.setMode( ( (TarArchiveEntry)inEntry ).getMode() );
+ outEntry.setModTime( ( (TarArchiveEntry)inEntry ).getLastModifiedDate() );
+ } else if ( inEntry instanceof ArArchiveEntry ) {
// Source is ar - has most of the stuff tar supports; transform
outEntry.setIds( ( (ArArchiveEntry)inEntry ).getUserId(), ( (ArArchiveEntry)inEntry ).getGroupId() );
outEntry.setMode( ( (ArArchiveEntry)inEntry ).getMode() );