Whamcloud - gitweb
land b_colibri_devel on HEAD:
[fs/lustre-release.git] / lustre / utils / lfs.c
index 4c7a99e..8d8d0d8 100644 (file)
@@ -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"},
@@ -1862,117 +1878,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)