Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pyasn1_modules/rfc2251.py: 100%

115 statements  

« prev     ^ index     » next       coverage.py v7.3.2, created at 2023-12-08 06:40 +0000

1# 

2# This file is part of pyasn1-modules software. 

3# 

4# Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com> 

5# License: http://snmplabs.com/pyasn1/license.html 

6# 

7# LDAP message syntax 

8# 

9# ASN.1 source from: 

10# http://www.trl.ibm.com/projects/xml/xss4j/data/asn1/grammars/ldap.asn 

11# 

12# Sample captures from: 

13# http://wiki.wireshark.org/SampleCaptures/ 

14# 

15from pyasn1.type import constraint 

16from pyasn1.type import namedtype 

17from pyasn1.type import namedval 

18from pyasn1.type import tag 

19from pyasn1.type import univ 

20 

21maxInt = univ.Integer(2147483647) 

22 

23 

24class LDAPString(univ.OctetString): 

25 pass 

26 

27 

28class LDAPOID(univ.OctetString): 

29 pass 

30 

31 

32class LDAPDN(LDAPString): 

33 pass 

34 

35 

36class RelativeLDAPDN(LDAPString): 

37 pass 

38 

39 

40class AttributeType(LDAPString): 

41 pass 

42 

43 

44class AttributeDescription(LDAPString): 

45 pass 

46 

47 

48class AttributeDescriptionList(univ.SequenceOf): 

49 componentType = AttributeDescription() 

50 

51 

52class AttributeValue(univ.OctetString): 

53 pass 

54 

55 

56class AssertionValue(univ.OctetString): 

57 pass 

58 

59 

60class AttributeValueAssertion(univ.Sequence): 

61 componentType = namedtype.NamedTypes( 

62 namedtype.NamedType('attributeDesc', AttributeDescription()), 

63 namedtype.NamedType('assertionValue', AssertionValue()) 

64 ) 

65 

66 

67class Attribute(univ.Sequence): 

68 componentType = namedtype.NamedTypes( 

69 namedtype.NamedType('type', AttributeDescription()), 

70 namedtype.NamedType('vals', univ.SetOf(componentType=AttributeValue())) 

71 ) 

72 

73 

74class MatchingRuleId(LDAPString): 

75 pass 

76 

77 

78class Control(univ.Sequence): 

79 componentType = namedtype.NamedTypes( 

80 namedtype.NamedType('controlType', LDAPOID()), 

81 namedtype.DefaultedNamedType('criticality', univ.Boolean('False')), 

82 namedtype.OptionalNamedType('controlValue', univ.OctetString()) 

83 ) 

84 

85 

86class Controls(univ.SequenceOf): 

87 componentType = Control() 

88 

89 

90class LDAPURL(LDAPString): 

91 pass 

92 

93 

94class Referral(univ.SequenceOf): 

95 componentType = LDAPURL() 

96 

97 

98class SaslCredentials(univ.Sequence): 

99 componentType = namedtype.NamedTypes( 

100 namedtype.NamedType('mechanism', LDAPString()), 

101 namedtype.OptionalNamedType('credentials', univ.OctetString()) 

102 ) 

103 

104 

105class AuthenticationChoice(univ.Choice): 

106 componentType = namedtype.NamedTypes( 

107 namedtype.NamedType('simple', univ.OctetString().subtype( 

108 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 

109 namedtype.NamedType('reserved-1', univ.OctetString().subtype( 

110 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 

111 namedtype.NamedType('reserved-2', univ.OctetString().subtype( 

112 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))), 

113 namedtype.NamedType('sasl', 

114 SaslCredentials().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))) 

115 ) 

116 

117 

118class BindRequest(univ.Sequence): 

119 tagSet = univ.Sequence.tagSet.tagImplicitly( 

120 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 0) 

121 ) 

122 componentType = namedtype.NamedTypes( 

123 namedtype.NamedType('version', univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(1, 127))), 

124 namedtype.NamedType('name', LDAPDN()), 

125 namedtype.NamedType('authentication', AuthenticationChoice()) 

126 ) 

127 

128 

129class PartialAttributeList(univ.SequenceOf): 

