mirror of
https://github.com/bklang/ldap2dns.git
synced 2025-10-26 14:04:14 -04:00
Added usage to scripts/data2ldap.pl
Added default serial of now() in YYYYMMDD01 format to data2ldap.pl for better compatibility with ldap2dns git-svn-id: https://svn.alkaloid.net/gpl/ldap2dns/trunk@158 06cd67b6-e706-0410-b29e-9de616bca6e9
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Create data from an LDAP directory service to be used for tinydns
|
||||
* $Id: ldap2dns.c,v 1.36 2005/12/07 19:03:11 bklang Exp $
|
||||
* $Id$
|
||||
* Copyright 2000-2005 by Jacob Rief <jacob.rief@tiscover.com>
|
||||
* Copyright 2005 by Ben Klang <ben@alkaloid.net>
|
||||
* License: GPL version 2. See http://www.fsf.org for details
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# schema for DNS data
|
||||
# include this file into Your slapd.conf for openldap-2.0.x
|
||||
# $Id: dns.schema,v 1.9 2001/11/06 08:01:51 config Exp $
|
||||
# $Id$
|
||||
|
||||
attributetype ( 1.3.6.1.4.1.7222.1.4.1
|
||||
NAME 'dnszonename'
|
||||
|
||||
@@ -17,7 +17,7 @@ BuildRequires: %OPENLDAPPKG%-devel
|
||||
Summary: LDAP to DNS gateway
|
||||
Packager: Ben Klang <ben@alkaloid.net>
|
||||
Vendor: Alkaloid Networks
|
||||
Name: ldap2dns
|
||||
Name: ldap2dns-new
|
||||
Version: %VERSION%
|
||||
Release: %RELEASE%
|
||||
License: GPL
|
||||
|
||||
@@ -7,7 +7,7 @@ TINYDNSDIR=$4
|
||||
|
||||
if [ -z "$LDAP2DNSUSER" -o -z "$LDAP2DNSLOGUSER" -o -z "$LDAP2DNSDIR" -o \
|
||||
-z "$TINYDNSDIR" ]; then
|
||||
echo "usage: $0 acct logacct /path/to/supervise /path/to/tinydns-supervise" >&2
|
||||
echo "usage: $0 acct logacct /path/to/supervise /path/to/tinydns-supervise" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
75
scripts/data2ldap.pl
Normal file → Executable file
75
scripts/data2ldap.pl
Normal file → Executable file
@@ -2,7 +2,7 @@
|
||||
# $Id$
|
||||
use strict;
|
||||
use warnings;
|
||||
#use POSIX qw(strftime):
|
||||
use POSIX qw(strftime);
|
||||
|
||||
my $file = $ARGV[0];
|
||||
my $output = $ARGV[1];
|
||||
@@ -12,15 +12,35 @@ my %domains; # Keep track of which domains for which we have
|
||||
# already written an SOA
|
||||
my $outfh;
|
||||
my $rejfh;
|
||||
#my $newserial = strftime("%Y%m%d01");
|
||||
my $newserial = strftime("%Y%m%d01", localtime);
|
||||
my $errorrecs = 0;
|
||||
|
||||
if (!defined($file)) {
|
||||
print STDERR "Must specify path to 'data' file to read\n";
|
||||
exit 1;
|
||||
print STDERR "\n";
|
||||
print STDERR " Must specify path to 'data' file to read\n";
|
||||
print STDERR "\n";
|
||||
usage();
|
||||
die("Should never get here\n");
|
||||
}
|
||||
|
||||
if (!defined($output) || $output eq '-') {
|
||||
if (!defined($output)) {
|
||||
print STDERR "\n";
|
||||
print STDERR " Must specify path to output LDIF data\n";
|
||||
print STDERR "\n";
|
||||
usage();
|
||||
die("Should never get here\n");
|
||||
}
|
||||
if (!defined($basedn)) {
|
||||
print STDERR "\n";
|
||||
print STDERR " Must specify a base DN as the third argument\n";
|
||||
print STDERR "\n";
|
||||
usage();
|
||||
die("Should never get here\n");
|
||||
}
|
||||
|
||||
if ($output eq '-') {
|
||||
$output = "/dev/stdout";
|
||||
# Rejects are already printed to STDERR by default. No need to duplicate
|
||||
$rejout = "/dev/null";
|
||||
} else {
|
||||
$rejout = "$output.rej";
|
||||
@@ -28,12 +48,6 @@ if (!defined($output) || $output eq '-') {
|
||||
open($outfh, ">$output") or die ("Unable to open $output for writing!");
|
||||
open($rejfh, ">$rejout") or die ("Unable to open $rejout for writing");
|
||||
|
||||
if (!defined($basedn)) {
|
||||
print STDERR "Must specify a base DN as the third argument\n";
|
||||
exit 1;
|
||||
}
|
||||
|
||||
|
||||
# We run in two iterations. The first attempts to enumerate all zones
|
||||
# for which we have records and create SOAs in LDAP. The reason for this is
|
||||
# zones are used as a container for all records so they must be in place before
|
||||
@@ -51,6 +65,7 @@ LINE: while(<DATA>) {
|
||||
/^-/ && do {
|
||||
# Found a disabled A record
|
||||
print STDERR "Ignoring disabled record: $_\n";
|
||||
$errorrecs++;
|
||||
print $rejfh "$_\n";
|
||||
next LINE;
|
||||
};
|
||||
@@ -86,7 +101,11 @@ LINE: while(<DATA>) {
|
||||
print $outfh "dnszonename: $domain\n";
|
||||
print $outfh "dnszonemaster: $master\n";
|
||||
print $outfh "dnsadminmailbox: $admin\n";
|
||||
if ($serial) { print $outfh "dnsserial: $serial\n"; }
|
||||
if ($serial) {
|
||||
print $outfh "dnsserial: $serial\n";
|
||||
} else {
|
||||
print $outfh "dnsserial: $newserial\n";
|
||||
}
|
||||
if ($refresh) { print $outfh "dnsrefresh: $refresh\n"; }
|
||||
if ($retry) { print $outfh "dnsretry: $retry\n"; }
|
||||
if ($expire) { print $outfh "dnsexpire: $expire\n"; }
|
||||
@@ -121,6 +140,7 @@ LINE: while(<DATA>) {
|
||||
print $outfh "dnszonename: $domain\n";
|
||||
print $outfh "dnszonemaster: $x\n";
|
||||
print $outfh "dnsadminmailbox: hostmaster.$domain\n";
|
||||
print $outfh "dnsserial: $newserial\n";
|
||||
if (defined($ttl)) { print $outfh "dnsttl: $ttl\n"; }
|
||||
if (defined($timestamp)) { print $outfh "dnstimestamp: $timestamp\n"; }
|
||||
if (defined($loc)) { print $outfh "dnslocation: $loc\n"; }
|
||||
@@ -288,6 +308,7 @@ LINE: while(<DATA>) {
|
||||
/^'/ && do {
|
||||
# Currently unsupported
|
||||
print STDERR "Ignoring unsupported TXT record: $_\n";
|
||||
$errorrecs++;
|
||||
print $rejfh "$_\n";
|
||||
next LINE;
|
||||
# Found an MX
|
||||
@@ -368,11 +389,20 @@ LINE: while(<DATA>) {
|
||||
/^:/ && do {
|
||||
# Found unsupported "unknown record"
|
||||
print STDERR "Ignoring \"unknown record\": $_\n";
|
||||
$errorrecs++;
|
||||
print $rejfh "$_\n";
|
||||
next LINE;
|
||||
}
|
||||
} # End for($_) block
|
||||
} # End LINE while(<DATA>)
|
||||
print STDERR "\n";
|
||||
if ($errorrecs) {
|
||||
print STDERR "$errorrecs records were found containing errors. Please inspect $rejout\n";
|
||||
print STDERR "for details. DNS TXT and TinyDNS \"unknown record\" formats are not supported\n";
|
||||
}
|
||||
|
||||
print STDERR "Completed successfully\n";
|
||||
exit 0;
|
||||
|
||||
sub getdomain
|
||||
{
|
||||
@@ -380,3 +410,24 @@ sub getdomain
|
||||
$fqdn =~ /\.*([A-Za-z0-9\-]+\.[A-Za-z0-9\-]+)\.*$/;
|
||||
return $1;
|
||||
}
|
||||
|
||||
sub usage
|
||||
{
|
||||
print STDERR "Usage: $0 <input> <output> <basedn>\n";
|
||||
print STDERR "\n";
|
||||
print STDERR "This script takes a standard TinyDNS \"data\" file as input\n";
|
||||
print STDERR "and generates an LDIF format output suitable for use with\n";
|
||||
print STDERR "this \"ldap2dns\" package. If any unsupported or otherwise erroring records\n";
|
||||
print STDERR "are found in the input, they are printed to both STDERR as well as\n";
|
||||
print STDERR "\"<output>.rej\" , Currently unsupported are DNS TXT and the\n";
|
||||
print STDERR "TinyDNS \"unknown record\" format. There is planned support for\n";
|
||||
print STDERR "DNS TXT and DNS SRV (in \"unknown record\" format) in the near future\n";
|
||||
print STDERR "\n";
|
||||
print STDERR "<output> may be either a filename or \"-\" for STDOUT. If STDOUT is used\n";
|
||||
print STDERR "as the output then no <output>.rej file is created and error records\n";
|
||||
print STDERR "are only printed to STDERR\n";
|
||||
print STDERR "\n";
|
||||
print STDERR "Example: $0 data data.ldif ou=DNS,dc=example,dc=com\n";
|
||||
print STDERR "\n";
|
||||
exit 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user