41
41
import java .util .zip .ZipEntry ;
42
42
import java .util .zip .ZipOutputStream ;
43
43
44
+ import static java .nio .file .attribute .PosixFilePermission .*;
44
45
import static org .elasticsearch .common .settings .Settings .settingsBuilder ;
45
46
import static org .elasticsearch .plugins .PluginInfoTests .writeProperties ;
46
47
import static org .elasticsearch .test .hamcrest .ElasticsearchAssertions .*;
@@ -283,6 +284,39 @@ public void testConfigDirectoryOwnerGroupAndPermissions() throws IOException {
283
284
assertThat (pluginConfigFileAttributes .permissions (), equalTo (expectedFilePermissions ));
284
285
}
285
286
287
+ public void testBinDirectoryOwnerGroupAndPermissions () throws IOException {
288
+ assumeTrue ("File system does not support permissions, skipping" , supportsPermissions );
289
+ URL pluginUrl = createPlugin (true , false );
290
+ PluginManager pluginManager = new PluginManager (environment , pluginUrl , PluginManager .OutputMode .VERBOSE , TimeValue .timeValueSeconds (10 ));
291
+ pluginManager .downloadAndExtract (pluginName , terminal );
292
+ PosixFileAttributes parentFileAttributes = Files .getFileAttributeView (environment .binFile (), PosixFileAttributeView .class ).readAttributes ();
293
+ Path binPath = environment .binFile ().resolve (pluginName );
294
+ PosixFileAttributes pluginBinDirAttributes = Files .getFileAttributeView (binPath , PosixFileAttributeView .class ).readAttributes ();
295
+ assertThat (pluginBinDirAttributes .owner (), equalTo (parentFileAttributes .owner ()));
296
+ assertThat (pluginBinDirAttributes .group (), equalTo (parentFileAttributes .group ()));
297
+ assertThat (pluginBinDirAttributes .permissions (), equalTo (parentFileAttributes .permissions ()));
298
+ Path executableFile = binPath .resolve ("my-binary" );
299
+ PosixFileAttributes pluginExecutableFileAttributes = Files .getFileAttributeView (executableFile , PosixFileAttributeView .class ).readAttributes ();
300
+ assertThat (pluginExecutableFileAttributes .owner (), equalTo (parentFileAttributes .owner ()));
301
+ assertThat (pluginExecutableFileAttributes .group (), equalTo (parentFileAttributes .group ()));
302
+ Set <PosixFilePermission > expectedFilePermissions = new HashSet <>();
303
+ expectedFilePermissions .add (OWNER_EXECUTE );
304
+ expectedFilePermissions .add (GROUP_EXECUTE );
305
+ expectedFilePermissions .add (OTHERS_EXECUTE );
306
+ for (PosixFilePermission parentPermission : parentFileAttributes .permissions ()) {
307
+ switch (parentPermission ) {
308
+ case OWNER_EXECUTE :
309
+ case GROUP_EXECUTE :
310
+ case OTHERS_EXECUTE :
311
+ break ;
312
+ default :
313
+ expectedFilePermissions .add (parentPermission );
314
+ }
315
+ }
316
+
317
+ assertThat (pluginExecutableFileAttributes .permissions (), equalTo (expectedFilePermissions ));
318
+ }
319
+
286
320
private URL createPlugin (boolean withBinDir , boolean withConfigDir ) throws IOException {
287
321
final Path structure = createTempDir ().resolve ("fake-plugin" );
288
322
writeProperties (structure , "description" , "fake desc" ,
@@ -301,7 +335,7 @@ private URL createPlugin(boolean withBinDir, boolean withConfigDir) throws IOExc
301
335
// create executable
302
336
Path executable = binDir .resolve ("my-binary" );
303
337
Files .createFile (executable );
304
- Files .setPosixFilePermissions (executable , PosixFilePermissions .fromString ("rwxr-xr-x " ));
338
+ Files .setPosixFilePermissions (executable , PosixFilePermissions .fromString ("rw-r--r-- " ));
305
339
}
306
340
if (withConfigDir ) {
307
341
// create bin dir
0 commit comments