[Midnightbsd-cvs] src [10802] trunk/usr.sbin/extattr/rmextattr.c: sync with freebsd

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sat Jun 9 23:14:34 EDT 2018


Revision: 10802
          http://svnweb.midnightbsd.org/src/?rev=10802
Author:   laffer1
Date:     2018-06-09 23:14:33 -0400 (Sat, 09 Jun 2018)
Log Message:
-----------
sync with freebsd

Modified Paths:
--------------
    trunk/usr.sbin/extattr/Makefile
    trunk/usr.sbin/extattr/rmextattr.8
    trunk/usr.sbin/extattr/rmextattr.c

Property Changed:
----------------
    trunk/usr.sbin/extattr/rmextattr.8

Modified: trunk/usr.sbin/extattr/Makefile
===================================================================
--- trunk/usr.sbin/extattr/Makefile	2018-06-10 03:12:51 UTC (rev 10801)
+++ trunk/usr.sbin/extattr/Makefile	2018-06-10 03:14:33 UTC (rev 10802)
@@ -1,8 +1,13 @@
 # $MidnightBSD$
+# $FreeBSD: stable/10/usr.sbin/extattr/Makefile 301145 2016-06-01 17:22:15Z asomers $
 
+.include <bsd.own.mk>
+
 PROG=	rmextattr
 MAN=	rmextattr.8
 
+LDADD=	-lsbuf
+
 LINKS+=	${BINDIR}/rmextattr ${BINDIR}/getextattr
 LINKS+=	${BINDIR}/rmextattr ${BINDIR}/setextattr
 LINKS+=	${BINDIR}/rmextattr ${BINDIR}/lsextattr
@@ -11,4 +16,8 @@
 MLINKS+=	rmextattr.8 getextattr.8
 MLINKS+=	rmextattr.8 lsextattr.8
 
+.if ${MK_TESTS} != "no"
+SUBDIR+=	tests
+.endif
+
 .include <bsd.prog.mk>

Modified: trunk/usr.sbin/extattr/rmextattr.8
===================================================================
--- trunk/usr.sbin/extattr/rmextattr.8	2018-06-10 03:12:51 UTC (rev 10801)
+++ trunk/usr.sbin/extattr/rmextattr.8	2018-06-10 03:14:33 UTC (rev 10802)
@@ -1,3 +1,4 @@
+.\" $MidnightBSD$
 .\"-
 .\" Copyright (c) 2000, 2001 Robert N. M. Watson
 .\" Copyright (c) 2002 Networks Associates Technology, Inc.
@@ -29,9 +30,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $MidnightBSD$
+.\" $FreeBSD: stable/10/usr.sbin/extattr/rmextattr.8 301145 2016-06-01 17:22:15Z asomers $
 .\"
-.Dd August 30, 2000
+.Dd April 27, 2016
 .Dt RMEXTATTR 8
 .Os
 .Sh NAME
@@ -61,6 +62,12 @@
 .Ar attrname
 .Ar attrvalue
 .Ar filename ...
+.Nm setextattr
+.Fl i
+.Op Fl fhnq
+.Ar attrnamespace
+.Ar attrname
+.Ar filename ...
 .Sh DESCRIPTION
 These
 utilities
