예제 #1
0
파일: cmd.py 프로젝트: yvess/desk
 def create_files(self, dest=None, src=None):
     auth = auth_from_uri(self.settings.couchdb_uri)
     if hasattr(self.settings, 'src_client_ldif') and (
        self.settings.src_client_ldif):
         client_ldif = IspmanClientLDIF(
             open(self.settings.src_client_ldif, 'r'),
             sys.stdout, editor=auth[0]
         )
         client_ldif.parse()
         data = [(k, v) for k, v in client_ldif.clients.iteritems()]
         json_files = FilesForCouch(data, dest)
         json_files.create()
         dns_ldif = IspmanDnsLDIF(
             open(src, 'r'), sys.stdout, self.settings,
             clients_ldif=client_ldif, editor=auth[0]
         )
     else:
         dns_ldif = IspmanDnsLDIF(
             open(src, 'r'), sys.stdout, self.settings, editor=auth[0]
         )
     dns_ldif.parse()
     if self.settings.show_ips:
         for ip in dns_ldif.a_record_ips:
             try:
                 hostname = gethostbyaddr(ip)[0]
             except:
                 hostname = None
             print("ip:{} ({}), \ndomains:{}\n".format(
                 ip, hostname, dns_ldif.a_record_hosts[ip]))
     data = [[k, v] for k, v in dns_ldif.domains.iteritems()]
     docs_processor = DnsDocsProcessor(self.settings, data)
     docs_processor.process()
     json_files = FilesForCouch(data, dest, use_id_in_data=True)
     json_files.create()
예제 #2
0
파일: cmd.py 프로젝트: yvess/desk
class LdifPlainDnsCommand(SettingsCommand):
    def setup_parser(self, subparsers, config_parser):
        ldifplain_parser = subparsers.add_parser(
            'dns-ldifplain',
            help="""converts ldif files to plain text""",
            description="""Converts ldifs to plain text dns data for diff from dns-export"""
        )
        ldifplain_parser.add_argument(*config_parser['args'],
                                      **config_parser['kwargs'])
        ldifplain_parser.add_argument(
            "src",
            help="source of the ldif file with the DNS data",
        )

        ldifplain_parser.add_argument(
            "dest",
            help="dest of the plain text dns data file",
        )

        return ldifplain_parser

    def plain_text_records(self, dname, rtype, records):
        items = []
        if rtype in records:
            for record in records[rtype]:
                key_id, value_id = self.dns_ldif.structure_map[rtype]
                if rtype != 'mx':
                    key = record[key_id]
                    value = record[value_id]
                else:
                    key = "@"
                    value = record[key_id]
                if value == '.':
                    value = ''
                entry = u"{dname} {rtype} {key} {value}\n".format(
                    dname=dname, rtype=rtype.upper(), key=key, value=value
                )
                items.append(entry)
        return items

    def run(self):
        src, dest = self.settings.src, self.settings.dest
        output = []
        self.dns_ldif = IspmanDnsLDIF(
            open(src, 'r'), sys.stdout, self.settings
        )
        self.dns_ldif.parse()
        domains = [[k, v] for k, v in self.dns_ldif.domains.iteritems()]
        domains = sorted(domains, key=lambda x: x[0])
        for domain in domains:
            for rtype in ['a', 'aaaa', 'cname', 'mx', 'ns', 'txt', 'srv']:
                dname, records = domain[0], domain[1]
                if rtype == 'ns':
                    output.extend([u"%s NS @ %s\n" % (dname, n) for n in records['nameservers']])
                else:
                    output.extend(self.plain_text_records(dname, rtype, records))
        output.sort()
        with open(dest, 'w') as f:
            f.writelines(output)
예제 #3
0
파일: cmd.py 프로젝트: yvess/desk
 def run(self):
     src, dest = self.settings.src, self.settings.dest
     output = []
     self.dns_ldif = IspmanDnsLDIF(
         open(src, 'r'), sys.stdout, self.settings
     )
     self.dns_ldif.parse()
     domains = [[k, v] for k, v in self.dns_ldif.domains.iteritems()]
     domains = sorted(domains, key=lambda x: x[0])
     for domain in domains:
         for rtype in ['a', 'aaaa', 'cname', 'mx', 'ns', 'txt', 'srv']:
             dname, records = domain[0], domain[1]
             if rtype == 'ns':
                 output.extend([u"%s NS @ %s\n" % (dname, n) for n in records['nameservers']])
             else:
                 output.extend(self.plain_text_records(dname, rtype, records))
     output.sort()
     with open(dest, 'w') as f:
         f.writelines(output)