svn commit: samba r24150 - in branches/SAMBA_3_2/source/smbd: .

vlendec at samba.org vlendec at samba.org
Fri Aug 3 10:32:41 GMT 2007


Author: vlendec
Date: 2007-08-03 10:32:41 +0000 (Fri, 03 Aug 2007)
New Revision: 24150

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

Log:
Convert call_trans2qfsinfo to the new API
Modified:
   branches/SAMBA_3_2/source/smbd/trans2.c


Changeset:
Modified: branches/SAMBA_3_2/source/smbd/trans2.c
===================================================================
--- branches/SAMBA_3_2/source/smbd/trans2.c	2007-08-03 10:07:18 UTC (rev 24149)
+++ branches/SAMBA_3_2/source/smbd/trans2.c	2007-08-03 10:32:41 UTC (rev 24150)
@@ -2364,11 +2364,13 @@
  Reply to a TRANS2_QFSINFO (query filesystem info).
 ****************************************************************************/
 
-static int call_trans2qfsinfo(connection_struct *conn, char *inbuf, char *outbuf, int length, int bufsize,
-					char **pparams, int total_params, char **ppdata, int total_data,
-					unsigned int max_data_bytes)
+static void call_trans2qfsinfo(connection_struct *conn,
+			       struct smb_request *req,
+			       char **pparams, int total_params,
+			       char **ppdata, int total_data,
+			       unsigned int max_data_bytes)
 {
-	char *pdata;
+	char *pdata, *end_data;
 	char *params = *pparams;
 	uint16 info_level;
 	int data_len, len;
@@ -2379,7 +2381,8 @@
 	int quota_flag = 0;
 
 	if (total_params < 2) {
-		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+		reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
+		return;
 	}
 
 	info_level = SVAL(params,0);
@@ -2388,17 +2391,20 @@
 
 	if(SMB_VFS_STAT(conn,".",&st)!=0) {
 		DEBUG(2,("call_trans2qfsinfo: stat of . failed (%s)\n", strerror(errno)));
-		return ERROR_DOS(ERRSRV,ERRinvdevice);
+		reply_doserror(req, ERRSRV, ERRinvdevice);
+		return;
 	}
 
 	*ppdata = (char *)SMB_REALLOC(
 		*ppdata, max_data_bytes + DIR_ENTRY_SAFETY_MARGIN);
 	if (*ppdata == NULL ) {
-		return ERROR_NT(NT_STATUS_NO_MEMORY);
+		reply_nterror(req, NT_STATUS_NO_MEMORY);
+		return;
 	}
 
 	pdata = *ppdata;
 	memset((char *)pdata,'\0',max_data_bytes + DIR_ENTRY_SAFETY_MARGIN);
+	end_data = pdata + max_data_bytes + DIR_ENTRY_SAFETY_MARGIN - 1;
 
 	switch (info_level) {
 		case SMB_INFO_ALLOCATION:
@@ -2406,7 +2412,8 @@
 			SMB_BIG_UINT dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector;
 			data_len = 18;
 			if (get_dfree_info(conn,".",False,&bsize,&dfree,&dsize) == (SMB_BIG_UINT)-1) {
-				return(UNIXERROR(ERRHRD,ERRgeneral));
+				reply_unixerror(req, ERRHRD, ERRgeneral);
+				return;
 			}
 
 			block_size = lp_block_size(snum);
@@ -2450,9 +2457,11 @@
 			 * this call so try fixing this by adding a terminating null to
 			 * the pushed string. The change here was adding the STR_TERMINATE. JRA.
 			 */
-			len = srvstr_push(outbuf, SVAL(outbuf, smb_flg2),
-					  pdata+l2_vol_szVolLabel, vname,
-					  -1, STR_NOALIGN|STR_TERMINATE);
+			len = srvstr_push(
+				pdata, req->flags2,
+				pdata+l2_vol_szVolLabel, vname,
+				PTR_DIFF(end_data, pdata+l2_vol_szVolLabel),
+				STR_NOALIGN|STR_TERMINATE);
 			SCVAL(pdata,l2_vol_cch,len);
 			data_len = l2_vol_szVolLabel + len;
 			DEBUG(5,("call_trans2qfsinfo : time = %x, namelen = %d, name = %s\n",
@@ -2476,16 +2485,17 @@
 			SIVAL(pdata,4,255); /* Max filename component length */
 			/* NOTE! the fstype must *not* be null terminated or win98 won't recognise it
 				and will think we can't do long filenames */
-			len = srvstr_push(outbuf, SVAL(outbuf, smb_flg2),
-					  pdata+12, fstype, -1, STR_UNICODE);
+			len = srvstr_push(pdata, req->flags2, pdata+12, fstype,
+					  PTR_DIFF(end_data, pdata+12),
+					  STR_UNICODE);
 			SIVAL(pdata,8,len);
 			data_len = 12 + len;
 			break;
 
 		case SMB_QUERY_FS_LABEL_INFO:
 		case SMB_FS_LABEL_INFORMATION:
-			len = srvstr_push(outbuf, SVAL(outbuf, smb_flg2),
-					  pdata+4, vname, -1, 0);
+			len = srvstr_push(pdata, req->flags2, pdata+4, vname,
+					  PTR_DIFF(end_data, pdata+4), 0);
 			data_len = 4 + len;
 			SIVAL(pdata,0,len);
 			break;
@@ -2501,8 +2511,9 @@
 				(str_checksum(get_local_machine_name())<<16));
 
 			/* Max label len is 32 characters. */
-			len = srvstr_push(outbuf, SVAL(outbuf, smb_flg2),
-					  pdata+18, vname, -1, STR_UNICODE);
+			len = srvstr_push(pdata, req->flags2, pdata+18, vname,
+					  PTR_DIFF(end_data, pdata+18),
+					  STR_UNICODE);
 			SIVAL(pdata,12,len);
 			data_len = 18+len;
 
@@ -2516,7 +2527,8 @@
 			SMB_BIG_UINT dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector;
 			data_len = 24;
 			if (get_dfree_info(conn,".",False,&bsize,&dfree,&dsize) == (SMB_BIG_UINT)-1) {
-				return(UNIXERROR(ERRHRD,ERRgeneral));
+				reply_unixerror(req, ERRHRD, ERRgeneral);
+				return;
 			}
 			block_size = lp_block_size(snum);
 			if (bsize < block_size) {
@@ -2548,7 +2560,8 @@
 			SMB_BIG_UINT dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector;
 			data_len = 32;
 			if (get_dfree_info(conn,".",False,&bsize,&dfree,&dsize) == (SMB_BIG_UINT)-1) {
-				return(UNIXERROR(ERRHRD,ERRgeneral));
+				reply_unixerror(req, ERRHRD, ERRgeneral);
+				return;
 			}
 			block_size = lp_block_size(snum);
 			if (bsize < block_size) {
@@ -2621,12 +2634,14 @@
 			if (current_user.ut.uid != 0) {
 				DEBUG(0,("set_user_quota: access_denied service [%s] user [%s]\n",
 					lp_servicename(SNUM(conn)),conn->user));
-				return ERROR_DOS(ERRDOS,ERRnoaccess);
+				reply_doserror(req, ERRDOS, ERRnoaccess);
+				return;
 			}
 			
 			if (vfs_get_ntquota(&fsp, SMB_USER_FS_QUOTA_TYPE, NULL, &quotas)!=0) {
 				DEBUG(0,("vfs_get_ntquota() failed for service [%s]\n",lp_servicename(SNUM(conn))));
-				return ERROR_DOS(ERRSRV,ERRerror);
+				reply_doserror(req, ERRSRV, ERRerror);
+				return;
 			}
 
 			data_len = 48;
@@ -2669,7 +2684,8 @@
 
 		case SMB_QUERY_CIFS_UNIX_INFO:
 			if (!lp_unix_extensions()) {
-				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
+				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
+				return;
 			}
 			data_len = 12;
 			SSVAL(pdata,0,CIFS_UNIX_MAJOR_VERSION);
@@ -2692,7 +2708,8 @@
 			vfs_statvfs_struct svfs;
 
 			if (!lp_unix_extensions()) {
-				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
+				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
+				return;
 			}
 
 			rc = SMB_VFS_STATVFS(conn, ".", &svfs);
@@ -2710,11 +2727,13 @@
 				DEBUG(5,("call_trans2qfsinfo : SMB_QUERY_POSIX_FS_INFO succsessful\n"));
 #ifdef EOPNOTSUPP
 			} else if (rc == EOPNOTSUPP) {
-				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
+				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
+				return;
 #endif /* EOPNOTSUPP */
 			} else {
 				DEBUG(0,("vfs_statvfs() failed for service [%s]\n",lp_servicename(SNUM(conn))));
-				return ERROR_DOS(ERRSRV,ERRerror);
+				reply_doserror(req, ERRSRV, ERRerror);
+				return;
 			}
 			break;
 		}
@@ -2726,11 +2745,13 @@
 			int i;
 
 			if (!lp_unix_extensions()) {
-				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
+				reply_nterror(req, NT_STATUS_INVALID_LEVEL);
+				return;
 			}
 
 			if (max_data_bytes < 40) {
-				return ERROR_NT(NT_STATUS_BUFFER_TOO_SMALL);
+				reply_nterror(req, NT_STATUS_BUFFER_TOO_SMALL);
+				return;
 			}
 
 			/* We ARE guest if global_sid_Builtin_Guests is
@@ -2839,15 +2860,18 @@
 			}
 			/* drop through */
 		default:
-			return ERROR_NT(NT_STATUS_INVALID_LEVEL);
+			reply_nterror(req, NT_STATUS_INVALID_LEVEL);
+			return;
 	}
 
 
-	send_trans2_replies(inbuf, outbuf, bufsize, params, 0, pdata, data_len, max_data_bytes);
+	send_trans2_replies_new(req, params, 0, pdata, data_len,
+				max_data_bytes);
 
-	DEBUG( 4, ( "%s info_level = %d\n", smb_fn_name(CVAL(inbuf,smb_com)), info_level) );
+	DEBUG( 4, ( "%s info_level = %d\n",
+		    smb_fn_name(CVAL(req->inbuf,smb_com)), info_level) );
 
-	return -1;
+	return;
 }
 
 /****************************************************************************
@@ -6840,11 +6864,10 @@
 	case TRANSACT2_QFSINFO:
 	{
 		START_PROFILE(Trans2_qfsinfo);
-		outsize = call_trans2qfsinfo(
-			conn, inbuf, outbuf, size, bufsize,
-			&state->param, state->total_param,
-			&state->data, state->total_data,
-			state->max_data_return);
+		call_trans2qfsinfo(conn, req,
+				   &state->param, state->total_param,
+				   &state->data, state->total_data,
+				   state->max_data_return);
 		END_PROFILE(Trans2_qfsinfo);
 	    break;
 	}



More information about the samba-cvs mailing list