130 componentType = univ.Sequence( 

131 componentType=namedtype.NamedTypes( 

132 namedtype.NamedType('type', AttributeDescription()), 

133 namedtype.NamedType('vals', univ.SetOf(componentType=AttributeValue())) 

134 ) 

135 ) 

136 

137 

138class SearchResultEntry(univ.Sequence): 

139 tagSet = univ.Sequence.tagSet.tagImplicitly( 

140 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 4) 

141 ) 

142 componentType = namedtype.NamedTypes( 

143 namedtype.NamedType('objectName', LDAPDN()), 

144 namedtype.NamedType('attributes', PartialAttributeList()) 

145 ) 

146 

147 

148class MatchingRuleAssertion(univ.Sequence): 

149 componentType = namedtype.NamedTypes( 

150 namedtype.OptionalNamedType('matchingRule', MatchingRuleId().subtype( 

151 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))), 

152 namedtype.OptionalNamedType('type', AttributeDescription().subtype( 

153 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))), 

154 namedtype.NamedType('matchValue', 

155 AssertionValue().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3))), 

156 namedtype.DefaultedNamedType('dnAttributes', univ.Boolean('False').subtype( 

157 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4))) 

158 ) 

159 

160 

161class SubstringFilter(univ.Sequence): 

162 componentType = namedtype.NamedTypes( 

163 namedtype.NamedType('type', AttributeDescription()), 

164 namedtype.NamedType('substrings', 

165 univ.SequenceOf( 

166 componentType=univ.Choice( 

167 componentType=namedtype.NamedTypes( 

168 namedtype.NamedType( 

169 'initial', LDAPString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)) 

170 ), 

171 namedtype.NamedType( 

172 'any', LDAPString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)) 

173 ), 

174 namedtype.NamedType( 

175 'final', LDAPString().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2)) 

176 ) 

177 ) 

178 ) 

179 ) 

180 ) 

181 ) 

182 

183 

184# Ugly hack to handle recursive Filter reference (up to 3-levels deep). 

185 

186class Filter3(univ.Choice): 

187 componentType = namedtype.NamedTypes( 

188 namedtype.NamedType('equalityMatch', AttributeValueAssertion().subtype( 

189 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))), 

190 namedtype.NamedType('substrings', SubstringFilter().subtype( 

191 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))), 

192 namedtype.NamedType('greaterOrEqual', AttributeValueAssertion().subtype( 

193 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5))), 

194 namedtype.NamedType('lessOrEqual', AttributeValueAssertion().subtype( 

195 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 6))), 

196 namedtype.NamedType('present', AttributeDescription().subtype( 

197 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 7))), 

198 namedtype.NamedType('approxMatch', AttributeValueAssertion().subtype( 

199 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 8))), 

200 namedtype.NamedType('extensibleMatch', MatchingRuleAssertion().subtype( 

201 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 9))) 

202 ) 

203 

204 

205class Filter2(univ.Choice): 

206 componentType = namedtype.NamedTypes( 

207 namedtype.NamedType('and', univ.SetOf(componentType=Filter3()).subtype( 

208 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), 

209 namedtype.NamedType('or', univ.SetOf(componentType=Filter3()).subtype( 

210 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))), 

211 namedtype.NamedType('not', 

212 Filter3().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))), 

213 namedtype.NamedType('equalityMatch', AttributeValueAssertion().subtype( 

214 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))), 

215 namedtype.NamedType('substrings', SubstringFilter().subtype( 

216 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))), 

217 namedtype.NamedType('greaterOrEqual', AttributeValueAssertion().subtype( 

218 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5))), 

219 namedtype.NamedType('lessOrEqual', AttributeValueAssertion().subtype( 

220 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 6))), 

221 namedtype.NamedType('present', AttributeDescription().subtype( 

222 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 7))), 

223 namedtype.NamedType('approxMatch', AttributeValueAssertion().subtype( 

224 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 8))), 

225 namedtype.NamedType('extensibleMatch', MatchingRuleAssertion().subtype( 

226 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 9))) 

227 ) 

228 

229 

230class Filter(univ.Choice): 

231 componentType = namedtype.NamedTypes( 

232 namedtype.NamedType('and', univ.SetOf(componentType=Filter2()).subtype( 

233 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))), 

234 namedtype.NamedType('or', univ.SetOf(componentType=Filter2()).subtype( 

235 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))), 

