r23779: Change from v2 or later to v3 or later.
[bbaumbach/samba-autobuild/.git] / source3 / python / py_spoolss_drivers.c
index 0c242d918113253ebb79e5590657a565b9a6891c..32ed7daca43d3d6a4494110ee451ca3c27e54cc6 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
    
    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,
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -29,7 +29,7 @@ PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args,
        PyObject *result = NULL, *creds = NULL;
        PRINTER_DRIVER_CTR ctr;
        int level = 1, i;
        PyObject *result = NULL, *creds = NULL;
        PRINTER_DRIVER_CTR ctr;
        int level = 1, i;
-       uint32 needed, num_drivers;
+       uint32 num_drivers;
        char *arch = "Windows NT x86", *server, *errstr;
        static char *kwlist[] = {"server", "level", "creds", "arch", NULL};
        struct cli_state *cli = NULL;
        char *arch = "Windows NT x86", *server, *errstr;
        static char *kwlist[] = {"server", "level", "creds", "arch", NULL};
        struct cli_state *cli = NULL;
@@ -57,27 +57,22 @@ PyObject *spoolss_enumprinterdrivers(PyObject *self, PyObject *args,
 
        /* Call rpc function */
        
 
        /* Call rpc function */
        
-       if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) {
+       if (!(cli = open_pipe_creds(server, creds, PI_SPOOLSS, &errstr))) {
                PyErr_SetString(spoolss_error, errstr);
                free(errstr);
                goto done;
        }
 
                PyErr_SetString(spoolss_error, errstr);
                free(errstr);
                goto done;
        }
 
-       if (!(mem_ctx = talloc_init())) {
+       if (!(mem_ctx = talloc_init("spoolss_enumprinterdrivers"))) {
                PyErr_SetString(
                        spoolss_error, "unable to init talloc context\n");
                goto done;
        }       
 
                PyErr_SetString(
                        spoolss_error, "unable to init talloc context\n");
                goto done;
        }       
 
-       werror = cli_spoolss_enumprinterdrivers(
-               cli, mem_ctx, 0, &needed, level, arch,
+       werror = rpccli_spoolss_enumprinterdrivers(
+               cli->pipe_list, mem_ctx, level, arch,
                &num_drivers, &ctr);
 
                &num_drivers, &ctr);
 
