#include <string.h>
#endif
--- orig/syscall.c 2004-08-02 21:56:59
-+++ syscall.c 2004-06-18 17:38:35
-@@ -76,6 +76,29 @@ int do_mknod(char *pathname, mode_t mode
++++ syscall.c 2004-09-22 22:34:50
+@@ -76,6 +76,28 @@ int do_mknod(char *pathname, mode_t mode
{
if (dry_run) return 0;
RETURN_ERROR_IF_RO_OR_LO;
+ int len = strlen(pathname) + 1; /* include null */
+
+ saddr.sun_family = AF_UNIX;
-+ strncpy(saddr.sun_path, pathname, sizeof saddr.sun_path);
++ strlcpy(saddr.sun_path, pathname, sizeof saddr.sun_path);
+ saddr.sun_len = len > sizeof saddr.sun_path ? sizeof saddr.sun_path : len;
+
-+ if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
-+ return -1;
-+ unlink(pathname);
-+ if ((bind(sock, (struct sockaddr*)&saddr, sizeof saddr)) < 0)
++ if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0
++ || (unlink(pathname) < 0 && errno != ENOENT)
++ || (bind(sock, (struct sockaddr*)&saddr, sizeof saddr)) < 0)
+ return -1;
+ close(sock);
+ return do_chmod(pathname, mode);