From d9d777cbb4a426e996fe7fa04e28561d6eaa0707 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 10 Dec 2020 13:51:12 +0100 Subject: [RecompressArchive] Add forceRoot flag to chown/chgrp to root --- .../java/org/openslx/satserver/util/Archive.java | 21 ++++++++++++++++++++- .../taskmanager/tasks/RecompressArchive.java | 5 ++++- 2 files changed, 24 insertions(+), 2 deletions(-) (limited to 'src/main/java/org/openslx') diff --git a/src/main/java/org/openslx/satserver/util/Archive.java b/src/main/java/org/openslx/satserver/util/Archive.java index e52a5f6..86b9955 100644 --- a/src/main/java/org/openslx/satserver/util/Archive.java +++ b/src/main/java/org/openslx/satserver/util/Archive.java @@ -101,7 +101,8 @@ public class Archive } } - public static TarArchiveEntry createTarArchiveEntry( ArchiveEntry inEntry, int defaultUser, int defaultGroup, int defaultDirMode, int defaultFileMode ) + public static TarArchiveEntry createTarArchiveEntry( ArchiveEntry inEntry, + int defaultUser, int defaultGroup, int defaultDirMode, int defaultFileMode, boolean overrideUserGroup ) { String name = inEntry.getName(); if ( Util.isEmpty( name ) ) @@ -122,6 +123,18 @@ public class Archive ( (TarArchiveEntry)inEntry ).writeEntryHeader( buffer ); outEntry.parseTarHeader( buffer ); outEntry.setName( name ); // Reset, as this was overwritten + if ( overrideUserGroup ) { + // Always replace these + outEntry.setUserId( defaultUser ); + outEntry.setGroupId( defaultGroup ); + // TODO + if ( defaultUser == 0 ) { + outEntry.setUserName( "root" ); + } + if ( defaultGroup == 0 ) { + outEntry.setGroupName( "root" ); + } + } } else if ( inEntry instanceof ArArchiveEntry ) { // Source is ar - has most of the stuff tar supports; transform outEntry.setIds( ( (ArArchiveEntry)inEntry ).getUserId(), ( (ArArchiveEntry)inEntry ).getGroupId() ); @@ -162,6 +175,12 @@ public class Archive } return outEntry; } + + public static TarArchiveEntry createTarArchiveEntry( ArchiveEntry inEntry, + int defaultUser, int defaultGroup, int defaultDirMode, int defaultFileMode ) + { + return createTarArchiveEntry( inEntry, defaultUser, defaultGroup, defaultDirMode, defaultFileMode, false ); + } public static boolean tarAddFile( TarArchiveOutputStream tar, String inArchiveFileName, File sourceFile, int mode ) { diff --git a/src/main/java/org/openslx/taskmanager/tasks/RecompressArchive.java b/src/main/java/org/openslx/taskmanager/tasks/RecompressArchive.java index 1fc897d..04e7ed6 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/RecompressArchive.java +++ b/src/main/java/org/openslx/taskmanager/tasks/RecompressArchive.java @@ -32,6 +32,9 @@ public class RecompressArchive extends AbstractTask @Expose private String outputFile; + + @Expose + private boolean forceRoot; /* * Own vars/constants not being deserialized @@ -110,7 +113,7 @@ public class RecompressArchive extends AbstractTask if ( inEntry.getName().equals( "/" ) || inEntry.getName().equals( "./" ) ) continue; // Construct TarArchiveEntry - we want unix stuff like uid/gid, links, file/dir mode, so try to get from source archive - TarArchiveEntry outEntry = Archive.createTarArchiveEntry( inEntry, 0, 0, 0755, 0644 ); + TarArchiveEntry outEntry = Archive.createTarArchiveEntry( inEntry, 0, 0, 0755, 0644, this.forceRoot ); if ( outEntry == null ) { status.addWarning( "Ignoring invalid entry " + inEntry.getName() + " in " + a.inputFile ); continue; -- cgit v1.2.3-55-g7522