Example #1
0
 def _notExistObjectLBE(self):
     print '  Checking for Objects which do not exist into LBE but in LDAP Server:'
     for objectTemplate in LBEObjectTemplate.objects.all():
         print "  - \033[35m" + objectTemplate.name + '\033[0m...'
         objHelper = LBEObjectInstanceHelper(objectTemplate)
         try:
             scope = objHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         objTarget = self.target.searchObjects(objectTemplate, scope)
         objBackend = self.backend.searchObjects(objectTemplate)
         number = 0
         for ot in objTarget:
             exist = False
             for ob in objBackend:
                 if ot.name == ob.name:
                     exist = True
                     break
             if not exist:
                 number += 1
                 print "    " + ot.name
         if number == 0:
             print '    \033[91m<None>\033[0m'
     print ""
     print '  Checking for Groups which do not exist into LBE but in LDAP Server:'
     number = 0
     for groupTemplate in LBEGroup.objects.all():
         grpHelper = GroupInstanceHelper(groupTemplate)
         try:
             scope = grpHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         grpTarget = self.target.searchObjects(
             groupTemplate, scope, '(cn=' + groupTemplate.displayName + ')')
         grpBackend = self.backend.searchObjectsByPattern(
             groupTemplate, groupTemplate.displayName)
         if not grpBackend:
             print "   - \033[36m" + groupTemplate.displayName + "\033[0m does not exists."
             number += 1
     if number == 0:
         print '    \033[91m<None>\033[0m'
Example #2
0
File: debug.py Project: OpenCSI/lbe
 def _notExistObjectLBE(self):
     print '  Checking for Objects which do not exist into LBE but in LDAP Server:'
     for objectTemplate in LBEObjectTemplate.objects.all():
         print "  - \033[35m" + objectTemplate.name + '\033[0m...'
         objHelper = LBEObjectInstanceHelper(objectTemplate)
         try:
             scope = objHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         objTarget = self.target.searchObjects(objectTemplate, scope)
         objBackend = self.backend.searchObjects(objectTemplate)
         number = 0
         for ot in objTarget:
             exist = False
             for ob in objBackend:
                 if ot.name == ob.name:
                     exist = True
                     break
             if not exist:
                 number += 1
                 print "    " + ot.name
         if number == 0:
             print '    \033[91m<None>\033[0m'
     print ""
     print '  Checking for Groups which do not exist into LBE but in LDAP Server:'
     number = 0
     for groupTemplate in LBEGroup.objects.all():
         grpHelper = GroupInstanceHelper(groupTemplate)
         try:
             scope = grpHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         grpTarget = self.target.searchObjects(groupTemplate, scope, '(cn=' + groupTemplate.displayName + ')')
         grpBackend = self.backend.searchObjectsByPattern(groupTemplate, groupTemplate.displayName)
         if not grpBackend:
             print "   - \033[36m" + groupTemplate.displayName + "\033[0m does not exists."
             number += 1
     if number == 0:
         print '    \033[91m<None>\033[0m'
