allow users to override at runtime the lock file to use through the XTABLES_LOCKFILE environment variable. It allows using iptables from a network namespace owned by an user that has no write access to XT_LOCK_NAME (by default under /run), and without setting up a new mount namespace. $ XTABLES_LOCKFILE=/tmp/xtables unshare -rn iptables ... Signed-off-by: Giuseppe Scrivano <gscrivan@xxxxxxxxxx> --- iptables/xshared.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/iptables/xshared.c b/iptables/xshared.c index c1d1371a..291f1c4b 100644 --- a/iptables/xshared.c +++ b/iptables/xshared.c @@ -248,13 +248,18 @@ void xs_init_match(struct xtables_match *match) static int xtables_lock(int wait, struct timeval *wait_interval) { + const *lock_file; struct timeval time_left, wait_time; int fd, i = 0; time_left.tv_sec = wait; time_left.tv_usec = 0; - fd = open(XT_LOCK_NAME, O_CREAT, 0600); + lock_file = getenv("XTABLES_LOCKFILE"); + if (lock_file == NULL || lock_file[0] == '\0') + lock_file = XT_LOCK_NAME; + + fd = open(lock_file, O_CREAT, 0600); if (fd < 0) { fprintf(stderr, "Fatal: can't open lock file %s: %s\n", XT_LOCK_NAME, strerror(errno)); -- 2.26.2