r4365: added command 'eainfo' to smbclient for displaying binary EA contents
authorAndrew Tridgell <tridge@samba.org>
Sun, 26 Dec 2004 08:41:11 +0000 (08:41 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:07:38 +0000 (13:07 -0500)
(This used to be commit 268edcdb4a95240662102faef4126449f286d49d)

source4/client/client.c

index ce0efe6fb60abb1077f56625919b5a451eb5d0cc..802c4a7a91a67507ee8b6045edc1180974dd868a 100644 (file)
@@ -1746,12 +1746,10 @@ static int cmd_allinfo(const char **cmd_ptr)
        if (NT_STATUS_IS_OK(status)) {
                int i;
                for (i=0;i<finfo.all_eas.out.num_eas;i++) {
-                       d_printf("\tEA[%d] flags=%d %s=%*.*s\n", i,
+                       d_printf("\tEA[%d] flags=%d len=%d '%s'\n", i,
                                 finfo.all_eas.out.eas[i].flags,
-                                finfo.all_eas.out.eas[i].name.s,
                                 finfo.all_eas.out.eas[i].value.length,
-                                finfo.all_eas.out.eas[i].value.length,
-                                finfo.all_eas.out.eas[i].value.data);
+                                finfo.all_eas.out.eas[i].name.s);
                }
        }
 
@@ -1788,6 +1786,58 @@ done:
 }
 
 
+/****************************************************************************
+shows EA contents
+****************************************************************************/
+static int cmd_eainfo(const char **cmd_ptr)
+{
+       pstring fname;
+       fstring buf;
+       int ret = 0;
+       TALLOC_CTX *mem_ctx;
+       union smb_fileinfo finfo;
+       NTSTATUS status;
+       int i;
+
+       pstrcpy(fname,cur_dir);
+       
+       if (!next_token(cmd_ptr,buf,NULL,sizeof(buf))) {
+               d_printf("eainfo <filename>\n");
+               return 1;
+       }
+       pstrcat(fname,buf);
+
+       mem_ctx = talloc_init("%s", fname);
+
+       finfo.generic.in.fname = fname;
+       finfo.generic.level = RAW_FILEINFO_ALL_EAS;
+       status = smb_raw_pathinfo(cli->tree, mem_ctx, &finfo);
+       
+       if (!NT_STATUS_IS_OK(status)) {
+               d_printf("RAW_FILEINFO_ALL_EAS - %s\n", nt_errstr(status));
+               talloc_destroy(mem_ctx);
+               return 1;
+       }
+
+       d_printf("%s has %d EAs\n", fname, finfo.all_eas.out.num_eas);
+
+       for (i=0;i<finfo.all_eas.out.num_eas;i++) {
+               d_printf("\tEA[%d] flags=%d len=%d '%s'\n", i,
+                        finfo.all_eas.out.eas[i].flags,
+                        finfo.all_eas.out.eas[i].value.length,
+                        finfo.all_eas.out.eas[i].name.s);
+               fflush(stdout);
+               dump_data(0, 
+                         finfo.all_eas.out.eas[i].value.data,
+                         finfo.all_eas.out.eas[i].value.length);
+       }
+
+       talloc_destroy(mem_ctx);
+
+       return ret;
+}
+
+
 /****************************************************************************
 show any ACL on a file
 ****************************************************************************/
@@ -2591,6 +2641,7 @@ static struct
   {"deltree",cmd_deltree,"<dir> delete a whole directory tree",{COMPL_REMOTE,COMPL_NONE}},
   {"dir",cmd_dir,"<mask> list the contents of the current directory",{COMPL_REMOTE,COMPL_NONE}},
   {"du",cmd_du,"<mask> computes the total size of the current directory",{COMPL_REMOTE,COMPL_NONE}},
+  {"eainfo",cmd_eainfo,"<file> show EA contents for a file",{COMPL_NONE,COMPL_NONE}},
   {"exit",cmd_quit,"logoff the server",{COMPL_NONE,COMPL_NONE}},
   {"get",cmd_get,"<remote name> [local name] get a file",{COMPL_REMOTE,COMPL_LOCAL}},
   {"help",cmd_help,"[command] give help on a command",{COMPL_NONE,COMPL_NONE}},