Skip to content

Commit 6f598aa

Browse files
committed
add API to force uid/gid (in tar)
1 parent 4e7bda8 commit 6f598aa

File tree

5 files changed

+274
-5
lines changed

5 files changed

+274
-5
lines changed

src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java

Lines changed: 94 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
3939
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
4040
import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributes;
41+
import org.codehaus.plexus.components.io.attributes.SimpleResourceAttributes;
4142
import org.codehaus.plexus.components.io.functions.ResourceAttributeSupplier;
4243
import org.codehaus.plexus.components.io.resources.AbstractPlexusIoResourceCollection;
4344
import org.codehaus.plexus.components.io.resources.EncodingSupported;
@@ -115,6 +116,26 @@ public abstract class AbstractArchiver
115116
*/
116117
private Comparator<String> filenameComparator;
117118

119+
/**
120+
* @sine 4.2.0
121+
*/
122+
private int overrideUid = -1;
123+
124+
/**
125+
* @sine 4.2.0
126+
*/
127+
private String overrideUserName;
128+
129+
/**
130+
* @sine 4.2.0
131+
*/
132+
private int overrideGid = -1;
133+
134+
/**
135+
* @sine 4.2.0
136+
*/
137+
private String overrideGroupName;
138+
118139
// contextualized.
119140
private ArchiverManager archiverManager;
120141

@@ -360,9 +381,12 @@ public void addFileSet( @Nonnull final FileSet fileSet )
360381
collection.setFileMappers( fileSet.getFileMappers() );
361382
collection.setFilenameComparator( getFilenameComparator() );
362383

363-
if ( getOverrideDirectoryMode() > -1 || getOverrideFileMode() > -1 )
384+
if ( getOverrideDirectoryMode() > -1 || getOverrideFileMode() > -1 || getOverrideUid() > -1
385+
|| getOverrideGid() > -1 || getOverrideUserName() != null || getOverrideGroupName() != null )
364386
{
365-
collection.setOverrideAttributes( -1, null, -1, null, getOverrideFileMode(), getOverrideDirectoryMode() );
387+
collection.setOverrideAttributes( getOverrideUid(), getOverrideUserName(), getOverrideGid(),
388+
getOverrideGroupName(), getOverrideFileMode(),
389+
getOverrideDirectoryMode() );
366390
}
367391

368392
if ( getDefaultDirectoryMode() > -1 || getDefaultFileMode() > -1 )
@@ -399,6 +423,18 @@ public void addSymlink( String symlinkName, int permissions, String symlinkDesti
399423
ArchiveEntry.createSymlinkEntry( symlinkName, permissions, symlinkDestination, getDirectoryMode() ) );
400424
}
401425

426+
private ArchiveEntry updateArchiveEntryAttributes( ArchiveEntry entry )
427+
{
428+
if ( getOverrideUid() > -1 || getOverrideGid() > -1 || getOverrideUserName() != null
429+
|| getOverrideGroupName() != null )
430+
{
431+
entry.setResourceAttributes( new SimpleResourceAttributes( getOverrideUid(), getOverrideUserName(),
432+
getOverrideGid(), getOverrideGroupName(),
433+
entry.getMode() ) );
434+
}
435+
return entry;
436+
}
437+
402438
protected ArchiveEntry asArchiveEntry( @Nonnull final PlexusIoResource resource, final String destFileName,
403439
final int permissions, PlexusIoResourceCollection collection )
404440
throws ArchiverException
@@ -408,14 +444,17 @@ protected ArchiveEntry asArchiveEntry( @Nonnull final PlexusIoResource resource,
408444
throw new ArchiverException( resource.getName() + " not found." );
409445
}
410446

447+
ArchiveEntry entry;
411448
if ( resource.isFile() )
412449
{
413-
return ArchiveEntry.createFileEntry( destFileName, resource, permissions, collection, getDirectoryMode() );
450+
entry = ArchiveEntry.createFileEntry( destFileName, resource, permissions, collection, getDirectoryMode() );
414451
}
415452
else
416453
{
417-
return ArchiveEntry.createDirectoryEntry( destFileName, resource, permissions, getDirectoryMode() );
454+
entry = ArchiveEntry.createDirectoryEntry( destFileName, resource, permissions, getDirectoryMode() );
418455
}
456+
457+
return updateArchiveEntryAttributes( entry );
419458
}
420459

