Add a check to ensure that the server returns the correct device type, not
authorAndrew Bartlett <abartlet@samba.org>
Wed, 23 Apr 2003 09:26:07 +0000 (09:26 +0000)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 23 Apr 2003 09:26:07 +0000 (09:26 +0000)
just the correct error.

This should help us avoid breaking NT4 IPC$ connections, for example.

This has required that we don't overwrite the device type for IPC$ in our
tcon&X code, but only smbwrapper even uses it, and a server that doesn't send
a correct dev type breaks other things pretty badly.

In any case, I'll 'fix' smbwrapper :-).

Andrew Bartlett
(This used to be commit a93057efcb6e639be05b7bdcb9729ed8f39f5f62)

source3/libsmb/cliconnect.c
source3/torture/torture.c

index 4bfa694e63477afc51252507fe90a44e033794f8..9dddb6a1633063a962559833cfedf05d05388b24 100644 (file)
@@ -810,9 +810,6 @@ BOOL cli_send_tconX(struct cli_state *cli,
 
        clistr_pull(cli, cli->dev, smb_buf(cli->inbuf), sizeof(fstring), -1, STR_TERMINATE|STR_ASCII);
 
-       if (strcasecmp(share,"IPC$")==0)
-               fstrcpy(cli->dev, "IPC");
-
        if (cli->protocol >= PROTOCOL_NT1 &&
            smb_buflen(cli->inbuf) == 3) {
                /* almost certainly win95 - enable bug fixes */
index 740fae44251474f82034e355b6d79b67866ef5e0..840b6ad2947a26e77da71cd3a48829e57d638888 100644 (file)
@@ -1066,6 +1066,7 @@ static BOOL run_tcon2_test(int dummy)
 
 static BOOL tcon_devtest(struct cli_state *cli,
                         const char *myshare, const char *devtype,
+                        const char *return_devtype,
                         NTSTATUS expected_error)
 {
        BOOL status;
@@ -1076,7 +1077,15 @@ static BOOL tcon_devtest(struct cli_state *cli,
 
        if (NT_STATUS_IS_OK(expected_error)) {
                if (status) {
-                       ret = True;
+                       if (strcmp(cli->dev, return_devtype) == 0) {
+                               ret = True;
+                       } else { 
+                               printf("tconX to share %s with type %s "
+                                      "succeeded but returned the wrong "
+                                      "device type (got [%s] but should have got [%s])\n",
+                                      myshare, devtype, cli->dev, return_devtype);
+                               ret = False;
+                       }
                } else {
                        printf("tconX to share %s with type %s "
                               "should have succeeded but failed\n",
@@ -1125,34 +1134,34 @@ static BOOL run_tcon_devtype_test(int dummy)
                return False;
        }
 
-       if (!tcon_devtest(cli1, "IPC$", "A:", NT_STATUS_BAD_DEVICE_TYPE))
+       if (!tcon_devtest(cli1, "IPC$", "A:", NULL, NT_STATUS_BAD_DEVICE_TYPE))
                ret = False;
 
-       if (!tcon_devtest(cli1, "IPC$", "?????", NT_STATUS_OK))
+       if (!tcon_devtest(cli1, "IPC$", "?????", "IPC", NT_STATUS_OK))
                ret = False;
 
-       if (!tcon_devtest(cli1, "IPC$", "LPT:", NT_STATUS_BAD_DEVICE_TYPE))
+       if (!tcon_devtest(cli1, "IPC$", "LPT:", NULL, NT_STATUS_BAD_DEVICE_TYPE))
                ret = False;
 
-       if (!tcon_devtest(cli1, "IPC$", "IPC", NT_STATUS_OK))
+       if (!tcon_devtest(cli1, "IPC$", "IPC", "IPC", NT_STATUS_OK))
                ret = False;
                        
-       if (!tcon_devtest(cli1, "IPC$", "FOOBA", NT_STATUS_BAD_DEVICE_TYPE))
+       if (!tcon_devtest(cli1, "IPC$", "FOOBA", NULL, NT_STATUS_BAD_DEVICE_TYPE))
                ret = False;
 
-       if (!tcon_devtest(cli1, share, "A:", NT_STATUS_OK))
+       if (!tcon_devtest(cli1, share, "A:", "A:", NT_STATUS_OK))
                ret = False;
 
-       if (!tcon_devtest(cli1, share, "?????", NT_STATUS_OK))
+       if (!tcon_devtest(cli1, share, "?????", "A:", NT_STATUS_OK))
                ret = False;
 
-       if (!tcon_devtest(cli1, share, "LPT:", NT_STATUS_BAD_DEVICE_TYPE))
+       if (!tcon_devtest(cli1, share, "LPT:", NULL, NT_STATUS_BAD_DEVICE_TYPE))
                ret = False;
 
-       if (!tcon_devtest(cli1, share, "IPC", NT_STATUS_BAD_DEVICE_TYPE))
+       if (!tcon_devtest(cli1, share, "IPC", NULL, NT_STATUS_BAD_DEVICE_TYPE))
                ret = False;
                        
-       if (!tcon_devtest(cli1, share, "FOOBA", NT_STATUS_BAD_DEVICE_TYPE))
+       if (!tcon_devtest(cli1, share, "FOOBA", NULL, NT_STATUS_BAD_DEVICE_TYPE))
                ret = False;
 
        cli_shutdown(cli1);