X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fsrc%2Flsxid.c;h=a3064cd1c6053f6334c17be88f255e4d7ca6071f;hb=4fc0d7c31dd9fb6bae2e77ba37d8a08ab26dd65c;hp=d6bd5313c864d08ed33434f484f9f318699cbfba;hpb=de3e1dc1eae2d6bd6aa11c34290498d966885245;p=util-vserver.git diff --git a/util-vserver/src/lsxid.c b/util-vserver/src/lsxid.c index d6bd531..a3064cd 100644 --- a/util-vserver/src/lsxid.c +++ b/util-vserver/src/lsxid.c @@ -41,7 +41,7 @@ CMDLINE_OPTIONS[] = { { 0,0,0,0 } }; -char const CMDLINE_OPTIONS_SHORT[] = "Radn"; +char const CMDLINE_OPTIONS_SHORT[] = "Radnx"; void showHelp(int fd, char const *cmd, int res) @@ -49,13 +49,14 @@ showHelp(int fd, char const *cmd, int res) WRITE_MSG(fd, "Usage: "); WRITE_STR(fd, cmd); WRITE_MSG(fd, - " [-Radn] [--] *\n\n" + " [-Radnx] [--] *\n\n" " Options:\n" " -R ... recurse through directories\n" " -a ... display files starting with '.' also\n" " -d ... list directories like other files instead of\n" " listing their content\n" " -n ... do not try to do xid -> vserver-name mapping\n" + " -x ... do not cross filesystems\n\n" "Please report bugs to " PACKAGE_BUGREPORT "\n"); exit(res); } @@ -72,31 +73,21 @@ showVersion() } void -checkParams(struct Arguments const UNUSED * args, int UNUSED argc) +fixupParams(struct Arguments UNUSED * args, int UNUSED argc) { } static xid_t getFileContext(char const *name, struct stat const *exp_st) { - int fd = open(name, O_RDONLY); xid_t res; + uint32_t mask = VC_IATTR_XID; - if (fd==-1) { - perror("open()"); - return VC_NOCTX; - } - - if (exp_st) - checkForRace(fd, name, exp_st); - - res = vc_X_get_filecontext(fd); - if (res==VC_NOCTX) - perror("vc_X_get_filecontext()"); - - close(fd); + if (vc_get_iattr_compat(name, exp_st->st_dev, exp_st->st_ino, + &res, 0, &mask, &exp_st->st_mode)==-1) + perror("vc_get_iattr_compat()"); - return res; + return (mask&VC_IATTR_XID) ? res : VC_NOCTX; } bool @@ -109,31 +100,24 @@ handleFile(char const *name, char const *display_name, memset(buf, ' ', sizeof buf); - if (S_ISLNK(exp_st->st_mode)) { - memcpy(buf, "-------", 7); + ctx = getFileContext(name, exp_st); + + if (ctx==VC_NOCTX) { + memcpy(buf, "!!ERR!!", 7); write(1, buf, sizeof buf); need_write = false; } - else { - ctx = getFileContext(name, exp_st); - - if (ctx==VC_NOCTX) { - memcpy(buf, "!!ERR!!", 7); - write(1, buf, sizeof buf); + else if (global_args->do_mapping) { + char const * vname = vc_getVserverByCtx(ctx, 0,0); + if (!vname) buf[0] = '\0'; + else { + size_t l = strlen(vname); + if (ldo_mapping) { - char const * vname = vc_getVserverByCtx(ctx, 0,0); - if (!vname) buf[0] = '\0'; - else { - size_t l = strlen(vname); - if (l