diff options
author | kay.sievers@vrfy.org <kay.sievers@vrfy.org> | 2004-02-05 01:35:15 -0800 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-04-26 21:32:25 -0700 |
commit | 872344c41094f636fd667b9e619f8f219d814605 (patch) | |
tree | 474af8cb42f203db83c39847d3a6bd11b2b7c8a2 | |
parent | [PATCH] udevd - allow to bypass sequence number (diff) | |
download | systemd-872344c41094f636fd667b9e619f8f219d814605.tar.gz systemd-872344c41094f636fd667b9e619f8f219d814605.tar.bz2 systemd-872344c41094f636fd667b9e619f8f219d814605.zip |
[PATCH] udevd - switch socket path to abstract namespace
As Chris Friesen <chris_friesen@sympatico.ca> suggested, here we switch
the unix domains socket path to abstract namespace and get rid of the
socket file in the filesystem.
Hey, this was new to me today. So here a few words:
Linux supports a abstract namespace for sockets. We don't need a
physical file on the filesystem but only a unique string magically
starting with the '\0' character.
strace with real file:
connect(3, {sa_family=AF_UNIX, path="/udev/.udevd.sock"}, 110)
strace with abstract namespace:
connect(3, {sa_family=AF_UNIX, path=@udevd}, 110)
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | udevd.c | 6 | ||||
-rw-r--r-- | udevd.h | 1 | ||||
-rw-r--r-- | udevsend.c | 3 |
4 files changed, 5 insertions, 6 deletions
@@ -241,7 +241,6 @@ udev_version.h: @echo \#define UDEV_PERMISSION_FILE \"$(configdir)\udev.permissions\" >> $@ @echo \#define UDEV_BIN \"$(DESTDIR)$(sbindir)/udev\" >> $@ @echo \#define UDEVD_BIN \"$(DESTDIR)$(sbindir)/udevd\" >> $@ - @echo \#define UDEVD_SOCK \"$(udevdir)/\.udevd.sock\" >> $@ @echo \#define UDEVD_LOCK \"$(udevdir)/\.udevd.lock\" >> $@ # config files automatically generated @@ -325,7 +325,6 @@ static void sig_handler(int signum) case SIGINT: case SIGTERM: unlink(UDEVD_LOCK); - unlink(UDEVD_SOCK); exit(20 + signum); break; default: @@ -378,9 +377,9 @@ int main(int argc, char *argv[]) memset(&saddr, 0x00, sizeof(saddr)); saddr.sun_family = AF_LOCAL; - strcpy(saddr.sun_path, UDEVD_SOCK); + /* use abstract namespace for socket path */ + strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH); - unlink(UDEVD_SOCK); ssock = socket(AF_LOCAL, SOCK_STREAM, 0); if (ssock == -1) { dbg("error getting socket"); @@ -426,6 +425,5 @@ int main(int argc, char *argv[]) } exit: close(ssock); - unlink(UDEVD_SOCK); exit(1); } @@ -27,6 +27,7 @@ #define UDEV_MAGIC "udevd_" UDEV_VERSION #define EVENT_TIMEOUT_SEC 5 #define UDEVSEND_CONNECT_RETRY 20 /* x 100 millisec */ +#define UDEVD_SOCK_PATH "udevd" struct hotplug_msg { char magic[20]; diff --git a/udevsend.c b/udevsend.c index 9dc2b2e84..223647785 100644 --- a/udevsend.c +++ b/udevsend.c @@ -161,7 +161,8 @@ int main(int argc, char* argv[]) memset(&saddr, 0x00, sizeof(saddr)); saddr.sun_family = AF_LOCAL; - strcpy(saddr.sun_path, UDEVD_SOCK); + /* use abstract namespace for socket path */ + strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH); /* try to connect, if it fails start daemon */ retval = connect(sock, (struct sockaddr *) &saddr, sizeof(saddr)); |