s3: Add "setea" to smbclient
authorVolker Lendecke <vl@samba.org>
Sun, 24 Oct 2010 13:43:34 +0000 (15:43 +0200)
committerVolker Lendecke <vlendec@samba.org>
Sun, 24 Oct 2010 20:46:28 +0000 (20:46 +0000)
source3/client/client.c

index 35ee66067afc3d9ddcf20ddf826d9dcb57133f24..d69e55cb50533c955af4f05fbef697207e46c548 100644 (file)
@@ -3288,6 +3288,51 @@ static int cmd_geteas(void)
        return 0;
 }
 
+/****************************************************************************
+ Set an EA of a file
+****************************************************************************/
+
+static int cmd_setea(void)
+{
+       TALLOC_CTX *ctx = talloc_tos();
+       char *src = NULL;
+       char *name = NULL;
+       char *eaname = NULL;
+       char *eavalue = NULL;
+       char *targetname = NULL;
+       struct cli_state *targetcli;
+
+       if (!next_token_talloc(ctx, &cmd_ptr, &name, NULL)
+           || !next_token_talloc(ctx, &cmd_ptr, &eaname, NULL)) {
+               d_printf("setea filename eaname value\n");
+               return 1;
+       }
+       if (!next_token_talloc(ctx, &cmd_ptr, &eavalue, NULL)) {
+               eavalue = talloc_strdup(ctx, "");
+       }
+       src = talloc_asprintf(ctx,
+                       "%s%s",
+                       client_get_cur_dir(),
+                       name);
+       if (!src) {
+               return 1;
+       }
+
+       if (!cli_resolve_path(ctx, "", auth_info, cli, src, &targetcli,
+                             &targetname)) {
+               d_printf("stat %s: %s\n", src, cli_errstr(cli));
+               return 1;
+       }
+
+       if (!cli_set_ea_path(targetcli, targetname, eaname, eavalue,
+                            strlen(eavalue))) {
+               d_printf("set_ea %s: %s\n", src, cli_errstr(cli));
+               return 1;
+       }
+
+       return 0;
+}
+
 /****************************************************************************
  UNIX stat.
 ****************************************************************************/
@@ -4169,6 +4214,8 @@ static struct {
   {"rm",cmd_del,"<mask> delete all matching files",{COMPL_REMOTE,COMPL_NONE}},
   {"rmdir",cmd_rmdir,"<directory> remove a directory",{COMPL_NONE,COMPL_NONE}},
   {"showacls",cmd_showacls,"toggle if ACLs are shown or not",{COMPL_NONE,COMPL_NONE}},  
+  {"setea", cmd_setea, "<file name> <eaname> <eaval> Set an EA of a file",
+   {COMPL_REMOTE, COMPL_LOCAL}},
   {"setmode",cmd_setmode,"filename <setmode string> change modes of file",{COMPL_REMOTE,COMPL_NONE}},
   {"stat",cmd_stat,"filename Do a UNIX extensions stat call on a file",{COMPL_REMOTE,COMPL_REMOTE}},
   {"symlink",cmd_symlink,"<oldname> <newname> create a UNIX symlink",{COMPL_REMOTE,COMPL_REMOTE}},