236 namedtype.NamedType('not', 

237 Filter2().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2))), 

238 namedtype.NamedType('equalityMatch', AttributeValueAssertion().subtype( 

239 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))), 

240 namedtype.NamedType('substrings', SubstringFilter().subtype( 

241 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 4))), 

242 namedtype.NamedType('greaterOrEqual', AttributeValueAssertion().subtype( 

243 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 5))), 

244 namedtype.NamedType('lessOrEqual', AttributeValueAssertion().subtype( 

245 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 6))), 

246 namedtype.NamedType('present', AttributeDescription().subtype( 

247 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 7))), 

248 namedtype.NamedType('approxMatch', AttributeValueAssertion().subtype( 

249 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 8))), 

250 namedtype.NamedType('extensibleMatch', MatchingRuleAssertion().subtype( 

251 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 9))) 

252 ) 

253 

254 

255# End of Filter hack 

256 

257class SearchRequest(univ.Sequence): 

258 tagSet = univ.Sequence.tagSet.tagImplicitly( 

259 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 3) 

260 ) 

261 componentType = namedtype.NamedTypes( 

262 namedtype.NamedType('baseObject', LDAPDN()), 

263 namedtype.NamedType('scope', univ.Enumerated( 

264 namedValues=namedval.NamedValues(('baseObject', 0), ('singleLevel', 1), ('wholeSubtree', 2)))), 

265 namedtype.NamedType('derefAliases', univ.Enumerated( 

266 namedValues=namedval.NamedValues(('neverDerefAliases', 0), ('derefInSearching', 1), 

267 ('derefFindingBaseObj', 2), ('derefAlways', 3)))), 

268 namedtype.NamedType('sizeLimit', 

269 univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, maxInt))), 

270 namedtype.NamedType('timeLimit', 

271 univ.Integer().subtype(subtypeSpec=constraint.ValueRangeConstraint(0, maxInt))), 

272 namedtype.NamedType('typesOnly', univ.Boolean()), 

273 namedtype.NamedType('filter', Filter()), 

274 namedtype.NamedType('attributes', AttributeDescriptionList()) 

275 ) 

276 

277 

278class UnbindRequest(univ.Null): 

279 tagSet = univ.Sequence.tagSet.tagImplicitly( 

280 tag.Tag(tag.tagClassApplication, tag.tagFormatSimple, 2) 

281 ) 

282 

283 

284class BindResponse(univ.Sequence): 

285 tagSet = univ.Sequence.tagSet.tagImplicitly( 

286 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 1) 

287 ) 

288 componentType = namedtype.NamedTypes( 

289 namedtype.NamedType('resultCode', univ.Enumerated( 

290 namedValues=namedval.NamedValues(('success', 0), ('operationsError', 1), ('protocolError', 2), 

291 ('timeLimitExceeded', 3), ('sizeLimitExceeded', 4), ('compareFalse', 5), 

292 ('compareTrue', 6), ('authMethodNotSupported', 7), 

293 ('strongAuthRequired', 8), ('reserved-9', 9), ('referral', 10), 

294 ('adminLimitExceeded', 11), ('unavailableCriticalExtension', 12), 

295 ('confidentialityRequired', 13), ('saslBindInProgress', 14), 

296 ('noSuchAttribute', 16), ('undefinedAttributeType', 17), 

297 ('inappropriateMatching', 18), ('constraintViolation', 19), 

298 ('attributeOrValueExists', 20), ('invalidAttributeSyntax', 21), 

299 ('noSuchObject', 32), ('aliasProblem', 33), ('invalidDNSyntax', 34), 

300 ('reserved-35', 35), ('aliasDereferencingProblem', 36), 

301 ('inappropriateAuthentication', 48), ('invalidCredentials', 49), 

302 ('insufficientAccessRights', 50), ('busy', 51), ('unavailable', 52), 

303 ('unwillingToPerform', 53), ('loopDetect', 54), ('namingViolation', 64), 

304 ('objectClassViolation', 65), ('notAllowedOnNonLeaf', 66), 

305 ('notAllowedOnRDN', 67), ('entryAlreadyExists', 68), 

306 ('objectClassModsProhibited', 69), ('reserved-70', 70), 

307 ('affectsMultipleDSAs', 71), ('other', 80), ('reserved-81', 81), 

308 ('reserved-82', 82), ('reserved-83', 83), ('reserved-84', 84), 

309 ('reserved-85', 85), ('reserved-86', 86), ('reserved-87', 87), 

310 ('reserved-88', 88), ('reserved-89', 89), ('reserved-90', 90)))), 

311 namedtype.NamedType('matchedDN', LDAPDN()), 

312 namedtype.NamedType('errorMessage', LDAPString()), 

313 namedtype.OptionalNamedType('referral', Referral().subtype( 

314 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))), 

