This is an automated email from the ASF dual-hosted git repository. andras pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/oozie.git
The following commit(s) were added to refs/heads/master by this push: new 7e329cb OOZIE-3194 [tools] Oozie should set proper permissions to sharelib after upload (dionusos via andras.piros) 7e329cb is described below commit 7e329cb11782634c1bd6f8ec32a21f4746af3bd3 Author: Andras Piros <andras.pi...@cloudera.com> AuthorDate: Thu Jan 3 21:22:57 2019 +0100 OOZIE-3194 [tools] Oozie should set proper permissions to sharelib after upload (dionusos via andras.piros) --- release-log.txt | 1 + .../org/apache/oozie/tools/OozieSharelibCLI.java | 29 ++++++++++++++++++++++ .../tools/IntegrationTestOozieSharelibCLI.java | 16 +++++++++++- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/release-log.txt b/release-log.txt index d5fac27..68f21bc 100644 --- a/release-log.txt +++ b/release-log.txt @@ -1,5 +1,6 @@ -- Oozie 5.2.0 release (trunk - unreleased) +OOZIE-3194 [tools] Oozie should set proper permissions to sharelib after upload (dionusos via andras.piros) OOZIE-3341 [docs] Fix difference between command line help and documentation (asalamon74 via andras.piros) OOZIE-3400 [core] Fix PurgeService sub-sub-workflow checking (asalamon74 via andras.piros) OOZIE-3410 [build] Deploy fluent-job and oozie-sharelib-git artifacts (andras.piros via gezapeti) diff --git a/tools/src/main/java/org/apache/oozie/tools/OozieSharelibCLI.java b/tools/src/main/java/org/apache/oozie/tools/OozieSharelibCLI.java index 312770c..6c1195c 100644 --- a/tools/src/main/java/org/apache/oozie/tools/OozieSharelibCLI.java +++ b/tools/src/main/java/org/apache/oozie/tools/OozieSharelibCLI.java @@ -49,9 +49,11 @@ import org.apache.commons.io.filefilter.WildcardFileFilter; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.CommonConfigurationKeysPublic; import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileUtil; import org.apache.hadoop.fs.Path; +import org.apache.hadoop.fs.permission.FsPermission; import org.apache.hadoop.hdfs.DFSConfigKeys; import org.apache.oozie.cli.CLIParser; import org.apache.oozie.service.HadoopAccessorService; @@ -91,6 +93,9 @@ public class OozieSharelibCLI { public static final String EXTRALIBS_PATH_SEPARATOR = ","; public static final String EXTRALIBS_SHARELIB_KEY_VALUE_SEPARATOR = "="; + public static final String DIRECTORY_PERMISSION = "755"; + public static final String FILE_PERMISSION = "544"; + private boolean used; public static void main(String[] args) throws Exception{ @@ -219,6 +224,10 @@ public class OozieSharelibCLI { copyToSharelib(threadPoolSize, srcFile, srcPath, dstPath, fs); copyExtraLibs(threadPoolSize, extraLibs, dstPath, fs); + if (sharelibAction.equals(CREATE_CMD) || sharelibAction.equals(UPGRADE_CMD)) { + applySharelibPermission(fs, dstPath); + } + services.destroy(); FileUtils.deleteDirectory(temp); @@ -418,6 +427,26 @@ public class OozieSharelibCLI { } } + private void applySharelibPermission(FileSystem fs, Path dstPath) throws IOException { + for(FileStatus stat: fs.listStatus(dstPath)) { + if(stat.isDirectory()) { + applyDirectoryPermission(fs, stat); + applySharelibPermission(fs, stat.getPath()); + } else { + applyFilePermission(fs, stat); + } + } + } + + private void applyDirectoryPermission(FileSystem fs, FileStatus stat) throws IOException { + fs.setPermission(stat.getPath(), new FsPermission(DIRECTORY_PERMISSION)); + } + + + private void applyFilePermission(FileSystem fs, FileStatus stat) throws IOException { + fs.setPermission(stat.getPath(), new FsPermission(FILE_PERMISSION)); + } + @VisibleForTesting static final class ConcurrentCopyFromLocal { diff --git a/tools/src/test/java/org/apache/oozie/tools/IntegrationTestOozieSharelibCLI.java b/tools/src/test/java/org/apache/oozie/tools/IntegrationTestOozieSharelibCLI.java index 12cb665..f9b2555 100644 --- a/tools/src/test/java/org/apache/oozie/tools/IntegrationTestOozieSharelibCLI.java +++ b/tools/src/test/java/org/apache/oozie/tools/IntegrationTestOozieSharelibCLI.java @@ -22,6 +22,7 @@ import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; +import org.apache.hadoop.fs.permission.FsPermission; import org.apache.oozie.action.hadoop.security.LauncherSecurityManager; import org.apache.oozie.service.ConfigurationService; import org.apache.oozie.service.HadoopAccessorService; @@ -40,7 +41,6 @@ import java.util.List; import static org.apache.oozie.tools.OozieSharelibCLI.EXTRALIBS_SHARELIB_KEY_VALUE_SEPARATOR; - public class IntegrationTestOozieSharelibCLI extends XTestCase { private final TemporaryFolder tmpFolder = new TemporaryFolder(); @@ -147,9 +147,23 @@ public class IntegrationTestOozieSharelibCLI extends XTestCase { InputStream copiedFileStream = fileSystem.open(new Path(libPath, f.getName()))) { assertTrue("The content of the files must be equal", IOUtils.contentEquals(originalFileStream, copiedFileStream)); } + checkFilePermission(libPath, f); + } + } + + private void checkFilePermission(Path libPath, File file) throws Exception { + if (file.isDirectory()) { + checkPermission(libPath, file, new FsPermission(OozieSharelibCLI.DIRECTORY_PERMISSION)); + } else { + checkPermission(libPath, file, new FsPermission(OozieSharelibCLI.FILE_PERMISSION)); } } + private void checkPermission(Path libPath, File file, FsPermission expectedPermission) throws Exception { + FsPermission actualFilePermission = getTargetFileSysyem().getFileStatus(new Path(libPath, file.getName())).getPermission(); + assertEquals("File/Directory permission shall match with the expected one.", expectedPermission, actualFilePermission); + } + private FileSystem getTargetFileSysyem() throws Exception { if (fs == null) { HadoopAccessorService has = getServices().get(HadoopAccessorService.class);