Example #3
0
 def start(self):
     print "   Upgrade the Target server with the Backend server..."
     for objectTemplate in LBEObjectTemplate.objects.all():
         # need to check if we need to change (before making reconciliation) the RDN attribute
         self._changeRDN(objectTemplate)
         # And the objects class
         self._changeClass(objectTemplate)
         # We're looking for all objects with state = OBJECT_STATE_AWAITING_SYNC
         for objectInstance in self.backend.searchObjectsToUpdate(
                 objectTemplate):
             # First of all, applies all changes stored in backend [ such Virtual attributes ]
             # & create the parent DN if not exist:
             obj = LBEObjectInstanceHelper(objectTemplate, objectInstance)
             try:
                 scope = obj.callScriptClassMethod("search_scope")
             except BaseException:
                 scope = 0
             self._createParent(objectTemplate, obj)
             #obj.compute(objectInstance)
             # then, upgrade:
             if objectInstance.changes[
                     'type'] == OBJECT_CHANGE_CREATE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..."
                     self._createObject(objectTemplate, objectInstance)
                 # TODO: We should have a target exception rather ldap
                 except ldap.ALREADY_EXISTS:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m already exists"
                     changes = {}
                     changes['status'] = OBJECT_STATE_SYNCED
                     changes['changes'] = {}
                     changes['changes']['set'] = {}
                     changes['changes']['type'] = -1
                     changes['synced_at'] = django.utils.timezone.now()
                     self.backend.updateObject(objectTemplate,
                                               objectInstance, changes)
                     pass
             elif objectInstance.changes[
                     'type'] == OBJECT_CHANGE_DELETE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "' is \033[33mdeleting\033[0m..."
                     self._deleteObject(objectTemplate, objectInstance)
                 except BaseException as e:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m does not exist."
                     changes = {}
                     changes['status'] = OBJECT_STATE_DELETED
                     changes['changes'] = {}
                     changes['changes']['set'] = {}
                     changes['changes']['type'] = -1
                     changes['synced_at'] = django.utils.timezone.now()
                     self.backend.updateObject(objectTemplate,
                                               objectInstance, changes)
                     pass
             elif objectInstance.changes[
                     'type'] == OBJECT_CHANGE_UPDATE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..."
                     # Group
                     for group in LBEGroup.objects.all():
                         if group.objectTemplate.id == objectTemplate.id:
                             GroupInstanceHelper(group).updateMember(
                                 obj.getObject(obj.instance.name))
                     self._modifyObject(objectTemplate, objectInstance,
                                        scope)
                 except BaseException as e:
                     print e
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..."
                     # Create object if not exists:
                     # Firstly, compute attributes values:
                     # Then, create it:
                     try:
                         self._createObject(objectTemplate, objectInstance)
                     except Exception as e:
                         print e
                         pass
                     pass
                     # Synced object:
                     objectTemplate.synced_at = django.utils.timezone.now()
                     objectTemplate.save()
     print ''
     print "   Upgrade Groups Objects:"
     for groupTemplate in LBEGroup.objects.all():
         for groupInstance in self.backend.searchObjectsToUpdate(
                 groupTemplate):
             grp = GroupInstanceHelper(groupTemplate, groupInstance)
             try:
                 scope = grp.callScriptClassMethod("search_scope")
             except BaseException:
                 scope = 0
             self._createParent(groupTemplate, grp)
             if groupInstance.changes[
                     'type'] == OBJECT_CHANGE_CREATE_OBJECT:
                 print "    |-> Group '\033[35m" + groupInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..."
                 try:
                     groupInstance.changes['set'][
                         grp.attributeName] = self._getRDN(
                             groupTemplate.objectTemplate,
                             groupInstance.changes['set'][
                                 grp.attributeName])
                     self._createObject(groupTemplate, groupInstance)
                     ###############################################
                     if not groupInstance.changes['set'] == {}:
                         groupInstance.changes['set'][
                             grp.attributeName] = self._getID(
                                 groupInstance.changes['set'][
                                     grp.attributeName])
                         groupInstance.attributes[
                             'cn'] = groupInstance.changes['set']['cn']
                         self.backend.updateObject(
                             groupTemplate, groupInstance, {
                                 'changes': {
                                     'set': {
                                         'cn': [groupInstance.displayName]
                                     },
                                     'type': -1
                                 }
                             })
                     ###############################################
                 except ldap.ALREADY_EXISTS:
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m already exists"
             elif groupInstance.changes[
                     'type'] == OBJECT_CHANGE_UPDATE_OBJECT:
                 try:
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..."
                     groupInstance.changes['set'][
                         grp.attributeName] = self._getRDN(
                             groupTemplate.objectTemplate,
                             groupInstance.changes['set'][
                                 grp.attributeName])
                     self._modifyObject(groupTemplate, groupInstance, scope)
                     ###############################################
                     groupInstance.changes['set'][
                         grp.attributeName] = self._getID(
                             groupInstance.changes['set'][
                                 grp.attributeName])
                     groupInstance.attributes['cn'] = groupInstance.changes[
                         'set']['cn']
                     self.backend.updateObject(
                         groupTemplate, groupInstance, {
                             'changes': {
                                 'set': {
                                     'cn': [groupInstance.displayName]
                                 },
                                 'type': -1
                             }
                         })
                     ###############################################
                 except BaseException as e:
                     print e
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..."
                     groupInstance.changes['set'][
                         grp.attributeName] = self._getRDN(
                             groupTemplate.objectTemplate,
                             groupInstance.changes['set'][
                                 grp.attributeName])
                     self._createObject(groupTemplate, groupInstance)
                     ###############################################
                     groupInstance.changes['set'][
                         grp.attributeName] = self._getID(
                             groupInstance.changes['set'][
                                 grp.attributeName])
                     groupInstance.attributes['cn'] = groupInstance.changes[
                         'set']['cn']
                     self.backend.updateObject(
                         groupTemplate, groupInstance, {
                             'changes': {
                                 'set': {
                                     'cn': [groupInstance.displayName]
                                 },
                                 'type': -1
                             }
                         })
                     ###############################################
             elif groupInstance.changes[
                     'type'] == OBJECT_CHANGE_DELETE_OBJECT:
                 print "    |-> Group '\033[35m" + groupInstance.displayName + "' is \033[33mdeleting\033[0m..."
                 self._deleteObject(groupTemplate, groupInstance)
     print "   End."
