[systemd-devel] [PATCHv6] tmpfiles, man: Add xattr support to tmpfiles
Maciej Wereski
m.wereski at partner.samsung.com
Wed Nov 12 05:01:42 PST 2014
10.11.2014 at 23:55 Lennart Poettering <lennart at poettering.net> wrote:
> On Thu, 30.10.14 12:21, Maciej Wereski (m.wereski at partner.samsung.com)
> wrote:
>
>>
>> +static int get_xattrs_from_arg(Item *i) {
>> + _cleanup_free_ char *xattr = NULL;
>> + const char *p;
>> + int n;
>> +
>> + assert(i);
>> + if (i->type != SET_XATTR)
>> + return 0;
>> +
>> + if (!i->argument) {
>> + log_error("%s: Argument can't be empty!", i->path);
>> + return -EBADMSG;
>> + }
>> + p = i->argument;
>> +
>> + while ((n = unquote_first_word(&p, &xattr)) > 0) {
>> + if (strv_extend(&i->xattrs, xattr) < 0)
>> + return log_oom();
>> + free(xattr);
>> + xattr = NULL;
>> + }
>
> Please use strv_consume() or strv_push() here, to make the additional
> copy unnecessary. Also please, generate a parse failure if
> unquote_first_workd() fails due to parse errors.
What does it mean parse failure? I'm passing return value of
unquote_first_word(). Should it be something else?
>> + r = get_xattrs_from_arg(i);
>> + if (r < 0)
>> + return r;
>> +
>> + if (strv_isempty(i->xattrs))
>> + return 0;
>> +
>> + STRV_FOREACH(x, i->xattrs) {
>> + _cleanup_free_ char *name = NULL, *value = NULL, *tmp
>> = NULL;
>> + n = split_pair(*x, "=", &name, &value);
>> + if (n < 0)
>> + return n;
>> + tmp = unquote(value, "\"");
>> + if (!tmp)
>> + return log_oom();
>> + free(value);
>> + value = cunescape(tmp);
>> + if (!value)
>> + return log_oom();
>> + n = strlen(value);
>> + if (i->type == CREATE_SYMLINK) {
>> + if (lsetxattr(path, name, value, n+1, 0) < 0) {
>> + log_error("Setting extended attribute
>> %s=%s on symlink %s failed: %m", name, value, path);
>> + return -errno;
>> + }
>> + }
>> + else if (setxattr(path, name, value, n+1, 0) < 0) {
>> + log_error("Setting extended attribute %s=%s on
>> %s failed: %m", name, value, path);
>> + return -errno;
>> + }
>
> The indentation is wrong.
> [cut]
Hmm? I'm using systemd .vimrc, so what is wrong with indentation here
precisely?
>>
>> @@ -894,6 +983,12 @@ static int create_item(Item *i) {
>> r = glob_item(i, item_set_perms);
>> if (r < 0)
>> return r;
>> +
>> + if (i->xattrs) {
>> + r = glob_item(i, item_set_xattrs);
>> + if (r < 0)
>> + return r;
>> + }
>> break;
>
> Hmm, ths would mean we resolve the globbing twice. Once for
> item_set_perms() and once for item_set_xattr(). I think it would be
> better to do this in one call.
>
I've removed this completely. item_set_perms already calls label_fix,
which calls SMACK function.
regards,
--
Maciej Wereski
Samsung R&D Institute Poland
Samsung Electronics
m.wereski at partner.samsung.com
More information about the systemd-devel
mailing list