1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 import pike.model
38 import pike.smb2
39 import pike.test
40 import pike.ntstatus
41
43
45 chan, tree = self.tree_connect()
46 buffer = "0123456789012345678901"
47 locks = [(8, 8, pike.smb2.SMB2_LOCKFLAG_EXCLUSIVE_LOCK | pike.smb2.SMB2_LOCKFLAG_FAIL_IMMEDIATELY)]
48
49 share_all = pike.smb2.FILE_SHARE_READ | pike.smb2.FILE_SHARE_WRITE | pike.smb2.FILE_SHARE_DELETE
50
51 file = chan.create(tree,
52 'lock.txt',
53 access=pike.smb2.FILE_READ_DATA | pike.smb2.FILE_WRITE_DATA | pike.smb2.DELETE,
54 share=share_all,
55 disposition=pike.smb2.FILE_SUPERSEDE,
56 options=pike.smb2.FILE_DELETE_ON_CLOSE).result()
57
58 bytes_written = chan.write(file,
59 0,
60 buffer)
61 self.assertEqual(bytes_written, len(buffer))
62
63 chan.lock(file, locks).result()
64
65 chan.close(file)
66
67
69 chan, tree = self.tree_connect()
70 buffer = "0123456789012345678901"
71 locks = [(8, 8, pike.smb2.SMB2_LOCKFLAG_EXCLUSIVE_LOCK)]
72
73 share_all = pike.smb2.FILE_SHARE_READ | pike.smb2.FILE_SHARE_WRITE | pike.smb2.FILE_SHARE_DELETE
74 access = pike.smb2.FILE_READ_DATA | pike.smb2.FILE_WRITE_DATA | pike.smb2.DELETE
75
76
77 file1 = chan.create(tree,
78 'lock.txt',
79 access=access,
80 share=share_all,
81 disposition=pike.smb2.FILE_SUPERSEDE).result()
82
83 bytes_written = chan.write(file1,
84 0,
85 buffer)
86 self.assertEqual(bytes_written, len(buffer))
87
88 chan.lock(file1, locks).result()
89
90
91 file2 = chan.create(tree,
92 'lock.txt',
93 access=access,
94 share=share_all,
95 disposition=pike.smb2.FILE_OPEN,
96 options=pike.smb2.FILE_DELETE_ON_CLOSE).result()
97
98
99 lock_future = chan.lock(file2, locks)
100 lock_future.wait_interim()
101
102
103 with self.assert_error(pike.ntstatus.STATUS_CANCELLED):
104 chan.cancel(lock_future).result()
105
106 chan.close(file1)
107 chan.close(file2)
108
110 chan, tree = self.tree_connect()
111 buffer = "0123456789012345678901"
112 lock_offset = 8
113 lock_size = 8
114 locks = [(lock_offset, lock_size, pike.smb2.SMB2_LOCKFLAG_EXCLUSIVE_LOCK)]
115
116 share_all = pike.smb2.FILE_SHARE_READ | pike.smb2.FILE_SHARE_WRITE | pike.smb2.FILE_SHARE_DELETE
117 access = pike.smb2.FILE_READ_DATA | pike.smb2.FILE_WRITE_DATA | pike.smb2.DELETE
118
119
120 file1 = chan.create(tree,
121 'lock.txt',
122 access=access,
123 share=share_all,
124 disposition=pike.smb2.FILE_SUPERSEDE).result()
125
126 bytes_written = chan.write(file1, 0, buffer)
127 self.assertEqual(bytes_written, len(buffer))
128
129 chan.lock(file1, locks).result()
130
131
132 file2 = chan.create(tree,
133 'lock.txt',
134 access=access,
135 share=share_all,
136 disposition=pike.smb2.FILE_OPEN,
137 options=pike.smb2.FILE_DELETE_ON_CLOSE).result()
138
139 cases = ((offset,size) for offset in xrange(0, 16) for size in xrange(0, 16))
140
141 for (offset,size) in cases:
142 if ranges_intersect(offset, offset+size, lock_offset, lock_offset + lock_size):
143 with self.assert_error(pike.ntstatus.STATUS_FILE_LOCK_CONFLICT):
144 chan.write(file2, offset, 'a' * size)
145
146 chan.close(file1)
147 chan.close(file2)
148
150 chan, tree = self.tree_connect()
151 buffer = "0123456789012345678901"
152 lock_offset = 8
153 lock_size = 8
154 locks = [(lock_offset, lock_size, pike.smb2.SMB2_LOCKFLAG_EXCLUSIVE_LOCK)]
155
156 share_all = pike.smb2.FILE_SHARE_READ | pike.smb2.FILE_SHARE_WRITE | pike.smb2.FILE_SHARE_DELETE
157 access = pike.smb2.FILE_READ_DATA | pike.smb2.FILE_WRITE_DATA | pike.smb2.DELETE
158
159
160 file1 = chan.create(tree,
161 'lock.txt',
162 access=access,
163 share=share_all,
164 disposition=pike.smb2.FILE_SUPERSEDE).result()
165
166 bytes_written = chan.write(file1, 0, buffer)
167 self.assertEqual(bytes_written, len(buffer))
168
169 chan.lock(file1, locks).result()
170
171
172 file2 = chan.create(tree,
173 'lock.txt',
174 access=access,
175 share=share_all,
176 disposition=pike.smb2.FILE_OPEN,
177 options=pike.smb2.FILE_DELETE_ON_CLOSE).result()
178
179 chan.write(file2, lock_offset + 1, None)
180
181 chan.close(file1)
182 chan.close(file2)
183
185 return b >= a1 and b < a2
186
191