diff --git a/dali/dfu/dfurun.cpp b/dali/dfu/dfurun.cpp index 23540a46d75..0fe8adcb343 100644 --- a/dali/dfu/dfurun.cpp +++ b/dali/dfu/dfurun.cpp @@ -533,17 +533,17 @@ class CDFUengine: public CInterface, implements IDFUengine } } - void ensureFilePermissions(const char * fileName, IFileDescriptor * fd, SecAccessFlags perm, bool write) + StringBuffer & getFDescName(IFileDescriptor * fd, StringBuffer & result) + { + fd->getTraceName(result); + elideString(result, 255); + return result; + } + + void ensureFilePermissions(const char * fileName, SecAccessFlags perm, bool write) { if ((write && !HASWRITEPERMISSION(perm)) || (!write && !HASREADPERMISSION(perm))) { - StringBuffer traceName; - if (isEmptyString(fileName)) - { - fd->getTraceName(traceName); - elideString(traceName, 255); - fileName = traceName.str(); - } if (write) throw makeStringExceptionV(DFSERR_CreateAccessDenied, "Create permission denied for physical file(s): %s", fileName); else @@ -613,16 +613,8 @@ class CDFUengine: public CInterface, implements IDFUengine auditflags |= DALI_LDAP_WRITE_WANTED; SecAccessFlags perm = queryDistributedFileDirectory().getFDescPermissions(fd,user,auditflags); - if ((write && !HASWRITEPERMISSION(perm)) || (!write && !HASREADPERMISSION(perm))) - { - StringBuffer traceName; - fd->getTraceName(traceName); - elideString(traceName, 255); - if (write) - throw makeStringExceptionV(DFSERR_CreateAccessDenied, "Create permission denied for physical file(s): %s",traceName.str()); - else - throw makeStringExceptionV(DFSERR_LookupAccessDenied, "Lookup permission denied for physical file(s): %s",traceName.str()); - } + StringBuffer name; + ensureFilePermissions(getFDescName(fd,name),perm,write); } void checkForeignFilePermissions(IConstDFUfileSpec *fSpec,IFileDescriptor *fd,IUserDescriptor *user,bool write) @@ -656,14 +648,7 @@ class CDFUengine: public CInterface, implements IDFUengine bool checkLegacyPhysicalPerms = getGlobalConfigSP()->getPropBool("expert/@failOverToLegacyPhysicalPerms",!isContainerized()); if (((!write&&!HASREADPERMISSION(perm)) || (write&&!HASWRITEPERMISSION(perm))) && checkLegacyPhysicalPerms) perm = queryDistributedFileDirectory().getFDescPermissions(fd,user,auditflags); - - if (write) - { - if (!HASWRITEPERMISSION(perm)) - throw makeStringExceptionV(DFSERR_CreateAccessDenied,"Create permission denied for foreign file: %s",logicalName.str()); - } - else if (!HASREADPERMISSION(perm)) - throw makeStringExceptionV(DFSERR_LookupAccessDenied,"Lookup permission denied for foreign file: %s",logicalName.str()); + ensureFilePermissions(logicalName,perm,write); } void checkPlaneFilePermissions(IFileDescriptor *fd,IUserDescriptor *user,bool write) @@ -710,7 +695,8 @@ class CDFUengine: public CInterface, implements IDFUengine throw makeStringException(-1,"Unexpected empty plane name."); // should never be the case in containerized setups #endif } - ensureFilePermissions(nullptr,fd,perm,write); + StringBuffer name; + ensureFilePermissions(getFDescName(fd,name),perm,write); } void monitorCycle(bool &cancelling)