Fix for bug #64, Win9x Nexus tools not working against Samba3.0. Missing
authorJeremy Allison <jra@samba.org>
Tue, 21 Oct 2003 23:14:41 +0000 (23:14 +0000)
committerJeremy Allison <jra@samba.org>
Tue, 21 Oct 2003 23:14:41 +0000 (23:14 +0000)
map in errormap for ERROR_MORE_DATA -> ERRDOS, ERRmoredata.
Jeremy.

source/libsmb/errormap.c
source/smbd/ipc.c

index 4d9a717e1c07594ea9bc2e11f6766dd51bba9ed8..116d2cefe152669262afa93477d59d13e1d863d7 100644 (file)
@@ -98,6 +98,10 @@ static const struct {
 */
        {ERRDOS,        ERRnoaccess,    NT_STATUS_ACCESS_DENIED},
        {ERRDOS,        111,    NT_STATUS_BUFFER_TOO_SMALL},
+/*
+ * Not an official error, as only bit 0x80000000, not bits 0xC0000000 are set.
+ */
+       {ERRDOS,        ERRmoredata,    STATUS_BUFFER_OVERFLOW},
        {ERRDOS,        ERRbadfid,      NT_STATUS_OBJECT_TYPE_MISMATCH},
        {ERRHRD,        ERRgeneral,     NT_STATUS_NONCONTINUABLE_EXCEPTION},
        {ERRHRD,        ERRgeneral,     NT_STATUS_INVALID_DISPOSITION},
index bc828d2e8ef4bc49aad8f4d1fdf3c958bd2fc1c4..86d982b0227819f6fbafdb2add1f61568a222a91 100644 (file)
@@ -96,7 +96,7 @@ void send_trans_reply(char *outbuf,
        align = ((this_lparam)%4);
 
        if (buffer_too_large) {
-               ERROR_NT(STATUS_BUFFER_OVERFLOW);
+               ERROR_BOTH(STATUS_BUFFER_OVERFLOW,ERRDOS,ERRmoredata);
        }
 
        set_message(outbuf,10,1+align+this_ldata+this_lparam,True);
@@ -281,6 +281,14 @@ static int api_fd_reply(connection_struct *conn,uint16 vuid,char *outbuf,
        subcommand = ((int)setup[0]) & 0xFFFF;
 
        if(!(p = get_rpc_pipe(pnum))) {
+               if (subcommand == TRANSACT_WAITNAMEDPIPEHANDLESTATE) {
+                       /* Win9x does this call with a unicode pipe name, not a pnum. */
+                       /* Just return success for now... */
+                       DEBUG(3,("Got TRANSACT_WAITNAMEDPIPEHANDLESTATE on text pipe name\n"));
+                       send_trans_reply(outbuf, NULL, 0, NULL, 0, False);
+                       return -1;
+               }
+
                DEBUG(1,("api_fd_reply: INVALID PIPE HANDLE: %x\n", pnum));
                return api_no_reply(outbuf, mdrcnt);
        }