#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[] = {
#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"},
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;
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)