[systemd-devel] [PATCH] Refuse mount on symlink

Lennart Poettering lennart at poettering.net
Mon Jul 21 07:11:02 PDT 2014


On Sat, 19.07.14 16:15, Timofey Titovets (nefelim4ag at gmail.com) wrote:

Heya,

> +int fail_if_symlink(const char *unit, const char* where) {
> +        assert(where);
> +
> +        if (!is_symlink(where))
> +                return 0;
> +
> +        log_warning_unit(unit,
> +                         "%s Refuse mount on symlink: %s",
> +                         unit, strerror(1));

strerror(1)? Where does the "1" come from?

> +
> +        return -1;

We strictly follow the logic to return "errno"-style negative error
numbers, we never make up numeric ones, like "-1".

In this case "return -ELOOP" sounds appropriate, I'd say..."

> +
> +bool is_symlink(const char *path) {
> +        struct stat info;
> +
> +        lstat(path, &info);

You need to handle the case whether the path doesn't exist at all, or
the lstat() fails for other reasons. I think it would be a good idea to
change is_symlink() to return an "int", and then simply return the
negative errno on failure, and 0 or 1 otherwise:

if (lstat(path, &info) < 0)
        return -errno;

That would follow our usual coding style very closely...

Thanks,

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list