From: Richard Jones Date: Sun, 19 Apr 2009 11:41:35 +0000 (+0100) Subject: Implement NEED_ROOT_OR_IS_DEVICE macro. X-Git-Tag: 1.0.2~9 X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=commitdiff_plain;h=d73a4f097f96e7246718671b0a85cb94f0d3a88f Implement NEED_ROOT_OR_IS_DEVICE macro. --- diff --git a/daemon/daemon.h b/daemon/daemon.h index f18e2d4..b2b8152 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -114,6 +114,19 @@ extern void reply (xdrproc_t xdrp, char *ret); } \ } while (0) +/* Helper for functions which need either an absolute path in the + * mounted filesystem, OR a /dev/ device which exists. + */ +#define NEED_ROOT_OR_IS_DEVICE(path,errcode) \ + do { \ + if (strncmp ((path), "/dev/", 5) == 0) \ + IS_DEVICE ((path),(errcode)); \ + else { \ + NEED_ROOT ((path),(errcode)); \ + ABS_PATH ((path),(errcode)); \ + } \ + } while (0) + /* NB: * (1) You must match CHROOT_IN and CHROOT_OUT even along error paths. * (2) You must not change directory! cwd must always be "/", otherwise diff --git a/daemon/file.c b/daemon/file.c index 16dfb00..2439833 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -323,7 +323,7 @@ do_file (const char *path) int r, len, freeit = 0; char *buf; - /*NEED_ROOT (NULL); - no: we allow people to run this on /dev devices. */ + NEED_ROOT_OR_IS_DEVICE (path, NULL); ABS_PATH (path, NULL); if (strncmp (path, "/dev/", 5) == 0)