FreeBSD mknod refuses to create pipes and fifos

Joao Carlos Mendes Luis jonny at jonny.eng.br
Sun Nov 30 14:44:38 EST 2003


>Submitter-Id:	current-users
>Originator:	Joao Carlos Mendes Luis
>Organization:	
>Confidential:	no 
>Synopsis:	FreeBSD mknod refuses to create pipes and fifos
>Severity:	non-critical
>Priority:	low
>Category:	kern
>Class:		change-request
>Release:	FreeBSD 4.9-RC i386
>Environment:
System: FreeBSD zeus.faperj.br 4.9-RC FreeBSD 4.9-RC #3: Sat Oct 25 17:54:52 BRST 2003 Jonny at zeus.faperj.br:/usr/cvsup/RELENG_4/src/sys/compile/ZEUS i386


>Description:

	mknod(2) does not create fifos and sockets, as expected from rsync

	Probably this is supported in some other operating system

>How-To-Repeat:

	Copy a fifo and a socket with rsync

	Example:
	mkfifo /tmp/fifo
	rsync -avP /var/run/log /tmp/fifo /tmp/output/

>Fix:

Suggested patches to kernel:

--- sys/kern/vfs_syscalls.c.orig	Sun Nov 30 00:59:29 2003
+++ sys/kern/vfs_syscalls.c	Sun Nov 30 01:25:35 2003
@@ -1189,6 +1189,10 @@
 	case S_IFBLK:
 		error = suser(p);
 		break;
+	case S_IFIFO:
+	case S_IFSOCK:
+		error = 0;
+		break;
 	default:
 		error = suser_xxx(0, p, PRISON_ROOT);
 		break;
@@ -1217,6 +1221,12 @@
 			break;
 		case S_IFBLK:
 			vattr.va_type = VBLK;
+			break;
+		case S_IFSOCK:
+			vattr.va_type = VSOCK;
+			break;
+		case S_IFIFO:
+			vattr.va_type = VFIFO;
 			break;
 		case S_IFWHT:
 			whiteout = 1;


1) I'm not sure if FIFO and/or SOCK creation with mknod should be allowed to
non-root users.  This patch allows non-root to create them, but it's easy to
change that.

2) Should we allow IFREG creation with mknod?  I did not find a reason to
disallow that, but since this does not bother me with rsync, I did not
touch that...

3) I did test it with ffs, but did not test with other media, like NFS
or EXT2FS.

Thanks a lot for your attention...




More information about the rsync mailing list