diff --git a/contrib/DNSchrony/COPYING b/contrib/DNSchrony/COPYING deleted file mode 100644 index d511905..0000000 --- a/contrib/DNSchrony/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/contrib/DNSchrony/DNSchrony.pl b/contrib/DNSchrony/DNSchrony.pl deleted file mode 100755 index 57bf686..0000000 --- a/contrib/DNSchrony/DNSchrony.pl +++ /dev/null @@ -1,583 +0,0 @@ -#!/usr/bin/perl -# Copyright (C) Paul Elliott 2002 -my($copyrighttext) = <<'EOF'; -# Copyright (C) Paul Elliott 2002 -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# SEE COPYING FOR DETAILS -EOF - -#modules we use. - -use Socket; -use Getopt::Std; -use Net::DNS; -use Tie::Syslog; -use File::Temp qw/ :mktemp /; -use File::Copy; - -local($res) = new Net::DNS::Resolver; - -#dns lookup of IP address. -#returns ip or errorstring. -sub gethostaddr($) #get ip address from host -{ - my($host) = shift; - $query = $res->search($host); - if ($query) { - foreach $rr ($query->answer) { - next unless $rr->type eq "A"; - print $rr->address, "\n" if $pedebug; - return $rr->address; - } - } else { - print "query failed: ", $res->errorstring, "\n" if $pedebug; - return $res->errorstring; - } - -} - -#send messages to syslog - -sub Log($$) - { - if ($log) { - my($level) = shift; - my($mess) =shift; - - tie *MYLOG, 'Tie::Syslog',$level,$0,'pid','unix'; - print MYLOG $mess; - - untie *MYLOG; - } - } - -#send message to output or syslog -#and die. - -sub BadDie($) -{ - my($myerr) =$!; - my($mess)=shift; - - if($log){ - tie *MYLOG, 'Tie::Syslog','local0.err',$0,'pid','unix'; - print MYLOG $mess; - print MYLOG $myerr; - - untie *MYLOG; - - } else { - print "$mess\n$myerr\n"; - } - die $mess; -} - -sub isIpAddr($) #return true if looks like ip address -{ - my($ip) = shift; - return 1 if ( $ip =~ m/$ipOnlyPAT/ ); - return 0; -} -sub isHostname($) #return true if looks like ip address -{ - my($ip) = shift; - return 1 if ( $ip =~ m/$hostnameOnlyPAT/ ); - return 0; -} - -#send commands to chronyc by piping. -sub chronyc($) #send commands to chronyc -{ - my($command) = shift; - my($err) = "/var/tmp/chronyc.log"; - my($chronyP) = "/usr/local/bin/chronyc"; - open(CHRONY, "| $chronyP 1>$err 2>&1"); - - print CHRONY "$passwd$command\n"; - - close(CHRONY); - - Log('local0.info',"chronyc command issued=$command"); - #look at status lines till return bad. - open( IN, "<$err"); - my($status); - while () { - $status = $_; - - unless ( m/\A200 OK/ ) { - last; - } - - } - - $status ="" if ( $status =~ m/\A200 OK/ ); - close(IN); - unlink $err; - Log('local0.info',"chronyc results=$status"); - return $status; - -} - -#common patterns - -# an ip address patern -local($ipPAT) = qr/\d{1,3}(?:\.\d{1,3}){3}/; -# an hostname pattern -local($hostnamePAT) = qr/\w+(?:\.\w+)*/; -#line with hostname only -local($hostnameOnlyPAT) = qr/\A$hostnamePAT\Z/; -#line with ip address only -local($ipOnlyPAT) =qr/\A$ipPAT\Z/; - -#options hash -my(%opts); - - -getopts('nuadslPSC', \%opts); - -local($log) = ( $opts{'l'} ) ? 1 : 0; - -my($offline) = !( $opts{'n'} ) ; -my($offlineS) = ( $opts{'n'} ) ? " " : " offline" ; - -# paul elliotts secret debug var. no one will ever find out about it. -local($pedebug)=( ($ENV{"PAULELLIOTTDEBUG"}) or ($opts{P}) ); - -if ($opts{C}) { - - print $copyrighttext; - exit 0; -} - - -print <<"EOF" unless $opts{'S'}; -$0, Copyright (C) 2002 Paul Elliott -$0 comes with ABSOLUTELY NO WARRANTY; for details -invoke $0 -C. This is free software, and you are welcome -to redistribute it under certain conditions; invoke $0 -C -for details. -EOF - - - -local($passwd); - -# password to send to chronyc -my($pl) = $ENV{"CHRONYPASSWORD"}; - -#password comand to send to chronyc -if ( $pl ) { - $passwd = "password $pl\n"; -} else { - $passwd = ""; -} -print "passwd=$passwd\n" if ($pedebug); - -my(%host2ip); - -# hash of arrays. host2ip{$host}[0] is ip address for this host -# host2ip{$host}[1] is rest of paramenters for this host exc offline. - -#if debuging do chrony.conf in current directory. -my($listfile) =( ($pedebug) ? "./chrony.conf" : "/etc/chrony.conf") ; - -# This section reads in the old data about -# hostnames IP addresses and server parameters -# data is stored as it would be in chrony.conf -# file i.e.: -#># HOSTNAME -#>server IPADDR minpoll 5 maxpoll 10 maxdelay 0.4 offline -# -# the parameter offline is omitted if the -n switch is specified. -# first parameter is the filename of the file usually -# is /etc/DNSchrony.conf -# this is where we store the list of DNS hosts. -# hosts with static IP address shold be kept in chrony.conf - -# this is header that marks dnyamic host section -my($noedithead)=<<'EOF'; -## DNSchrony dynamic dns server section. DO NOT EDIT -## per entry FORMAT: -## |--------------------------------------------| -## |#HOSTNAME | -## |server IP-ADDRESS extra-params [ offline ] | -## |--------------------------------------------| -EOF -#patern that recognizes above. -my($noeditheadPAT) = -qr/\#\#\s+DNSchrony\s+dynamic\s+dns\s+server\s+section\.\s+DO\s+NOT\s+EDIT\s*/; - -#end of header marker. -my($noeditheadend)=<<'EOF'; -## END OF DNSchrony dynamic dns server section. -EOF - -#pattern that matches above. -my($noeditheadendPAT)= -qr/\#\#\s+END\s+OF\s+DNSchrony\s+dynamic\s+dns\s+server\s+section.\s*/; - -#array to hold non dns portion of chrony.conf -my(@chronyDconf); - - -my($ip); -my($rest); -my($host); - -# for each entry in the list of hosts.... -open(READIN, "<$listfile") or BadDie("Can not open $listfile"); - -# read till dynamic patern read save in @chronyDconf - -while ( ) { - - my($line) = $_; - - last if ( m/\A$noeditheadPAT\Z/ ); - - push(@chronyDconf,$line); - -} - -while ( ) { - - #end loop when end of header encountered - last if ( m/\A$noeditheadendPAT/ ); - - # parse the line giving ip address, extra pamamters, and host - #do host comment line first - ($host) = m{ - \A\#\s* - ($hostnamePAT) - \s*\z - }xio; - - #no match skip this line. - next unless ( $host ); - - # read next line - $_ = ; - - # parse out ip address extra parameters. - ($ip,$rest) = - m{ - \A - \s* - server #server comand - \s+ - ($ipPAT) #ip address - (?ixo: \s ) - \s* - ( - (?(?! - (?iox: offline )? #skip to offline # - \s* #or # - \Z - ).)* - ) - (?ixo: - \s* - (?ixo: offline )? #consume to # - \s* - \Z - ) - }xio ; - - #if failure again. - next unless ( $ip ); - - $rest =~ s/\s*\z//; #remove trail blanks - #from parameters - # store the data in the list - # key is host name value is - # array [0] is ip address - # [1] is other parameters - $host2ip{$host} = [$ip,$rest] ; - print "ip=$ip rest=$rest host=$host<\n" if $pedebug; - -} -#read trailing line into @chronyDconf -while ( ) { - - push(@chronyDconf,$_); - -} - -close(READIN) or BadDie("can not close $listfile"); - -#if the add command: -# command can be HOST=IPADDRESS OTHER_PARAMETERS -# means add the server trust the ip address geven with out a dns lookup -# good for when dns is down but we know the ip addres -# or -# HOST OTHER_PARAMETERS -#we lookup the ip address with dns. - -if ($opts{'a'}) { - my($param)= shift; - - - # parse the param is it hostname - if ( ($host,$ip) = $param =~ m/\A($hostnamePAT)=($ipPAT)\Z/ ) { - printf "ip=$ip host=$host\n" if ($pedebug); - } else { - - $host = $param; - - # get the ip address - $ip = gethostaddr($host); - - if ( ! isIpAddr($ip) or ! isHostname($host) ) { - print "query failed: ", $ip, "host=$host\n" if $pedebug; - exit 1; - } - } - printf "ip=$ip host=$host\n" if ($pedebug); - - # add the server using chronyc - my($status) = chronyc("add server $ip $rest"); - if ($status) { #chronyc error - print "chronyc failed, status=$status\n"; - exit 1; - } - - # get rest of arguements - $rest = join( ' ', @ARGV); - print "rest=$rest\n" if ($pedebug); - - #save node in hash - $host2ip{$host} = [$ip,$rest] ; - print "ip=$ip rest=$rest host=$host<\n" if $pedebug; - -} - -#delete command if arguement is ip address -#just delete it -#if a hostname look it up -#then delete it. - -if ($opts{'d'}) { - $host = shift; - - #get host name is it ap address - if ( isIpAddr($host) ) { # if ip address - my($hostIT); - my($found) =0; - foreach $hostIT (keys(%host2ip) ) { #search for match - if ( $host2ip{$hostIT}[0] eq $host) { - $found=1; #record match - } - } #end of search - if ($found) { #if match found - my($status) = chronyc("delete $host"); #chronyc - if ($status) { #chronyc error - print "chronyc failed, status=$status\n"; - exit 1; - } else { #reiterate - foreach $hostIT (keys(%host2ip) ) { - if ( $host2ip{$hostIT}[0] eq $host) { - delete $host2ip{$hostIT}; #deleting match hosts - } - } - - } - - } - } else { #else not ip address - #must be hostname - if ( ! $host2ip{$host} ) { - print "No such host as $host listed\n"; - exit 1; - } - #get ip address - $ip=gethostaddr($host); - if ( ! isIpAddr($ip) ) { #no ip address - print "query failed: ", $ip, "\n" if $pedebug; - exit 1; - } - - printf "ip=$ip host=$host\n" if ($pedebug); - - my($listed_host_ip) = $host2ip{$host}[0]; # get the ip address saved - - if ( $ip ne $listed_host_ip) { - print - "Info: listed host ip=>$listed_host_ip". - "< is different from DNS ip=>$ip<\n"; - $ip = $listed_host_ip; - } - - # delete the server - my($status) = chronyc("delete $listed_host_ip\n"); - - if ($status) { - print "chronyc failed, status=$status\n"; - exit 1; - } - #delete table entry - delete$host2ip{$host}; - } - -} - -#update for each host who's dns ip address has changed -#delete the old server and add the new. update the record. -if ($opts{'u'}) { - my($command); - - my(%prospective); # store new IP address we - #are thinking of changing. - - Log('local0.info', - "Now searching for modified DNS entries."); - - foreach $host (keys(%host2ip)) { #for each listed host - my($old_ip) = $host2ip{$host}[0]; #get old ip - $rest = $host2ip{$host}[1]; #extra params - - $ip = gethostaddr($host); #get new ip from dns - #if error - if ( ! isIpAddr($ip) or ! isHostname($host) ) { - print "query failed: ", $ip, "host=$host\n"; - - Log('local0.err',"query failed: ". $ip . "host=$host"); - - exit 1; - } - - next if($ip eq $old_ip); #if ip not changed, skip - - Log('local0.info',"Ip address for $host has changed. Old IP address=". - "$old_ip, new IP address=$ip"); - # add command to delete old host, add the new. - $command = $command . "delete $old_ip\n" . - "add server $ip $rest\n"; - - # we are now thinking about changing this host ip - $prospective{$host} = [$ip,$rest]; - } - # submit all the accumulated chronyc commands if any. - if ($command) { - $status = chronyc($command); - if ($status) { - print "chronyc failed, status=$status\n"; - Log('local0.err',"query failed: ". $ip . "host=$host"); - exit 1; - } - } else { #if no commands exit - exit 0; #because no rewrite of file needed - } - - #copy prospective modifications back into main table. - #we now know that all these mods were done with chronyc - foreach $host (keys(%prospective)) { - my($ip) = $prospective{$host}[0]; - $rest = $prospective{$host}[1]; - $host2ip{$host} = [$ip,$rest]; - } -} - -#starting for each entry we have read in from the old list -# add the server in chronyc -# this option is seldom used. - -if ($opts{'s'}) { - my($command)=""; - - foreach $host (keys(%host2ip)) { - $command = $command . "add server $host2ip{$host}[0] ". - "$host2ip{$host}[1]\n"; - } - my($status) = chronyc($command); - if ($status) { - print "chronyc failed, status=$status\n"; - exit 1; - } - -} -# write out the data file in format -#># HOSTNAME -#>server IPADDRESS extra parameters [offline] -# offline is omitted if -n switch is specified. - -my(@value); -my($such); -{ - # to start out we write to temporary file. - (my($writeout) , my($outname)) = mkstemp( "${listfile}.outXXXXXXX"); - - $outname or BadDie("can not open for $listfile"); - - - # save the chrony.conf part! - # and write the DYNAMIC header - print $writeout @chronyDconf, $noedithead; - - - # for each entry - foreach $host (keys(%host2ip) ){ - - #write the record - - # write the comment that indicates the hostname - # and the server command. - print $writeout - "\# $host\nserver $host2ip{$host}[0] $host2ip{$host}[1]${offlineS}\n" ; - - print - "server $host2ip{$host}[0] $host2ip{$host}[1]${offlineS}\# $host\n" - if $pedebug; - - } - - #WRITE THE end of dnyamic marker comment - print $writeout $noeditheadend; - - # close the output file which was a temporary file. - close($writeout) or BadDie("can not close $outname"); - - # we now begin a intracate dance to make the the temporary - # the main chrony.conf - # - # if there is a chrony.conf.BAK save it to a temporary. - # rename chrony.conf to chrony.conf.BAK - # rename the temporary to chrony.conf - # if there already was a chrony.conf.BAK, unlink the copy of this. - - my($backname) = "$listfile\.BAK"; - my($backplain) = ( -f $backname ); - my($saveback); - #if chrony.conf.BAK exists rename to a temporary. - if ($backplain ) { - - $saveback = mktemp("${backname}.bakXXXXXXX"); - move($backname,$saveback) or - BadDie "unable to move $backname to $savename"; - - } - - # rename old chrony.conf to chrony.conf.BAK - move($listfile,$backname) or - BadDie "unable to move $listfile to $backname"; - - # rename our output to chrony.conf - move($outname,$listfile) or - BadDie "unable to move $outname to $listfile"; - - #if there was a temporary chrony.conf.BAK that we saved to temp - #unlink it - unlink($saveback) or BadDie "unable to unlink $saveback" if($backplain); - -} diff --git a/contrib/DNSchrony/DNSchronyADD b/contrib/DNSchrony/DNSchronyADD deleted file mode 100755 index fc9858b..0000000 --- a/contrib/DNSchrony/DNSchronyADD +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/bash - -# $1 is chrony password. -# $2 is hostname to add or hostname=ipaddres -# $3-$9 is rest of extra server parameters - -FIRST="$1" -HOST="$2" -shift 2 - -#remaining parameters a the other paramaters to server command -#excluding "offline" -ARGS="$*" - -#if none use default taken from chrony documentation. -DEF="minpoll 5 maxpoll 10 maxdelay 0.4" - -DARGS=${ARGS:-$DEF} - -CHRONYPASSWORD=$FIRST \ -/usr/local/bin/DNSchrony.pl -a "$HOST" "$DARGS" diff --git a/contrib/DNSchrony/DNSchronyDELETE b/contrib/DNSchrony/DNSchronyDELETE deleted file mode 100755 index e443c9b..0000000 --- a/contrib/DNSchrony/DNSchronyDELETE +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/bash - -# $1 is chrony password. -# $2 host to be deleted if ip nn.n.n.n then no DNS used - -CHRONYPASSWORD=$1 \ -/usr/local/bin/DNSchrony.pl -d $2 diff --git a/contrib/DNSchrony/DNSchronyUPDATE b/contrib/DNSchrony/DNSchronyUPDATE deleted file mode 100755 index 14cbceb..0000000 --- a/contrib/DNSchrony/DNSchronyUPDATE +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/bash - -# $1 is chrony password. - - -CHRONYPASSWORD=$1 \ -/usr/local/bin/DNSchrony.pl -ulS diff --git a/contrib/DNSchrony/README b/contrib/DNSchrony/README deleted file mode 100644 index 05f45b5..0000000 --- a/contrib/DNSchrony/README +++ /dev/null @@ -1,166 +0,0 @@ - Copyright (C) Paul Elliott 2002 - - -DNSchrony.pl version -2.0 - -Problem: If you look at the list of secondary NTP servers: -http://www.eecis.udel.edu/~mills/ntp/clock2.htm - -you will find statements like this: - -"Note: IP addresses are subject to change; please use DNS" - -These servers represent a problem for chrony. Chrony is a program -designed to work on hosts with an intermittent connection to the -internet. Often no DNS is available when chrony starts. As chrony -is currently designed, chronyd never sees a DNS host name. If a -user specifies one when using chronyc's "add server" command, the -DNS lookup is done by chronyc and an IP address is passed to chronyd. - -One can imagine I suppose, a redesign to chrony in which chronyd -keeps track of DNS changes. But this has problems, all the time -chronyd is fooling around with DNS, it would not be keeping track -of its prime function, what the clocks and NTP servers are saying. -This could result in poorer performance. Or perhaps you say that -chronyd should be multi threaded. One thread to fool with DNS -and another to keep track of time. But this introduces a great -deal of complexity, and complexity is the enemy of elegant robust -code. Besides, Richard probably has better things to do. - -I have attempted to address this problem with a humble perl script, -which I now release under the GPL: DNSchrony.pl - -PLEA FOR HELP FROM EXPERIENCED PERL HACKERS. - -Please go thru the code and find errors and improvements. -I am not quite an polished perl hacker. Please fix bugs and -make improvements. It needs better documentation. Someone -who knows how, put in some POD. - -END OF PLEA - -Philosophy of DNSchrony.pl: keep a list of servers that use -DNS. From time to time, hopefully when DNS is up, go thru -the list lookup all the hostnames and see if any ip addresses have -changed. If any have changed, update our list and do chronyc -"delete" and "add server" commands so that chronyd now talks to -the right NTP server. - -Additional nuance: keep the list in /etc/chrony.conf in the -form of comments starting with "#" and "server" commands -legal in a chrony.conf file. Format of a list entry: - -# hostname -server IP-ADDRESS extra server parameters - -These entries are delimited by special comments that allow -DNSchrony.pl to find them and also tell humans not to mess with them. - -Example of such a section of a chrony.conf file: - -dumpdir /var/log/chrony -rtcfile /etc/chrony.rtc - -## DNSchrony dynamic dns server section. DO NOT EDIT -## per entry FORMAT: -## |--------------------------------------------| -## |#HOSTNAME | -## |server IP-ADDRESS extra-params [ offline ] | -## |--------------------------------------------| -# tock.greyware.com -server 208.14.208.44 minpoll 5 maxpoll 10 maxdelay 0.4 offline -# tick.greyware.com -server 208.14.208.19 minpoll 5 maxpoll 10 maxdelay 0.4 offline -# ntppub.tamu.edu -server 128.194.254.9 minpoll 5 maxpoll 10 maxdelay 0.4 offline -## END OF DNSchrony dynamic dns server section. - -This allows the list of dynamic DNS servers to be preserved -when chronyd is stoped/started. - -All servers that do not have ip addresses subject to change -should be put in the regular part of chrony.conf as described -in the chrony documentation. - -Security philosophy: DNSchrony does no security checking but -relies on other security factors. - -Users without the privilege to modify /etc/chrony.conf and the -directory /etc will be unable to use DNSchrony to do so, because -of file protections. DNSchrony passes thru passwords to chronyc. -Users that do not know the correct chronyc password will be -unable to get chronyd do do anything. Thus, DNSchrony passes -the buck to these other security features. - -INSTALLATION: - -copy the files: DNSchronyADD DNSchronyUPDATE DNSchronyDELETE DNSchrony.pl -to /usr/local/bin. Backup the file /etc/chrony.conf leave hosts -with static ip addresses in this file. - -DNSchrony uses the following perl modules. See that they are installed. -Get them from CPAN if needed. - -Net::DNS, Tie::Syslog, Getopt::Std, Socket, File. - -Cause DNSchronyUPDATE bash script to run from time to time when DNS -is working. If you have a dialup, one way to do this would be to -modify your /etc/ppp/ip-up.local file as follows: - -cat </dev/null 2>&1 & - -Since this file contains the chronyc password you will want to set the -file permissions so that just everybody will not be able to read -it. But you already did that when you put in the chronyc command. Any -other way to make DNSchronyUPDATE run perodicly when DNS is up will -also work. - -To add a server with a varying IP address one could run: -/usr/local/bin/DNSchronyADD mysecret tock.greyware.com - -or if you want to specify different server parameters you -could say: - -/usr/local/bin/DNSchronyADD mysecret tock.greyware.com "minpoll 10 maxpoll 20 maxdelay 0.8" - -The DNSchronyADD's default for these parameters is: -"minpoll 5 maxpoll 10 maxdelay 0.4" values that are often shown -as examples in the chrony documentation. - -If DNS is not running now but you know the IP address, you can say: -/usr/local/bin/DNSchronyADD mysecret tock.greyware.com=208.14.208.44 - -Of course, the IP address will be checked next time DNSchronyUPDATE -runs. - -To delete dynamic DNS a server: -/usr/local/bin/DNSchronyDELETE mysecret tock.greyware.com - -To change parameters delete and re-add. - -Of course, in all of the above "mysecret" is your chronyc password -which SHOULD NOT BE "mysecret". ----------------------------------------------- -DNSchrony.pl is covered by the GPL -# Copyright (C) Paul Elliott 2002 -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# SEE COPYING FOR DETAILS diff --git a/contrib/DNSchrony/ip-up.local b/contrib/DNSchrony/ip-up.local deleted file mode 100644 index 34f6e76..0000000 --- a/contrib/DNSchrony/ip-up.local +++ /dev/null @@ -1,22 +0,0 @@ -#example file /etc/ppp/ip-up.local -#originally from SuSE distribution -#modified for chrony -cat </dev/null 2>&1 & -#other stuff who knows? - -# The following lines added for Linux-HA support # Heartbeat -DEVFILE=`echo $DEVICE | sed -e 's!^/dev/!!' -e 's!/!.!g'` # Heartbeat -OUTFILE=/var/run/ppp.d/$DEVFILE # Heartbeat -( # Heartbeat -echo "$IPREMOTE" # Heartbeat -echo "$IFNAME" # Heartbeat -echo "$PPPD_PID" # Heartbeat -echo "$IPLOCAL" # Heartbeat -) > $OUTFILE # Heartbeat