Message ID | 20190411022307.26463-2-lsahlber@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add get/set compression support to smbinfo | expand |
ср, 10 апр. 2019 г. в 19:23, Ronnie Sahlberg <lsahlber@redhat.com>: > > Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com> > --- > smbinfo.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ > smbinfo.rst | 2 ++ > 2 files changed, 50 insertions(+) > > diff --git a/smbinfo.c b/smbinfo.c > index 4bc503a..db569b2 100644 > --- a/smbinfo.c > +++ b/smbinfo.c > @@ -87,6 +87,8 @@ usage(char *name) > " Prints FileStandardInfo for a cifs file.\n" > " fsctl-getobjid:\n" > " Prints the objectid of the file and GUID of the underlying volume.\n" > + " getcompression:\n" > + " Prints the compression setting for the file.\n" > " list-snapshots:\n" > " List the previous versions of the volume that backs this file.\n" > " quota:\n" > @@ -243,6 +245,50 @@ fsctlgetobjid(int f) > } > > static void > +print_getcompression(uint8_t *sd) > +{ > + uint16_t u16; > + > + memcpy(&u16, &sd[0], 2); > + u16 = le16toh(u16); > + > + printf("Compression: "); > + switch (u16) { > + case 0: > + printf("(0) NONE\n"); > + break; > + case 2: > + printf("(2) LZNT1\n"); > + break; > + default: > + printf("(%d) UNKNOWN\n", u16); > + break; > + } > +} > + > +static void > +getcompression(int f) > +{ > + struct smb_query_info *qi; > + > + qi = malloc(sizeof(struct smb_query_info) + 2); > + memset(qi, 0, sizeof(qi) + 2); > + qi->info_type = 0x9003c; > + qi->file_info_class = 0; > + qi->additional_information = 0; > + qi->input_buffer_length = 2; > + qi->flags = PASSTHRU_FSCTL; > + > + if (ioctl(f, CIFS_QUERY_INFO, qi) < 0) { > + fprintf(stderr, "ioctl failed with %s\n", strerror(errno)); > + exit(1); > + } > + print_getcompression((uint8_t *)(&qi[1])); > + > + free(qi); > +} > + > +static void > print_fileaccessinfo(uint8_t *sd, int type) > { > uint32_t access_flags; > @@ -1118,6 +1164,8 @@ int main(int argc, char *argv[]) > filestandardinfo(f); > else if (!strcmp(argv[optind], "fsctl-getobjid")) > fsctlgetobjid(f); > + else if (!strcmp(argv[optind], "getcompression")) > + getcompression(f); > else if (!strcmp(argv[optind], "list-snapshots")) > list_snapshots(f); > else if (!strcmp(argv[optind], "quota")) > diff --git a/smbinfo.rst b/smbinfo.rst > index 0c96050..ca99b07 100644 > --- a/smbinfo.rst > +++ b/smbinfo.rst > @@ -64,6 +64,8 @@ COMMAND > > `fsctl-getobjid`: Prints the ObjectID > > +`getcompression`: Prints the compression setting for the file. > + > `list-snapshots`: Lists the previous versions of the volume that backs this file > > `quota`: Print the quota for the volume in the form > -- > 2.13.6 > Merged into "next" branch. Thanks. -- Best regards, Pavel Shilovsky
diff --git a/smbinfo.c b/smbinfo.c index 4bc503a..db569b2 100644 --- a/smbinfo.c +++ b/smbinfo.c @@ -87,6 +87,8 @@ usage(char *name) " Prints FileStandardInfo for a cifs file.\n" " fsctl-getobjid:\n" " Prints the objectid of the file and GUID of the underlying volume.\n" + " getcompression:\n" + " Prints the compression setting for the file.\n" " list-snapshots:\n" " List the previous versions of the volume that backs this file.\n" " quota:\n" @@ -243,6 +245,50 @@ fsctlgetobjid(int f) } static void +print_getcompression(uint8_t *sd) +{ + uint16_t u16; + + memcpy(&u16, &sd[0], 2); + u16 = le16toh(u16); + + printf("Compression: "); + switch (u16) { + case 0: + printf("(0) NONE\n"); + break; + case 2: + printf("(2) LZNT1\n"); + break; + default: + printf("(%d) UNKNOWN\n", u16); + break; + } +} + +static void +getcompression(int f) +{ + struct smb_query_info *qi; + + qi = malloc(sizeof(struct smb_query_info) + 2); + memset(qi, 0, sizeof(qi) + 2); + qi->info_type = 0x9003c; + qi->file_info_class = 0; + qi->additional_information = 0; + qi->input_buffer_length = 2; + qi->flags = PASSTHRU_FSCTL; + + if (ioctl(f, CIFS_QUERY_INFO, qi) < 0) { + fprintf(stderr, "ioctl failed with %s\n", strerror(errno)); + exit(1); + } + print_getcompression((uint8_t *)(&qi[1])); + + free(qi); +} + +static void print_fileaccessinfo(uint8_t *sd, int type) { uint32_t access_flags; @@ -1118,6 +1164,8 @@ int main(int argc, char *argv[]) filestandardinfo(f); else if (!strcmp(argv[optind], "fsctl-getobjid")) fsctlgetobjid(f); + else if (!strcmp(argv[optind], "getcompression")) + getcompression(f); else if (!strcmp(argv[optind], "list-snapshots")) list_snapshots(f); else if (!strcmp(argv[optind], "quota")) diff --git a/smbinfo.rst b/smbinfo.rst index 0c96050..ca99b07 100644 --- a/smbinfo.rst +++ b/smbinfo.rst @@ -64,6 +64,8 @@ COMMAND `fsctl-getobjid`: Prints the ObjectID +`getcompression`: Prints the compression setting for the file. + `list-snapshots`: Lists the previous versions of the volume that backs this file `quota`: Print the quota for the volume in the form
Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com> --- smbinfo.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ smbinfo.rst | 2 ++ 2 files changed, 50 insertions(+)