X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Futils%2Flfs.c;h=875860175aa7bed6ff10e53ce8bb59c6975a6457;hb=b5bf04fb27d8e3e455aec024d8b908a10434519f;hp=4c7a99e1863de5ec79eb952db0399d18a83a34cc;hpb=69efd816d879bda5627e68bf701fb420ac12f2b4;p=fs%2Flustre-release.git diff --git a/lustre/utils/lfs.c b/lustre/utils/lfs.c index 4c7a99e..8758601 100644 --- a/lustre/utils/lfs.c +++ b/lustre/utils/lfs.c @@ -71,8 +71,12 @@ static int lfs_quota(int argc, char **argv); #endif static int lfs_flushctx(int argc, char **argv); static int lfs_join(int argc, char **argv); -static int lfs_getfacl(int argc, char **argv); -static int lfs_setfacl(int argc, char **argv); +static int lfs_lsetfacl(int argc, char **argv); +static int lfs_lgetfacl(int argc, char **argv); +static int lfs_rsetfacl(int argc, char **argv); +static int lfs_rgetfacl(int argc, char **argv); +static int lfs_cp(int argc, char **argv); +static int lfs_ls(int argc, char **argv); /* all avaialable commands */ command_t cmdlist[] = { @@ -143,12 +147,24 @@ command_t cmdlist[] = { #endif {"flushctx", lfs_flushctx, 0, "Flush security context for current user.\n" "usage: flushctx [-k] [mountpoint...]"}, - {"getfacl", lfs_getfacl, 0, - "Get file access control list in remote client.\n" - "usage: getfacl [-dRLPvh] file"}, - {"setfacl", lfs_setfacl, 0, - "Set file access control list in remote client.\n" - "usage: setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file"}, + {"lsetfacl", lfs_lsetfacl, 0, + "Remote user setfacl for user/group on the same remote client.\n" + "usage: lsetfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ..."}, + {"lgetfacl", lfs_lgetfacl, 0, + "Remote user getfacl for user/group on the same remote client.\n" + "usage: lgetfacl [-dRLPvh] file ..."}, + {"rsetfacl", lfs_rsetfacl, 0, + "Remote user setfacl for user/group on other clients.\n" + "usage: rsetfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ..."}, + {"rgetfacl", lfs_rgetfacl, 0, + "Remote user getfacl for user/group on other clients.\n" + "usage: rgetfacl [-dRLPvh] file ..."}, + {"cp", lfs_cp, 0, + "Remote user copy files and directories.\n" + "usage: cp [OPTION]... [-T] SOURCE DEST\n\tcp [OPTION]... SOURCE... DIRECTORY\n\tcp [OPTION]... -t DIRECTORY SOURCE..."}, + {"ls", lfs_ls, 0, + "Remote user list directory contents.\n" + "usage: ls [OPTION]... [FILE]..."}, {"help", Parser_help, 0, "help"}, {"exit", Parser_quit, 0, "quit"}, {"quit", Parser_quit, 0, "quit"}, @@ -198,9 +214,9 @@ static int lfs_setstripe(int argc, char **argv) stripe_count_arg = argv[4]; optind = 4; } else { + optind = 0; while ((c = getopt_long(argc, argv, "c:di:s:", - long_opts, NULL)) >= 0) - { + long_opts, NULL)) >= 0) { switch (c) { case 0: /* Long options. */ @@ -346,6 +362,7 @@ static int lfs_find(int argc, char **argv) time(&t); + optind = 0; while ((c = getopt_long_only(argc, argv, "-A:C:D:M:n:PpO:qrs:t:v", long_opts, NULL)) >= 0) { xtime = NULL; @@ -720,7 +737,8 @@ static int showdf(char *mntdir, struct obd_statfs *stat, long long avail, used, total; double ratio = 0; char *suffix = "KMGTPEZY"; - char tbuf[10], ubuf[10], abuf[10], rbuf[10]; + /* Note if we have >2^64 bytes/fs these buffers will need to be grown */ + char tbuf[20], ubuf[20], abuf[20], rbuf[20]; if (!uuid || !stat) return -EINVAL; @@ -1067,6 +1085,7 @@ static int lfs_quotachown(int argc, char **argv) int c,rc; int flag = 0; + optind = 0; while ((c = getopt(argc, argv, "i")) != -1) { switch (c) { case 'i': @@ -1862,117 +1881,38 @@ static int lfs_flushctx(int argc, char **argv) return rc; } -/* - * We assume one and only one filename is supplied as the - * last parameter. - */ -static int acl_cmd_parse(int argc, char **argv, char *fname, char *cmd) +static int lfs_lsetfacl(int argc, char **argv) { - char *dname, *rpath = NULL; - char path[PATH_MAX], cwd[PATH_MAX]; - FILE *fp; - struct mntent *mnt; - int i; - - if (argc < 2) - return -1; - - /* FIXME the premise is there is no sub-mounted filesystems under this - * mounted lustre tree. */ - strncpy(fname, argv[argc - 1], PATH_MAX); - - /* get path prefix */ - dname = dirname(fname); - - /* try to resolve the pathname into relative to the root of the mounted - * lustre filesystem. - */ - if (getcwd(cwd, sizeof(cwd)) == NULL) { - fprintf(stderr, "getcwd %s failed: %s\n", cwd, strerror(errno)); - return -1; - } - - if (chdir(dname) == -1) { - fprintf(stderr, "chdir to %s failed: %s\n", - dname, strerror(errno)); - return -1; - } - - if (getcwd(path, sizeof(path)) == NULL) { - fprintf(stderr, "getcwd %s: %s\n", path, strerror(errno)); - return -1; - } - - if (chdir(cwd) == -1) { - fprintf(stderr, "chdir back to %s: %s\n", - cwd, strerror(errno)); - return -1; - } - - strncat(path, "/", PATH_MAX); - strncpy(fname, argv[argc - 1], PATH_MAX); - strncat(path, basename(fname), PATH_MAX); - - fp = setmntent(MOUNTED, "r"); - if (fp == NULL) { - fprintf(stderr, "setmntent %s failed: %s\n", - MOUNTED, strerror(errno)); - return -1; - } - - while (1) { - mnt = getmntent(fp); - if (!mnt) - break; - - if (!llapi_is_lustre_mnttype(mnt->mnt_type)) - continue; - - if (!strncmp(mnt->mnt_dir, path, strlen(mnt->mnt_dir))) { - rpath = path + strlen(mnt->mnt_dir); - break; - } - } - endmntent(fp); - - /* remove char '/' from rpath to be a relative path */ - while (rpath && *rpath == '/') rpath++; - - if (!rpath) { - fprintf(stderr, - "%s: file %s doesn't belong to a lustre file system!\n", - argv[0], argv[argc - 1]); - return -1; - } - - for (i = 0; i < argc - 1; i++) { - strncat(cmd, argv[i], PATH_MAX); - strncat(cmd, " ", PATH_MAX); - } - strncat(cmd, *rpath ? rpath : ".", PATH_MAX); - strncpy(fname, argv[argc - 1], sizeof(fname)); - - return 0; + argv[0]++; + return(llapi_lsetfacl(argc, argv)); } -static int lfs_getfacl(int argc, char **argv) +static int lfs_lgetfacl(int argc, char **argv) { - char fname[PATH_MAX] = "", cmd[PATH_MAX] = ""; - - if (acl_cmd_parse(argc, argv, fname, cmd)) - return CMD_HELP; + argv[0]++; + return(llapi_lgetfacl(argc, argv)); +} - return llapi_getfacl(fname, cmd); +static int lfs_rsetfacl(int argc, char **argv) +{ + argv[0]++; + return(llapi_rsetfacl(argc, argv)); } -static int lfs_setfacl(int argc, char **argv) +static int lfs_rgetfacl(int argc, char **argv) { - char fname[PATH_MAX] = "", cmd[PATH_MAX] = ""; + argv[0]++; + return(llapi_rgetfacl(argc, argv)); +} - if (acl_cmd_parse(argc, argv, fname, cmd)) - return CMD_HELP; +static int lfs_cp(int argc, char **argv) +{ + return(llapi_cp(argc, argv)); +} - return llapi_setfacl(fname, cmd); +static int lfs_ls(int argc, char **argv) +{ + return(llapi_ls(argc, argv)); } int main(int argc, char **argv)