Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Oct 2002 09:32:55 -0700 (PDT)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 19032 for review
Message-ID:  <200210101632.g9AGWt9d087961@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/p4db/chv.cgi?CH=19032

Change 19032 by rwatson@rwatson_tislabs on 2002/10/10 09:32:28

	Restore consistency with other base system security and
	non-security attribute management tools.  By default, follow
	symlinks in EA operations; if the -h flag is specified, act
	on the link instead of the target.
	
	Discussed with:	phk, others

Affected files ...

.. //depot/projects/trustedbsd/mac/usr.sbin/extattr/rmextattr.8#4 edit
.. //depot/projects/trustedbsd/mac/usr.sbin/extattr/rmextattr.c#6 edit

Differences ...

==== //depot/projects/trustedbsd/mac/usr.sbin/extattr/rmextattr.8#4 (text+ko) ====

@@ -42,21 +42,21 @@
 .Nd manipulated extended attributes
 .Sh SYNOPSIS
 .Nm getextattr
-.Op Fl fqsx
+.Op Fl fhqsx
 .Ar attrnamespace
 .Ar attrname
 .Ar filename ...
 .Nm lsextattr
-.Op Fl fq
+.Op Fl fhq
 .Ar attrnamespace
 .Ar filename ...
 .Nm rmextattr
-.Op Fl fq
+.Op Fl fhq
 .Ar attrnamespace
 .Ar attrname
 .Ar filename ...
 .Nm setextattr
-.Op Fl fnq
+.Op Fl fhnq
 .Ar attrnamespace
 .Ar attrname
 .Ar attrvalue
@@ -77,15 +77,15 @@
 the name of the target file or directory,
 .Ar attrvalue
 a string to store in the attribute.
-Since it is not useful to operate on the target of a symbolic link, the given
-.Ar filename
-is not followed if it is one.
 .Pp
 The following options are available:
 .Bl -tag -width flag
 .It Fl -f
 (Force) Ignore errors on individual filenames and continue with
 the remaining arguments.
+.It Fl -h
+(No follow) If the file is a symbolic link, perform the operation on the
+link itself rather than the file that the link points to.
 .It Fl -n
 (Nul-terminate) Nul-terminate the extent content written out.
 .It Fl -q

==== //depot/projects/trustedbsd/mac/usr.sbin/extattr/rmextattr.c#6 (text+ko) ====

@@ -58,19 +58,19 @@
 
 	switch (what) {
 	case EAGET:
-		fprintf(stderr, "usage: getextattr [-fqsx] attrnamespace");
+		fprintf(stderr, "usage: getextattr [-fhqsx] attrnamespace");
 		fprintf(stderr, " attrname filename ...\n");
 		exit(-1);
 	case EASET:
-		fprintf(stderr, "usage: setextattr [-fnq] attrnamespace");
+		fprintf(stderr, "usage: setextattr [-fhnq] attrnamespace");
 		fprintf(stderr, " attrname attrvalue filename ...\n");
 		exit(-1);
 	case EARM:
-		fprintf(stderr, "usage: rmextattr [-fq] attrnamespace");
+		fprintf(stderr, "usage: rmextattr [-fhq] attrnamespace");
 		fprintf(stderr, " attrname filename ...\n");
 		exit(-1);
 	case EALS:
-		fprintf(stderr, "usage: lsextattr [-fq] attrnamespace");
+		fprintf(stderr, "usage: lsextattr [-fhq] attrnamespace");
 		fprintf(stderr, " filename ...\n");
 		exit(-1);
 	case EADUNNO:
@@ -106,6 +106,7 @@
 		 minargc;
 
 	int	flag_force = 0;
+	int	flag_nofollow = 0;
 	int	flag_null = 0;
 	int	flag_quiet = 0;
 	int	flag_string = 0;
@@ -119,19 +120,19 @@
 		p = argv[0];
 	if (!strcmp(p, "getextattr")) {
 		what = EAGET;
-		options = "fqsx";
+		options = "fhqsx";
 		minargc = 3;
 	} else if (!strcmp(p, "setextattr")) {
 		what = EASET;
-		options = "fnq";
+		options = "fhnq";
 		minargc = 4;
 	} else if (!strcmp(p, "rmextattr")) {
 		what = EARM;
-		options = "fq";
+		options = "fhq";
 		minargc = 3;
 	} else if (!strcmp(p, "lsextattr")) {
 		what = EALS;
-		options = "fq";
+		options = "fhq";
 		minargc = 2;
 	} else {
 		usage();
@@ -142,6 +143,9 @@
 		case 'f':
 			flag_force = 1;
 			break;
+		case 'h':
+			flag_nofollow = 1;
+			break;
 		case 'n':
 			flag_null = 1;
 			break;
@@ -187,27 +191,44 @@
 	for (arg_counter = 0; arg_counter < argc; arg_counter++) {
 		switch (what) {
 		case EARM:
-			error = extattr_delete_link(argv[arg_counter],
-			    attrnamespace, attrname);
+			if (flag_nofollow)
+				error = extattr_delete_link(argv[arg_counter],
+				    attrnamespace, attrname);
+			else
+				error = extattr_delete_file(argv[arg_counter],
+				    attrnamespace, attrname);
 			if (error >= 0)
 				continue;
 			break;
 		case EASET:
-			error = extattr_set_link(argv[arg_counter],
-			    attrnamespace, attrname, buf,
-			    strlen(buf) + flag_null);
+			if (flag_nofollow)
+				error = extattr_set_link(argv[arg_counter],
+				    attrnamespace, attrname, buf,
+				    strlen(buf) + flag_null);
+			else
+				error = extattr_set_file(argv[arg_counter],
+				    attrnamespace, attrname, buf,
+				    strlen(buf) + flag_null);
 			if (error >= 0)
 				continue;
 			break;
 		case EALS:
 		case EAGET:
-			error = extattr_get_link(argv[arg_counter],
-			    attrnamespace, attrname, NULL, 0);
+			if (flag_nofollow)
+				error = extattr_get_link(argv[arg_counter],
+				    attrnamespace, attrname, NULL, 0);
+			else
+				error = extattr_get_file(argv[arg_counter],
+				    attrnamespace, attrname, NULL, 0);
 			if (error < 0)
 				break;
 			mkbuf(&buf, &buflen, error);
-			error = extattr_get_link(argv[arg_counter],
-			    attrnamespace, attrname, buf, buflen);
+			if (flag_nofollow)
+				error = extattr_get_link(argv[arg_counter],
+				    attrnamespace, attrname, buf, buflen);
+			else
+				error = extattr_get_file(argv[arg_counter],
+				    attrnamespace, attrname, buf, buflen);
 			if (error < 0)
 				break;
 			if (!flag_quiet)

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe p4-projects" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200210101632.g9AGWt9d087961>