VirtualBox

Ignore:
Timestamp:
Jun 4, 2009 1:18:04 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
48158
Message:

Compute file open mode from file attributes (xTracker #3980).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedFolders/vbsf.cpp

    r20020 r20279  
    604604 * @returns iprt status code
    605605 * @param  fShflFlags shared folder create flags
     606 * @param  fMode      file attibutes
    606607 * @retval pfOpen     iprt create flags
    607608 */
    608 static int vbsfConvertFileOpenFlags(unsigned fShflFlags, unsigned *pfOpen)
     609static int vbsfConvertFileOpenFlags(unsigned fShflFlags, RTFMODE fMode, unsigned *pfOpen)
    609610{
    610611    unsigned fOpen = 0;
    611612    int rc = VINF_SUCCESS;
     613
     614    if (   (fMode & RTFS_DOS_MASK) != 0
     615        && (fMode & RTFS_UNIX_MASK) == 0)
     616    {
     617        /* A DOS/Windows guest, make RTFS_UNIX_* from RTFS_DOS_*.
     618         * @todo this is based on rtFsModeNormalize/rtFsModeFromDos.
     619         *       May be better to use RTFsModeNormalize here.
     620         */
     621        fMode |= RTFS_UNIX_IRUSR | RTFS_UNIX_IRGRP | RTFS_UNIX_IROTH;
     622        /* x for directories. */
     623        if (fMode & RTFS_DOS_DIRECTORY)
     624            fMode |= RTFS_TYPE_DIRECTORY | RTFS_UNIX_IXUSR | RTFS_UNIX_IXGRP | RTFS_UNIX_IXOTH;
     625        /* writable? */
     626        if (!(fMode & RTFS_DOS_READONLY))
     627            fMode |= RTFS_UNIX_IWUSR | RTFS_UNIX_IWGRP | RTFS_UNIX_IWOTH;
     628    }
     629   
     630    /* Set the requested mode. */
     631    fOpen |= (fMode & RTFS_UNIX_MASK) << RTFILE_O_CREATE_MODE_SHIFT;
    612632
    613633    switch (BIT_FLAG(fShflFlags, SHFL_CF_ACCESS_MASK_RW))
     
    650670        {
    651671            fOpen |= RTFILE_O_ACCESS_ATTR_DEFAULT;
    652             /** @todo for posix guests we should allow passing the mode. */
    653             fOpen |= 0666 << RTFILE_O_CREATE_MODE_SHIFT;
    654672            Log(("FLAG: SHFL_CF_ACCESS_ATTR_NONE\n"));
    655673            break;
     
    659677        {
    660678            fOpen |= RTFILE_O_ACCESS_ATTR_READ;
    661             /** @todo for posix guests we should allow passing the mode.
    662              * Additionally this esoteric case - new file with only read
    663              * access - should be tested with apps depending on this. */
    664             fOpen |= 0444 << RTFILE_O_CREATE_MODE_SHIFT;
    665679            Log(("FLAG: SHFL_CF_ACCESS_ATTR_READ\n"));
    666680            break;
     
    670684        {
    671685            fOpen |= RTFILE_O_ACCESS_ATTR_WRITE;
    672             /** @todo for posix guests we should allow passing the mode.
    673              * Additionally this esoteric case - new file with only write
    674              * access - should be tested with apps depending on this. */
    675             fOpen |= 0222 << RTFILE_O_CREATE_MODE_SHIFT;
    676686            Log(("FLAG: SHFL_CF_ACCESS_ATTR_WRITE\n"));
    677687            break;
     
    681691        {
    682692            fOpen |= RTFILE_O_ACCESS_ATTR_READWRITE;
    683             /** @todo for posix guests we should allow passing the mode. */
    684             fOpen |= 0666 << RTFILE_O_CREATE_MODE_SHIFT;
    685693            Log(("FLAG: SHFL_CF_ACCESS_ATTR_READWRITE\n"));
    686694            break;
     
    817825    static int cErrors;
    818826
    819     int rc = vbsfConvertFileOpenFlags(pParms->CreateFlags, &fOpen);
     827    int rc = vbsfConvertFileOpenFlags(pParms->CreateFlags, pParms->Info.Attr.fMode, &fOpen);
    820828    if (RT_SUCCESS(rc))
    821829    {
Note: See TracChangeset for help on using the changeset viewer.

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