Example #4
0
 def save(self):
     print 'Checking for Objects which do not exist into LBE Backend but in LDAP Server:'
     for objectTemplate in LBEObjectTemplate.objects.all():
         objectHelper = LBEObjectInstanceHelper(objectTemplate)
         try:
             scope = objectHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         filter = '(&'
         for oc in objectHelper.callScriptClassMethod('object_classes'):
             filter += '(objectClass=' + oc + ')'
         filter += ')'
         print '\033[91m' + objectTemplate.name + '\033[0m: (\033[95m' + objectHelper.callScriptClassMethod("base_dn") + '\033[0m) using \033[95m' + filter + '\033[0m'
         objTarget = self.target.searchObjects(objectTemplate, scope)
         objBackend = self.backend.searchObjects(objectTemplate)
         number = 0
         for ot in objTarget:
             exist = False
             for ob in objBackend:
                 if ot.name == ob.name:
                     exist = True
                     break
             if not exist:
                 number += 1
                 print '=> Adding \033[95m' + ot.name + '\033[0m object into LBE Backend... '
                 print " values: " + str(ot.attributes)
                 try:
                     self.backend.createObject(objectTemplate, ot, True)
                     print "\033[92mDone.\033[0m\n"
                 except BaseException as e:
                     print "\033[91mFail.\033[0m"
                     print "''''''''"
                     print e
                     print "''''''''"
         if number == 0:
             print '<None>'
         # Synced object:
         objectTemplate.synced_at = django.utils.timezone.now()
         objectTemplate.save()
     print '.........................'
     print 'Checking for Groups which do not exist into LBE Backend but in Target:'
     for groupTemplate in LBEGroup.objects.all():
         groupInstance = GroupInstanceHelper(groupTemplate)
         try:
             scope = groupInstance.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         grpTarget = self.target.searchObjects(groupTemplate, scope)
         grpBackend = self.backend.searchObjects(groupTemplate)
         for gt in grpTarget:
             exist = False
             for gb in grpBackend:
                 if gt.name == gb.name:
                     exist = True
                     break
             if not exist:
                 # import only existing group into LBE config
                 try:
                     LBEGroup.objects.get(displayName__iexact=gt.displayName)
                 except BaseException:
                     continue
                 print '=> Adding \033[95m' + gt.name + '\033[0m group into LBE Backend... '
                 print " values: " + str(gt.attributes)
                 try:
                     if groupInstance.attributeName in gt.attributes:
                         gt.attributes[groupInstance.attributeName] = self._getID(gt.attributes[groupInstance.attributeName])
                     groupHelper = GroupInstanceHelper(groupTemplate, gt)
                     groupHelper.createTemplate(True)
                         #print " >\033[91mThis group does not exists in LBE Configuration Group.\033[0m"
                         #print " >\033[91mIn order to see, manage it, please create it using some extra attribute:"
                         #print "  >\033[91m'Display Name': \033[95m" + gt.name + "\033[0m"
                         #print " >\033[91mInto the Script file:"
                         #print "  >'DN Attribute': \033[95m" + groupHelper.callScriptClassMethod("base_dn") + "\033[91m"
                         #print "  >'Attribute Name' & 'Object Classes': as you wish.\033[0m"
                     print "\033[92mDone.\033[0m\n"
                 except BaseException as e:
                     print "\033[91mFail.\033[0m\n"
                     print "''''''''"
                     print e
                     print "''''''''"
         # Synced group:
         groupTemplate.synced_at = django.utils.timezone.now()
         groupTemplate.save()
     print "End."
