svn commit: samba r6119 - in trunk/source: client libsmb

jra at samba.org jra at samba.org
Wed Mar 30 00:47:49 GMT 2005


Author: jra
Date: 2005-03-30 00:47:48 +0000 (Wed, 30 Mar 2005)
New Revision: 6119

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=6119

Log:
Added "volume" command to smbclient that prints out the volume name and
serial number.
Jeremy.

Modified:
   trunk/source/client/client.c
   trunk/source/libsmb/clifsinfo.c


Changeset:
Modified: trunk/source/client/client.c
===================================================================
--- trunk/source/client/client.c	2005-03-30 00:15:16 UTC (rev 6118)
+++ trunk/source/client/client.c	2005-03-30 00:47:48 UTC (rev 6119)
@@ -2236,6 +2236,25 @@
 }
 
 /****************************************************************************
+ Print the volume name.
+****************************************************************************/
+
+static int cmd_volume(void)
+{
+	fstring volname;
+	uint32 serial_num;
+	time_t create_date;
+  
+	if (!cli_get_fs_volume_info(cli, volname, &serial_num, &create_date)) {
+		d_printf("Errr %s getting volume info\n",cli_errstr(cli));
+		return 1;
+	}
+	
+	d_printf("Volume: |%s| serial number 0x%x\n", volname, (unsigned int)serial_num);
+	return 0;
+}
+
+/****************************************************************************
  Hard link files using the NT call.
 ****************************************************************************/
 
@@ -2748,6 +2767,7 @@
   {"tar",cmd_tar,"tar <c|x>[IXFqbgNan] current directory to/from <file name>",{COMPL_NONE,COMPL_NONE}},
   {"tarmode",cmd_tarmode,"<full|inc|reset|noreset> tar's behaviour towards archive bits",{COMPL_NONE,COMPL_NONE}},
   {"translate",cmd_translate,"toggle text translation for printing",{COMPL_NONE,COMPL_NONE}},
+  {"volume",cmd_volume,"print the volume name",{COMPL_NONE,COMPL_NONE}},
   {"vuid",cmd_vuid,"change current vuid",{COMPL_NONE,COMPL_NONE}},
   {"logon",cmd_logon,"establish new logon",{COMPL_NONE,COMPL_NONE}},
   {"listconnect",cmd_list_connect,"list open connections",{COMPL_NONE,COMPL_NONE}},

Modified: trunk/source/libsmb/clifsinfo.c
===================================================================
--- trunk/source/libsmb/clifsinfo.c	2005-03-30 00:15:16 UTC (rev 6118)
+++ trunk/source/libsmb/clifsinfo.c	2005-03-30 00:47:48 UTC (rev 6119)
@@ -132,3 +132,118 @@
 
 	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;	
+}



More information about the samba-cvs mailing list