[systemd-devel] [PATCH v2, ping?] tmpfiles, man: Add xattr support to tmpfiles
Maciej Wereski
m.wereski at partner.samsung.com
Thu Jul 18 08:09:14 PDT 2013
Hello,
16.07.2013 at 00:31 Lennart Poettering <lennart at poettering.net> wrote:
>> + STRV_FOREACH(x, i->xattrs) {
>> + value = *x;
>> + name = strsep(&value, "=");
>
> I'd really prefer if we didn't corrupt the string here. Maybe use
> strv_split_quoted() here? That handles all the values for you anyway...
You mean strv_split() (I'm splitting by "=")? This has one issue: it
splits by all separator occurrences and I need to split after first one.
If corrupting string is the issue, I can make a copy of it. If you prefer
strv_split(), then I can just join if strv_length > 2.
>> + for (n = 0; n < strv_length(tmp); ++n) {
>> + len = strlen(tmp[n]);
>> + strncpy(xattr, tmp[n], len+1);
>> + p = strchr(xattr, '=');
>> + if (!p) {
>> + log_error("%s: Attribute has incorrect
>> format.", i->path);
>> + return -EBADMSG;
>> + }
>> + if (p[1] == '\"') {
>> + while (true) {
>> + if (!p)
>> + p = tmp[n];
>> + else
>> + p += 2;
>> + p = strchr(p, '\"');
>> + if (p && xattr[p-xattr-1] != '\\')
>> + break;
>> + p = NULL;
>> + ++n;
>> + if (n == strv_length(tmp))
>> + break;
>> + len += strlen(tmp[n]) + 1;
>> + strncat(xattr, " ", 1);
>> + strncat(xattr, tmp[n], len);
>> + }
>> + }
>> + strstrip(xattr);
>> + f = i->xattrs;
>> + i->xattrs = strv_append(i->xattrs, xattr);
>> + if (!i->xattrs){
>> + strv_free(f);
>> + return log_oom();
>> + }
>
> For this stuf I'd really prefer using one of our already existing
> quoting APIs, like strv_spit_quoted() or FOREACH_WORD_QUOTED or so.
Well, I've tried it in the beginning, but in doesn't work properly in this
case. split_quoted() expects quote on the beginning of a string (ignoring
whitespace occurrences). If there's no such case string will be split using
whitespace. Example of extended attribute with quotes:
user.test="This will \" fail"
So how would you like this case to be solved?
regards,
Maciej
--
Maciej Wereski
Samsung R&D Institute Poland
Samsung Electronics
m.wereski at partner.samsung.com
More information about the systemd-devel
mailing list