svn commit: trunk/busybox/coreutils

vda at busybox.net vda at busybox.net
Wed Sep 26 10:34:55 UTC 2007


Author: vda
Date: 2007-09-26 03:34:54 -0700 (Wed, 26 Sep 2007)
New Revision: 20037

Log:
install: fix bug in "install -c file dir" (tries to copy dir into dir too)
install: 'support' (ignore) -v and -b



Modified:
   trunk/busybox/coreutils/install.c


Changeset:
Modified: trunk/busybox/coreutils/install.c
===================================================================
--- trunk/busybox/coreutils/install.c	2007-09-26 10:23:31 UTC (rev 20036)
+++ trunk/busybox/coreutils/install.c	2007-09-26 10:34:54 UTC (rev 20037)
@@ -23,6 +23,8 @@
 	"group\0"               No_argument       "g"
 	"mode\0"                No_argument       "m"
 	"owner\0"               No_argument       "o"
+/* autofs build insists of using -b --suffix=.orig */
+/* TODO? (short option for --suffix is -S) */
 #if ENABLE_SELINUX
 	"context\0"             Required_argument "Z"
 	"preserve_context\0"    No_argument       "\xff"
@@ -33,8 +35,6 @@
 
 
 #if ENABLE_SELINUX
-static bool use_default_selinux_context = 1;
-
 static void setdefaultfilecon(const char *path)
 {
 	struct stat s;
@@ -83,18 +83,21 @@
 	int isdir;
 #if ENABLE_SELINUX
 	security_context_t scontext;
+	bool use_default_selinux_context = 1;
 #endif
 	enum {
-		OPT_CMD           =  0x1,
-		OPT_DIRECTORY     =  0x2,
-		OPT_PRESERVE_TIME =  0x4,
-		OPT_STRIP         =  0x8,
-		OPT_GROUP         = 0x10,
-		OPT_MODE          = 0x20,
-		OPT_OWNER         = 0x40,
+		OPT_c             = 1 << 0,
+		OPT_v             = 1 << 1,
+		OPT_b             = 1 << 2,
+		OPT_DIRECTORY     = 1 << 3,
+		OPT_PRESERVE_TIME = 1 << 4,
+		OPT_STRIP         = 1 << 5,
+		OPT_GROUP         = 1 << 6,
+		OPT_MODE          = 1 << 7,
+		OPT_OWNER         = 1 << 8,
 #if ENABLE_SELINUX
-		OPT_SET_SECURITY_CONTEXT = 0x80,
-		OPT_PRESERVE_SECURITY_CONTEXT = 0x100,
+		OPT_SET_SECURITY_CONTEXT = 1 << 9,
+		OPT_PRESERVE_SECURITY_CONTEXT = 1 << 10,
 #endif
 	};
 
@@ -103,23 +106,24 @@
 #endif
 	opt_complementary = "s--d:d--s" USE_SELINUX(":Z--\xff:\xff--Z");
 	/* -c exists for backwards compatibility, it's needed */
-
-	flags = getopt32(argv, "cdpsg:m:o:" USE_SELINUX("Z:"),
+	/* -v is ignored ("print name of each created directory") */
+	/* -b is ignored ("make a backup of each existing destination file") */
+	flags = getopt32(argv, "cvb" "dpsg:m:o:" USE_SELINUX("Z:"),
 			&gid_str, &mode_str, &uid_str USE_SELINUX(, &scontext));
 	argc -= optind;
 	argv += optind;
 
 #if ENABLE_SELINUX
-	if (flags & OPT_PRESERVE_SECURITY_CONTEXT) {
-		use_default_selinux_context = 0;
-		copy_flags |= FILEUTILS_PRESERVE_SECURITY_CONTEXT;
+	if (flags & (OPT_PRESERVE_SECURITY_CONTEXT|OPT_SET_SECURITY_CONTEXT)) {
 		selinux_or_die();
-	}
-	if (flags & OPT_SET_SECURITY_CONTEXT) {
-		selinux_or_die();
-		setfscreatecon_or_die(scontext);
 		use_default_selinux_context = 0;
-		copy_flags |= FILEUTILS_SET_SECURITY_CONTEXT;
+		if (flags & OPT_PRESERVE_SECURITY_CONTEXT) {
+			copy_flags |= FILEUTILS_PRESERVE_SECURITY_CONTEXT;
+		}
+		if (flags & OPT_SET_SECURITY_CONTEXT) {
+			setfscreatecon_or_die(scontext);
+			copy_flags |= FILEUTILS_SET_SECURITY_CONTEXT;
+		}
 	}
 #endif
 
@@ -172,6 +176,7 @@
 		bb_show_usage();
 
 	last = argv[argc - 1];
+	argv[argc - 1] = NULL;
 	/* coreutils install resolves link in this case, don't use lstat */
 	isdir = stat(last, &statbuf) < 0 ? 0 : S_ISDIR(statbuf.st_mode);
 




More information about the busybox-cvs mailing list