svn commit: samba r21054 - in branches: SAMBA_3_0/source/smbd SAMBA_3_0_24/source/smbd

jra at samba.org jra at samba.org
Tue Jan 30 02:27:30 GMT 2007


Author: jra
Date: 2007-01-30 02:27:29 +0000 (Tue, 30 Jan 2007)
New Revision: 21054

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

Log:
More function refactoring.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/smbd/trans2.c
   branches/SAMBA_3_0_24/source/smbd/trans2.c


Changeset:
Modified: branches/SAMBA_3_0/source/smbd/trans2.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/trans2.c	2007-01-30 02:13:58 UTC (rev 21053)
+++ branches/SAMBA_3_0/source/smbd/trans2.c	2007-01-30 02:27:29 UTC (rev 21054)
@@ -3679,7 +3679,7 @@
  code.
 ****************************************************************************/
 
-NTSTATUS hardlink_internals(connection_struct *conn, char *oldname, char *newname)
+NTSTATUS hardlink_internals(connection_struct *conn, pstring oldname, pstring newname)
 {
 	SMB_STRUCT_STAT sbuf1, sbuf2;
 	pstring last_component_oldname;
@@ -3988,7 +3988,46 @@
 	return -1;
 }
 
+/****************************************************************************
+ Deal with SMB_SET_FILE_UNIX_HLINK (create a UNIX hard link).
+****************************************************************************/
 
+static int smb_set_file_unix_hlink(connection_struct *conn,
+				char *inbuf,
+				char *outbuf,
+				int bufsize,
+				char *params,
+				char *pdata,
+				int total_data,
+				unsigned int max_data_bytes,
+				pstring fname)
+{
+	pstring oldname;
+	NTSTATUS status = NT_STATUS_OK;
+
+	/* Set a hard link. */
+	if (total_data == 0) {
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+	}
+
+	srvstr_get_path(inbuf, oldname, pdata, sizeof(oldname), total_data, STR_TERMINATE, &status);
+	if (!NT_STATUS_IS_OK(status)) {
+		return ERROR_NT(status);
+	}
+
+	DEBUG(10,("call_trans2setfilepathinfo: SMB_SET_FILE_UNIX_LINK doing hard link %s -> %s\n",
+		fname, oldname));
+
+	status = hardlink_internals(conn, oldname, fname);
+	if (!NT_STATUS_IS_OK(status)) {
+		return ERROR_NT(status);
+	}
+
+	SSVAL(params,0,0);
+	send_trans2_replies(outbuf, bufsize, params, 2, pdata, 0, max_data_bytes);
+	return -1;
+}
+
 /****************************************************************************
  Reply to a TRANS2_SETFILEINFO (set file info by fileid or pathname).
 ****************************************************************************/
