tmpfiles.d and spaces in filenames
JD
jd1008 at gmail.com
Wed Jun 1 16:59:50 UTC 2011
On 06/01/11 09:37, Ian Malone wrote:
> On 1 June 2011 16:11, Corinna Vinschen<vinschen at redhat.com> wrote:
>> Hi,
>>
>> How can I specify filenames with spaces in tmpfiles.d configuration
>> files? There's no hint in `man tmfiles.d'. I tried
>>
>> - fstab style: d /foo\040bar 0755 root root
>> - web style: d /foo%20bar 0755 root root
>> - quoted style 1: d "/foo bar" 0755 root root
>> - quoted style 2: d '/foo bar' 0755 root root
>>
>> This results in two directories
>>
>> /foo\040bar
>> /foo%20bar
>>
>> and two error messages:
>>
>> Path '"/foo' not absolute.
>> Path ''/foo' not absolute.
>>
>> So, do I have to take it that tmpfiles.d doesn't grok spaces in
>> filenames at all?
>>
>> Please note, I'm not asking for the obvious answer "don't do this" and
>> I'm also not asking for the counter question "why do you need this?"
>>
> As usual both of these might push in the direction of another way to
> solve the problem. From checking the documentation it seems packages
> are expected to define patterns here for their tmpfiles which they
> should have control over. Which I guess is not the situation you're
> dealing with. Looking at it I think the short answer is you can't as
> tmpfiles.c is just using sscanf to parse this line:
> http://cgit.freedesktop.org/systemd/tree/src/tmpfiles.c
> Line 670:
> if (sscanf(buffer,
> "%c "
> "%ms "
> "%ms "
> "%ms "
> "%ms "
> "%ms",
> &i->type,
> &i->path,
> &mode,
> &user,
> &group,
> &age)< 2) {
> log_error("[%s:%u] Syntax error.", fname, line);
> r = -EIO;
> goto finish;
> }
>
> So the long answer is you either have to modify tmpfiles.c to deal
> with this or write a similar daemon to do it.
>
Since a space is Unix's and Linux's chosen field separator,
I think having a space in filenames should be avoided. there
are many situations where spaces in filenames cause problems.
A simple example:
for i in *; do
[ -f $i ] && echo $i is a file
done
you will see that the file with spaces in it's name
will not be recognized as a file because each
space-separated member of that file name
becomes a separate argument
when * is expanded by the shell.
There are probably other more serious
problems posed by spaces in filenames.
More information about the users
mailing list