Skip to content

Commit 286d00b

Browse files
committed
fix: #331
Change-Id: I9c85d2ed00173404b68b4f81fee5ec61a860b8e5
1 parent 1d03bf6 commit 286d00b

File tree

1 file changed

+24
-12
lines changed
  • source/core/network/src/main/kotlin/com/xayah/core/network/client

1 file changed

+24
-12
lines changed

source/core/network/src/main/kotlin/com/xayah/core/network/client/SMBClientImpl.kt

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.hierynomus.smbj.auth.AuthenticationContext
1313
import com.hierynomus.smbj.common.SMBRuntimeException
1414
import com.hierynomus.smbj.session.Session
1515
import com.hierynomus.smbj.share.Directory
16+
import com.hierynomus.smbj.share.DiskEntry
1617
import com.hierynomus.smbj.share.DiskShare
1718
import com.hierynomus.smbj.share.Share
1819
import com.rapid7.client.dcerpc.mssrvs.ServerService
@@ -162,21 +163,32 @@ class SMBClientImpl(private val entity: CloudEntity, private val extra: SMBExtra
162163
}
163164
}
164165

165-
private fun openDirectory(src: String): Directory = withDiskShare { diskShare ->
166-
diskShare.openDirectory(
166+
private fun openOnRename(src: String): DiskEntry = withDiskShare { diskShare ->
167+
diskShare.open(
167168
src,
168-
setOf(AccessMask.GENERIC_ALL),
169-
null,
169+
setOf(AccessMask.DELETE),
170+
setOf(FileAttributes.FILE_ATTRIBUTE_NORMAL),
171+
SMB2ShareAccess.ALL,
172+
SMB2CreateDisposition.FILE_OPEN_IF,
173+
setOf(SMB2CreateOptions.FILE_RANDOM_ACCESS)
174+
)
175+
}
176+
177+
private fun openFileOnRead(src: String): com.hierynomus.smbj.share.File = withDiskShare { diskShare ->
178+
diskShare.openFile(
179+
src,
180+
setOf(AccessMask.FILE_READ_DATA, AccessMask.FILE_READ_ATTRIBUTES, AccessMask.FILE_READ_EA),
181+
setOf(FileAttributes.FILE_ATTRIBUTE_NORMAL),
170182
SMB2ShareAccess.ALL,
171-
SMB2CreateDisposition.FILE_OPEN,
172-
null
183+
SMB2CreateDisposition.FILE_OPEN_IF,
184+
setOf(SMB2CreateOptions.FILE_RANDOM_ACCESS)
173185
)
174186
}
175187

176-
private fun openFile(src: String): com.hierynomus.smbj.share.File = withDiskShare { diskShare ->
188+
private fun openFileOnWrite(src: String): com.hierynomus.smbj.share.File = withDiskShare { diskShare ->
177189
diskShare.openFile(
178190
src,
179-
setOf(AccessMask.GENERIC_ALL),
191+
setOf(AccessMask.FILE_WRITE_DATA, AccessMask.FILE_WRITE_ATTRIBUTES, AccessMask.FILE_WRITE_EA, AccessMask.DELETE),
180192
setOf(FileAttributes.FILE_ATTRIBUTE_NORMAL),
181193
SMB2ShareAccess.ALL,
182194
SMB2CreateDisposition.FILE_OPEN_IF,
@@ -187,10 +199,10 @@ class SMBClientImpl(private val entity: CloudEntity, private val extra: SMBExtra
187199
override fun renameTo(src: String, dst: String): Unit = withDiskShare { diskShare ->
188200
log { "renameTo: from $src to $dst" }
189201
if (diskShare.folderExists(src)) {
190-
val dir = openDirectory(src)
202+
val dir = openOnRename(src)
191203
dir.rename(dst.replace("/", SymbolUtil.BACKSLASH.toString()), false)
192204
} else if (diskShare.fileExists(src)) {
193-
val file = openFile(src)
205+
val file = openOnRename(src)
194206
file.rename(dst, false)
195207
}
196208
}
@@ -199,7 +211,7 @@ class SMBClientImpl(private val entity: CloudEntity, private val extra: SMBExtra
199211
val name = PathUtil.getFileName(src)
200212
val dstPath = "$dst/$name"
201213
log { "upload: $src to $dstPath" }
202-
val dstFile = openFile(dstPath)
214+
val dstFile = openFileOnWrite(dstPath)
203215
val dstStream = dstFile.outputStream
204216
val srcFile = File(src)
205217
val srcFileSize = srcFile.length()
@@ -218,7 +230,7 @@ class SMBClientImpl(private val entity: CloudEntity, private val extra: SMBExtra
218230
val dstPath = "$dst/$name"
219231
log { "download: $src to $dstPath" }
220232
val dstOutputStream = File(dstPath).outputStream()
221-
val srcFile = openFile(src)
233+
val srcFile = openFileOnRead(src)
222234
val countingStream = CountingOutputStreamImpl(dstOutputStream, -1) { written, total -> onDownloading(written, total) }
223235
srcFile.read(countingStream)
224236
srcFile.close()

0 commit comments

Comments
 (0)