summaryrefslogtreecommitdiffstats
path: root/sbin/vinum
diff options
context:
space:
mode:
authorjoerg <joerg@FreeBSD.org>2003-01-16 23:48:34 +0000
committerjoerg <joerg@FreeBSD.org>2003-01-16 23:48:34 +0000
commitc00f972df5d07e956d5368158322c8a24947cc1d (patch)
tree82d8ebbb3848b0c113fd948890baea60f6131014 /sbin/vinum
parent0dc153a63a0ded44a330134f04f0bace5398dcd4 (diff)
downloadFreeBSD-src-c00f972df5d07e956d5368158322c8a24947cc1d.zip
FreeBSD-src-c00f972df5d07e956d5368158322c8a24947cc1d.tar.gz
Make vinum disk-related devices readable by group "operator" to match
the configuration of any other disk-like devices. This is the non-DEVFS part which is normally not used in 5.x, but due for MFC into 4.x. PR: bin/28294, bin/32588 MFC after: 1 week
Diffstat (limited to 'sbin/vinum')
-rw-r--r--sbin/vinum/v.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/sbin/vinum/v.c b/sbin/vinum/v.c
index fc8fb29..c6661b2 100644
--- a/sbin/vinum/v.c
+++ b/sbin/vinum/v.c
@@ -43,6 +43,7 @@
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
+#include <grp.h>
#include <sys/mman.h>
#include <netdb.h>
#include <paths.h>
@@ -103,6 +104,9 @@ struct _drive drive;
jmp_buf command_fail; /* return on a failed command */
int superdev; /* vinum super device */
int no_devfs = 1; /* set if we have no devfs active */
+gid_t gid_operator; /* group operator for chown */
+#define GROUP_OPERATOR "operator"
+#define UID_ROOT 0 /* no need to lookup... */
void start_daemon(void);
@@ -115,6 +119,7 @@ int
main(int argc, char *argv[], char *envp[])
{
struct stat histstat;
+ struct group *g;
if (modfind(VINUMMOD) < 0) {
/* need to load the vinum module */
@@ -197,6 +202,9 @@ main(int argc, char *argv[], char *envp[])
/* Check if the dæmon is running. If not, start it in the
* background */
start_daemon();
+ if ((g = getgrnam(GROUP_OPERATOR)) != NULL)
+ gid_operator = g->gr_gid;
+ endgrent();
if (argc > 1) { /* we have a command on the line */
if (setjmp(command_fail) != 0) /* long jumped out */
@@ -606,17 +614,20 @@ make_vol_dev(int volno, int recurse)
sprintf(filename, VINUM_DIR "/%s", vol.name);
if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, voldev) < 0)
fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno));
+ (void)chown(filename, UID_ROOT, gid_operator);
/* Create /dev/vinum/vol/<myvol> */
sprintf(filename, VINUM_DIR "/vol/%s", vol.name);
if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, voldev) < 0)
fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno));
+ (void)chown(filename, UID_ROOT, gid_operator);
if (vol.plexes > 0) {
/* Create /dev/vinum/vol/<myvol>.plex/ */
sprintf(filename, VINUM_DIR "/vol/%s.plex", vol.name);
if (mkdir(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IXOTH) < 0)
fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno));
+ (void)chown(filename, UID_ROOT, gid_operator);
}
if (recurse)
for (plexno = 0; plexno < vol.plexes; plexno++)
@@ -643,6 +654,7 @@ make_plex_dev(int plexno, int recurse)
sprintf(filename, VINUM_DIR "/plex/%s", plex.name);
if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, plexdev) < 0)
fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno));
+ (void)chown(filename, UID_ROOT, gid_operator);
if (plex.volno >= 0) {
get_volume_info(&vol, plex.volno);
@@ -652,11 +664,13 @@ make_plex_dev(int plexno, int recurse)
sprintf(filename, VINUM_DIR "/vol/%s.plex/%s", vol.name, plex.name);
if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, plexdev) < 0)
fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno));
+ (void)chown(filename, UID_ROOT, gid_operator);
/* Create directory /dev/vinum/vol/<vol>.plex/<plex>.sd */
sprintf(filename, VINUM_DIR "/vol/%s.plex/%s.sd", vol.name, plex.name);
if (mkdir(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IXOTH) < 0)
fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno));
+ (void)chown(filename, UID_ROOT, gid_operator);
}
if (recurse) {
for (sdno = 0; sdno < plex.subdisks; sdno++) {
@@ -682,6 +696,7 @@ make_sd_dev(int sdno)
sprintf(filename, VINUM_DIR "/sd/%s", sd.name);
if (mknod(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR, sddev) < 0)
fprintf(stderr, "Can't create %s: %s\n", filename, strerror(errno));
+ (void)chown(filename, UID_ROOT, gid_operator);
}
}
OpenPOWER on IntegriCloud