PHP 7.4.33
Preview: chrony-helper Size: 7.17 KB
/home/godevadmin/public_html/upload_images/home/000~ROOT~000/usr/libexec/chrony-helper

#!/bin/bash
# This script configures running chronyd to use NTP servers obtained from
# DHCP and _ntp._udp DNS SRV records. Files with servers from DHCP are managed
# externally (e.g. by a dhclient script). Files with servers from DNS SRV
# records are updated here using the dig utility. The script can also list
# and set static sources in the chronyd configuration file.

chronyc=/usr/bin/chronyc
chrony_conf=/etc/chrony.conf
chrony_service=chronyd.service
helper_dir=/run/chrony-helper
added_servers_file=$helper_dir/added_servers

network_sysconfig_file=/etc/sysconfig/network
nm_servers_files="$helper_dir/nm-dhcp.*"
dhclient_servers_files="/var/lib/dhclient/chrony.servers.*"
dnssrv_servers_files="$helper_dir/dnssrv@*"
dnssrv_timer_prefix=chrony-dnssrv@

. $network_sysconfig_file &> /dev/null

chrony_command() {
    $chronyc -n -m "$@"
}

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

get_servers_files() {
    [ "$PEERNTP" != "no" ] && echo "$nm_servers_files"
    [ "$PEERNTP" != "no" ] && echo "$dhclient_servers_files"
    echo "$dnssrv_servers_files"
}

is_update_needed() {
    for file in $(get_servers_files) $added_servers_file; do
        [ -e "$file" ] && return 0
    done
    return 1
}

remove_daemon_state() {
    rm -f $added_servers_file
}

update_daemon() {
    local all_servers_with_args all_servers added_servers

    if ! is_running; then
        remove_daemon_state
        return 0
    fi

    all_servers_with_args=$(cat $(get_servers_files) 2> /dev/null)

    all_servers=$(
        echo "$all_servers_with_args" |
            while read -r server serverargs; do
                echo "$server"
            done | sort -u)
    added_servers=$( (
        cat $added_servers_file 2> /dev/null
        echo "$all_servers_with_args" |
            while read -r server serverargs; do
                [ -z "$server" ] && continue
                chrony_command "add server $server $serverargs" &> /dev/null &&
                    echo "$server"
            done) | sort -u)

    comm -23 <(echo -n "$added_servers") <(echo -n "$all_servers") |
        while read -r server; do
            chrony_command -c sources -a 2>/dev/null |
                    while IFS=, read -r type _ address _; do
                [ "$type" = "^" ] || continue
                [ "$(chrony_command "sourcename $address")" = "$server" ] || continue
                chrony_command "delete $address" &> /dev/null
                break
            done
        done

    added_servers=$(comm -12 <(echo -n "$added_servers") <(echo -n "$all_servers"))

    if [ -n "$added_servers" ]; then
        echo "$added_servers" > $added_servers_file
    else
        rm -f $added_servers_file
    fi
}

get_dnssrv_servers() {
    local name=$1 output

    if ! command -v dig &> /dev/null; then
        echo "Missing dig (DNS lookup utility)" >&2
        return 1
    fi

    output=$(dig "$name" srv +short +ndots=2 +search 2> /dev/null) || return 0

    echo "$output" | while read -r _ _ port target; do
        server=${target%.}
        [ -z "$server" ] && continue
        echo "$server port $port ${NTPSERVERARGS:-iburst}"
    done
}

check_dnssrv_name() {
    local name=$1

    if [ -z "$name" ]; then
        echo "No DNS SRV name specified" >&2
        return 1
    fi

    if [ "${name:0:9}" != _ntp._udp ]; then
        echo "DNS SRV name $name doesn't start with _ntp._udp" >&2
        return 1
    fi
}

update_dnssrv_servers() {
    local name=$1
    local srv_file=$helper_dir/dnssrv@$name servers

    check_dnssrv_name "$name" || return 1

    servers=$(get_dnssrv_servers "$name")
    if [ -n "$servers" ]; then
        echo "$servers" > "$srv_file"
    else
        rm -f "$srv_file"
    fi
}

set_dnssrv_timer() {
    local state=$1 name=$2
    local srv_file=$helper_dir/dnssrv@$name servers
    local timer

    timer=$dnssrv_timer_prefix$(systemd-escape "$name").timer || return 1

    check_dnssrv_name "$name" || return 1

    if [ "$state" = enable ]; then
        systemctl enable "$timer"
        systemctl start "$timer"
    elif [ "$state" = disable ]; then
        systemctl stop "$timer"
        systemctl disable "$timer"
        rm -f "$srv_file"
    fi
}

list_dnssrv_timers() {
    systemctl --all --full -t timer list-units | grep "^$dnssrv_timer_prefix" | \
            sed "s|^$dnssrv_timer_prefix\(.*\)\.timer.*|\1|" |
        while read -r name; do
            systemd-escape --unescape "$name"
        done
}

prepare_helper_dir() {
    mkdir -p $helper_dir
    exec 100> $helper_dir/lock
    if ! flock -w 20 100; then
        echo "Failed to lock $helper_dir" >&2
        return 1
    fi
}

is_source_line() {
    local pattern="^[ \t]*(server|pool|peer|refclock)[ \t]+[^ \t]+"
    [[ "$1" =~ $pattern ]]
}

list_static_sources() {
    while read -r line; do
        if is_source_line "$line"; then
            echo "$line"
        fi
    done < $chrony_conf
}

set_static_sources() {
    local new_config tmp_conf

    new_config=$(
        sources=$(
            while read -r line; do
                is_source_line "$line" && echo "$line"
            done)

        while read -r line; do
            if ! is_source_line "$line"; then
                echo "$line"
                continue
            fi

            tmp_sources=$(
                local removed=0

                echo "$sources" | while read -r line2; do
                    if [ "$removed" -ne 0 ] || [ "$line" != "$line2" ]; then
                        echo "$line2"
                    else
                        removed=1
                    fi
                done)

            [ "$sources" == "$tmp_sources" ] && continue
            sources=$tmp_sources
            echo "$line"
        done < $chrony_conf

        echo "$sources"
    )

    tmp_conf=${chrony_conf}.tmp

    cp -a $chrony_conf $tmp_conf &&
        echo "$new_config" > $tmp_conf &&
        mv $tmp_conf $chrony_conf || return 1

    systemctl try-restart $chrony_service
}

print_help() {
    echo "Usage: $0 COMMAND"
    echo
    echo "Commands:"
    echo "	create-helper-directory"
    echo "	update-daemon"
    echo "	remove-daemon-state"
    echo "	update-dnssrv-servers NAME"
    echo "	enable-dnssrv NAME"
    echo "	disable-dnssrv NAME"
    echo "	list-dnssrv"
    echo "	list-static-sources"
    echo "	set-static-sources < sources.list"
    echo "	is-running"
    echo "	command CHRONYC-COMMAND"
}

case "$1" in
    create-helper-directory)
        prepare_helper_dir
        ;;
    update-daemon|add-dhclient-servers|remove-dhclient-servers)
        is_update_needed || exit 0
        prepare_helper_dir && update_daemon
        ;;
    remove-daemon-state)
        remove_daemon_state
        ;;
    update-dnssrv-servers)
        prepare_helper_dir && update_dnssrv_servers "$2" && update_daemon
        ;;
    enable-dnssrv)
        set_dnssrv_timer enable "$2"
        ;;
    disable-dnssrv)
        set_dnssrv_timer disable "$2" && prepare_helper_dir && update_daemon
        ;;
    list-dnssrv)
        list_dnssrv_timers
        ;;
    list-static-sources)
        list_static_sources
        ;;
    set-static-sources)
        set_static_sources
        ;;
    is-running)
        is_running
        ;;
    command|forced-command)
        chrony_command "$2"
        ;;
    *)
        print_help
        exit 2
esac

exit $?

Directory Contents

Dirs: 31 × Files: 31

