]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/bash | |
2 | ||
3 | config=/etc/chrony.conf | |
4 | keyfile=/etc/chrony.keys | |
5 | chronyc=/usr/bin/chronyc | |
6 | dhclient_servers=/var/lib/dhclient/chrony.servers.* | |
7 | service_name=chronyd.service | |
8 | ||
9 | get_key() { | |
10 | awk '/^[ \t]*'$1'\>/ { print $2; exit }' < $keyfile | |
11 | } | |
12 | ||
13 | get_commandkeyid() { | |
14 | awk '/^[ \t]*commandkey\>/ { keyid=$2 } END { print keyid }' < $config | |
15 | } | |
16 | ||
17 | chrony_command() { | |
18 | commandkeyid=$(get_commandkeyid) | |
19 | [ -z "$commandkeyid" ] && return 1 | |
20 | commandkey=$(get_key $commandkeyid) | |
21 | [ -z "$commandkey" ] && return 2 | |
22 | ||
23 | $chronyc <<EOF | |
24 | password $commandkey | |
25 | $1 | |
26 | EOF | |
27 | } | |
28 | ||
29 | generate_commandkey() { | |
30 | commandkeyid=$(get_commandkeyid) | |
31 | [ -z "$commandkeyid" ] && return 1 | |
32 | commandkey=$(get_key $commandkeyid) | |
33 | [ -z "$commandkey" ] || return 0 | |
34 | ||
35 | commandkey=$(tr -c -d '[\041-\176]' < /dev/urandom | head -c 16) | |
36 | [ -n "$commandkey" ] && echo "$commandkeyid $commandkey" >> $keyfile | |
37 | } | |
38 | ||
39 | add_dhclient_servers() { | |
40 | command=$(cat $dhclient_servers 2> /dev/null | | |
41 | while read server serverargs; do | |
42 | echo "add server $server $serverargs" | |
43 | done) | |
44 | if [ -n "$command" ]; then | |
45 | chrony_command "$command" &> /dev/null | |
46 | fi | |
47 | } | |
48 | ||
49 | is_running() { | |
50 | systemctl status chronyd.service &> /dev/null | |
51 | } | |
52 | ||
53 | case "$1" in | |
54 | generate-commandkey) | |
55 | generate_commandkey | |
56 | ;; | |
57 | add-dhclient-servers) | |
58 | add_dhclient_servers | |
59 | ;; | |
60 | command) | |
61 | is_running && chrony_command "$2" | |
62 | ;; | |
63 | *) | |
64 | echo $"Usage: $0 {generate-commandkey|add-dhclient-servers|command}" | |
65 | exit 2 | |
66 | esac | |
67 | exit $? | |
68 |