@@ -315,45 +315,18 @@ extension SMB2Client {
315
315
smb2_rmdir_async ( context, path. canonical, SMB2Client . generic_handler, cbPtr)
316
316
}
317
317
}
318
-
319
- func unlink( _ path: String ) throws {
320
- try async_await { context, cbPtr -> Int32 in
321
- smb2_unlink_async ( context, path. canonical, SMB2Client . generic_handler, cbPtr)
322
- }
323
- }
324
-
325
- private func unlinkSymlink( _ path: String ) throws {
326
- let file = try SMB2FileHandle ( path: path, flags: O_RDWR | O_SYMLINK, on: self )
327
- var inputBuffer = [ UInt8] ( repeating: 0 , count: 8 )
328
- inputBuffer [ 0 ] = 0x01 // DeletePending set to true
329
- try withExtendedLifetime ( file) { file in
330
- try inputBuffer. withUnsafeMutableBytes { buf in
331
- var req = smb2_set_info_request (
332
- info_type: UInt8 ( SMB2_0_INFO_FILE) ,
333
- file_info_class: UInt8 ( SMB2_FILE_DISPOSITION_INFORMATION) ,
334
- buffer_length: UInt32 ( buf. count) ,
335
- buffer_offset: 0 ,
336
- additional_information: 0 ,
337
- file_id: file. fileId. uuid,
338
- input_data: buf. baseAddress
339
- )
340
-
341
- try async_await_pdu ( dataHandler: EmptyReply . init) {
342
- context, cbPtr -> UnsafeMutablePointer < smb2_pdu > ? in
343
- smb2_cmd_set_info_async ( context, & req, SMB2Client . generic_handler, cbPtr)
344
- }
345
- }
346
- }
347
- }
348
318
349
319
func unlink( _ path: String , type: smb2_stat_64 . ResourceType = . file) throws {
350
320
switch type {
351
321
case . directory:
352
322
throw POSIXError ( . EINVAL, description: " Use rmdir() to delete a directory. " )
353
323
case . file:
354
- try unlink ( path)
324
+ try async_await { context, cbPtr -> Int32 in
325
+ smb2_unlink_async ( context, path. canonical, SMB2Client . generic_handler, cbPtr)
326
+ }
355
327
case . link:
356
- try unlinkSymlink ( path)
328
+ let file = try SMB2FileHandle ( path: path, flags: O_RDWR | O_SYMLINK, on: self )
329
+ try file. setInfo ( smb2_file_disposition_info ( delete_pending: 1 ) , infoClass: . disposition)
357
330
default :
358
331
preconditionFailure ( " Not supported file type. " )
359
332
}
@@ -503,9 +476,16 @@ extension SMB2Client {
503
476
}
504
477
505
478
extension SMB2Client {
506
- struct NegotiateSigning : OptionSet {
479
+ struct NegotiateSigning : OptionSet , Sendable , CustomStringConvertible {
507
480
var rawValue : UInt16
508
-
481
+
482
+ var description : String {
483
+ var result : [ String ] = [ ]
484
+ if contains ( . enabled) { result. append ( " Enabled " ) }
485
+ if contains ( . required) { result. append ( " Required " ) }
486
+ return result. joined ( separator: " , " )
487
+ }
488
+
509
489
static let enabled = NegotiateSigning ( rawValue: SMB2_NEGOTIATE_SIGNING_ENABLED)
510
490
static let required = NegotiateSigning ( rawValue: SMB2_NEGOTIATE_SIGNING_REQUIRED)
511
491
}
@@ -514,7 +494,7 @@ extension SMB2Client {
514
494
typealias Security = smb2_sec
515
495
}
516
496
517
- extension SMB2 . smb2_negotiate_version : Swift . Hashable {
497
+ extension SMB2 . smb2_negotiate_version : Swift . Hashable , Swift . CustomStringConvertible {
518
498
static let any = SMB2_VERSION_ANY
519
499
static let v2 = SMB2_VERSION_ANY2
520
500
static let v3 = SMB2_VERSION_ANY3
@@ -523,6 +503,20 @@ extension SMB2.smb2_negotiate_version: Swift.Hashable {
523
503
static let v3_00 = SMB2_VERSION_0300
524
504
static let v3_02 = SMB2_VERSION_0302
525
505
static let v3_11 = SMB2_VERSION_0311
506
+
507
+ public var description : String {
508
+ switch self {
509
+ case . any: return " Any "
510
+ case . v2: return " 2.0 "
511
+ case . v3: return " 3.0 "
512
+ case . v2_02: return " 2.02 "
513
+ case . v2_10: return " 2.10 "
514
+ case . v3_00: return " 3.00 "
515
+ case . v3_02: return " 3.02 "
516
+ case . v3_11: return " 3.11 "
517
+ default : return " Unknown "
518
+ }
519
+ }
526
520
527
521
static func == ( lhs: smb2_negotiate_version , rhs: smb2_negotiate_version ) -> Bool {
528
522
lhs. rawValue == rhs. rawValue
@@ -533,10 +527,19 @@ extension SMB2.smb2_negotiate_version: Swift.Hashable {
533
527
}
534
528
}
535
529
536
- extension SMB2 . smb2_sec : Swift . Hashable {
530
+ extension SMB2 . smb2_sec : Swift . Hashable , Swift . CustomStringConvertible {
537
531
static let undefined = SMB2_SEC_UNDEFINED
538
532
static let ntlmSsp = SMB2_SEC_NTLMSSP
539
533
static let kerberos5 = SMB2_SEC_KRB5
534
+
535
+ public var description : String {
536
+ switch self {
537
+ case . undefined: return " Undefined "
538
+ case . ntlmSsp: return " NTLM SSP "
539
+ case . kerberos5: return " Kerberos5 "
540
+ default : return " Unknown "
541
+ }
542
+ }
540
543
541
544
static func == ( lhs: smb2_sec , rhs: smb2_sec ) -> Bool {
542
545
lhs. rawValue == rhs. rawValue
@@ -573,12 +576,21 @@ struct ShareProperties: RawRepresentable {
573
576
}
574
577
575
578
struct NTStatus : LocalizedError , Hashable , Sendable {
576
- enum Severity : UInt32 , Hashable , Sendable {
579
+ enum Severity : UInt32 , Hashable , Sendable , CustomStringConvertible {
577
580
case success
578
581
case info
579
582
case warning
580
583
case error
581
584
585
+ var description : String {
586
+ switch self {
587
+ case . success: return " Success "
588
+ case . info: return " Info "
589
+ case . warning: return " Warning "
590
+ case . error: return " Error "
591
+ }
592
+ }
593
+
582
594
init ( status: NTStatus ) {
583
595
self = switch status. rawValue & SMB2_STATUS_SEVERITY_MASK {
584
596
case UInt32 ( bitPattern: SMB2_STATUS_SEVERITY_SUCCESS) :
0 commit comments