/[smeserver]/rpms/e-smith-tinydns/sme9/e-smith-tinydns-2.4.0_add_hostname_following_dhcpdleases_hostname.patch
ViewVC logotype

Annotation of /rpms/e-smith-tinydns/sme9/e-smith-tinydns-2.4.0_add_hostname_following_dhcpdleases_hostname.patch

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.6 - (hide annotations) (download)
Sat Jan 17 18:48:40 2015 UTC (9 years, 5 months ago) by stephdl
Branch: MAIN
CVS Tags: e-smith-tinydns-2_4_0-7_el6_sme, e-smith-tinydns-2_4_0-8_el6_sme
Changes since 1.5: +3 -3 lines
* Sat Jan 17 2015 stephane de Labrusse <stephdl@de-labrusse.fr> 2.4.0-7.sme
- Duplicate hostnames with different IP are not used, a warn in log is printed
- The server hostname can not be used by a dhcp client, a warn in log is printed
- [SME: 2388]

1 stephdl 1.3 diff -Nur e-smith-tinydns-2.4.0/createlinks e-smith-tinydns-2.4.0.bz2388/createlinks
2     --- e-smith-tinydns-2.4.0/createlinks 2006-03-14 23:01:42.000000000 +0100
3 stephdl 1.5 +++ e-smith-tinydns-2.4.0.bz2388/createlinks 2015-01-17 18:02:35.489764844 +0100
4     @@ -26,3 +26,19 @@
5 stephdl 1.1 service_link_enhanced("tinydns", "K65", "6");
6     service_link_enhanced("tinydns", "K65", "0");
7     service_link_enhanced("tinydns", "K65", "1");
8     +
9     +#link to services2adjust and templates2expand for dhcp-dns event
10     + for my $event (qw( dhcp-dns ))
11     + {
12     + # services to launch on event
13 stephdl 1.5 + safe_symlink("sigusr1", "root/etc/e-smith/events/$event/services2adjust/dnscache");
14 stephdl 1.1 + safe_symlink("sigusr1", "root/etc/e-smith/events/$event/services2adjust/tinydns");
15     + }
16     +
17     +#creation of dhcp-dns service
18     + safe_symlink("daemontools", "root/etc/rc.d/init.d/dhcp-dns");
19     + service_link_enhanced("dhcp-dns", "S85", "7");
20     + service_link_enhanced("dhcp-dns", "K65", "6");
21     + service_link_enhanced("dhcp-dns", "K65", "0");
22     + service_link_enhanced("dhcp-dns", "K65", "1");
23     + safe_symlink("/var/service/dhcp-dns/", "root/service/dhcp-dns");
24 stephdl 1.3 diff -Nur e-smith-tinydns-2.4.0/root/etc/e-smith/db/configuration/defaults/dhcp-dns/status e-smith-tinydns-2.4.0.bz2388/root/etc/e-smith/db/configuration/defaults/dhcp-dns/status
25     --- e-smith-tinydns-2.4.0/root/etc/e-smith/db/configuration/defaults/dhcp-dns/status 1970-01-01 01:00:00.000000000 +0100
26 stephdl 1.5 +++ e-smith-tinydns-2.4.0.bz2388/root/etc/e-smith/db/configuration/defaults/dhcp-dns/status 2015-01-16 20:02:12.050969025 +0100
27 stephdl 1.1 @@ -0,0 +1 @@
28     +enabled
29 stephdl 1.3 diff -Nur e-smith-tinydns-2.4.0/root/etc/e-smith/db/configuration/defaults/dhcp-dns/type e-smith-tinydns-2.4.0.bz2388/root/etc/e-smith/db/configuration/defaults/dhcp-dns/type
30     --- e-smith-tinydns-2.4.0/root/etc/e-smith/db/configuration/defaults/dhcp-dns/type 1970-01-01 01:00:00.000000000 +0100
31 stephdl 1.5 +++ e-smith-tinydns-2.4.0.bz2388/root/etc/e-smith/db/configuration/defaults/dhcp-dns/type 2015-01-16 20:02:12.050969025 +0100
32 stephdl 1.1 @@ -0,0 +1 @@
33     +service
34 stephdl 1.3 diff -Nur e-smith-tinydns-2.4.0/root/etc/e-smith/templates/var/service/tinydns/root/data/65dhcpARecords e-smith-tinydns-2.4.0.bz2388/root/etc/e-smith/templates/var/service/tinydns/root/data/65dhcpARecords
35     --- e-smith-tinydns-2.4.0/root/etc/e-smith/templates/var/service/tinydns/root/data/65dhcpARecords 1970-01-01 01:00:00.000000000 +0100
36 stephdl 1.6 +++ e-smith-tinydns-2.4.0.bz2388/root/etc/e-smith/templates/var/service/tinydns/root/data/65dhcpARecords 2015-01-17 19:45:33.892642388 +0100
37 stephdl 1.5 @@ -0,0 +1,107 @@
38 stephdl 1.1 +{
39 stephdl 1.5 + use strict;
40     + use warnings;
41     + use esmith::Logger;
42     + use esmith::ConfigDB;
43     + # we need perl-Time-TAI64 for timestamp conversion
44     + use Time::TAI64 qw /unixtai64/;
45 stephdl 1.1 + # we need perl-Date-Manip to convert to a unix timestamp
46     + use Date::Manip qw /UnixDate/;
47 stephdl 1.5 + use File::Copy;
48     +
49     + my $DB = esmith::ConfigDB->open_ro or die ("cannot open configuration database");
50     +
51     + #we start a hash for name because we don't want several same names & ip
52     + my %allocated_name = ();
53     + my %allocated_ip_dhcplease = ();
54 stephdl 1.1 +
55     + # copy of dhcpd.leases file to /tmp because working directly on the original
56     + # is not a good idea
57 stephdl 1.5 + copy("/var/lib/dhcpd/dhcpd.leases","/tmp/tmpdhcpd.leases")
58     + or die ("Error dhcp-dns Service : Unable to copy the /var/lib/dhcpd/dhcpd.leases");
59     +
60     + #we create a fonction because we want to write in log
61     + sub log2messages
62     + {
63     + my $message = shift;
64     + tie *FH, 'esmith::Logger';
65     + print FH "$message";
66     + close FH;
67     + }
68     +
69 stephdl 1.3 +
70     + #Text::DHCPparse forked because it doesn't allow to retrieve the end of lease
71     + #Only the start is found by the leaseparse of DHCPparse.pm s/starts/ends
72     + sub leaseparse {
73     + my $logfile = shift;
74     + my ( %list, $ip );
75     + open FILE, $logfile or die;
76     +
77     + while (<FILE>) {
78     + next if /^#|^$/;
79     + if (/^lease (\d+\.\d+\.\d+\.\d+)/) {
80     + $ip = $1;
81     + $list{$ip} = sprintf("%-17s", $ip);
82     + }
83     + /^\s*hardware ethernet (.*);/ && ($list{$ip} .= sprintf("%-19s", $1));
84     + /^\s*ends \d (.*);/ && ($list{$ip} .= sprintf("%-21s", $1));
85     + /^\s*(abandoned).*/ && ($list{$ip} .= sprintf("%-19s", $1));
86     + /^\s*client-hostname "(.*)";/ && ($list{$ip} .= sprintf("%-17s", $1));
87     + }
88     +
89     + close FILE;
90     +
91     + # make all entries 74 characters long to format properly
92     + foreach (keys %list) {
93     + #$list{$_} = sprintf("%-74s", $list{$_}) if (length$list{$_} < 76);
94     + $list{$_} = sprintf("%-74.74s", $list{$_});
95     + }
96     +
97     + return \%list;
98     +}
99     +
100 stephdl 1.1 + # now we parse the leases
101 stephdl 1.5 + my $return = leaseparse('/tmp/tmpdhcpd.leases');
102     + my ($ip,$time,$mac,$name);
103     +
104     + # variable with local domain value (default is mycompamy.local) and retrieve the server name
105     + my $localdomain = $DB->get_value('DomainName') or die ("Unable retrieve the DomainName property");
106     + my $servername = $DB->get_value('SystemName') or die ("Unable retrieve the SystemName property");
107 stephdl 1.1 +
108     + $OUT .= "# A records for dhcp hosts in $localdomain\n";
109     +
110     + foreach (keys %$return) {
111     + ($ip, $time, $mac, $name) = unpack("A17 A21 A19 A30", $return->{$_});
112 stephdl 1.5 +
113     + # when the dhcp lease is over $name is empty .. we want only non empty one
114     + if ( $name ne "" )
115     + {
116     + # we skip also ips & names already allocated
117     + unless (exists $allocated_ip_dhcplease{$ip} || exists $allocated_name{$name})
118 stephdl 1.1 + {
119     + # Convert lease end time to the format expected as
120     + # see: http://cr.yp.to/djbdns/tinydns-data.html
121     + my $ts = UnixDate($time, "%s");
122     + my $endtai = unixtai64($ts);
123     + $endtai =~ s/@//;
124     +
125     + # Determine TTL
126     + my $ttl = '';
127     + $ttl = 0 unless ($ts <= time);
128 stephdl 1.5 + $OUT .= "=$name.$localdomain:$ip:$ttl:$endtai\n" unless ($name eq $servername);
129 stephdl 1.6 + log2messages("The hostname of this server ($servername) is already in use with a different IP address in /var/lib/dhcpd/dhcpd.leases")
130 stephdl 1.5 + if ($name eq $servername);
131 stephdl 1.1 + }
132 stephdl 1.5 +
133     + $allocated_ip_dhcplease{$ip} = 1;
134     + $allocated_name{$name} ++;
135     +
136 stephdl 1.6 + log2messages("The hostname \"$name\" has already been assigned an IP address in /var/lib/dhcpd/dhcpd.leases")
137 stephdl 1.5 + if ($allocated_name{$name} >1);
138 stephdl 1.1 + }
139     + }
140     + # remove the temp file
141 stephdl 1.5 + unlink "/tmp/tmpdhcpd.leases"
142     + or log2messages("Error dhcp-dns Service : Unable to remove the /tmp/tmpdhcpd.leases");
143 stephdl 1.1 +}
144 stephdl 1.5 +
145 stephdl 1.3 diff -Nur e-smith-tinydns-2.4.0/root/var/service/dhcp-dns/dhcp-dns e-smith-tinydns-2.4.0.bz2388/root/var/service/dhcp-dns/dhcp-dns
146     --- e-smith-tinydns-2.4.0/root/var/service/dhcp-dns/dhcp-dns 1970-01-01 01:00:00.000000000 +0100
147 stephdl 1.5 +++ e-smith-tinydns-2.4.0.bz2388/root/var/service/dhcp-dns/dhcp-dns 2015-01-17 18:06:32.318810671 +0100
148     @@ -0,0 +1,45 @@
149 stephdl 1.1 +#!/usr/bin/perl
150 stephdl 1.5 +use strict;
151     +use warnings;
152 stephdl 1.1 +
153     +my $lease_file = "/var/lib/dhcpd/dhcpd.leases";
154     +
155     +# last modified time
156     +my $modtime = 0;
157     +
158     +# seconds to wait
159 stephdl 1.3 +my $update_freq = 30;
160 stephdl 1.1 +
161 stephdl 1.5 +#we create a function because we want to write in log
162     +sub log2messages
163     + {
164     + my $message = shift;
165     + tie *FH, 'esmith::Logger';
166     + print FH "$message";
167     + close FH;
168     + }
169     +
170 stephdl 1.1 +###########################################################################
171     +# Main Loop
172     +while (1) {
173     +
174     + # check the file's last updated time, if it's been changed, update
175     + # the DNS and save the modified time. This will ALWAYS run once - on
176     + # startup, since $modtime starts at zero.
177     +
178     + my @stats = stat ($lease_file);
179     + if ($stats[9] > $modtime) {
180     +
181     + $modtime = $stats[9];
182 stephdl 1.3 + system ("/usr/bin/sv 1 /service/tinydns") ==0
183 stephdl 1.5 + or log2messages('Error service dhcp-dns : Unable to restart /service/tinydns');
184 stephdl 1.3 +
185     + system ("/usr/bin/sv 1 /service/dnscache") ==0
186 stephdl 1.5 + or log2messages('Error service dhcp-dns : Unable to do restart /service/dnscache');
187 stephdl 1.1 + }
188     +
189     + # wait till next check time
190     + sleep $update_freq;
191     +
192     +} # end main
193     +###########################################################################
194 stephdl 1.3 diff -Nur e-smith-tinydns-2.4.0/root/var/service/dhcp-dns/run e-smith-tinydns-2.4.0.bz2388/root/var/service/dhcp-dns/run
195     --- e-smith-tinydns-2.4.0/root/var/service/dhcp-dns/run 1970-01-01 01:00:00.000000000 +0100
196 stephdl 1.5 +++ e-smith-tinydns-2.4.0.bz2388/root/var/service/dhcp-dns/run 2015-01-16 20:02:12.055969339 +0100
197 stephdl 1.1 @@ -0,0 +1,4 @@
198     +#!/bin/sh
199     +
200     +exec 2>&1
201     +exec /usr/bin/perl dhcp-dns

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed