r23792: convert Samba4 to GPLv3
[samba.git] / source4 / torture / basic / scanner.c
index 0e79e94f82caf34416c7856633e3de5a959e950c..0a1cfc2e01b0e3d693cadfa33920f23253257c61 100644 (file)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
+#include "torture/torture.h"
+#include "libcli/libcli.h"
+#include "torture/util.h"
+#include "libcli/raw/libcliraw.h"
+#include "system/filesys.h"
+#include "pstring.h"
 
 #define VERBOSE 0
 #define OP_MIN 0
@@ -29,11 +34,11 @@ look for a partial hit
 ****************************************************************************/
 static void trans2_check_hit(const char *format, int op, int level, NTSTATUS status)
 {
-       if (NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_INVALID_LEVEL) ||
-           NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_NOT_IMPLEMENTED) ||
-           NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_NOT_SUPPORTED) ||
-           NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_UNSUCCESSFUL) ||
-           NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_INVALID_INFO_CLASS)) {
+       if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_LEVEL) ||
+           NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED) ||
+           NT_STATUS_EQUAL(status, NT_STATUS_NOT_SUPPORTED) ||
+           NT_STATUS_EQUAL(status, NT_STATUS_UNSUCCESSFUL) ||
+           NT_STATUS_EQUAL(status, NT_STATUS_INVALID_INFO_CLASS)) {
                return;
        }
 #if VERBOSE
@@ -47,7 +52,7 @@ check for existance of a trans2 call
 ****************************************************************************/
 static NTSTATUS try_trans2(struct smbcli_state *cli, 
                           int op,
-                          char *param, char *data,
+                          uint8_t *param, uint8_t *data,
                           int param_len, int data_len,
                           int *rparam_len, int *rdata_len)
 {
@@ -75,7 +80,7 @@ static NTSTATUS try_trans2(struct smbcli_state *cli,
        *rparam_len = t2.out.params.length;
        *rdata_len = t2.out.data.length;
 
-       talloc_destroy(mem_ctx);
+       talloc_free(mem_ctx);
        
        return status;
 }
@@ -84,7 +89,7 @@ static NTSTATUS try_trans2(struct smbcli_state *cli,
 static NTSTATUS try_trans2_len(struct smbcli_state *cli, 
                             const char *format,
                             int op, int level,
-                            char *param, char *data,
+                            uint8_t *param, uint8_t *data,
                             int param_len, int *data_len,
                             int *rparam_len, int *rdata_len)
 {
@@ -122,7 +127,7 @@ static BOOL trans2_op_exists(struct smbcli_state *cli, int op)
        int data_len = 0;
        int param_len = 0;
        int rparam_len, rdata_len;
-       pstring param, data;
+       uint8_t param[1024], data[1024];
        NTSTATUS status1, status2;
 
        memset(data, 0, sizeof(data));
@@ -157,7 +162,7 @@ static BOOL scan_trans2(struct smbcli_state *cli, int op, int level,
        int data_len = 0;
        int param_len = 0;
        int rparam_len, rdata_len;
-       pstring param, data;
+       uint8_t param[1024], data[1024];
        NTSTATUS status;
 
        memset(data, 0, sizeof(data));
@@ -236,34 +241,30 @@ static BOOL scan_trans2(struct smbcli_state *cli, int op, int level,
 }
 
 
-BOOL torture_trans2_scan(void)
+BOOL torture_trans2_scan(struct torture_context *torture, 
+                                                struct smbcli_state *cli)
 {
-       static struct smbcli_state *cli;
        int op, level;
        const char *fname = "\\scanner.dat";
        int fnum, dnum, qfnum;
 
-       printf("starting trans2 scan test\n");
-
-       if (!torture_open_connection(&cli)) {
-               return False;
-       }
-
        fnum = smbcli_open(cli->tree, fname, O_RDWR | O_CREAT | O_TRUNC, DENY_NONE);
        if (fnum == -1) {
                printf("file open failed - %s\n", smbcli_errstr(cli->tree));
        }
        dnum = smbcli_nt_create_full(cli->tree, "\\", 
-                                 0, GENERIC_RIGHTS_FILE_READ, FILE_ATTRIBUTE_NORMAL,
-                                 NTCREATEX_SHARE_ACCESS_READ | NTCREATEX_SHARE_ACCESS_WRITE, 
-                                 NTCREATEX_DISP_OPEN, 
-                                 NTCREATEX_OPTIONS_DIRECTORY, 0);
+                                    0, 
+                                    SEC_RIGHTS_FILE_READ, 
+                                    FILE_ATTRIBUTE_NORMAL,
+                                    NTCREATEX_SHARE_ACCESS_READ | NTCREATEX_SHARE_ACCESS_WRITE, 
+                                    NTCREATEX_DISP_OPEN, 
+                                    NTCREATEX_OPTIONS_DIRECTORY, 0);
        if (dnum == -1) {
                printf("directory open failed - %s\n", smbcli_errstr(cli->tree));
        }
        qfnum = smbcli_nt_create_full(cli->tree, "\\$Extend\\$Quota:$Q:$INDEX_ALLOCATION", 
                                   NTCREATEX_FLAGS_EXTENDED, 
-                                  SEC_RIGHTS_MAXIMUM_ALLOWED, 
+                                  SEC_FLAG_MAXIMUM_ALLOWED, 
                                   0,
                                   NTCREATEX_SHARE_ACCESS_READ|NTCREATEX_SHARE_ACCESS_WRITE, 
                                   NTCREATEX_DISP_OPEN, 
@@ -291,9 +292,6 @@ BOOL torture_trans2_scan(void)
                }
        }
 
-       torture_close_connection(cli);
-
-       printf("trans2 scan finished\n");
        return True;
 }
 
@@ -305,11 +303,11 @@ look for a partial hit
 ****************************************************************************/
 static void nttrans_check_hit(const char *format, int op, int level, NTSTATUS status)
 {
-       if (NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_INVALID_LEVEL) ||
-           NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_NOT_IMPLEMENTED) ||
-           NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_NOT_SUPPORTED) ||
-           NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_UNSUCCESSFUL) ||
-           NT_STATUS_V(status) == NT_STATUS_V(NT_STATUS_INVALID_INFO_CLASS)) {
+       if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_LEVEL) ||
+           NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED) ||
+           NT_STATUS_EQUAL(status, NT_STATUS_NOT_SUPPORTED) ||
+           NT_STATUS_EQUAL(status, NT_STATUS_UNSUCCESSFUL) ||
+           NT_STATUS_EQUAL(status, NT_STATUS_INVALID_INFO_CLASS)) {
                return;
        }
 #if VERBOSE
@@ -323,7 +321,7 @@ check for existence of a nttrans call
 ****************************************************************************/
 static NTSTATUS try_nttrans(struct smbcli_state *cli, 
                            int op,
-                           char *param, char *data,
+                           uint8_t *param, uint8_t *data,
                            int param_len, int data_len,
                            int *rparam_len, int *rdata_len)
 {
@@ -351,13 +349,13 @@ static NTSTATUS try_nttrans(struct smbcli_state *cli,
        
        if (NT_STATUS_IS_ERR(status)) {
                DEBUG(1,("Failed to send NT_TRANS\n"));
-               talloc_destroy(mem_ctx);
+               talloc_free(mem_ctx);
                return status;
        }
        *rparam_len = parms.out.params.length;
        *rdata_len = parms.out.data.length;
 
-       talloc_destroy(mem_ctx);
+       talloc_free(mem_ctx);
 
        return status;
 }
@@ -366,7 +364,7 @@ static NTSTATUS try_nttrans(struct smbcli_state *cli,
 static NTSTATUS try_nttrans_len(struct smbcli_state *cli, 
                             const char *format,
                             int op, int level,
-                            char *param, char *data,
+                            uint8_t *param, uint8_t *data,
                             int param_len, int *data_len,
                             int *rparam_len, int *rdata_len)
 {
@@ -404,7 +402,7 @@ static BOOL scan_nttrans(struct smbcli_state *cli, int op, int level,
        int data_len = 0;
        int param_len = 0;
        int rparam_len, rdata_len;
-       pstring param, data;
+       uint8_t param[1024], data[1024];
        NTSTATUS status;
 
        memset(data, 0, sizeof(data));
@@ -441,7 +439,7 @@ static BOOL scan_nttrans(struct smbcli_state *cli, int op, int level,
        SSVAL(param, 0, level);
        SSVAL(param, 2, 0);
        SSVAL(param, 4, 0);
-       param_len += push_string(&param[6], fname, -1, STR_TERMINATE | STR_UNICODE);
+       param_len += push_string(&param[6], fname, sizeof(pstring), STR_TERMINATE | STR_UNICODE);
 
        status = try_nttrans_len(cli, "fname", op, level, param, data, param_len, &data_len, 
                                &rparam_len, &rdata_len);
@@ -452,7 +450,7 @@ static BOOL scan_nttrans(struct smbcli_state *cli, int op, int level,
        SSVAL(param, 0, level);
        SSVAL(param, 2, 0);
        SSVAL(param, 4, 0);
-       param_len += push_string(&param[6], "\\newfile.dat", -1, STR_TERMINATE | STR_UNICODE);
+       param_len += push_string(&param[6], "\\newfile.dat", sizeof(pstring), STR_TERMINATE | STR_UNICODE);
 
        status = try_nttrans_len(cli, "newfile", op, level, param, data, param_len, &data_len, 
                                &rparam_len, &rdata_len);
@@ -464,7 +462,7 @@ static BOOL scan_nttrans(struct smbcli_state *cli, int op, int level,
        smbcli_mkdir(cli->tree, "\\testdir");
        param_len = 2;
        SSVAL(param, 0, level);
-       param_len += push_string(&param[2], "\\testdir", -1, STR_TERMINATE | STR_UNICODE);
+       param_len += push_string(&param[2], "\\testdir", sizeof(pstring), STR_TERMINATE | STR_UNICODE);
 
        status = try_nttrans_len(cli, "dfs", op, level, param, data, param_len, &data_len, 
                                &rparam_len, &rdata_len);
@@ -475,19 +473,13 @@ static BOOL scan_nttrans(struct smbcli_state *cli, int op, int level,
 }
 
 
-BOOL torture_nttrans_scan(void)
+BOOL torture_nttrans_scan(struct torture_context *torture, 
+                                                 struct smbcli_state *cli)
 {
-       static struct smbcli_state *cli;
        int op, level;
        const char *fname = "\\scanner.dat";
        int fnum, dnum;
 
-       printf("starting nttrans scan test\n");
-
-       if (!torture_open_connection(&cli)) {
-               return False;
-       }
-
        fnum = smbcli_open(cli->tree, fname, O_RDWR | O_CREAT | O_TRUNC, 
                         DENY_NONE);
        dnum = smbcli_open(cli->tree, "\\", O_RDONLY, DENY_NONE);
@@ -515,7 +507,7 @@ BOOL torture_nttrans_scan(void)
 
 
 /* scan for valid base SMB requests */
-BOOL torture_smb_scan(void)
+BOOL torture_smb_scan(struct torture_context *torture)
 {
        static struct smbcli_state *cli;
        int op;
@@ -525,7 +517,7 @@ BOOL torture_smb_scan(void)
        for (op=0x0;op<=0xFF;op++) {
                if (op == SMBreadbraw) continue;
 
-               if (!torture_open_connection(&cli)) {
+               if (!torture_open_connection(&cli, 0)) {
                        return False;
                }