예제 #1
0
def main():
    logger = Factory.get_logger("cronjob")
    db = Factory.get('Database')()
    const = Factory.get("Constants")(db)
    account = Factory.get('Account')(db)
    auth_prefix, auth_method = "{crypt}", int(const.auth_type_md5_crypt)

    ldif = LDIFWriter('SERVICES', None)
    dn = ldif.getconf('dn')
    ldif.write_container()
    for username in ldif.getconf('users'):
        account.clear()
        try:
            account.find_by_name(username)
        except Errors.NotFoundError:
            logger.error("User '%s' not found" % username)
            sys.exit(1)
        passwd = None
        qh = QuarantineHandler.check_entity_quarantines(db, account.entity_id)
        if not (qh.should_skip() or qh.is_locked()):
            try:
                passwd = account.get_account_authentication(auth_method)
            except Errors.NotFoundError:
                logger.warn("Password not found for user %s", username)
        ldif.write_entry(
            "cn=%s,%s" % (username, dn), {
                'description': "Note: The password is maintained in Cerebrum.",
                'objectClass': ('applicationProcess', 'simpleSecurityObject'),
                'userPassword': auth_prefix + (passwd or "*locked")
            })
    ldif.close()
예제 #2
0
def main():
    logger = Factory.get_logger("cronjob")
    db = Factory.get('Database')()
    const = Factory.get("Constants")(db)
    account = Factory.get('Account')(db)
    auth_prefix, auth_method = "{crypt}", int(const.auth_type_md5_crypt)

    ldif = LDIFWriter('SERVICES', None)
    dn = ldif.getconf('dn')
    ldif.write_container()
    for username in ldif.getconf('users'):
        account.clear()
        try:
            account.find_by_name(username)
        except Errors.NotFoundError:
            logger.error("User '%s' not found" % username)
            sys.exit(1)
        passwd = None
        qh = QuarantineHandler.check_entity_quarantines(db, account.entity_id)
        if not (qh.should_skip() or qh.is_locked()):
            try:
                passwd = account.get_account_authentication(auth_method)
            except Errors.NotFoundError:
                logger.warn("Password not found for user %s", username)
        ldif.write_entry("cn=%s,%s" % (username, dn), {
            'description': "Note: The password is maintained in Cerebrum.",
            'objectClass': ('applicationProcess', 'simpleSecurityObject'),
            'userPassword': auth_prefix + (passwd or "*locked")})
    ldif.close()
예제 #3
0
 def open(self, which):
     fname = getattr(self.opts, which)
     if fname:
         if which == 'ldif':
             f = LDIFWriter('POSIX', fname, module=posixconf)
             if self.opts.user_spread:
                 f.write_container()
         else:
             f = SimilarSizeWriter(fname, "w")
             f.max_pct_change = 10
         return f
예제 #4
0
 def open(self, which):
     fname = getattr(self.opts, which)
     if fname:
         if which == 'ldif':
             f = LDIFWriter('POSIX', fname, module=posixconf)
             if self.opts.user_spread:
                 f.write_container()
         else:
             f = SimilarSizeWriter(fname, "w")
             f.max_pct_change = 10
         return f
def main():
    db = Factory.get('Database')()
    co = Factory.get('Constants')(db)
    arecord = ARecord.ARecord(db)
    dns_owner = DnsOwner.DnsOwner(db)

    get_id_mac = itemgetter('dns_owner_id', 'mac_adr')
    get_id_name = itemgetter('dns_owner_id', 'name')
    get_trait = itemgetter('entity_id', 'code', 'strval')
    trait2attr = {
        int(co.trait_dns_comment): 'uioHostComment',
        int(co.trait_dns_contact): 'uioHostContact',
    }

    ldif = LDIFWriter('HOSTS', None)
    logger.info('Start of hosts export to %s', ldif.f.name)
    ldif.write_container()
    base_dn = ldif.getconf('dn')

    id2attrs = defaultdict(dict)
    for entity_id, code, strval in imap(get_trait, dns_owner.list_traits(
            code=trait2attr.keys())):
        if strval:
            id2attrs[int(entity_id)][trait2attr[code]] = (strval,)

    arecords = defaultdict(set)
    for owner_id, mac in imap(get_id_mac, arecord.list_ext()):
        if mac:
            arecords[int(owner_id)].add(mac)

    done = set()
    for owner_id, name in sorted(imap(get_id_name, dns_owner.list())):
        owner_id, name = int(owner_id), name.rstrip('.')
        # We have both lowercase and uppercase versions of some host
        # names.  Ignore one, hostnames are case-insensitive in LDAP.
        key = name.lower()
        if key not in done:
            done.add(key)
            entry = {
                'host': (name,),
                'objectClass': ['uioHostinfo'],
                'uioHostMacAddr': arecords.get(owner_id, ()),
            }
            entry.update(id2attrs.get(owner_id, ()))
            ldif.write_entry("host={},{}".format(name, base_dn), entry)

    ldif.close()
    logger.info('Done')
예제 #6
0
def main():
    db = Factory.get('Database')()
    co = Factory.get('Constants')(db)
    arecord = ARecord.ARecord(db)
    dns_owner = DnsOwner.DnsOwner(db)

    get_id_mac  = itemgetter('dns_owner_id', 'mac_adr')
    get_id_name = itemgetter('dns_owner_id', 'name')
    get_trait   = itemgetter('entity_id', 'code', 'strval')
    trait2attr  = {int(co.trait_dns_comment): 'uioHostComment',
                   int(co.trait_dns_contact): 'uioHostContact'}

    ldif = LDIFWriter('HOSTS', None)
    ldif.write_container()
    base_dn = ldif.getconf('dn')

    id2attrs = defaultdict(dict)
    for entity_id, code, strval in imap(get_trait, dns_owner.list_traits(
            code=trait2attr.keys())):
        if strval:
            id2attrs[int(entity_id)][trait2attr[code]] = (iso2utf(strval),)

    arecords = defaultdict(set)
    for owner_id, mac in imap(get_id_mac, arecord.list_ext()):
        if mac:
            arecords[int(owner_id)].add(mac)

    done = set()
    for owner_id, name in sorted(imap(get_id_name, dns_owner.list())):
        owner_id, name = int(owner_id), name.rstrip('.')
        # We have both lowercase and uppercase versions of some host
        # names.  Ignore one, hostnames are case-insensitive in LDAP.
        key = name.lower()
        if key not in done:
            done.add(key)
            entry = {
                'host':           (name,),
                'objectClass':    ['uioHostinfo'],
                'uioHostMacAddr': arecords.get(owner_id, ())}
            entry.update(id2attrs.get(owner_id, ()))
            ldif.write_entry("host=%s,%s" % (name, base_dn), entry)

    ldif.close()