Example #5
0
 def start(self):
     print "   Upgrade the Target server with the Backend server..."
     for objectTemplate in LBEObjectTemplate.objects.all():
         # need to check if we need to change (before making reconciliation) the RDN attribute
         self._changeRDN(objectTemplate)
         # And the objects class
         self._changeClass(objectTemplate)
         # We're looking for all objects with state = OBJECT_STATE_AWAITING_SYNC
         for objectInstance in self.backend.searchObjectsToUpdate(objectTemplate):
             # First of all, applies all changes stored in backend [ such Virtual attributes ]
             # & create the parent DN if not exist:
             obj = LBEObjectInstanceHelper(objectTemplate, objectInstance)
             try:
                 scope = obj.callScriptClassMethod("search_scope")
             except BaseException:
                 scope = 0
             self._createParent(objectTemplate, obj)
             # obj.compute(objectInstance)
             # then, upgrade:
             if objectInstance.changes["type"] == OBJECT_CHANGE_CREATE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..."
                     self._createObject(objectTemplate, objectInstance)
                 # TODO: We should have a target exception rather ldap
                 except ldap.ALREADY_EXISTS:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m already exists"
                     changes = {}
                     changes["status"] = OBJECT_STATE_SYNCED
                     changes["changes"] = {}
                     changes["changes"]["set"] = {}
                     changes["changes"]["type"] = -1
                     changes["synced_at"] = django.utils.timezone.now()
                     self.backend.updateObject(objectTemplate, objectInstance, changes)
                     pass
             elif objectInstance.changes["type"] == OBJECT_CHANGE_DELETE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "' is \033[33mdeleting\033[0m..."
                     self._deleteObject(objectTemplate, objectInstance)
                 except BaseException as e:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m does not exist."
                     changes = {}
                     changes["status"] = OBJECT_STATE_DELETED
                     changes["changes"] = {}
                     changes["changes"]["set"] = {}
                     changes["changes"]["type"] = -1
                     changes["synced_at"] = django.utils.timezone.now()
                     self.backend.updateObject(objectTemplate, objectInstance, changes)
                     pass
             elif objectInstance.changes["type"] == OBJECT_CHANGE_UPDATE_OBJECT:
                 try:
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..."
                     # Group
                     for group in LBEGroup.objects.all():
                         if group.objectTemplate.id == objectTemplate.id:
                             GroupInstanceHelper(group).updateMember(obj.getObject(obj.instance.name))
                     self._modifyObject(objectTemplate, objectInstance, scope)
                 except BaseException as e:
                     print e
                     print "    |-> Object '\033[35m" + objectInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..."
                     # Create object if not exists:
                     # Firstly, compute attributes values:
                     # Then, create it:
                     try:
                         self._createObject(objectTemplate, objectInstance)
                     except Exception as e:
                         print e
                         pass
                     pass
                     # Synced object:
                     objectTemplate.synced_at = django.utils.timezone.now()
                     objectTemplate.save()
     print ""
     print "   Upgrade Groups Objects:"
     for groupTemplate in LBEGroup.objects.all():
         for groupInstance in self.backend.searchObjectsToUpdate(groupTemplate):
             grp = GroupInstanceHelper(groupTemplate, groupInstance)
             try:
                 scope = grp.callScriptClassMethod("search_scope")
             except BaseException:
                 scope = 0
             self._createParent(groupTemplate, grp)
             if groupInstance.changes["type"] == OBJECT_CHANGE_CREATE_OBJECT:
                 print "    |-> Group '\033[35m" + groupInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..."
                 try:
                     groupInstance.changes["set"][grp.attributeName] = self._getRDN(
                         groupTemplate.objectTemplate, groupInstance.changes["set"][grp.attributeName]
                     )
                     self._createObject(groupTemplate, groupInstance)
                     ###############################################
                     if not groupInstance.changes["set"] == {}:
                         groupInstance.changes["set"][grp.attributeName] = self._getID(
                             groupInstance.changes["set"][grp.attributeName]
                         )
                         groupInstance.attributes["cn"] = groupInstance.changes["set"]["cn"]
                         self.backend.updateObject(
                             groupTemplate,
                             groupInstance,
                             {"changes": {"set": {"cn": [groupInstance.displayName]}, "type": -1}},
                         )
                     ###############################################
                 except ldap.ALREADY_EXISTS:
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m already exists"
             elif groupInstance.changes["type"] == OBJECT_CHANGE_UPDATE_OBJECT:
                 try:
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..."
                     groupInstance.changes["set"][grp.attributeName] = self._getRDN(
                         groupTemplate.objectTemplate, groupInstance.changes["set"][grp.attributeName]
                     )
                     self._modifyObject(groupTemplate, groupInstance, scope)
                     ###############################################
                     groupInstance.changes["set"][grp.attributeName] = self._getID(
                         groupInstance.changes["set"][grp.attributeName]
                     )
                     groupInstance.attributes["cn"] = groupInstance.changes["set"]["cn"]
                     self.backend.updateObject(
                         groupTemplate,
                         groupInstance,
                         {"changes": {"set": {"cn": [groupInstance.displayName]}, "type": -1}},
                     )
                     ###############################################
                 except BaseException as e:
                     print e
                     print "    |-> Group '\033[35m" + groupInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..."
                     groupInstance.changes["set"][grp.attributeName] = self._getRDN(
                         groupTemplate.objectTemplate, groupInstance.changes["set"][grp.attributeName]
                     )
                     self._createObject(groupTemplate, groupInstance)
                     ###############################################
                     groupInstance.changes["set"][grp.attributeName] = self._getID(
                         groupInstance.changes["set"][grp.attributeName]
                     )
                     groupInstance.attributes["cn"] = groupInstance.changes["set"]["cn"]
                     self.backend.updateObject(
                         groupTemplate,
                         groupInstance,
                         {"changes": {"set": {"cn": [groupInstance.displayName]}, "type": -1}},
                     )
                     ###############################################
             elif groupInstance.changes["type"] == OBJECT_CHANGE_DELETE_OBJECT:
                 print "    |-> Group '\033[35m" + groupInstance.displayName + "' is \033[33mdeleting\033[0m..."
                 self._deleteObject(groupTemplate, groupInstance)
     print "   End."
