lkundrak / rpms / chrony

Forked from rpms/chrony 4 months ago
Clone
Blob Blame Raw
#!/bin/bash

chronyc=/usr/bin/chronyc
dhclient_servers=/var/lib/dhclient/chrony.servers.*
dhclient_added_servers=/var/lib/dhclient/chrony.added_servers

chrony_command() {
    $chronyc -a -n -m "$1"
}

update_dhclient_added_servers() {
    new_servers=$(echo "$1" | sort -u)
    old_servers=$(cat $dhclient_added_servers 2> /dev/null)
    [ "$old_servers" = "$new_servers" ] && return 0
    [ -n "$new_servers" ] && echo "$new_servers" > $dhclient_added_servers ||
        rm -f $dhclient_added_servers
}

add_dhclient_servers() {
    shopt -s nullglob
    servers_files=($dhclient_servers)
    shopt -u nullglob
    (( ${#servers_files[*]} )) || return 0

    added_servers=$(
        cat $dhclient_added_servers 2> /dev/null
        cat ${servers_files[*]} |
            while read server serverargs; do
                chrony_command "add server $server $serverargs" &> /dev/null &&
                    echo "$server"
            done)
    update_dhclient_added_servers "$added_servers"
}

remove_dhclient_servers() {
    [ -f $dhclient_added_servers ] || return 0
    all_servers=$(
        cat $dhclient_servers 2> /dev/null |
            while read server serverargs; do
                echo "$server"
            done | sort -u)
    echo "$all_servers" | comm -23 $dhclient_added_servers - |
        while read server; do
            chrony_command "delete $server" &> /dev/null
        done
    added_servers=$(echo "$all_servers" | comm -12 $dhclient_added_servers -)
    update_dhclient_added_servers "$added_servers"
}

is_running() {
    chrony_command "tracking" &> /dev/null
}

case "$1" in
    add-dhclient-servers)
        add_dhclient_servers
        ;;
    remove-dhclient-servers)
        remove_dhclient_servers
        ;;
    is-running)
        is_running
        ;;
    command|forced-command)
        chrony_command "$2"
        ;;
    *)
        echo $"Usage: $0 {add-dhclient-servers|remove-dhclient-servers|is-running|command|forced-command}"
        exit 2
esac
exit $?