def testReplace_Modify(self): mod = delta.Replace("sn", ["baz"]) mod.patch(self.foo) self.failIf("stuff" in self.foo) self.failUnlessEqual(self.foo["sn"], ["baz"]) self.failUnlessEqual(self.foo["more"], ["junk"])
def __setitem__(self, key, value): self._checkState() self._canRemoveAll(key) new = JournaledLDAPAttributeSet(self, key, value) super(LDAPEntryWithClient, self).__setitem__(key, new) self.journal(delta.Replace(key, value))
def testReplace_Delete_NonExisting(self): mod = delta.Replace('nonExisting', []) mod.patch(self.foo) self.failIf('stuff' in self.foo) self.failUnlessEqual(self.foo['sn'], ['bar']) self.failUnlessEqual(self.foo['more'], ['junk'])
def testModify(self): op=delta.ModifyOp('cn=Paula Jensen, ou=Product Development, dc=airius, dc=com', [ delta.Add('postaladdress', ['123 Anystreet $ Sunnyvale, CA $ 94086']), delta.Delete('description'), delta.Replace('telephonenumber', ['+1 408 555 1234', '+1 408 555 5678']), delta.Delete('facsimiletelephonenumber', ['+1 408 555 9876']), ]) self.assertEquals(op.asLDIF(), """\ dn: cn=Paula Jensen,ou=Product Development,dc=airius,dc=com changetype: modify add: postaladdress postaladdress: 123 Anystreet $ Sunnyvale, CA $ 94086 - delete: description - replace: telephonenumber telephonenumber: +1 408 555 1234 telephonenumber: +1 408 555 5678 - delete: facsimiletelephonenumber facsimiletelephonenumber: +1 408 555 9876 - """)
def testReplace_Add(self): mod = delta.Replace('stuff', ['val1', 'val2']) mod.patch(self.foo) self.failUnlessEqual(self.foo['stuff'], ['val1', 'val2']) self.failUnlessEqual(self.foo['sn'], ['bar']) self.failUnlessEqual(self.foo['more'], ['junk'])
def testReplace_Modify(self): mod = delta.Replace('sn', ['baz']) mod.patch(self.foo) self.failIf('stuff' in self.foo) self.failUnlessEqual(self.foo['sn'], ['baz']) self.failUnlessEqual(self.foo['more'], ['junk'])
def testReplaceAll(self): m=delta.Replace('thud') self.assertEqual(m.asLDIF(), b"""\ replace: thud - """)
def testReplace_Delete_NonExisting(self): mod = delta.Replace("nonExisting", []) mod.patch(self.foo) self.failIf("stuff" in self.foo) self.failUnlessEqual(self.foo["sn"], ["bar"]) self.failUnlessEqual(self.foo["more"], ["junk"])
def testReplace_Add(self): mod = delta.Replace("stuff", ["val1", "val2"]) mod.patch(self.foo) self.failUnlessEqual(self.foo["stuff"], ["val1", "val2"]) self.failUnlessEqual(self.foo["sn"], ["bar"]) self.failUnlessEqual(self.foo["more"], ["junk"])
def disable_dn_(self, dn, client=None): """ Deprovision subject based on DN. """ log = self.log unbind = False if client is None: client = yield self.get_ldap_client_() unbind = True with LDAPClientManager(client, active=unbind) as c: o = ldapsyntax.LDAPEntry(c, dn) results = yield o.search(filterText=self.search_filter, attributes=('userAccountControl', )) if len(results) == 1: entry = results[0] ADS_UF_ACCOUNTDISABLE = 0x00000002 user_account_control = int( list(entry['userAccountControl'])[0]) user_account_control = (user_account_control | ADS_UF_ACCOUNTDISABLE) mod = delta.ModifyOp(dn, [ delta.Replace('userAccountControl', ["{}".format(user_account_control)]), ]) l = mod.asLDAP() response = yield client.send(l)
def testReplace(self): m = delta.Replace('foo', ['bar', 'baz']) self.assertEqual(m.asLDIF(), b"""\ replace: foo foo: bar foo: baz - """)
def testModification_complex(self): proto = LDIFDeltaDriver() proto.dataReceived(b"""\ version: 1 dn: cn=foo,dc=example,dc=com changetype: modify delete: foo foo: bar - delete: garply - add: thud thud: quux thud: baz - replace: waldo - add: foo foo: baz - replace: thud thud: xyzzy - add: silly - """) proto.connectionLost() self.assertEqual( proto.listOfCompleted, [ delta.ModifyOp( dn=b"cn=foo,dc=example,dc=com", modifications=[ delta.Delete(b"foo", [b"bar"]), delta.Delete(b"garply"), delta.Add(b"thud", [b"quux", b"baz"]), delta.Replace(b"waldo"), delta.Add(b"foo", [b"baz"]), delta.Replace(b"thud", [b"xyzzy"]), delta.Add(b"silly"), ], ), ], )
def testReplace(self): m = delta.Replace("foo", ["bar", "baz"]) self.assertEqual( m.asLDIF(), b"""\ replace: foo foo: bar foo: baz - """, )
def testModification_complex(self): proto = LDIFDeltaDriver() proto.dataReceived(b"""\ version: 1 dn: cn=foo,dc=example,dc=com changetype: modify delete: foo foo: bar - delete: garply - add: thud thud: quux thud: baz - replace: waldo - add: foo foo: baz - replace: thud thud: xyzzy - add: silly - """) proto.connectionLost() self.assertEqual(proto.listOfCompleted, [ delta.ModifyOp(dn=b'cn=foo,dc=example,dc=com', modifications=[ delta.Delete(b'foo', [b'bar']), delta.Delete(b'garply'), delta.Add(b'thud', [b'quux', b'baz']), delta.Replace(b'waldo'), delta.Add(b'foo', [b'baz']), delta.Replace(b'thud', [b'xyzzy']), delta.Add(b'silly'), ]), ])
def update_entry_(self, account, client): """ Attempt to update and LDAP entry. """ log = self.log log.info("Entered update_entry_()") updateable_attribs = { "givenName", "displayName", "sn", "userAccountControl", } attribs = [ delta.Replace(prop, list(values)) for prop, values in account.items() if prop in updateable_attribs ] log.debug("attribs: {attribs}", attribs=attribs) try: dn = account['dn'] except KeyError: raise Exception("Account template must include a `dn` property.") mod = delta.ModifyOp(dn, attribs) log.debug("LDAP MOD request: {mod_req}", mod_req=repr(mod)) unbind = False if client is None: client = yield self.get_ldap_client_() unbind = True response = None log.debug("LDAPClientManager unbind flag: {unbind}", unbind=unbind) with LDAPClientManager(client, active=unbind, log=log) as c: log.debug("Sending LDAP MOD request.") response = yield c.send(mod.asLDAP()) log.debug("LDAP MOD request sent. Response: {resp}", resp=repr(response)) log.debug("LDAP MOD response: {mod_resp}", mod_resp=repr(response)) result_code = response.resultCode allowed_results = (ldaperrors.Success.resultCode, ldaperrors.LDAPNoSuchObject.resultCode) if result_code not in allowed_results: msg = response.errorMessage raise Exception( "Error adding entry: result_code={}, msg={}".format( result_code, msg)) returnValue(result_code)
def testAsLDIF(self): """ It will return a LDIF representation of the contained operations. """ sut = delta.ModifyOp( 'cn=Paula Jensen, ou=Dev Ops, dc=airius, dc=com', [ delta.Add( 'postaladdress', ['123 Anystreet $ Sunnyvale, CA $ 94086'], ), delta.Delete('description'), delta.Replace( 'telephonenumber', ['+1 408 555 1234', '+1 408 555 5678'], ), delta.Delete( 'facsimiletelephonenumber', ['+1 408 555 9876']), ] ) result = sut.asLDIF() self.assertEqual(b"""dn: cn=Paula Jensen,ou=Dev Ops,dc=airius,dc=com changetype: modify add: postaladdress postaladdress: 123 Anystreet $ Sunnyvale, CA $ 94086 - delete: description - replace: telephonenumber telephonenumber: +1 408 555 1234 telephonenumber: +1 408 555 5678 - delete: facsimiletelephonenumber facsimiletelephonenumber: +1 408 555 9876 - """, result, )
def testAsLDIF(self): """ It will return a LDIF representation of the contained operations. """ sut = delta.ModifyOp( "cn=Paula Jensen, ou=Dev Ops, dc=airius, dc=com", [ delta.Add( "postaladdress", ["123 Anystreet $ Sunnyvale, CA $ 94086"], ), delta.Delete("description"), delta.Replace( "telephonenumber", ["+1 408 555 1234", "+1 408 555 5678"], ), delta.Delete("facsimiletelephonenumber", ["+1 408 555 9876"]), ], ) result = sut.asLDIF() self.assertEqual( b"""dn: cn=Paula Jensen,ou=Dev Ops,dc=airius,dc=com changetype: modify add: postaladdress postaladdress: 123 Anystreet $ Sunnyvale, CA $ 94086 - delete: description - replace: telephonenumber telephonenumber: +1 408 555 1234 telephonenumber: +1 408 555 5678 - delete: facsimiletelephonenumber facsimiletelephonenumber: +1 408 555 9876 - """, result, )