bin/55366: [patch] vinum makes /dev/vinum with wrong ownership

Dmitry Morozovsky marck at rinet.ru
Fri Aug 8 02:00:35 PDT 2003


>Number:         55366
>Category:       bin
>Synopsis:       [patch] vinum makes /dev/vinum with wrong ownership
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Aug 08 02:00:33 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator:     Dmitry Morozovsky
>Release:        FreeBSD 4-STABLE i386
>Organization:
Cronyx Plus LLC (RiNet ISP)
>Environment:
System: FreeBSD 4-STABLE 


>Description:

vinum(8) creates /dev/vinum with default ownership. this leads, in particular,
to unavailability to dump vinum volumes by user from group 'operator'

>How-To-Repeat:

create vinum volume
su operator
dump -0a -f /dev/null /dev/vinum/somevolume

>Fix:


Index: sys/dev/vinum/vinumvar.h
===================================================================
RCS file: /home/ncvs/src/sys/dev/vinum/vinumvar.h,v
retrieving revision 1.32.2.4
diff -u -r1.32.2.4 vinumvar.h
--- sys/dev/vinum/vinumvar.h	28 May 2001 05:56:27 -0000	1.32.2.4
+++ sys/dev/vinum/vinumvar.h	8 Aug 2003 07:40:20 -0000
@@ -216,6 +216,7 @@
 };
 
 #define VINUM_DIR   "/dev/vinum"
+#define VINUMDEVGRP "operator"
 
 /*
  * These definitions help catch
Index: sbin/vinum/v.c
===================================================================
RCS file: /home/ncvs/src/sbin/vinum/v.c,v
retrieving revision 1.26.2.3
diff -u -r1.26.2.3 v.c
--- sbin/vinum/v.c	13 Mar 2001 03:04:06 -0000	1.26.2.3
+++ sbin/vinum/v.c	8 Aug 2003 07:40:20 -0000
@@ -62,6 +62,7 @@
 #include <sys/linker.h>
 #include <sys/module.h>
 #include <sys/resource.h>
+#include <grp.h>
 
 FILE *cf;						    /* config file handle */
 FILE *history;						    /* history file */
@@ -520,6 +521,8 @@
     int plexno;
     int sdno;
     int driveno;
+    gid_t opgrp;
+    struct group *gr;
 
     if (access("/dev", W_OK) < 0) {			    /* can't access /dev to write? */
 	if (errno == EROFS)				    /* because it's read-only, */
@@ -535,7 +538,13 @@
     if (superdev >= 0)					    /* super device open */
 	close(superdev);
 
+    opgrp = ((gr = getgrnam(VINUMDEVGRP)) == NULL) ? 0 : gr->gr_gid;
     system("rm -rf " VINUM_DIR);			    /* remove the old directories */
+    if (mkdir(VINUM_DIR, ACCESSPERMS) != 0 ||
+        chown(VINUM_DIR, 0, opgrp) != 0) {
+	    perror(VINUMMOD ": can't remake " VINUM_DIR);
+	    return;
+    }
     system("mkdir -p " VINUM_DIR "/drive "		    /* and make them again */
 	VINUM_DIR "/plex "
 	VINUM_DIR "/sd "
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list