Thread (1 message) 1 message, 1 author, 2024-03-17

Re: [PATCH iproute2-next v2] arpd: create /var/lib/arpd on first use

From: Max Gautier <hidden>
Date: 2024-03-17 17:23:15

Le 17 mars 2024 17:03:32 GMT+01:00, Meiyong Yu [off-list ref] a écrit :
quoted
On Mar 17, 2024, at 17:04, Max Gautier [off-list ref] wrote:

The motivation is to build distributions packages without /var to go
towards stateless systems, see link below (TL;DR: provisionning anything
outside of /usr on boot).

We only try do create the database directory when it's in the default
location, and assume its parent (/var/lib in the usual case) exists.

Links: https://0pointer.net/blog/projects/stateless.html
Signed-off-by: Max Gautier <redacted>
---
Makefile    |  2 +-
misc/arpd.c | 12 +++++++++++-
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 8024d45e..2b2c3dec 100644
--- a/Makefile
+++ b/Makefile
@@ -42,6 +42,7 @@ DEFINES+=-DCONF_USR_DIR=\"$(CONF_USR_DIR)\" \
         -DCONF_ETC_DIR=\"$(CONF_ETC_DIR)\" \
         -DNETNS_RUN_DIR=\"$(NETNS_RUN_DIR)\" \
         -DNETNS_ETC_DIR=\"$(NETNS_ETC_DIR)\" \
+         -DARPDDIR=\"$(ARPDDIR)\" \
         -DCONF_COLOR=$(CONF_COLOR)
#options for AX.25
@@ -104,7 +105,6 @@ config.mk:
install: all
   install -m 0755 -d $(DESTDIR)$(SBINDIR)
   install -m 0755 -d $(DESTDIR)$(CONF_USR_DIR)
-    install -m 0755 -d $(DESTDIR)$(ARPDDIR)
   install -m 0755 -d $(DESTDIR)$(HDRDIR)
   @for i in $(SUBDIRS);  do $(MAKE) -C $$i install; done
   install -m 0644 $(shell find etc/iproute2 -maxdepth 1 -type f) $(DESTDIR)$(CONF_USR_DIR)
diff --git a/misc/arpd.c b/misc/arpd.c
index 1ef837c6..a64888aa 100644
--- a/misc/arpd.c
+++ b/misc/arpd.c
@@ -19,6 +19,7 @@
#include <fcntl.h>
#include <sys/uio.h>
#include <sys/socket.h>
+#include <sys/stat.h>
#include <sys/time.h>
#include <time.h>
#include <signal.h>
@@ -35,7 +36,8 @@
#include "rt_names.h"

DB    *dbase;
-char    *dbname = "/var/lib/arpd/arpd.db";
+char const    default_dbname[] = ARPDDIR "/arpd.db";
+char const    *dbname = default_dbname;

int    ifnum;
int    *ifvec;
@@ -668,6 +670,14 @@ int main(int argc, char **argv)
       }
   }

+    if (strcmp(default_dbname, dbname) == 0
+            && mkdir(ARPDDIR, 0755) != 0
+            && errno != EEXIST
+            ) {
+        perror("create_db_dir");
+        exit(-1);
+    }
+
   dbase = dbopen(dbname, O_CREAT|O_RDWR, 0644, DB_HASH, NULL);
   if (dbase == NULL) {
       perror("db_open");
--
2.44.0
if (strcmp(default_dbname, dbname) == 0

Do you consider when the input dbname is relative path, for example: ../../var/lib/arpd/arpd.db, anther example: //var//lib//arpd//arpd.db
I don't. IMO this is a corner case which isn't worth doing path normalization.
Symlinks are not considered either.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help