VirtualBox

Ignore:
Timestamp:
Jun 2, 2017 6:05:34 PM (8 years ago)
Author:
vboxsync
Message:

RTZipTarCmd: pass --owner, --group, and file and dir mode masks to the TAR creator.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/zip/tarcmd.cpp

    r67167 r67255  
    363363    if (   pOpts->enmFormat == RTZIPTARCMDFORMAT_TAR
    364364        || pOpts->enmFormat == RTZIPTARCMDFORMAT_AUTO_DEFAULT)
    365         rc = RTZipTarFsStreamToIoStream(hVfsIos, pOpts->enmTarFormat, pOpts->fTarCreate, phVfsFss);
     365    {
     366        RTVFSFSSTREAM hVfsFss;
     367        rc = RTZipTarFsStreamToIoStream(hVfsIos, pOpts->enmTarFormat, pOpts->fTarCreate, &hVfsFss);
     368        if (RT_SUCCESS(rc))
     369        {
     370            /*
     371             * Set transformation options.
     372             */
     373            rc = RTZipTarFsStreamSetFileMode(hVfsFss, pOpts->fFileModeAndMask, pOpts->fFileModeOrMask);
     374            if (RT_SUCCESS(rc))
     375            {
     376                rc = RTZipTarFsStreamSetDirMode(hVfsFss, pOpts->fDirModeAndMask, pOpts->fDirModeOrMask);
     377                if (RT_FAILURE(rc))
     378                    RTMsgError("RTZipTarFsStreamSetDirMode(%o,%o) failed: %Rrc", pOpts->fDirModeAndMask, pOpts->fDirModeOrMask, rc);
     379            }
     380            else
     381                RTMsgError("RTZipTarFsStreamSetFileMode(%o,%o) failed: %Rrc", pOpts->fFileModeAndMask, pOpts->fFileModeOrMask, rc);
     382            if ((pOpts->pszOwner || pOpts->uidOwner != NIL_RTUID) && RT_SUCCESS(rc))
     383            {
     384                rc = RTZipTarFsStreamSetOwner(hVfsFss, pOpts->uidOwner, pOpts->pszOwner);
     385                if (RT_FAILURE(rc))
     386                    RTMsgError("RTZipTarFsStreamSetOwner(%d,%s) failed: %Rrc", pOpts->uidOwner, pOpts->pszOwner, rc);
     387            }
     388            if ((pOpts->pszGroup || pOpts->gidGroup != NIL_RTGID) && RT_SUCCESS(rc))
     389            {
     390                rc = RTZipTarFsStreamSetGroup(hVfsFss, pOpts->gidGroup, pOpts->pszGroup);
     391                if (RT_FAILURE(rc))
     392                    RTMsgError("RTZipTarFsStreamSetGroup(%d,%s) failed: %Rrc", pOpts->gidGroup, pOpts->pszGroup, rc);
     393            }
     394            if (RT_SUCCESS(rc))
     395                *phVfsFss = hVfsFss;
     396            else
     397            {
     398                RTVfsFsStrmRelease(hVfsFss);
     399                *phVfsFss = NIL_RTVFSFSSTREAM;
     400            }
     401        }
     402        else
     403            rc = RTMsgErrorExit(RTEXITCODE_FAILURE, "Failed to open tar filesystem stream: %Rrc", rc);
     404    }
    366405    else
    367406        rc = VERR_NOT_SUPPORTED;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette