summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Graf <tgraf@suug.ch>2011-03-24 21:14:52 +0100
committerThomas Graf <tgraf@suug.ch>2011-03-24 21:14:52 +0100
commitf523f297f7fed8b64fe4c2a6e3791d31b2d2448b (patch)
treeea26b71a71db31184f917cd3ce3d9ce609a6b5eb
parent8d5493418a5a82b5303722cd9b2964300813e693 (diff)
downloadlibnl-f523f297f7fed8b64fe4c2a6e3791d31b2d2448b.tar.gz
Allow NLSYSCONFDIR environment variable to overwrite built-in sysconfdir
-rw-r--r--include/netlink-local.h12
-rw-r--r--lib/route/classid.c5
-rw-r--r--lib/route/pktloc.c3
-rw-r--r--src/Makefile.am2
4 files changed, 18 insertions, 4 deletions
diff --git a/include/netlink-local.h b/include/netlink-local.h
index 32e8302..9acc0e4 100644
--- a/include/netlink-local.h
+++ b/include/netlink-local.h
@@ -186,4 +186,16 @@ static inline int wait_for_ack(struct nl_sock *sk)
return nl_wait_for_ack(sk);
}
+static inline int build_sysconf_path(char **strp, const char *filename)
+{
+ char *sysconfdir;
+
+ sysconfdir = getenv("NLSYSCONFDIR");
+
+ if (!sysconfdir)
+ sysconfdir = SYSCONFDIR;
+
+ return asprintf(strp, "%s/%s", sysconfdir, filename);
+}
+
#endif
diff --git a/lib/route/classid.c b/lib/route/classid.c
index 35cafe6..6af0ee3 100644
--- a/lib/route/classid.c
+++ b/lib/route/classid.c
@@ -310,7 +310,8 @@ int rtnl_tc_read_classid_file(void)
FILE *fd;
int err;
- asprintf(&path, "%s/classid", SYSCONFDIR);
+ if (build_sysconf_path(&path, "classid") < 0)
+ return -NLE_NOMEM;
/* if stat fails, just (re-)read the file */
if (stat(path, &st) == 0) {
@@ -392,7 +393,7 @@ int rtnl_classid_generate(const char *name, uint32_t *result, uint32_t parent)
NL_DBG(2, "Generated new classid %#x\n", classid);
- if (asprintf(&path, "%s/classid", SYSCONFDIR) < 0)
+ if (build_sysconf_path(&path, "classid") < 0)
return -NLE_NOMEM;
if (!(fd = fopen(path, "a"))) {
diff --git a/lib/route/pktloc.c b/lib/route/pktloc.c
index 4d7d9dd..b677ab5 100644
--- a/lib/route/pktloc.c
+++ b/lib/route/pktloc.c
@@ -94,7 +94,8 @@ static int read_pktlocs(void)
int i, err;
FILE *fd;
- asprintf(&path, "%s/pktloc", SYSCONFDIR);
+ if (build_sysconf_path(&path, "pktloc") < 0)
+ return -NLE_NOMEM;
/* if stat fails, just try to read the file */
if (stat(path, &st) == 0) {
diff --git a/src/Makefile.am b/src/Makefile.am
index 64d1cce..e196b58 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2,7 +2,7 @@
SUBDIRS = lib
-AM_CPPFLAGS = -Wall -I${top_srcdir}/include -I${top_builddir}/include -D_GNU_SOURCE
+AM_CPPFLAGS = -Wall -I${top_srcdir}/include -I${top_builddir}/include -D_GNU_SOURCE -DSYSCONFDIR=\"$(sysconfdir)/libnl\"
AM_LDFLAGS = -L${top_builddir}/lib -L${top_builddir}/src/lib -lnl-cli -lnl -lnl-nf -lnl-genl -lnl-route
sbin_PROGRAMS = \