From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kay Sievers Date: Thu, 05 Feb 2004 01:07:48 +0000 Subject: [patch] udevd - switch socket path to abstract namespace Message-Id: <20040205010748.GA1247@vrfy.org> MIME-Version: 1 Content-Type: multipart/mixed; boundary="ibTvN161/egqYuK8" List-Id: To: linux-hotplug@vger.kernel.org --ibTvN161/egqYuK8 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline As Chris Friesen 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) thanks, Kay --ibTvN161/egqYuK8 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="02-abstract-namespace-socket.patch" ===== Makefile 1.102 vs edited ===== --- 1.102/Makefile Wed Feb 4 01:56:10 2004 +++ edited/Makefile Thu Feb 5 01:41:19 2004 @@ -241,7 +241,6 @@ @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 ===== udevd.c 1.11 vs edited ===== --- 1.11/udevd.c Thu Feb 5 01:40:44 2004 +++ edited/udevd.c Thu Feb 5 01:42:59 2004 @@ -325,7 +325,6 @@ case SIGINT: case SIGTERM: unlink(UDEVD_LOCK); - unlink(UDEVD_SOCK); exit(20 + signum); break; default: @@ -378,9 +377,9 @@ 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 @@ } exit: close(ssock); - unlink(UDEVD_SOCK); exit(1); } ===== udevd.h 1.6 vs edited ===== --- 1.6/udevd.h Mon Feb 2 03:40:48 2004 +++ edited/udevd.h Thu Feb 5 01:41:33 2004 @@ -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]; ===== udevsend.c 1.15 vs edited ===== --- 1.15/udevsend.c Thu Feb 5 01:40:44 2004 +++ edited/udevsend.c Thu Feb 5 01:41:47 2004 @@ -161,7 +161,8 @@ 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)); --ibTvN161/egqYuK8-- ------------------------------------------------------- The SF.Net email is sponsored by EclipseCon 2004 Premiere Conference on Open Tools Development and Integration See the breadth of Eclipse activity. February 3-5 in Anaheim, CA. http://www.eclipsecon.org/osdn _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel