VirtualBox

Changeset 79710 in vbox


Ignore:
Timestamp:
Jul 12, 2019 5:10:42 AM (5 years ago)
Author:
vboxsync
Message:

os2/VBoxSF: FS32_OPENCREATE should fail on directories. Corrected attribute filtering calculations in FS32_FINDFIRST (caused COPY *.* to see directories, causing previous issue). FS32_FINDFROMNAME & FS32_FINDNEXT should not fail if FI_LVL_EAS_FROM_LIST[_64] are requested, we can handle it (FS32_FINDFIRST lets them thru) and WPS needs it for browsing shared folders.

Location:
trunk/src/VBox/Additions/os2/VBoxSF
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/os2/VBoxSF/VBoxSFFile.cpp

    r79112 r79710  
    307307                {
    308308                    rc = ERROR_OPEN_FAILED; //ERROR_FILE_EXISTS;
     309                    break;
     310                }
     311                if (RTFS_IS_DIRECTORY(pReq->CreateParms.Info.Attr.fMode))
     312                {
     313                    LogFlow(("FS32_OPENCREATE: directory, closing and returning ERROR_ACCESS_DENIED!\n"));
     314                    AssertCompile(RTASSERT_OFFSET_OF(VBOXSFCREATEREQ, CreateParms.Handle) > sizeof(VBOXSFCLOSEREQ)); /* no aliasing issues */
     315                    VbglR0SfHostReqClose(pFolder->idHostRoot, (VBOXSFCLOSEREQ *)pReq, pReq->CreateParms.Handle);
     316                    rc = ERROR_ACCESS_DENIED;
    309317                    break;
    310318                }
  • trunk/src/VBox/Additions/os2/VBoxSF/VBoxSFFind.cpp

    r77640 r79710  
    625625                                pDataBuf->pEntry        = NULL;
    626626                                pDataBuf->pFilter       = pFilter;
    627                                 pDataBuf->fMustHaveAttribs   = (uint8_t)((fAttribs >> 8) & (RTFS_DOS_MASK_OS2 >> RTFS_DOS_SHIFT));
    628                                 pDataBuf->fExcludedAttribs   = (uint8_t)(~fAttribs
    629                                                                          & (  (RTFS_DOS_MASK_OS2 & ~(RTFS_DOS_ARCHIVED | RTFS_DOS_READONLY)
    630                                                                             >> RTFS_DOS_SHIFT)));
     627                                pDataBuf->fMustHaveAttribs   = (uint8_t)(  (fAttribs >> 8)
     628                                                                         & (FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY | FILE_ARCHIVED));
     629                                pDataBuf->fExcludedAttribs   = (uint8_t)(~fAttribs & (FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY));
    631630                                pDataBuf->fLongFilenames     = RT_BOOL(fAttribs & FF_ATTR_LONG_FILENAME);
     631                                LogFlow(("FS32_FINDFIRST: fMustHaveAttribs=%#x fExcludedAttribs=%#x fLongFilenames=%d (fAttribs=%#x)\n",
     632                                         pDataBuf->fMustHaveAttribs, pDataBuf->fExcludedAttribs, pDataBuf->fLongFilenames, fAttribs));
    632633                                pDataBuf->cMinLocalTimeDelta = vboxSfOs2GetLocalTimeDelta();
    633634
     
    724725        case FI_LVL_STANDARD_EASIZE:
    725726        case FI_LVL_STANDARD_EASIZE_64:
    726             break;
    727 
    728727        case FI_LVL_EAS_FROM_LIST:
    729728        case FI_LVL_EAS_FROM_LIST_64:
    730             Log(("FS32_FINDFIRST: FI_LVL_EAS_FROM_LIST[_64] -> ERROR_EAS_NOT_SUPPORTED\n"));
    731             return ERROR_EAS_NOT_SUPPORTED;
     729            break;
    732730
    733731        default:
    734             LogRel(("FS32_FINDFIRST: Unsupported info level %u!\n", uLevel));
     732            LogRel(("FS32_FINDFROMNAME: Unsupported info level %u!\n", uLevel));
    735733            return ERROR_INVALID_LEVEL;
    736734    }
     
    782780        case FI_LVL_STANDARD_EASIZE:
    783781        case FI_LVL_STANDARD_EASIZE_64:
    784             break;
    785 
    786782        case FI_LVL_EAS_FROM_LIST:
    787783        case FI_LVL_EAS_FROM_LIST_64:
    788             Log(("FS32_FINDFIRST: FI_LVL_EAS_FROM_LIST[_64] -> ERROR_EAS_NOT_SUPPORTED\n"));
    789             return ERROR_EAS_NOT_SUPPORTED;
     784            break;
    790785
    791786        default:
    792             LogRel(("FS32_FINDFIRST: Unsupported info level %u!\n", uLevel));
     787            LogRel(("FS32_FINDNEXT: Unsupported info level %u!\n", uLevel));
    793788            return ERROR_INVALID_LEVEL;
    794789    }
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