diff options
author | Jeremy Allison <jra@samba.org> | 2005-03-30 00:47:57 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2005-03-30 00:47:57 +0000 |
commit | a0b75c42c6ba94a007b9056bea0c4bcdb181fb1a (patch) | |
tree | fff88e190cd2404324a0bae422d98f3f85354072 /source/libsmb | |
parent | d20aa2917b274276e0de05e95ec72fada3999890 (diff) | |
download | samba-a0b75c42c6ba94a007b9056bea0c4bcdb181fb1a.tar.gz samba-a0b75c42c6ba94a007b9056bea0c4bcdb181fb1a.tar.xz samba-a0b75c42c6ba94a007b9056bea0c4bcdb181fb1a.zip |
r6120: Added "volume" command to smbclient that prints out the volume name and
serial number.
Jeremy.
Diffstat (limited to 'source/libsmb')
-rw-r--r-- | source/libsmb/clifsinfo.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/source/libsmb/clifsinfo.c b/source/libsmb/clifsinfo.c index 22c8bff3ba0..2874ee6ca1c 100644 --- a/source/libsmb/clifsinfo.c +++ b/source/libsmb/clifsinfo.c @@ -132,3 +132,118 @@ cleanup: return ret; } + +BOOL cli_get_fs_volume_info_old(struct cli_state *cli, fstring volume_name, uint32 *pserial_number) +{ + BOOL ret = False; + uint16 setup; + char param[2]; + char *rparam=NULL, *rdata=NULL; + unsigned int rparam_count=0, rdata_count=0; + unsigned char nlen; + + setup = TRANSACT2_QFSINFO; + + SSVAL(param,0,SMB_INFO_VOLUME); + + if (!cli_send_trans(cli, SMBtrans2, + NULL, + 0, 0, + &setup, 1, 0, + param, 2, 0, + NULL, 0, 560)) { + goto cleanup; + } + + if (!cli_receive_trans(cli, SMBtrans2, + &rparam, &rparam_count, + &rdata, &rdata_count)) { + goto cleanup; + } + + if (cli_is_error(cli)) { + ret = False; + goto cleanup; + } else { + ret = True; + } + + if (rdata_count < 5) { + goto cleanup; + } + + if (pserial_number) { + *pserial_number = IVAL(rdata,0); + } + nlen = CVAL(rdata,l2_vol_cch); + clistr_pull(cli, volume_name, rdata + l2_vol_szVolLabel, sizeof(fstring), nlen, STR_NOALIGN); + + /* todo: but not yet needed + * return the other stuff + */ + +cleanup: + SAFE_FREE(rparam); + SAFE_FREE(rdata); + + return ret; +} + +BOOL cli_get_fs_volume_info(struct cli_state *cli, fstring volume_name, uint32 *pserial_number, time_t *pdate) +{ + BOOL ret = False; + uint16 setup; + char param[2]; + char *rparam=NULL, *rdata=NULL; + unsigned int rparam_count=0, rdata_count=0; + unsigned int nlen; + + setup = TRANSACT2_QFSINFO; + + SSVAL(param,0,SMB_QUERY_FS_VOLUME_INFO); + + if (!cli_send_trans(cli, SMBtrans2, + NULL, + 0, 0, + &setup, 1, 0, + param, 2, 0, + NULL, 0, 560)) { + goto cleanup; + } + + if (!cli_receive_trans(cli, SMBtrans2, + &rparam, &rparam_count, + &rdata, &rdata_count)) { + goto cleanup; + } + + if (cli_is_error(cli)) { + ret = False; + goto cleanup; + } else { + ret = True; + } + + if (rdata_count < 19) { + goto cleanup; + } + + if (pdate) { + *pdate = interpret_long_date(rdata); + } + if (pserial_number) { + *pserial_number = IVAL(rdata,8); + } + nlen = IVAL(rdata,12); + clistr_pull(cli, volume_name, rdata + 18, sizeof(fstring), nlen, STR_UNICODE); + + /* todo: but not yet needed + * return the other stuff + */ + +cleanup: + SAFE_FREE(rparam); + SAFE_FREE(rdata); + + return ret; +} |