315 namedtype.OptionalNamedType('serverSaslCreds', univ.OctetString().subtype( 

316 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 7))) 

317 ) 

318 

319 

320class LDAPResult(univ.Sequence): 

321 componentType = namedtype.NamedTypes( 

322 namedtype.NamedType('resultCode', univ.Enumerated( 

323 namedValues=namedval.NamedValues(('success', 0), ('operationsError', 1), ('protocolError', 2), 

324 ('timeLimitExceeded', 3), ('sizeLimitExceeded', 4), ('compareFalse', 5), 

325 ('compareTrue', 6), ('authMethodNotSupported', 7), 

326 ('strongAuthRequired', 8), ('reserved-9', 9), ('referral', 10), 

327 ('adminLimitExceeded', 11), ('unavailableCriticalExtension', 12), 

328 ('confidentialityRequired', 13), ('saslBindInProgress', 14), 

329 ('noSuchAttribute', 16), ('undefinedAttributeType', 17), 

330 ('inappropriateMatching', 18), ('constraintViolation', 19), 

331 ('attributeOrValueExists', 20), ('invalidAttributeSyntax', 21), 

332 ('noSuchObject', 32), ('aliasProblem', 33), ('invalidDNSyntax', 34), 

333 ('reserved-35', 35), ('aliasDereferencingProblem', 36), 

334 ('inappropriateAuthentication', 48), ('invalidCredentials', 49), 

335 ('insufficientAccessRights', 50), ('busy', 51), ('unavailable', 52), 

336 ('unwillingToPerform', 53), ('loopDetect', 54), ('namingViolation', 64), 

337 ('objectClassViolation', 65), ('notAllowedOnNonLeaf', 66), 

338 ('notAllowedOnRDN', 67), ('entryAlreadyExists', 68), 

339 ('objectClassModsProhibited', 69), ('reserved-70', 70), 

340 ('affectsMultipleDSAs', 71), ('other', 80), ('reserved-81', 81), 

341 ('reserved-82', 82), ('reserved-83', 83), ('reserved-84', 84), 

342 ('reserved-85', 85), ('reserved-86', 86), ('reserved-87', 87), 

343 ('reserved-88', 88), ('reserved-89', 89), ('reserved-90', 90)))), 

344 namedtype.NamedType('matchedDN', LDAPDN()), 

345 namedtype.NamedType('errorMessage', LDAPString()), 

346 namedtype.OptionalNamedType('referral', Referral().subtype( 

347 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))) 

348 ) 

349 

350 

351class SearchResultReference(univ.SequenceOf): 

352 tagSet = univ.Sequence.tagSet.tagImplicitly( 

353 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 19) 

354 ) 

355 componentType = LDAPURL() 

356 

357 

358class SearchResultDone(LDAPResult): 

359 tagSet = univ.Sequence.tagSet.tagImplicitly( 

360 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 5) 

361 ) 

362 

363 

364class AttributeTypeAndValues(univ.Sequence): 

365 componentType = namedtype.NamedTypes( 

366 namedtype.NamedType('type', AttributeDescription()), 

367 namedtype.NamedType('vals', univ.SetOf(componentType=AttributeValue())) 

368 ) 

369 

370 

371class ModifyRequest(univ.Sequence): 

372 tagSet = univ.Sequence.tagSet.tagImplicitly( 

373 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 6) 

374 ) 