@@ -4534,30 +4573,19 @@
 
 		case SMB_SET_FILE_UNIX_HLINK:
 		{
-			pstring oldname;
-			char *newname = fname;
-
-			/* Set a hard link. */
-			if (total_data == 0) {
-				return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+			if (tran_call != TRANSACT2_SETPATHINFO) {
+				/* We must have a pathname for this. */
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
-
-			srvstr_get_path(inbuf, oldname, pdata, sizeof(oldname), total_data, STR_TERMINATE, &status);
-			if (!NT_STATUS_IS_OK(status)) {
-				return ERROR_NT(status);
-			}
-
-			DEBUG(10,("call_trans2setfilepathinfo: SMB_SET_FILE_UNIX_LINK doing hard link %s -> %s\n",
-				fname, oldname));
-
-			status = hardlink_internals(conn, oldname, newname);
-			if (!NT_STATUS_IS_OK(status)) {
-				return ERROR_NT(status);
-			}
-
-			SSVAL(params,0,0);
-			send_trans2_replies(outbuf, bufsize, params, 2, *ppdata, 0, max_data_bytes);
-			return(-1);
+			return smb_set_file_unix_hlink(conn,
+						inbuf,
+						outbuf,
+						bufsize,
+						params,
+						*ppdata,
+						total_data,
+						max_data_bytes,
+						fname);
 		}
 
 		case SMB_FILE_RENAME_INFORMATION:

Modified: branches/SAMBA_3_0_24/source/smbd/trans2.c
===================================================================
--- branches/SAMBA_3_0_24/source/smbd/trans2.c	2007-01-30 02:13:58 UTC (rev 21053)
+++ branches/SAMBA_3_0_24/source/smbd/trans2.c	2007-01-30 02:27:29 UTC (rev 21054)
@@ -3679,7 +3679,7 @@
  code.
 ****************************************************************************/
 
-NTSTATUS hardlink_internals(connection_struct *conn, char *oldname, char *newname)
+NTSTATUS hardlink_internals(connection_struct *conn, pstring oldname, pstring newname)
 {
 	SMB_STRUCT_STAT sbuf1, sbuf2;
 	pstring last_component_oldname;
@@ -3988,7 +3988,46 @@
 	return -1;
 }
 
+/****************************************************************************
+ Deal with SMB_SET_FILE_UNIX_HLINK (create a UNIX hard link).
+****************************************************************************/
 
+static int smb_set_file_unix_hlink(connection_struct *conn,
+				char *inbuf,
+				char *outbuf,
+				int bufsize,
+				char *params,
+				char *pdata,
+				int total_data,
+				unsigned int max_data_bytes,
+				pstring fname)
+{
+	pstring oldname;
+	NTSTATUS status = NT_STATUS_OK;
+
+	/* Set a hard link. */
+	if (total_data == 0) {
+		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+	}
+
+	srvstr_get_path(inbuf, oldname, pdata, sizeof(oldname), total_data, STR_TERMINATE, &status);
+	if (!NT_STATUS_IS_OK(status)) {
+		return ERROR_NT(status);
+	}
+
+	DEBUG(10,("call_trans2setfilepathinfo: SMB_SET_FILE_UNIX_LINK doing hard link %s -> %s\n",
+		fname, oldname));
+
+	status = hardlink_internals(conn, oldname, fname);
+	if (!NT_STATUS_IS_OK(status)) {
+		return ERROR_NT(status);
+	}
+
+	SSVAL(params,0,0);
+	send_trans2_replies(outbuf, bufsize, params, 2, pdata, 0, max_data_bytes);
+	return -1;
+}
+
 /****************************************************************************
  Reply to a TRANS2_SETFILEINFO (set file info by fileid or pathname).
 ****************************************************************************/
@@ -4534,30 +4573,19 @@
 
 		case SMB_SET_FILE_UNIX_HLINK:
 		{
-			pstring oldname;
-			char *newname = fname;
-
-			/* Set a hard link. */
-			if (total_data == 0) {
-				return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+			if (tran_call != TRANSACT2_SETPATHINFO) {
+				/* We must have a pathname for this. */
+				return ERROR_NT(NT_STATUS_INVALID_LEVEL);
 			}
-
-			srvstr_get_path(inbuf, oldname, pdata, sizeof(oldname), total_data, STR_TERMINATE, &status);
-			if (!NT_STATUS_IS_OK(status)) {
-				return ERROR_NT(status);
-			}
-
-			DEBUG(10,("call_trans2setfilepathinfo: SMB_SET_FILE_UNIX_LINK doing hard link %s -> %s\n",
-				fname, oldname));
-
-			status = hardlink_internals(conn, oldname, newname);
-			if (!NT_STATUS_IS_OK(status)) {
-				return ERROR_NT(status);
-			}
-
-			SSVAL(params,0,0);
-			send_trans2_replies(outbuf, bufsize, params, 2, *ppdata, 0, max_data_bytes);
-			return(-1);
+			return smb_set_file_unix_hlink(conn,
+						inbuf,
+						outbuf,
+						bufsize,
+						params,
+						*ppdata,
+						total_data,
+						max_data_bytes,
+						fname);
 		}
 
 		case SMB_FILE_RENAME_INFORMATION:



More information about the samba-cvs mailing list