svn commit: samba r4767 - in branches/SAMBA_4_0/source/libcli/raw: .

tridge at samba.org tridge at samba.org
Sun Jan 16 01:22:08 GMT 2005


Author: tridge
Date: 2005-01-16 01:22:08 +0000 (Sun, 16 Jan 2005)
New Revision: 4767

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

Log:
handle the different NBT session request refusals, and map them to
reasonable NT_STATUS values

Modified:
   branches/SAMBA_4_0/source/libcli/raw/clitransport.c


Changeset:
Modified: branches/SAMBA_4_0/source/libcli/raw/clitransport.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/clitransport.c	2005-01-16 01:21:58 UTC (rev 4766)
+++ branches/SAMBA_4_0/source/libcli/raw/clitransport.c	2005-01-16 01:22:08 UTC (rev 4767)
@@ -182,24 +182,53 @@
 }
 
 /*
+  map a session request error to a NTSTATUS
+ */
+static NTSTATUS map_session_refused_error(uint8_t error)
+{
+	switch (error) {
+	case 0x80:
+	case 0x81:
+		return NT_STATUS_REMOTE_NOT_LISTENING;
+	case 0x82:
+		return NT_STATUS_RESOURCE_NAME_NOT_FOUND;
+	case 0x83:
+		return NT_STATUS_REMOTE_RESOURCES;
+	}
+	return NT_STATUS_UNEXPECTED_IO_ERROR;
+}
+
+
+/*
   finish a smbcli_transport_connect()
 */
-BOOL smbcli_transport_connect_recv(struct smbcli_request *req)
+NTSTATUS smbcli_transport_connect_recv(struct smbcli_request *req)
 {
+	NTSTATUS status;
+
 	if (!smbcli_request_receive(req)) {
 		smbcli_request_destroy(req);
-		return False;
+		return NT_STATUS_UNEXPECTED_NETWORK_ERROR;
 	}
 
-	if (CVAL(req->in.buffer,0) != 0x82) {
-		req->transport->error.etype = ETYPE_NBT;
-		req->transport->error.e.nbt_error = CVAL(req->in.buffer,4);
-		smbcli_request_destroy(req);
-		return False;
+	switch (CVAL(req->in.buffer,0)) {
+	case 0x82:
+		status = NT_STATUS_OK;
+		break;
+	case 0x83:
+		status = map_session_refused_error(CVAL(req->in.buffer,4));
+		break;
+	case 0x84:
+		DEBUG(1,("Warning: session retarget not supported\n"));
+		status = NT_STATUS_NOT_SUPPORTED;
+		break;
+	default:
+		status = NT_STATUS_UNEXPECTED_IO_ERROR;
+		break;
 	}
 
 	smbcli_request_destroy(req);
-	return True;
+	return status;
 }
 
 
@@ -211,14 +240,16 @@
 			      struct nmb_name *called)
 {
 	struct smbcli_request *req;
-	
+	NTSTATUS status;
+
 	if (transport->socket->port == 445) {
 		return True;
 	}
 
 	req = smbcli_transport_connect_send(transport, 
 					    calling, called);
-	return smbcli_transport_connect_recv(req);
+	status = smbcli_transport_connect_recv(req);
+	return NT_STATUS_IS_OK(status);
 }
 
 /****************************************************************************



More information about the samba-cvs mailing list