375 componentType = namedtype.NamedTypes( 

376 namedtype.NamedType('object', LDAPDN()), 

377 namedtype.NamedType('modification', 

378 univ.SequenceOf( 

379 componentType=univ.Sequence( 

380 componentType=namedtype.NamedTypes( 

381 namedtype.NamedType( 

382 'operation', univ.Enumerated(namedValues=namedval.NamedValues(('add', 0), ('delete', 1), ('replace', 2))) 

383 ), 

384 namedtype.NamedType('modification', AttributeTypeAndValues()))) 

385 ) 

386 ) 

387 ) 

388 

389 

390class ModifyResponse(LDAPResult): 

391 tagSet = univ.Sequence.tagSet.tagImplicitly( 

392 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 7) 

393 ) 

394 

395 

396class AttributeList(univ.SequenceOf): 

397 componentType = univ.Sequence( 

398 componentType=namedtype.NamedTypes( 

399 namedtype.NamedType('type', AttributeDescription()), 

400 namedtype.NamedType('vals', univ.SetOf(componentType=AttributeValue())) 

401 ) 

402 ) 

403 

404 

405class AddRequest(univ.Sequence): 

406 tagSet = univ.Sequence.tagSet.tagImplicitly( 

407 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 8) 

408 ) 

409 componentType = namedtype.NamedTypes( 

410 namedtype.NamedType('entry', LDAPDN()), 

411 namedtype.NamedType('attributes', AttributeList()) 

412 ) 

413 

414 

415class AddResponse(LDAPResult): 

416 tagSet = univ.Sequence.tagSet.tagImplicitly( 

417 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 9) 

418 ) 

419 

420 

421class DelRequest(LDAPResult): 

422 tagSet = univ.Sequence.tagSet.tagImplicitly( 

423 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 10) 

424 ) 

425 

426 

427class DelResponse(LDAPResult): 

428 tagSet = univ.Sequence.tagSet.tagImplicitly( 

429 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 11) 

430 ) 

431 

432 

433class ModifyDNRequest(univ.Sequence): 

434 tagSet = univ.Sequence.tagSet.tagImplicitly( 

435 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 12) 

436 ) 

437 componentType = namedtype.NamedTypes( 

438 namedtype.NamedType('entry', LDAPDN()), 

439 namedtype.NamedType('newrdn', RelativeLDAPDN()), 

440 namedtype.NamedType('deleteoldrdn', univ.Boolean()), 

441 namedtype.OptionalNamedType('newSuperior', 

442 LDAPDN().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))) 

443 

444 ) 

445 

446 

447class ModifyDNResponse(LDAPResult): 

448 tagSet = univ.Sequence.tagSet.tagImplicitly( 

449 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 13) 

450 ) 

451 

452 

453class CompareRequest(univ.Sequence): 

454 tagSet = univ.Sequence.tagSet.tagImplicitly( 

455 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 14) 

456 ) 

457 componentType = namedtype.NamedTypes( 

458 namedtype.NamedType('entry', LDAPDN()), 

459 namedtype.NamedType('ava', AttributeValueAssertion()) 

460 ) 

461 

462 

463class CompareResponse(LDAPResult): 

464 tagSet = univ.Sequence.tagSet.tagImplicitly( 

465 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 15) 

466 ) 

467 

468 

469class AbandonRequest(LDAPResult): 

470 tagSet = univ.Sequence.tagSet.tagImplicitly( 

471 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 16) 

472 ) 

473 

474 

475class ExtendedRequest(univ.Sequence): 

476 tagSet = univ.Sequence.tagSet.tagImplicitly( 

477 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 23) 

478 ) 

479 componentType = namedtype.NamedTypes( 

480 namedtype.NamedType('requestName', 

481 LDAPOID().subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))), 

482 namedtype.OptionalNamedType('requestValue', univ.OctetString().subtype( 

483 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1))) 

484 ) 

485 

486 

487class ExtendedResponse(univ.Sequence): 

488 tagSet = univ.Sequence.tagSet.tagImplicitly( 

489 tag.Tag(tag.tagClassApplication, tag.tagFormatConstructed, 24) 

490 ) 

