@@ -1835,12 +1835,11 @@ int wolfSSH_SFTP_RecvRMDIR(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
18351835 */
18361836int wolfSSH_SFTP_RecvMKDIR (WOLFSSH * ssh , int reqId , byte * data , word32 maxSz )
18371837{
1838- word32 attrFlags ;
1838+ WS_SFTP_FILEATRB atr ;
18391839 word32 strSz ;
18401840 const byte * str ;
18411841 int ret ;
18421842 char dir [WOLFSSH_MAX_FILENAME ];
1843- word32 mode = 0 ;
18441843 word32 idx = 0 ;
18451844 byte * out ;
18461845 word32 outSz = 0 ;
@@ -1866,22 +1865,26 @@ int wolfSSH_SFTP_RecvMKDIR(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
18661865 return ret ;
18671866 }
18681867
1869- if (GetUint32 (& attrFlags , data , maxSz , & idx ) != WS_SUCCESS ) {
1868+ if (SFTP_ParseAttributes_buffer (ssh , & atr , data , & idx , maxSz )
1869+ != WS_SUCCESS ) {
18701870 return WS_BUFFER_E ;
18711871 }
1872- if (attrFlags != WOLFSSH_FILEATRB_PERM ) {
1873- WLOG (WS_LOG_SFTP , "Only permission attribute supported" );
1874- WLOG (WS_LOG_SFTP , "Skipping over attribute and using default" );
1875- mode = 040755 ;
1876- }
1877- else {
1878- if (GetUint32 (& mode , data , maxSz , & idx ) != WS_SUCCESS ) {
1879- return WS_BUFFER_E ;
1872+ #ifndef USE_WINDOWS_API
1873+ #ifndef WOLFSSH_FATFS
1874+ {
1875+ word32 mode = 040755 ;
1876+ if (atr .flags & WOLFSSH_FILEATRB_PERM ) {
1877+ mode = atr .per ;
1878+ }
1879+ else {
1880+ WLOG (WS_LOG_SFTP , "No permission attribute, using default" );
18801881 }
1882+ ret = WMKDIR (ssh -> fs , dir , mode );
18811883 }
1882-
1883- #ifndef USE_WINDOWS_API
1884- ret = WMKDIR (ssh -> fs , dir , mode );
1884+ #else /* WOLFSSH_FATFS */
1885+ /* WMKDIR for FatFS drops mode argument */
1886+ ret = WMKDIR (ssh -> fs , dir , 0 );
1887+ #endif /* WOLFSSH_FATFS */
18851888#else /* USE_WINDOWS_API */
18861889 ret = WS_CreateDirectoryA (dir , ssh -> ctx -> heap ) == 0 ;
18871890#endif /* USE_WINDOWS_API */
0 commit comments