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