X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fsrc%2Fchxid.c;h=f6bd807eeaf1aca721a989156f52f7cd0b761df1;hb=a917f24ef7b003dcef54a3db2644cf9cb4bc2db2;hp=1af6c53119535868653c97fd02f856905ebf1681;hpb=19f003f66c0d83ae8ade956fd2b357a109fc73e0;p=util-vserver.git diff --git a/util-vserver/src/chxid.c b/util-vserver/src/chxid.c index 1af6c53..f6bd807 100644 --- a/util-vserver/src/chxid.c +++ b/util-vserver/src/chxid.c @@ -38,7 +38,7 @@ CMDLINE_OPTIONS[] = { { 0,0,0,0 } }; -char const CMDLINE_OPTIONS_SHORT[] = "Rc:"; +char const CMDLINE_OPTIONS_SHORT[] = "Rc:x"; void showHelp(int fd, char const *cmd, int res) @@ -46,10 +46,11 @@ showHelp(int fd, char const *cmd, int res) WRITE_MSG(fd, "Usage: "); WRITE_STR(fd, cmd); WRITE_MSG(fd, - " -c [-R] [--] +\n\n" + " -c [-Rx] [--] +\n\n" " Options:\n" " -R ... recurse through directories\n" " -c ... assign the given context/vserver to the file(s)\n" + " -x ... do not cross filesystems\n\n" "Please report bugs to " PACKAGE_BUGREPORT "\n"); exit(res); } @@ -65,41 +66,17 @@ showVersion() exit(0); } -static bool -setFile(char const *name, char const * display_name, struct stat const *exp_st) +bool +handleFile(char const *name, char const * display_name) { - bool res = false; - int fd = open(name, O_RDONLY); - - if (fd==-1) { - perror("open()"); - return false; - } - - if (!exp_st || - !checkForRace(fd, name, exp_st)) - goto err; - - if (vc_X_set_filecontext(fd, global_args->ctx)==-1) { - //perror("vc_X_set_filecontext()"); + int rc = vc_set_iattr(name, global_args->ctx, 0, VC_IATTR_XID); + + if (rc==-1) { perror(display_name); - goto err; + return false; } - res = true; - - err: - close(fd); - return res; -} - -bool -handleFile(char const *name, char const * display_name, - struct stat const *exp_st) -{ - if (S_ISLNK(exp_st->st_mode)) return true; - - return setFile(name, display_name, exp_st); + return true; } void @@ -115,5 +92,7 @@ fixupParams(struct Arguments UNUSED *args, int argc) exit(1); } - args->ctx = resolveCtx(args->ctx_str); + args->ctx = resolveCtx(args->ctx_str); + args->do_display_dir = !args->do_recurse; + args->do_display_dot = true; }