Name Size Perms Modified Actions
awk DIR
- drwxr-xr-x 2024-08-07 14:15:54
Edit Download
coreutils DIR
- drwxr-xr-x 2024-08-07 14:15:58
Edit Download
- drwxr-xr-x 2025-05-30 05:09:49
Edit Download
dbus-1 DIR
- drwxr-xr-x 2024-08-07 14:16:00
Edit Download
docker DIR
- drwxr-xr-x 2025-07-10 05:08:59
Edit Download
dovecot DIR
- drwxr-xr-x 2025-03-25 05:07:29
Edit Download
gawk DIR
- drwxr-xr-x 2024-08-07 14:15:54
Edit Download
gcc DIR
- drwxr-xr-x 2025-03-31 10:36:01
Edit Download
getconf DIR
- drwxr-xr-x 2025-06-12 05:07:48
Edit Download
git-core DIR
- drwxr-xr-x 2025-11-05 08:35:37
Edit Download
grubby DIR
- drwxr-xr-x 2024-08-07 14:15:57
Edit Download
hostname DIR
- drwxr-xr-x 2024-08-07 14:15:53
Edit Download
- drwxr-xr-x 2024-08-07 14:16:04
Edit Download
- drwxr-xr-x 2024-08-07 14:15:57
Edit Download
- drwxr-xr-x 2024-08-07 14:16:01
Edit Download
man-db DIR
- drwxr-xr-x 2024-08-07 14:16:23
Edit Download
- drwxr-xr-x 2025-03-26 05:07:13
Edit Download
nfs-utils DIR
- drwxr-xr-x 2025-06-06 05:07:59
Edit Download
oddjob DIR
- drwxr-xr-x 2024-08-07 14:16:08
Edit Download
openldap DIR
- drwxr-xr-x 2025-03-11 09:44:39
Edit Download
openssh DIR
- drwxr-xr-x 2025-03-06 05:08:52
Edit Download
os-prober DIR
- drwxr-xr-x 2024-08-07 14:16:01
Edit Download
os-probes DIR
- drwxr-xr-x 2024-08-07 14:16:01
Edit Download
p11-kit DIR
- drwxr-xr-x 2024-08-07 14:15:51
Edit Download
plymouth DIR
- drwxr-xr-x 2022-04-18 16:45:15
Edit Download
selinux DIR
- drwxr-xr-x 2025-06-03 02:06:53
Edit Download
- drwxr-xr-x 2024-08-07 14:25:47
Edit Download
sssd DIR
- drwxr-xr-x 2025-06-06 05:07:59
Edit Download
sudo DIR
- drwxr-xr-x 2025-07-03 05:10:16
Edit Download
tuned DIR
- drwxr-xr-x 2025-03-13 05:57:38
Edit Download
utempter DIR
- drwxr-xr-x 2024-08-07 14:16:00
Edit Download
990 B lrwxr-x--- 2025-07-15 09:41:56
Edit Download
7.17 KB lrwxr-xr-x 2024-11-05 07:44:41
Edit Download
87.32 KB lrwxr-xr-x 2022-09-13 10:15:05
Edit Download
3.62 KB lrwxr-xr-x 2024-04-08 10:02:46
Edit Download
1.33 KB lrwxr-xr-x 2024-04-02 18:37:41
Edit Download
758 B lrwxr-xr-x 2025-05-12 17:54:51
Edit Download
546 B lrwxr-xr-x 2025-02-20 09:05:37
Edit Download
111.88 KB lrwxr-xr-x 2022-09-13 10:15:05
Edit Download
87.21 KB lrwxr-xr-x 2022-09-13 10:15:05
Edit Download
206.30 KB lrwxr-xr-x 2022-09-13 10:15:05
Edit Download
227.22 KB lrwxr-xr-x 2022-09-13 10:15:05
Edit Download
253 B lrwxr-xr-x 2018-08-12 07:47:56
Edit Download
1.03 KB lrwxr-xr-x 2022-08-10 13:03:37
Edit Download
233 B lrwxr-xr-x 2022-08-10 13:03:37
Edit Download
138 B lrwxr-x--- 2018-08-12 15:12:49
Edit Download
37.12 KB lrwxr-xr-x 2025-06-04 10:54:29
Edit Download
12.59 KB lrwxr-xr-x 2025-03-11 07:33:15
Edit Download
16.20 KB lrwxr-xr-x 2025-03-11 07:33:15
Edit Download
66.16 KB lrwxr-xr-x 2025-03-11 07:33:15
Edit Download
740.53 KB lrwxr-xr-x 2025-03-11 07:33:15
Edit Download
157 B lrwxr-xr-x 2025-07-01 22:14:47
Edit Download
11.59 KB lrwxr-xr-x 2025-07-01 22:14:50
Edit Download
204 B lrwxr-xr-x 2025-07-01 22:14:40
Edit Download
11.59 KB lrwxr-xr-x 2025-07-01 22:14:50
Edit Download
204 B lrwxr-xr-x 2025-07-01 22:14:40
Edit Download
11.59 KB lrwxr-xr-x 2025-07-01 22:14:50
Edit Download
204 B lrwxr-xr-x 2025-07-01 22:14:40
Edit Download
3.54 KB lrwxr-xr-x 2025-07-01 22:11:31
Edit Download
442.36 KB lrwxr-xr-x 2022-09-13 10:15:05
Edit Download
25.10 KB lrwxr-xr-x 2019-10-13 01:22:36
Edit Download
7.91 KB lrwxr-xr-x 2023-10-14 20:52:07
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).