491 componentType = namedtype.NamedTypes( 

492 namedtype.NamedType('resultCode', univ.Enumerated( 

493 namedValues=namedval.NamedValues(('success', 0), ('operationsError', 1), ('protocolError', 2), 

494 ('timeLimitExceeded', 3), ('sizeLimitExceeded', 4), ('compareFalse', 5), 

495 ('compareTrue', 6), ('authMethodNotSupported', 7), 

496 ('strongAuthRequired', 8), ('reserved-9', 9), ('referral', 10), 

497 ('adminLimitExceeded', 11), ('unavailableCriticalExtension', 12), 

498 ('confidentialityRequired', 13), ('saslBindInProgress', 14), 

499 ('noSuchAttribute', 16), ('undefinedAttributeType', 17), 

500 ('inappropriateMatching', 18), ('constraintViolation', 19), 

501 ('attributeOrValueExists', 20), ('invalidAttributeSyntax', 21), 

502 ('noSuchObject', 32), ('aliasProblem', 33), ('invalidDNSyntax', 34), 

503 ('reserved-35', 35), ('aliasDereferencingProblem', 36), 

504 ('inappropriateAuthentication', 48), ('invalidCredentials', 49), 

505 ('insufficientAccessRights', 50), ('busy', 51), ('unavailable', 52), 

506 ('unwillingToPerform', 53), ('loopDetect', 54), ('namingViolation', 64), 

507 ('objectClassViolation', 65), ('notAllowedOnNonLeaf', 66), 

508 ('notAllowedOnRDN', 67), ('entryAlreadyExists', 68), 

509 ('objectClassModsProhibited', 69), ('reserved-70', 70), 

510 ('affectsMultipleDSAs', 71), ('other', 80), ('reserved-81', 81), 

511 ('reserved-82', 82), ('reserved-83', 83), ('reserved-84', 84), 

512 ('reserved-85', 85), ('reserved-86', 86), ('reserved-87', 87), 

513 ('reserved-88', 88), ('reserved-89', 89), ('reserved-90', 90)))), 

514 namedtype.NamedType('matchedDN', LDAPDN()), 

515 namedtype.NamedType('errorMessage', LDAPString()), 

516 namedtype.OptionalNamedType('referral', Referral().subtype( 

517 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 3))), 

518 

519 namedtype.OptionalNamedType('responseName', LDAPOID().subtype( 

520 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 10))), 

521 namedtype.OptionalNamedType('response', univ.OctetString().subtype( 

522 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 11))) 

523 ) 

524 

525 

526class MessageID(univ.Integer): 

527 subtypeSpec = univ.Integer.subtypeSpec + constraint.ValueRangeConstraint( 

528 0, maxInt 

529 ) 

530 

531 

532class LDAPMessage(univ.Sequence): 

533 componentType = namedtype.NamedTypes( 

534 namedtype.NamedType('messageID', MessageID()), 

535 namedtype.NamedType( 

536 'protocolOp', univ.Choice( 

537 componentType=namedtype.NamedTypes( 

538 namedtype.NamedType('bindRequest', BindRequest()), 

539 namedtype.NamedType('bindResponse', BindResponse()), 

540 namedtype.NamedType('unbindRequest', UnbindRequest()), 

541 namedtype.NamedType('searchRequest', SearchRequest()), 

542 namedtype.NamedType('searchResEntry', SearchResultEntry()), 

543 namedtype.NamedType('searchResDone', SearchResultDone()), 

544 namedtype.NamedType('searchResRef', SearchResultReference()), 

545 namedtype.NamedType('modifyRequest', ModifyRequest()), 

546 namedtype.NamedType('modifyResponse', ModifyResponse()), 

547 namedtype.NamedType('addRequest', AddRequest()), 

548 namedtype.NamedType('addResponse', AddResponse()), 

549 namedtype.NamedType('delRequest', DelRequest()), 

550 namedtype.NamedType('delResponse', DelResponse()), 

551 namedtype.NamedType('modDNRequest', ModifyDNRequest()), 

552 namedtype.NamedType('modDNResponse', ModifyDNResponse()), 

553 namedtype.NamedType('compareRequest', CompareRequest()), 

554 namedtype.NamedType('compareResponse', CompareResponse()), 

555 namedtype.NamedType('abandonRequest', AbandonRequest()), 

556 namedtype.NamedType('extendedReq', ExtendedRequest()), 

557 namedtype.NamedType('extendedResp', ExtendedResponse()) 

558 ) 

559 ) 

560 ), 

561 namedtype.OptionalNamedType('controls', Controls().subtype( 

562 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))) 

563 )