diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2009-08-29 16:10:24 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2009-08-29 16:10:24 +0200 |
commit | 39087d3bdd0b5195c2570a4f858b88a82d42a066 (patch) | |
tree | c28b10bee66ff2a04179299ef76596163f23da11 /libudev/libudev-util-private.c | |
parent | e20294e018ee1a8e3e6a4f5977a23728fdc08c0f (diff) |
util_unlink_secure(): chmod() before chown()
Suggested by Florian Zumbiehl <florz@florz.de>.
Diffstat (limited to 'libudev/libudev-util-private.c')
-rw-r--r-- | libudev/libudev-util-private.c | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/libudev/libudev-util-private.c b/libudev/libudev-util-private.c index 84dee559c4..cb8d2c8a2e 100644 --- a/libudev/libudev-util-private.c +++ b/libudev/libudev-util-private.c @@ -100,24 +100,16 @@ int util_delete_path(struct udev *udev, const char *path) */ int util_unlink_secure(struct udev *udev, const char *filename) { - int retval; - - retval = chown(filename, 0, 0); - if (retval) - err(udev, "chown(%s, 0, 0) failed: %m\n", filename); - - retval = chmod(filename, 0000); - if (retval) - err(udev, "chmod(%s, 0000) failed: %m\n", filename); + int err; - retval = unlink(filename); + chmod(filename, 0000); + chown(filename, 0, 0); + err = unlink(filename); if (errno == ENOENT) - retval = 0; - - if (retval) + err = 0; + if (err) err(udev, "unlink(%s) failed: %m\n", filename); - - return retval; + return err; } uid_t util_lookup_user(struct udev *udev, const char *user) |