Пример #1
0
 def register_mac_address(fqdn, main_ip_address, main_mac_address, admin_ip_address, admin_mac_address):
     main_mac_address = main_mac_address.replace('-', ':').upper()
     admin_mac_address = admin_mac_address.replace('-', ':').upper()
     if main_ip_address:
         Host.objects.filter(fqdn=fqdn).update(main_ip_address=main_ip_address, main_mac_address=main_mac_address)
         Record.objects.filter(name=fqdn).update(content=main_ip_address)
     if admin_ip_address and admin_mac_address:
         domain_name = '%s%s' % (settings.PDNS_ADMIN_PREFIX, settings.PENATES_DOMAIN)
         long_admin_hostname = '%s.%s' % (fqdn.partition('.')[0], domain_name)
         Host.objects.filter(fqdn=fqdn) \
             .update(admin_ip_address=admin_ip_address, admin_mac_address=admin_mac_address)
         Domain.ensure_auto_record(admin_ip_address, long_admin_hostname, unique=True, override_reverse=False)
Пример #2
0
 def register_mac_address(fqdn, main_ip_address, main_mac_address, admin_ip_address, admin_mac_address):
     main_mac_address = main_mac_address.replace('-', ':').upper()
     admin_mac_address = admin_mac_address.replace('-', ':').upper()
     if main_ip_address:
         Host.objects.filter(fqdn=fqdn).update(main_ip_address=main_ip_address, main_mac_address=main_mac_address)
         Record.objects.filter(name=fqdn).update(content=main_ip_address)
     if admin_ip_address and admin_mac_address:
         domain_name = '%s%s' % (settings.PDNS_ADMIN_PREFIX, settings.PENATES_DOMAIN)
         long_admin_hostname = '%s.%s' % (fqdn.partition('.')[0], domain_name)
         Host.objects.filter(fqdn=fqdn) \
             .update(admin_ip_address=admin_ip_address, admin_mac_address=admin_mac_address)
         Domain.ensure_auto_record(admin_ip_address, long_admin_hostname, unique=True, override_reverse=False)
Пример #3
0
def get_host_keytab(request, hostname):
    """Register a computer:

        - create Kerberos principal
        - create private key
        - create public SSH key
        - create x509 certificate
        - create PTR DNS record
        - create A or AAAA DNS record
        - create SSHFP DNS record
        - return keytab

    :param request:
    :type request:
    :param hostname:
    :type hostname:
    :return:
    :rtype:
    """
    admin_ip_address = request.GET.get('ip_address')
    ip_address = request.META.get('HTTP_X_FORWARDED_FOR')
    short_hostname = hostname.partition('.')[0]
    domain_name = settings.PENATES_DOMAIN
    fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_INFRA_PREFIX, domain_name)
    # valid FQDN
    # create Kerberos principal
    principal = principal_from_hostname(fqdn, settings.PENATES_REALM)
    if principal_exists(principal):
        return HttpResponse('', status=403)
    else:
        add_principal(principal)
    Host.objects.get_or_create(fqdn=fqdn)
    # create private key, public key, public certificate, public SSH key
    entry = entry_from_hostname(fqdn)
    pki = PKI()
    pki.ensure_certificate(entry)
    # create DNS records
    if ip_address:
        Domain.ensure_auto_record(ip_address, fqdn, unique=True, override_reverse=True)
        Host.objects.filter(fqdn=fqdn).update(main_ip_address=ip_address)
    if admin_ip_address:
        admin_fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_ADMIN_PREFIX, domain_name)
        Domain.ensure_auto_record(admin_ip_address, admin_fqdn, unique=True, override_reverse=False)
        Host.objects.filter(fqdn=fqdn).update(admin_ip_address=admin_ip_address)
    if settings.OFFER_HOST_KEYTABS:
        return KeytabResponse(principal)
    return HttpResponse('', content_type='text/plain', status=201)
Пример #4
0
def set_dhcp(request, mac_address):
    hostname = hostname_from_principal(request.user.username)
    mac_address = mac_address.replace('-', ':').upper()
    remote_addr = request.META.get('HTTP_X_FORWARDED_FOR', '')
    admin_mac_address = request.GET.get('mac_address')
    admin_ip_address = request.GET.get('ip_address')
    admin_mac_address = admin_mac_address.replace('-', ':').upper()
    if remote_addr:
        Host.objects.filter(fqdn=hostname).update(main_ip_address=remote_addr, main_mac_address=mac_address)
        Record.objects.filter(name=hostname).update(content=remote_addr)
    if admin_ip_address and admin_mac_address:
        domain_name = '%s%s' % (settings.PDNS_ADMIN_PREFIX, settings.PENATES_DOMAIN)
        long_admin_hostname = '%s.%s' % (hostname.partition('.')[0], domain_name)
        Host.objects.filter(fqdn=hostname)\
            .update(admin_ip_address=admin_ip_address, admin_mac_address=admin_mac_address)
        Domain.ensure_auto_record(admin_ip_address, long_admin_hostname, unique=True, override_reverse=False)
    return HttpResponse(status=201)
Пример #5
0
 def register_host(short_hostname, main_ip_address=None, admin_ip_address=None):
     fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_INFRA_PREFIX, settings.PENATES_DOMAIN)
     principal = principal_from_hostname(fqdn, settings.PENATES_REALM)
     add_principal(principal)
     Host.objects.get_or_create(fqdn=fqdn)
     # create private key, public key, public certificate, public SSH key
     entry = entry_from_hostname(fqdn)
     pki = PKI()
     pki.ensure_certificate(entry)
     # create DNS records
     if main_ip_address:
         Domain.ensure_auto_record(main_ip_address, fqdn, unique=True, override_reverse=True)
         Host.objects.filter(fqdn=fqdn).update(main_ip_address=main_ip_address)
     if admin_ip_address:
         admin_fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_ADMIN_PREFIX, settings.PENATES_DOMAIN)
         Domain.ensure_auto_record(admin_ip_address, admin_fqdn, unique=True, override_reverse=False)
         Host.objects.filter(fqdn=fqdn).update(admin_ip_address=admin_ip_address)
     return principal
Пример #6
0
 def register_host(short_hostname, main_ip_address=None, admin_ip_address=None):
     fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_INFRA_PREFIX, settings.PENATES_DOMAIN)
     principal = principal_from_hostname(fqdn, settings.PENATES_REALM)
     add_principal(principal)
     Host.objects.get_or_create(fqdn=fqdn)
     # create private key, public key, public certificate, public SSH key
     entry = entry_from_hostname(fqdn)
     pki = PKI()
     pki.ensure_certificate(entry)
     # create DNS records
     if main_ip_address:
         Domain.ensure_auto_record(main_ip_address, fqdn, unique=True, override_reverse=True)
         Host.objects.filter(fqdn=fqdn).update(main_ip_address=main_ip_address)
     if admin_ip_address:
         admin_fqdn = '%s.%s%s' % (short_hostname, settings.PDNS_ADMIN_PREFIX, settings.PENATES_DOMAIN)
         Domain.ensure_auto_record(admin_ip_address, admin_fqdn, unique=True, override_reverse=False)
         Host.objects.filter(fqdn=fqdn).update(admin_ip_address=admin_ip_address)
     return principal