Ejemplo n.º 1
0
 def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
     assert isinstance(dn, DN)
     convert_nsaccountlock(entry_attrs)
     self.obj.convert_manager(entry_attrs, **options)
     self.obj.get_password_attributes(ldap, dn, entry_attrs)
     convert_sshpubkey_post(ldap, dn, entry_attrs)
     radius_dn2pk(self.api, entry_attrs)
     return dn
Ejemplo n.º 2
0
 def post_callback(self, ldap, entries, truncated, *args, **options):
     if options.get('pkey_only', False):
         return truncated
     for attrs in entries:
         self.obj.convert_manager(attrs, **options)
         self.obj.get_password_attributes(ldap, attrs.dn, attrs)
         convert_nsaccountlock(attrs)
         convert_sshpubkey_post(ldap, attrs.dn, attrs)
     return truncated
Ejemplo n.º 3
0
 def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
     assert isinstance(dn, DN)
     if options.get('random', False):
         try:
             entry_attrs['randompassword'] = unicode(
                 getattr(context, 'randompassword'))
         except AttributeError:
             # if both randompassword and userpassword options were used
             pass
     convert_nsaccountlock(entry_attrs)
     self.obj.convert_manager(entry_attrs, **options)
     self.obj.get_password_attributes(ldap, dn, entry_attrs)
     convert_sshpubkey_post(ldap, dn, entry_attrs)
     radius_dn2pk(self.api, entry_attrs)
     return dn
Ejemplo n.º 4
0
    def execute(self, *keys, **options):
        ldap = self.obj.backend
        dn = self.obj.get_dn(*keys, **options)
        attr_list = ['krbloginfailedcount', 'krblastsuccessfulauth', 'krblastfailedauth', 'nsaccountlock']

        disabled = False
        masters = []
        # Get list of masters
        try:
            (masters, truncated) = ldap.find_entries(
                None, ['*'], DN(('cn', 'masters'), ('cn', 'ipa'), ('cn', 'etc'), api.env.basedn),
                ldap.SCOPE_ONELEVEL
            )
        except errors.NotFound:
            # If this happens we have some pretty serious problems
            self.error('No IPA masters found!')
            pass

        entries = []
        count = 0
        for master in masters:
            host = master['cn'][0]
            if host == api.env.host:
                other_ldap = self.obj.backend
            else:
                other_ldap = ldap2(self.api, ldap_uri='ldap://%s' % host)
                try:
                    other_ldap.connect(ccache=os.environ['KRB5CCNAME'])
                except Exception, e:
                    self.error("user_status: Connecting to %s failed with %s" % (host, str(e)))
                    newresult = {'dn': dn}
                    newresult['server'] = _("%(host)s failed: %(error)s") % dict(host=host, error=str(e))
                    entries.append(newresult)
                    count += 1
                    continue
            try:
                entry = other_ldap.get_entry(dn, attr_list)
                newresult = {'dn': dn}
                for attr in ['krblastsuccessfulauth', 'krblastfailedauth']:
                    newresult[attr] = entry.get(attr, [u'N/A'])
                newresult['krbloginfailedcount'] = entry.get('krbloginfailedcount', u'0')
                if not options.get('raw', False):
                    for attr in ['krblastsuccessfulauth', 'krblastfailedauth']:
                        try:
                            if newresult[attr][0] == u'N/A':
                                continue
                            newtime = time.strptime(newresult[attr][0], '%Y%m%d%H%M%SZ')
                            newresult[attr][0] = unicode(time.strftime('%Y-%m-%dT%H:%M:%SZ', newtime))
                        except Exception, e:
                            self.debug("time conversion failed with %s" % str(e))
                            pass
                newresult['server'] = host
                if options.get('raw', False):
                    time_format = '%Y%m%d%H%M%SZ'
                else:
                    time_format = '%Y-%m-%dT%H:%M:%SZ'
                newresult['now'] = unicode(strftime(time_format, gmtime()))
                convert_nsaccountlock(entry)
                if 'nsaccountlock' in entry:
                    disabled = entry['nsaccountlock']
                self.obj.get_preserved_attribute(entry, options)
                entries.append(newresult)
                count += 1