421460
private ArchiveEntry asArchiveEntry( final AddedResourceCollection collection, final PlexusIoResource resource )
@@ -468,7 +507,9 @@ public void addFile( @Nonnull final File inputFile, @Nonnull String destFileName
468507
try
469508
{
470509
// do a null check here, to avoid creating a file stream if there are no filters...
471-
doAddResource( ArchiveEntry.createFileEntry( destFileName, inputFile, permissions, getDirectoryMode() ) );
510+
ArchiveEntry entry =
511+
ArchiveEntry.createFileEntry( destFileName, inputFile, permissions, getDirectoryMode() );
512+
doAddResource( updateArchiveEntryAttributes( entry ) );
472513
}
473514
catch ( final IOException e )
474515
{
@@ -1168,4 +1209,52 @@ public Comparator<String> getFilenameComparator()
11681209
{
11691210
return filenameComparator;
11701211
}
1212+
1213+
@Override
1214+
public void setOverrideUid( int uid )
1215+
{
1216+
overrideUid = uid;
1217+
}
1218+
1219+
@Override
1220+
public void setOverrideUserName( String userName )
1221+
{
1222+
overrideUserName = userName;
1223+
}
1224+
1225+
@Override
1226+
public int getOverrideUid()
1227+
{
1228+
return overrideUid;
1229+
}
1230+
1231+
@Override
1232+
public String getOverrideUserName()
1233+
{
1234+
return overrideUserName;
1235+
}
1236+
1237+
@Override
1238+
public void setOverrideGid( int gid )
1239+
{
1240+
overrideGid = gid;
1241+
}
1242+
1243+
@Override
1244+
public void setOverrideGroupName( String groupName )
1245+
{
1246+
overrideGroupName = groupName;
1247+
}
1248+
1249+
@Override
1250+
public int getOverrideGid()
1251+
{
1252+
return overrideGid;
1253+
}
1254+
1255+
@Override
1256+
public String getOverrideGroupName()
1257+
{
1258+
return overrideGroupName;
1259+
}
11711260
}

src/main/java/org/codehaus/plexus/archiver/Archiver.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,4 +418,44 @@ ResourceIterator getResources()
418418
* @since 4.2.0
419419
*/
420420
void setFilenameComparator( Comparator<String> filenameComparator );
421+
422+
/**
423+
* @since 4.2.0
424+
*/
425+
void setOverrideUid( int uid );
426+
427+
/**
428+
* @since 4.2.0
429+
*/
430+
void setOverrideUserName( String userName );
431+
432+
/**
433+
* @since 4.2.0
434+
*/
435+
int getOverrideUid();
436+
437+
/**
438+
* @since 4.2.0
439+
*/
440+
String getOverrideUserName();
441+
442+
/**
443+
* @since 4.2.0
444+
*/
445+
void setOverrideGid( int gid );
446+
447+
/**
448+
* @since 4.2.0
449+
*/
450+
void setOverrideGroupName( String groupName );
451+
452+
/**
453+
* @since 4.2.0
454+
*/
455+
int getOverrideGid();
456+
457+
/**
458+
* @since 4.2.0
459+
*/
460+
String getOverrideGroupName();
421461
}

src/main/java/org/codehaus/plexus/archiver/diags/DelgatingArchiver.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,4 +350,52 @@ public void setFilenameComparator( final Comparator<String> filenameComparator )
350350
{
351351
target.setFilenameComparator( filenameComparator );
352352
}
353+
354+
@Override
355+
public void setOverrideUid( int uid )
356+
{
357+
target.setOverrideUid( uid );
358+
}
359+
360+
@Override
361+
public void setOverrideUserName( String userName )
362+
{
363+
target.setOverrideUserName( userName );
364+
}
365+
366+
@Override
367+
public int getOverrideUid()
368+
{
369+
return target.getOverrideUid();
370+
}
371+
372+
@Override
373+
public String getOverrideUserName()
374+
{
375+
return target.getOverrideUserName();
376+
}
377+
378+
@Override
379+
public void setOverrideGid( int gid )
380+
{
381+
target.setOverrideGid( gid );
382+
}
383+
384+
@Override
385+
public void setOverrideGroupName( String groupName )
386+
{
387+
target.setOverrideGroupName( groupName );
388+
}
389+
390+
@Override
391+
public int getOverrideGid()
392+
{
393+
return target.getOverrideGid();
394+
}
395+
396+
@Override
397+
public String getOverrideGroupName()
398+
{
399+
return target.getOverrideGroupName();
400+
}
353401
}

src/main/java/org/codehaus/plexus/archiver/diags/NoOpArchiver.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,4 +366,52 @@ public void setFilenameComparator( final Comparator<String> filenameComparator )
366366

367367
}
368368

369+
@Override
370+
public void setOverrideUid( int uid )
371+
{
372+
373+
}
374+
375+
@Override
376+
public void setOverrideUserName( String userName )
377+
{
378+
379+
}
380+
381+
@Override
382+
public int getOverrideUid()
383+
{
384+
return 0;
385+
}
386+
387+
@Override
388+
public String getOverrideUserName()
389+
{
390+
return null;
391+
}
392+
393+
@Override
394+
public void setOverrideGid( int gid )
395+
{
396+
397+
}
398+
399+
@Override
400+
public void setOverrideGroupName( String groupName )
401+
{
402+
403+
}
404+
405+
@Override
406+
public int getOverrideGid()
407+
{
408+
return 0;
409+
}
410+
411+
@Override
412+
public String getOverrideGroupName()
413+
{
414+
return null;
415+
}
416+
369417
}

src/main/java/org/codehaus/plexus/archiver/diags/TrackingArchiver.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,4 +424,48 @@ public void setFilenameComparator( final Comparator<String> filenameComparator )
424424
{
425425
this.filenameComparator = filenameComparator;
426426
}
427+
428+
@Override
429+
public void setOverrideUid( int uid )
430+
{
431+
}
432+
433+
@Override
434+
public void setOverrideUserName( String userName )
435+
{
436+
}
437+
438+
@Override
439+
public int getOverrideUid()
440+
{
441+
return 0;
442+
}
443+
444+
@Override
445+
public String getOverrideUserName()
446+
{
447+
return null;
448+
}
449+
450+
@Override
451+
public void setOverrideGid( int gid )
452+
{
453+
}
454+
455+
@Override
456+
public void setOverrideGroupName( String groupName )
457+
{
458+
}
459+
460+
@Override
461+
public int getOverrideGid()
462+
{
463+
return 0;
464+
}
465+
466+
@Override
467+
public String getOverrideGroupName()
468+
{
469+
return null;
470+
}
427471
}

0 commit comments

Comments
 (0)