|
25 | 25 | #define XPATH_BASE_ "/ietf-system:system" |
26 | 26 | #define XPATH_AUTH_ XPATH_BASE_"/authentication" |
27 | 27 | #define XPATH_NTP_ XPATH_BASE_"/ntp" |
| 28 | +#define NTP_CLIENT_CONF "/etc/chrony/conf.d/ntp-client.conf" |
28 | 29 | #define XPATH_DNS_ XPATH_BASE_"/dns-resolver" |
29 | 30 | #define XPATH_HOSTNAME_ XPATH_BASE_"/hostname" |
30 | 31 | #define XPATH_MOTD_BANNER_ XPATH_BASE_"/infix-system:motd-banner" |
@@ -304,7 +305,8 @@ static int change_ntp_client(sr_session_ctx_t *session, struct lyd_node *config, |
304 | 305 |
|
305 | 306 | case SR_EV_DONE: |
306 | 307 | if (!srx_enabled(session, XPATH_NTP_"/enabled")) { |
307 | | - systemf("rm -rf /etc/chrony/conf.d/* /etc/chrony/sources.d/*"); |
| 308 | + (void)remove(NTP_CLIENT_CONF); |
| 309 | + systemf("rm -f /etc/chrony/sources.d/*"); |
308 | 310 | /* Note: chronyd enable/disable is managed centrally in core.c */ |
309 | 311 | systemf("initctl -nbq touch chronyd"); |
310 | 312 | return SR_ERR_OK; |
@@ -405,6 +407,23 @@ static int change_ntp_client(sr_session_ctx_t *session, struct lyd_node *config, |
405 | 407 | } |
406 | 408 | sr_free_values(val, cnt); |
407 | 409 |
|
| 410 | + /* Write global NTP client options (stratumweight, etc.) to conf.d */ |
| 411 | + if (srx_enabled(session, XPATH_NTP_"/enabled")) { |
| 412 | + char *sw = srx_get_str(session, XPATH_NTP_"/infix-system:stratum-weight"); |
| 413 | + FILE *fp = fopen(NTP_CLIENT_CONF, "w"); |
| 414 | + |
| 415 | + if (fp) { |
| 416 | + fprintf(fp, "# Generated by confd\n"); |
| 417 | + if (sw) |
| 418 | + fprintf(fp, "stratumweight %s\n", sw); |
| 419 | + fclose(fp); |
| 420 | + } else { |
| 421 | + ERRNO("Failed creating %s", NTP_CLIENT_CONF); |
| 422 | + } |
| 423 | + if (sw) |
| 424 | + free(sw); |
| 425 | + } |
| 426 | + |
408 | 427 | if (changes) { |
409 | 428 | if (touch("/run/chrony/.changes")) |
410 | 429 | ERRNO("Failed recording changes to NTP client"); |
|
0 commit comments