-       if (W_ERROR_V(werror) == ERRinsufficientbuffer)
-               werror = cli_spoolss_enumprinterdrivers(
-                       cli, mem_ctx, needed, NULL, level, arch, 
-                       &num_drivers, &ctr);
-
        if (!W_ERROR_IS_OK(werror)) {
                PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
                goto done;
        if (!W_ERROR_IS_OK(werror)) {
                PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
                goto done;
@@ -175,8 +170,8 @@ PyObject *spoolss_hnd_getprinterdriver(PyObject *self, PyObject *args,
        PyObject *result = Py_None;
        PRINTER_DRIVER_CTR ctr;
        int level = 1;
        PyObject *result = Py_None;
        PRINTER_DRIVER_CTR ctr;
        int level = 1;
-       uint32 needed;
        char *arch = "Windows NT x86";
        char *arch = "Windows NT x86";
+       int version = 2;
        static char *kwlist[] = {"level", "arch", NULL};
 
        /* Parse parameters */
        static char *kwlist[] = {"level", "arch", NULL};
 
        /* Parse parameters */
@@ -187,14 +182,8 @@ PyObject *spoolss_hnd_getprinterdriver(PyObject *self, PyObject *args,
 
        /* Call rpc function */
 
 
        /* Call rpc function */
 
-       werror = cli_spoolss_getprinterdriver(
-               hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, level,
-               arch, &ctr);
-
-       if (W_ERROR_V(werror) == ERRinsufficientbuffer)
-               werror = cli_spoolss_getprinterdriver(
-                       hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol,
-                       level, arch, &ctr);
+       werror = rpccli_spoolss_getprinterdriver(
+               hnd->cli, hnd->mem_ctx, &hnd->pol, level, arch, version, &ctr);
 
        if (!W_ERROR_IS_OK(werror)) {
                PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
 
        if (!W_ERROR_IS_OK(werror)) {
                PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
@@ -233,7 +222,7 @@ PyObject *spoolss_getprinterdriverdir(PyObject *self, PyObject *args,
        WERROR werror;
        PyObject *result = NULL, *creds = NULL;
        DRIVER_DIRECTORY_CTR ctr;
        WERROR werror;
        PyObject *result = NULL, *creds = NULL;
        DRIVER_DIRECTORY_CTR ctr;
-       uint32 needed, level = 1;
+       uint32 level = 1;
        char *arch = "Windows NT x86", *server, *errstr;
        static char *kwlist[] = {"server", "level", "arch", "creds", NULL};
        struct cli_state *cli = NULL;
        char *arch = "Windows NT x86", *server, *errstr;
        static char *kwlist[] = {"server", "level", "arch", "creds", NULL};
        struct cli_state *cli = NULL;
@@ -261,24 +250,20 @@ PyObject *spoolss_getprinterdriverdir(PyObject *self, PyObject *args,
 
        /* Call rpc function */
 
 
        /* Call rpc function */
 
-       if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) {
+       if (!(cli = open_pipe_creds(server, creds, PI_SPOOLSS, &errstr))) {
                PyErr_SetString(spoolss_error, errstr);
                free(errstr);
                goto done;
        }
        
                PyErr_SetString(spoolss_error, errstr);
                free(errstr);
                goto done;
        }
        
-       if (!(mem_ctx = talloc_init())) {
+       if (!(mem_ctx = talloc_init("spoolss_getprinterdriverdir"))) {
                PyErr_SetString(
                        spoolss_error, "unable to init talloc context\n");
                goto done;
        }       
 
                PyErr_SetString(
                        spoolss_error, "unable to init talloc context\n");
                goto done;
        }       
 
-       werror = cli_spoolss_getprinterdriverdir(
-               cli, mem_ctx, 0, &needed, level, arch, &ctr);
-
-       if (W_ERROR_V(werror) == ERRinsufficientbuffer)
-               werror = cli_spoolss_getprinterdriverdir(
-                       cli, mem_ctx, needed, NULL, level, arch, &ctr);
+       werror = rpccli_spoolss_getprinterdriverdir(
+               cli->pipe_list, mem_ctx, level, arch, &ctr);
 
        if (!W_ERROR_IS_OK(werror)) {
                PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
 
        if (!W_ERROR_IS_OK(werror)) {
                PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
@@ -335,13 +320,13 @@ PyObject *spoolss_addprinterdriver(PyObject *self, PyObject *args,
                return NULL;
        }
 
                return NULL;
        }
 
-       if (!(mem_ctx = talloc_init())) {
+       if (!(mem_ctx = talloc_init("spoolss_addprinterdriver"))) {
                PyErr_SetString(
                        spoolss_error, "unable to init talloc context\n");
                return NULL;
        }
 
                PyErr_SetString(
                        spoolss_error, "unable to init talloc context\n");
                return NULL;
        }
 
-       if (!(cli = open_pipe_creds(server, creds, PIPE_SPOOLSS, &errstr))) {
+       if (!(cli = open_pipe_creds(server, creds, PI_SPOOLSS, &errstr))) {
                PyErr_SetString(spoolss_error, errstr);
                free(errstr);
                goto done;
                PyErr_SetString(spoolss_error, errstr);
                free(errstr);
                goto done;
@@ -358,12 +343,13 @@ PyObject *spoolss_addprinterdriver(PyObject *self, PyObject *args,
        }
 
        ZERO_STRUCT(ctr);
        }
 
        ZERO_STRUCT(ctr);
-       
+       ZERO_STRUCT(dinfo);
+
        switch(level) {
        case 3:
                ctr.info3 = &dinfo.driver_3;
 
        switch(level) {
        case 3:
                ctr.info3 = &dinfo.driver_3;
 
-               if (!py_to_DRIVER_INFO_3(&dinfo.driver_3, info)) {
+               if (!py_to_DRIVER_INFO_3(&dinfo.driver_3, info, mem_ctx)) {
                        PyErr_SetString(spoolss_error,
                                        "error converting to driver info 3");
                        goto done;
                        PyErr_SetString(spoolss_error,
                                        "error converting to driver info 3");
                        goto done;
@@ -375,7 +361,7 @@ PyObject *spoolss_addprinterdriver(PyObject *self, PyObject *args,
                goto done;
        }
 
                goto done;
        }
 
-       werror = cli_spoolss_addprinterdriver(cli, mem_ctx, level, &ctr);
+       werror = rpccli_spoolss_addprinterdriver(cli->pipe_list, mem_ctx, level, &ctr);
 
        if (!W_ERROR_IS_OK(werror)) {
                PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
 
        if (!W_ERROR_IS_OK(werror)) {
                PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));