diff --git a/src/confd/src/Makefile.am b/src/confd/src/Makefile.am index 685e6e43..489e4982 100644 --- a/src/confd/src/Makefile.am +++ b/src/confd/src/Makefile.am @@ -7,4 +7,5 @@ plugin_LTLIBRARIES = confd-plugin.la confd_plugin_la_CFLAGS = $(augeas_CFLAGS) $(sysrepo_CFLAGS) $(CFLAGS) confd_plugin_la_LIBADD = $(augeas_LIBS) $(sysrepo_LIBS) confd_plugin_la_LDFLAGS = -module -avoid-version -shared -confd_plugin_la_SOURCES = core.c core.h run.c sr_ext.c sr_ext.h ietf-system.c ietf-interfaces.c +confd_plugin_la_SOURCES = core.c core.h run.c sr_ext.c sr_ext.h srx_val.c srx_val.h \ + ietf-system.c ietf-interfaces.c diff --git a/src/confd/src/ietf-system.c b/src/confd/src/ietf-system.c index 7ba1003e..45733b86 100644 --- a/src/confd/src/ietf-system.c +++ b/src/confd/src/ietf-system.c @@ -1,6 +1,8 @@ /* SPDX-License-Identifier: BSD-3-Clause */ #include "core.h" +#include "srx_val.h" + #include #include #include @@ -339,40 +341,6 @@ fail: return rc; } -char *sr_get_str(sr_session_ctx_t *session, const char *fmt, ...) -{ - char *str = NULL; - sr_val_t *val; - char *xpath; - va_list ap; - int len; - - va_start(ap, fmt); - len = vsnprintf(NULL, 0, fmt, ap) + 1; - va_end(ap); - - xpath = alloca(len); - if (!xpath) - return NULL; - - va_start(ap, fmt); - vsnprintf(xpath, len, fmt, ap); - va_end(ap); - - if (sr_get_item(session, xpath, 0, &val)) { - ERROR("Failed reading string value from xpath %s", xpath); - goto fail; - } - if (!val || val->type != SR_STRING_T) - goto fail; - - str = strdup(val->data.string_val); -fail: - if (val) - sr_free_val(val); - return str; -} - #define TIMEZONE_CONF "/etc/timezone" #define TIMEZONE_PREV TIMEZONE_CONF "-" #define TIMEZONE_NEXT TIMEZONE_CONF "+" @@ -413,7 +381,7 @@ static int change_clock(sr_session_ctx_t *session, uint32_t sub_id, const char * } /* XXX: add support also for /ietf-system:system/clock/timezone-utc-offset (deviation) */ - timezone = sr_get_str(session, "/ietf-system:system/clock/timezone-name"); + timezone = srx_get_str(session, "/ietf-system:system/clock/timezone-name"); if (!timezone) { ERROR("Failed reading timezone-name"); return SR_ERR_VALIDATION_FAILED; @@ -510,16 +478,16 @@ static int change_ntp(sr_session_ctx_t *session, uint32_t sub_id, const char *mo valid = 0; /* Get /ietf-system:system/ntp/server[name='foo'] */ - ptr = sr_get_str(session, "%s/udp/address", xpath); + ptr = srx_get_str(session, "%s/udp/address", xpath); if (ptr) { - type = sr_get_str(session, "%s/association-type", xpath); + type = srx_get_str(session, "%s/association-type", xpath); fprintf(fp, "%s %s", type ?: "server", ptr); server++; if (type) free(type); free(ptr); - ptr = sr_get_str(session, "%s/udp/port", xpath); + ptr = srx_get_str(session, "%s/udp/port", xpath); if (ptr) { fprintf(fp, " port %s", ptr); free(ptr); @@ -636,7 +604,7 @@ static int change_dns(sr_session_ctx_t *session, uint32_t sub_id, const char *mo char *ptr; /* Get /ietf-system:system/dns-resolver/server[name='foo'] */ - ptr = sr_get_str(session, "%s/udp-and-tcp/address", xpath); + ptr = srx_get_str(session, "%s/udp-and-tcp/address", xpath); if (ptr) /* XXX: add support also for udp-and-tcp/port */ fprintf(fp, "nameserver %s\n", ptr); @@ -666,7 +634,7 @@ static int change_motd(sr_session_ctx_t *session, uint32_t sub_id, const char *m if (!fp) return SR_ERR_SYS; - nm = sr_get_str(session, xpath); + nm = srx_get_str(session, xpath); if (nm) { fprintf(fp, "%s\n", nm); } else { @@ -691,7 +659,7 @@ static int change_hostname(sr_session_ctx_t *session, uint32_t sub_id, const cha if (event != SR_EV_DONE) return SR_ERR_OK; - nm = sr_get_str(session, xpath); + nm = srx_get_str(session, xpath); if (!nm) { /* XXX: derive from global "options.h" or /usr/share/factory/ */ nm = strdup("infix"); diff --git a/src/confd/src/srx_val.c b/src/confd/src/srx_val.c new file mode 100644 index 00000000..00091d9f --- /dev/null +++ b/src/confd/src/srx_val.c @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#include "core.h" + +char *srx_get_str(sr_session_ctx_t *session, const char *fmt, ...) +{ + char *str = NULL; + sr_val_t *val; + char *xpath; + va_list ap; + int len; + + va_start(ap, fmt); + len = vsnprintf(NULL, 0, fmt, ap) + 1; + va_end(ap); + + xpath = alloca(len); + if (!xpath) + return NULL; + + va_start(ap, fmt); + vsnprintf(xpath, len, fmt, ap); + va_end(ap); + + if (sr_get_item(session, xpath, 0, &val)) { + ERROR("Failed reading string value from xpath %s", xpath); + goto fail; + } + if (!val || val->type != SR_STRING_T) + goto fail; + + str = strdup(val->data.string_val); +fail: + if (val) + sr_free_val(val); + return str; +} diff --git a/src/confd/src/srx_val.h b/src/confd/src/srx_val.h new file mode 100644 index 00000000..ae57aea1 --- /dev/null +++ b/src/confd/src/srx_val.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#ifndef CONFD_SRX_VAL_H_ +#define CONFD_SRX_VAL_H_ + + +#include "core.h" + +char *srx_get_str(sr_session_ctx_t *session, const char *fmt, ...); + +#endif /* CONFD_SRX_VAL_H_ */