Example #6
0
 def save(self):
     print 'Checking for Objects which do not exist into LBE Backend but in LDAP Server:'
     for objectTemplate in LBEObjectTemplate.objects.all():
         objectHelper = LBEObjectInstanceHelper(objectTemplate)
         try:
             scope = objectHelper.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         filter = '(&'
         for oc in objectHelper.callScriptClassMethod('object_classes'):
             filter += '(objectClass=' + oc + ')'
         filter += ')'
         print '\033[91m' + objectTemplate.name + '\033[0m: (\033[95m' + objectHelper.callScriptClassMethod(
             "base_dn") + '\033[0m) using \033[95m' + filter + '\033[0m'
         objTarget = self.target.searchObjects(objectTemplate, scope)
         objBackend = self.backend.searchObjects(objectTemplate)
         number = 0
         for ot in objTarget:
             exist = False
             for ob in objBackend:
                 if ot.name == ob.name:
                     exist = True
                     break
             if not exist:
                 number += 1
                 print '=> Adding \033[95m' + ot.name + '\033[0m object into LBE Backend... '
                 print " values: " + str(ot.attributes)
                 try:
                     self.backend.createObject(objectTemplate, ot, True)
                     print "\033[92mDone.\033[0m\n"
                 except BaseException as e:
                     print "\033[91mFail.\033[0m"
                     print "''''''''"
                     print e
                     print "''''''''"
         if number == 0:
             print '<None>'
         # Synced object:
         objectTemplate.synced_at = django.utils.timezone.now()
         objectTemplate.save()
     print '.........................'
     print 'Checking for Groups which do not exist into LBE Backend but in Target:'
     for groupTemplate in LBEGroup.objects.all():
         groupInstance = GroupInstanceHelper(groupTemplate)
         try:
             scope = groupInstance.callScriptClassMethod("search_scope")
         except BaseException:
             scope = 0
         grpTarget = self.target.searchObjects(groupTemplate, scope)
         grpBackend = self.backend.searchObjects(groupTemplate)
         for gt in grpTarget:
             exist = False
             for gb in grpBackend:
                 if gt.name == gb.name:
                     exist = True
                     break
             if not exist:
                 # import only existing group into LBE config
                 try:
                     LBEGroup.objects.get(
                         displayName__iexact=gt.displayName)
                 except BaseException:
                     continue
                 print '=> Adding \033[95m' + gt.name + '\033[0m group into LBE Backend... '
                 print " values: " + str(gt.attributes)
                 try:
                     if groupInstance.attributeName in gt.attributes:
                         gt.attributes[
                             groupInstance.attributeName] = self._getID(
                                 gt.attributes[groupInstance.attributeName])
                     groupHelper = GroupInstanceHelper(groupTemplate, gt)
                     groupHelper.createTemplate(True)
                     #print " >\033[91mThis group does not exists in LBE Configuration Group.\033[0m"
                     #print " >\033[91mIn order to see, manage it, please create it using some extra attribute:"
                     #print "  >\033[91m'Display Name': \033[95m" + gt.name + "\033[0m"
                     #print " >\033[91mInto the Script file:"
                     #print "  >'DN Attribute': \033[95m" + groupHelper.callScriptClassMethod("base_dn") + "\033[91m"
                     #print "  >'Attribute Name' & 'Object Classes': as you wish.\033[0m"
                     print "\033[92mDone.\033[0m\n"
                 except BaseException as e:
                     print "\033[91mFail.\033[0m\n"
                     print "''''''''"
                     print e
                     print "''''''''"
         # Synced group:
         groupTemplate.synced_at = django.utils.timezone.now()
         groupTemplate.save()
     print "End."