Ejemplo n.º 5
0
 def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
     convert_nsaccountlock(entry_attrs)
     self.post_common_callback(ldap, dn, entry_attrs, **options)
     self.obj.get_preserved_attribute(entry_attrs, options)
     return dn
Ejemplo n.º 6
0
 def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
     convert_nsaccountlock(entry_attrs)
     self.post_common_callback(ldap, dn, entry_attrs, **options)
     return dn
Ejemplo n.º 7
0
 def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
     convert_nsaccountlock(entry_attrs)
     self.post_common_callback(ldap, dn, entry_attrs, **options)
     self.obj.get_preserved_attribute(entry_attrs, options)
     return dn
Ejemplo n.º 8
0
    def execute(self, *keys, **options):
        ldap = self.obj.backend
        dn = self.obj.get_either_dn(*keys, **options)
        attr_list = ['krbloginfailedcount', 'krblastsuccessfulauth', 'krblastfailedauth', 'nsaccountlock']

        disabled = False
        masters = []
        # Get list of masters
        try:
            (masters, truncated) = ldap.find_entries(
                None, ['*'], DN(('cn', 'masters'), ('cn', 'ipa'), ('cn', 'etc'), api.env.basedn),
                ldap.SCOPE_ONELEVEL
            )
        except errors.NotFound:
            # If this happens we have some pretty serious problems
            self.error('No IPA masters found!')
            pass

        entries = []
        count = 0
        for master in masters:
            host = master['cn'][0]
            if host == api.env.host:
                other_ldap = self.obj.backend
            else:
                other_ldap = ldap2(self.api, ldap_uri='ldap://%s' % host)
                try:
                    other_ldap.connect(ccache=os.environ['KRB5CCNAME'])
                except Exception as e:
                    self.error("user_status: Connecting to %s failed with %s" % (host, str(e)))
                    newresult = {'dn': dn}
                    newresult['server'] = _("%(host)s failed: %(error)s") % dict(host=host, error=str(e))
                    entries.append(newresult)
                    count += 1
                    continue
            try:
                entry = other_ldap.get_entry(dn, attr_list)
                newresult = {'dn': dn}
                for attr in ['krblastsuccessfulauth', 'krblastfailedauth']:
                    newresult[attr] = entry.get(attr, [u'N/A'])
                newresult['krbloginfailedcount'] = entry.get('krbloginfailedcount', u'0')
                if not options.get('raw', False):
                    for attr in ['krblastsuccessfulauth', 'krblastfailedauth']:
                        try:
                            if newresult[attr][0] == u'N/A':
                                continue
                            newtime = time.strptime(newresult[attr][0], '%Y%m%d%H%M%SZ')
                            newresult[attr][0] = unicode(time.strftime('%Y-%m-%dT%H:%M:%SZ', newtime))
                        except Exception as e:
                            self.debug("time conversion failed with %s" % str(e))
                            pass
                newresult['server'] = host
                if options.get('raw', False):
                    time_format = '%Y%m%d%H%M%SZ'
                else:
                    time_format = '%Y-%m-%dT%H:%M:%SZ'
                newresult['now'] = unicode(strftime(time_format, gmtime()))
                convert_nsaccountlock(entry)
                if 'nsaccountlock' in entry:
                    disabled = entry['nsaccountlock']
                self.obj.get_preserved_attribute(entry, options)
                entries.append(newresult)
                count += 1
            except errors.NotFound:
                self.obj.handle_not_found(*keys)
            except Exception as e:
                self.error("user_status: Retrieving status for %s failed with %s" % (dn, str(e)))
                newresult = {'dn': dn}
                newresult['server'] = _("%(host)s failed") % dict(host=host)
                entries.append(newresult)
                count += 1

            if host != api.env.host:
                other_ldap.disconnect()

        return dict(result=entries,
                    count=count,
                    truncated=False,
                    summary=unicode(_('Account disabled: %(disabled)s' %
                        dict(disabled=disabled))),
        )