[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