Module Name: src Committed By: christos Date: Sun Dec 26 14:48:34 UTC 2010
Modified Files: src/external/gpl2/lvm2/dist/daemons/cmirrord: functions.c src/external/gpl2/lvm2/dist/libdm: libdm-common.c src/external/gpl2/lvm2/dist/libdm/ioctl: libdm-iface.c libdm-nbsd-iface.c Log Message: - don't forget to restore the umask on error. - save and restore umask for control - chown/chgrp for raw devices To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 \ src/external/gpl2/lvm2/dist/daemons/cmirrord/functions.c cvs rdiff -u -r1.5 -r1.6 src/external/gpl2/lvm2/dist/libdm/libdm-common.c cvs rdiff -u -r1.2 -r1.3 \ src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-iface.c cvs rdiff -u -r1.8 -r1.9 \ src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-nbsd-iface.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/gpl2/lvm2/dist/daemons/cmirrord/functions.c diff -u src/external/gpl2/lvm2/dist/daemons/cmirrord/functions.c:1.2 src/external/gpl2/lvm2/dist/daemons/cmirrord/functions.c:1.3 --- src/external/gpl2/lvm2/dist/daemons/cmirrord/functions.c:1.2 Thu Dec 23 12:46:54 2010 +++ src/external/gpl2/lvm2/dist/daemons/cmirrord/functions.c Sun Dec 26 09:48:34 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: functions.c,v 1.2 2010/12/23 17:46:54 christos Exp $ */ +/* $NetBSD: functions.c,v 1.3 2010/12/26 14:48:34 christos Exp $ */ /* * Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved. @@ -303,6 +303,7 @@ struct dirent *dep; struct stat statbuf; int major, minor; + mode_t old_umask; if (!strstr(major_minor_str, ":")) { r = stat(major_minor_str, &statbuf); @@ -350,7 +351,9 @@ LOG_DBG("Path not found for %d/%d", major, minor); LOG_DBG("Creating /dev/mapper/%d-%d", major, minor); sprintf(path_rtn, "/dev/mapper/%d-%d", major, minor); + old_umask = umask(0); r = mknod(path_rtn, S_IFBLK | DM_DEVICE_MODE, MKDEV(major, minor)); + umask(old_umask); if (r != -1) r = chown(path_rtn, DM_DEVICE_UID, DM_DEVICE_GID); Index: src/external/gpl2/lvm2/dist/libdm/libdm-common.c diff -u src/external/gpl2/lvm2/dist/libdm/libdm-common.c:1.5 src/external/gpl2/lvm2/dist/libdm/libdm-common.c:1.6 --- src/external/gpl2/lvm2/dist/libdm/libdm-common.c:1.5 Sat Dec 5 06:42:24 2009 +++ src/external/gpl2/lvm2/dist/libdm/libdm-common.c Sun Dec 26 09:48:34 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: libdm-common.c,v 1.5 2009/12/05 11:42:24 haad Exp $ */ +/* $NetBSD: libdm-common.c,v 1.6 2010/12/26 14:48:34 christos Exp $ */ /* * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. @@ -450,11 +450,17 @@ } old_mask = umask(0); - if (mknod(rpath, S_IFCHR | mode, rdev) < 0) { + umask(old_mask); log_error("Unable to make device node for '%s'", raw_devname); return 0; } + umask(old_mask); + + if (chown(path, uid, gid) < 0) { + log_sys_error("chown", rpath); + return 0; + } #endif _build_dev_path(path, sizeof(path), dev_name); @@ -505,7 +511,7 @@ char path[PATH_MAX]; struct stat info; - #ifdef __NetBSD__ +#ifdef __NetBSD__ char rpath[PATH_MAX]; char raw_devname[DM_NAME_LEN+1]; /* r + other device name */ Index: src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-iface.c diff -u src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-iface.c:1.2 src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-iface.c:1.3 --- src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-iface.c:1.2 Thu Dec 23 12:46:54 2010 +++ src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-iface.c Sun Dec 26 09:48:34 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: libdm-iface.c,v 1.2 2010/12/23 17:46:54 christos Exp $ */ +/* $NetBSD: libdm-iface.c,v 1.3 2010/12/26 14:48:34 christos Exp $ */ /* * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. @@ -245,11 +245,14 @@ log_verbose("Creating device %s (%u, %u)", control, major, minor); + old_umask = umask(0); if (mknod(control, S_IFCHR | DM_DEVICE_MODE, MKDEV(major, minor)) < 0) { + umask(old_umask); log_sys_error("mknod", control); return 0; } + umask(old_umask); if (chown(control, DM_DEVICE_UID, DM_DEVICE_GID) == -1) { log_sys_error("cbown", control); return 0; Index: src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-nbsd-iface.c diff -u src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-nbsd-iface.c:1.8 src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-nbsd-iface.c:1.9 --- src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-nbsd-iface.c:1.8 Thu Dec 23 12:46:54 2010 +++ src/external/gpl2/lvm2/dist/libdm/ioctl/libdm-nbsd-iface.c Sun Dec 26 09:48:34 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: libdm-nbsd-iface.c,v 1.8 2010/12/23 17:46:54 christos Exp $ */ +/* $NetBSD: libdm-nbsd-iface.c,v 1.9 2010/12/26 14:48:34 christos Exp $ */ /* * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. @@ -153,7 +153,7 @@ if (!major) return 0; - old_umask = umask(0022); + old_umask = umask(DM_DEV_DIR_UMASK); ret = dm_create_dir(dm_dir()); umask(old_umask); @@ -162,11 +162,14 @@ log_verbose("Creating device %s (%u, %u)", control, major, minor); + old_umask = umask(0); if (mknod(control, S_IFCHR | DM_DEVICE_MODE, MKDEV(major, minor)) < 0) { + umask(old_umask); log_sys_error("mknod", control); return 0; } + umask(old_umask); if (chown(control, DM_DEVICE_UID, DM_DEVICE_GID) == -1) { log_sys_error("chown", control); return 0;