@@ -91,6 +98,9 @@
 (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 i
+(From stdin.)
+Read attribute data from stdin instead of as an argument.
 .It Fl n
 .Dv ( NUL Ns
 -terminate.)
@@ -99,6 +109,7 @@
 .It Fl q
 (Quiet.)
 Do not print out the pathname and suppress error messages.
+When given twice, print only the attribute value, with no trailing newline.
 .It Fl s
 (Stringify.)
 Escape nonprinting characters and put quotes around the output.
@@ -109,7 +120,9 @@
 .Sh EXAMPLES
 .Bd -literal
 setextattr system md5 `md5 -q /boot/kernel/kernel` /boot/kernel/kernel
+md5 -q /boot/kernel/kernel | setextattr -i system md5 /boot/kernel/kernel
 getextattr system md5 /boot/kernel/kernel
+getextattr -qq system md5 /boot/kernel/kernel | od -x
 lsextattr system /boot/kernel/kernel
 rmextattr system md5 /boot/kernel/kernel
 .Ed
@@ -129,7 +142,3 @@
 .Sh AUTHORS
 .An Robert N M Watson
 .An Poul-Henning Kamp
-.Sh BUGS
-The
-.Nm setextattr
-utility can only be used to set attributes to strings.


Property changes on: trunk/usr.sbin/extattr/rmextattr.8
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Modified: trunk/usr.sbin/extattr/rmextattr.c
===================================================================
--- trunk/usr.sbin/extattr/rmextattr.c	2018-06-10 03:12:51 UTC (rev 10801)
+++ trunk/usr.sbin/extattr/rmextattr.c	2018-06-10 03:14:33 UTC (rev 10802)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
 /*-
  * Copyright (c) 2002, 2003 Networks Associates Technology, Inc.
  * Copyright (c) 2002 Poul-Henning Kamp.
@@ -33,10 +34,11 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $MidnightBSD$
+ * $FreeBSD: stable/10/usr.sbin/extattr/rmextattr.c 301145 2016-06-01 17:22:15Z asomers $
  */
 
 #include <sys/types.h>
+#include <sys/sbuf.h>
 #include <sys/uio.h>
 #include <sys/extattr.h>
 
@@ -64,6 +66,8 @@
 	case EASET:
 		fprintf(stderr, "usage: setextattr [-fhnq] attrnamespace");
 		fprintf(stderr, " attrname attrvalue filename ...\n");
+		fprintf(stderr, "   or  setextattr -i [-fhnq] attrnamespace");
+		fprintf(stderr, " attrname filename ...\n");
 		exit(-1);
 	case EARM:
 		fprintf(stderr, "usage: rmextattr [-fhq] attrnamespace");
@@ -99,22 +103,28 @@
 int
 main(int argc, char *argv[])
 {
-	char	*buf, *visbuf, *p;
+#define STDIN_BUF_SZ 1024
+	char	 stdin_data[STDIN_BUF_SZ];
+	char	*p;
 
 	const char *options, *attrname;
-	int	 buflen, visbuflen, ch, error, i, arg_counter, attrnamespace,
-		 minargc;
+	size_t	len;
+	ssize_t	ret;
+	int	 ch, error, i, arg_counter, attrnamespace, minargc;
 
+	char   *visbuf = NULL;
+	int	visbuflen = 0;
+	char   *buf = NULL;
+	int	buflen = 0;
+	struct	sbuf *attrvalue = NULL;
 	int	flag_force = 0;
 	int	flag_nofollow = 0;
 	int	flag_null = 0;
-	int	flag_quiet = 0;
+	int	count_quiet = 0;
+	int	flag_from_stdin = 0;
 	int	flag_string = 0;
 	int	flag_hex = 0;
 
-	visbuflen = buflen = 0;
-	visbuf = buf = NULL;
-
 	p = basename(argv[0]);
 	if (p == NULL)
 		p = argv[0];
@@ -124,8 +134,8 @@
 		minargc = 3;
 	} else if (!strcmp(p, "setextattr")) {
 		what = EASET;
-		options = "fhnq";
-		minargc = 4;
+		options = "fhinq";
+		minargc = 3;
 	} else if (!strcmp(p, "rmextattr")) {
 		what = EARM;
 		options = "fhq";
@@ -146,11 +156,14 @@
 		case 'h':
 			flag_nofollow = 1;
 			break;
+		case 'i':
+			flag_from_stdin = 1;
+			break;
 		case 'n':
 			flag_null = 1;
 			break;
 		case 'q':
-			flag_quiet = 1;
+			count_quiet += 1;
 			break;
 		case 's':
 			flag_string = 1;
@@ -167,6 +180,9 @@
 	argc -= optind;
 	argv += optind;
 
+	if (what == EASET && flag_from_stdin == 0)
+		minargc++;
+
 	if (argc < minargc)
 		usage();
 
@@ -182,9 +198,15 @@
 		attrname = NULL;
 
 	if (what == EASET) {
-		mkbuf(&buf, &buflen, strlen(argv[0]) + 1);
-		strcpy(buf, argv[0]);
-		argc--; argv++;
+		attrvalue = sbuf_new_auto();
+		if (flag_from_stdin) {
+			while ((error = read(0, stdin_data, STDIN_BUF_SZ)) > 0)
+				sbuf_bcat(attrvalue, stdin_data, error);
+		} else {
+			sbuf_cpy(attrvalue, argv[0]);
+			argc--; argv++;
+		}
+		sbuf_finish(attrvalue);
 	}
 
 	for (arg_counter = 0; arg_counter < argc; arg_counter++) {
@@ -200,86 +222,91 @@
 				continue;
 			break;
 		case EASET:
+			len = sbuf_len(attrvalue) + flag_null;
 			if (flag_nofollow)
-				error = extattr_set_link(argv[arg_counter],
-				    attrnamespace, attrname, buf,
-				    strlen(buf) + flag_null);
+				ret = extattr_set_link(argv[arg_counter],
+				    attrnamespace, attrname,
+				    sbuf_data(attrvalue), len);
 			else
-				error = extattr_set_file(argv[arg_counter],
-				    attrnamespace, attrname, buf,
-				    strlen(buf) + flag_null);
-			if (error >= 0)
+				ret = extattr_set_file(argv[arg_counter],
+				    attrnamespace, attrname,
+				    sbuf_data(attrvalue), len);
+			if (ret >= 0) {
+				if ((size_t)ret != len && !count_quiet) {
+					warnx("Set %zd bytes of %zu for %s",
+					    ret, len, attrname);
+				}
 				continue;
+			}
 			break;
 		case EALS:
 			if (flag_nofollow)
-				error = extattr_list_link(argv[arg_counter],
+				ret = extattr_list_link(argv[arg_counter],
 				    attrnamespace, NULL, 0);
 			else
-				error = extattr_list_file(argv[arg_counter],
+				ret = extattr_list_file(argv[arg_counter],
 				    attrnamespace, NULL, 0);
-			if (error < 0)
+			if (ret < 0)
 				break;
-			mkbuf(&buf, &buflen, error);
+			mkbuf(&buf, &buflen, ret);
 			if (flag_nofollow)
-				error = extattr_list_link(argv[arg_counter],
+				ret = extattr_list_link(argv[arg_counter],
 				    attrnamespace, buf, buflen);
 			else
-				error = extattr_list_file(argv[arg_counter],
+				ret = extattr_list_file(argv[arg_counter],
 				    attrnamespace, buf, buflen);
-			if (error < 0)
+			if (ret < 0)
 				break;
-			if (!flag_quiet)
+			if (!count_quiet)
 				printf("%s\t", argv[arg_counter]);
-			for (i = 0; i < error; i += ch + 1) {
+			for (i = 0; i < ret; i += ch + 1) {
 			    /* The attribute name length is unsigned. */
 			    ch = (unsigned char)buf[i];
 			    printf("%s%*.*s", i ? "\t" : "",
 				ch, ch, buf + i + 1);
 			}
-			printf("\n");
+			if (!count_quiet || ret > 0)
+				printf("\n");
 			continue;
 		case EAGET:
 			if (flag_nofollow)
-				error = extattr_get_link(argv[arg_counter],
+				ret = extattr_get_link(argv[arg_counter],
 				    attrnamespace, attrname, NULL, 0);
 			else
-				error = extattr_get_file(argv[arg_counter],
+				ret = extattr_get_file(argv[arg_counter],
 				    attrnamespace, attrname, NULL, 0);
-			if (error < 0)
+			if (ret < 0)
 				break;
-			mkbuf(&buf, &buflen, error);
+			mkbuf(&buf, &buflen, ret);
 			if (flag_nofollow)
-				error = extattr_get_link(argv[arg_counter],
+				ret = extattr_get_link(argv[arg_counter],
 				    attrnamespace, attrname, buf, buflen);
 			else
-				error = extattr_get_file(argv[arg_counter],
+				ret = extattr_get_file(argv[arg_counter],
 				    attrnamespace, attrname, buf, buflen);
-			if (error < 0)
+			if (ret < 0)
 				break;
-			if (!flag_quiet)
+			if (!count_quiet)
 				printf("%s\t", argv[arg_counter]);
 			if (flag_string) {
-				mkbuf(&visbuf, &visbuflen, error * 4 + 1);
-				strvisx(visbuf, buf, error,
+				mkbuf(&visbuf, &visbuflen, ret * 4 + 1);
+				strvisx(visbuf, buf, ret,
 				    VIS_SAFE | VIS_WHITE);
-				printf("\"%s\"\n", visbuf);
-				continue;
+				printf("\"%s\"", visbuf);
 			} else if (flag_hex) {
-				for (i = 0; i < error; i++)
+				for (i = 0; i < ret; i++)
 					printf("%s%02x", i ? " " : "",
-					    buf[i]);
-				printf("\n");
-				continue;
+							(unsigned char)buf[i]);
 			} else {
-				fwrite(buf, error, 1, stdout);
+				fwrite(buf, ret, 1, stdout);
+			}
+			if (count_quiet < 2)
 				printf("\n");
-				continue;
-			}
+			continue;
 		default:
 			break;
 		}
-		if (!flag_quiet) 
+		if (!count_quiet) 
 			warn("%s: failed", argv[arg_counter]);
 		if (flag_force)
 			continue;



More information about the Midnightbsd-cvs mailing list