print "mostly-printable" xattr strings in debugfs
PATCH 1/1 print "mostly-printable" xattr strings in debugfs
Taking a cue from getfattr... if a string is "mostly" printable characters, go ahead & print as a string, and escape what's left over.
so we get:
Extended attributes stored in inode body:
selinux = "system_u:object_r:root_t:s0\000" (28)
instead of:
Extended attributes stored in inode body:
selinux = "73 79 73 74 65 6d 5f 75 3a 6f 62 6a 65 63 74 5f 72 3a 72 6f 6f 74 5f 74 3a 73 30 00 " (28)
(selinux includes the trailing null in "len" so it never prints as a string today)
---
debugfs/debugfs.c +9 -7
@@ -434,19 +434,21 @@ static int list_blocks_proc(ext2_filsysstatic void dump_xattr_string (FILE *out,const char *str,int len) { -int printable =1 ; +int printable =0 ;int i; -/* check is string printable? */ +/* check: is string "printable enough?" */ for (i =0 ; i < len; i++) -if (!isprint (str[i])) { - printable =0 ; -break ; - } +if (isprint (str[i])) + printable++; + +if (printable <= len*7 /8 ) + printable =0 ;for (i =0 ; i < len; i++)if (printable) -fprintf (out,"%c" , (unsigned char )str[i]); +fprintf (out,isprint (str[i]) ?"%c" :"\\%03o" , + (unsigned char )str[i]);else fprintf (out,"%02x " , (unsigned char )str[i]); }
Quoted 3 lines · Eric Sandeen
Taking a cue from getfattr... if a string is "mostly" printable characters, go ahead & print as a string, and escape what's left over.
Ted, ping on this? Since we use selinux a lot, it'd be nice to have something readable in debugfs output.
If there's anything you don't like about the patch I'll be happy to fix it up.
Thanks,
-Eric
Quoted 54 lines
so we get:
Extended attributes stored in inode body:
selinux = "system_u:object_r:root_t:s0\000" (28)instead of:
Extended attributes stored in inode body:
selinux = "73 79 73 74 65 6d 5f 75 3a 6f 62 6a 65 63 74 5f 72 3a 72 6f 6f 74 5f 74 3a 73 30 00 " (28)(selinux includes the trailing null in "len" so it never prints as a string today)
Signed-off-by Eric Sandeen <[email protected]>---
Index:
e2fsprogs-1.40.5/debugfs/debugfs.c
===================================================================debugfs/debugfs.c +9
-8@@ -434,19 +434,21 @@ static int list_blocks_proc(ext2_filsysstatic void dump_xattr_string (FILE *out,const char *str,int len) { -int printable =1 ; +int printable =0 ;int i; -/* check is string printable? */ +/* check: is string "printable enough?" */ for (i =0 ; i < len; i++) -if (!isprint (str[i])) { - printable =0 ; -break ; - } +if (isprint (str[i])) + printable++; + +if (printable <= len*7 /8 ) + printable =0 ;for (i =0 ; i < len; i++)if (printable) -fprintf (out,"%c" , (unsigned char )str[i]); +fprintf (out,isprint (str[i]) ?"%c" :"\\%03o" , + (unsigned char )str[i]);else fprintf (out,"%02x " , (unsigned char )str[i]); } -To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 7 lines · Eric Sandeen
Quoted 3 lines · Eric Sandeen
Taking a cue from getfattr... if a string is "mostly" printable characters, go ahead & print as a string, and escape what's left over.
Ted, ping on this? Since we use selinux a lot, it'd be nice to have something readable in debugfs output.
Thanks for reminding me. It's been applied into the maint branch.
- Ted