From d07cc9d8a1b34429f3c96abde7449ee0b7487ac3 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 20 Mar 2002 03:29:03 +0000 Subject: Initial version. (This used to be commit d35770d06f7bc396cf32337a4e1104b5fe8a3ca8) --- source3/python/py_spoolss_forms.c | 283 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 source3/python/py_spoolss_forms.c (limited to 'source3/python/py_spoolss_forms.c') diff --git a/source3/python/py_spoolss_forms.c b/source3/python/py_spoolss_forms.c new file mode 100644 index 0000000000..fc7db6ac93 --- /dev/null +++ b/source3/python/py_spoolss_forms.c @@ -0,0 +1,283 @@ +/* + Python wrappers for DCERPC/SMB client routines. + + Copyright (C) Tim Potter, 2002 + + 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 + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 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. +*/ + +#include "includes.h" +#include "Python.h" +#include "python/py_spoolss.h" + +struct pyconv py_FORM[] = { + { "flags", PY_UINT32, offsetof(FORM, flags) }, + { "width", PY_UINT32, offsetof(FORM, size_x) }, + { "length", PY_UINT32, offsetof(FORM, size_y) }, + { "top", PY_UINT32, offsetof(FORM, top) }, + { "left", PY_UINT32, offsetof(FORM, left) }, + { "right", PY_UINT32, offsetof(FORM, right) }, + { "bottom", PY_UINT32, offsetof(FORM, bottom) }, + { NULL } +}; + +struct pyconv py_FORM_1[] = { + { "flags", PY_UINT32, offsetof(FORM_1, flag) }, + { "width", PY_UINT32, offsetof(FORM_1, width) }, + { "length", PY_UINT32, offsetof(FORM_1, length) }, + { "top", PY_UINT32, offsetof(FORM_1, top) }, + { "left", PY_UINT32, offsetof(FORM_1, left) }, + { "right", PY_UINT32, offsetof(FORM_1, right) }, + { "bottom", PY_UINT32, offsetof(FORM_1, bottom) }, + { "name", PY_UNISTR, offsetof(FORM_1, name) }, + { NULL } +}; + +/* Add a form */ + +PyObject *spoolss_addform(PyObject *self, PyObject *args, PyObject *kw) +{ + PyObject *po; + spoolss_policy_hnd_object *hnd; + WERROR werror; + PyObject *py_form; + FORM form; + int level = 1; + static char *kwlist[] = {"hnd", "form", "level", NULL}; + + /* Parse parameters */ + + if (!PyArg_ParseTupleAndKeywords( + args, kw, "O!O!|i", kwlist, &spoolss_policy_hnd_type, &po, + &PyDict_Type, &py_form, &level)) + return NULL; + + hnd = (spoolss_policy_hnd_object *)po; + + /* Call rpc function */ + + switch (level) { + case 1: { + PyObject *py_form_name; + char *form_name; + + to_struct(&form, py_form, py_FORM); + + py_form_name = PyDict_GetItemString(py_form, "name"); + form_name = PyString_AsString(py_form_name); + + init_unistr2(&form.name, form_name, strlen(form_name) + 1); + + break; + } + default: + PyErr_SetString(spoolss_error, "unsupported info level"); + return NULL; + } + + werror = cli_spoolss_addform(hnd->cli, hnd->mem_ctx, &hnd->pol, + level, &form); + + + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, + PyInt_FromLong(W_ERROR_V(werror))); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +/* Get form properties */ + +PyObject *spoolss_getform(PyObject *self, PyObject *args, PyObject *kw) +{ + PyObject *po; + spoolss_policy_hnd_object *hnd; + WERROR werror; + PyObject *result; + char *form_name; + int level = 1; + static char *kwlist[] = {"hnd", "form_name", "level", NULL}; + uint32 needed; + FORM_1 form; + + /* Parse parameters */ + + if (!PyArg_ParseTupleAndKeywords(args, kw, "O!s|i", kwlist, + &spoolss_policy_hnd_type, &po, &form_name, + &level)) + return NULL; + + hnd = (spoolss_policy_hnd_object *)po; + + /* Call rpc function */ + + werror = cli_spoolss_getform(hnd->cli, hnd->mem_ctx, 0, &needed, + &hnd->pol, form_name, 1, &form); + + if (W_ERROR_V(werror) == ERRinsufficientbuffer) + werror = cli_spoolss_getform( + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, + form_name, 1, &form); + + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, + PyInt_FromLong(W_ERROR_V(werror))); + return NULL; + } + + result = Py_None; + + switch(level) { + case 1: + result = from_struct(&form, py_FORM_1); + break; + } + + Py_INCREF(result); + return result; +} + +/* Set form properties */ + +PyObject *spoolss_setform(PyObject *self, PyObject *args, PyObject *kw) +{ + PyObject *po; + spoolss_policy_hnd_object *hnd; + WERROR werror; + PyObject *py_form; + int level = 1; + static char *kwlist[] = {"hnd", "form_name", "form", "level", NULL}; + char *form_name; + FORM form; + + /* Parse parameters */ + + if (!PyArg_ParseTupleAndKeywords(args, kw, "O!sO!|i", kwlist, + &spoolss_policy_hnd_type, &po, &form_name, + &PyDict_Type, &py_form, &level)) + return NULL; + + hnd = (spoolss_policy_hnd_object *)po; + + /* Call rpc function */ + + to_struct(&form, py_form, py_FORM); + init_unistr2(&form.name, form_name, strlen(form_name) + 1); + + werror = cli_spoolss_setform(hnd->cli, hnd->mem_ctx, &hnd->pol, + level, form_name, &form); + + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, + PyInt_FromLong(W_ERROR_V(werror))); + + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +/* Delete a form */ + +PyObject *spoolss_deleteform(PyObject *self, PyObject *args, PyObject *kw) +{ + PyObject *po; + spoolss_policy_hnd_object *hnd; + WERROR werror; + int level = 1; + static char *kwlist[] = {"hnd", "form_name", "level", NULL}; + char *form_name; + + /* Parse parameters */ + + if (!PyArg_ParseTupleAndKeywords( + args, kw, "O!s|i", kwlist, &spoolss_policy_hnd_type, &po, + &form_name, &level)) + return NULL; + + hnd = (spoolss_policy_hnd_object *)po; + + /* Call rpc function */ + + werror = cli_spoolss_deleteform( + hnd->cli, hnd->mem_ctx, &hnd->pol, form_name); + + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, + PyInt_FromLong(W_ERROR_V(werror))); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +/* Enumerate forms */ + +PyObject *spoolss_enumforms(PyObject *self, PyObject *args, PyObject *kw) +{ + PyObject *po, *result; + spoolss_policy_hnd_object *hnd; + WERROR werror; + uint32 level = 1, num_forms, needed, i; + static char *kwlist[] = {"hnd", "level", NULL}; + FORM_1 *forms; + + /* Parse parameters */ + + if (!PyArg_ParseTupleAndKeywords( + args, kw, "O!|i", kwlist, &spoolss_policy_hnd_type, + &po, &level)) + return NULL; + + hnd = (spoolss_policy_hnd_object *)po; + + /* Call rpc function */ + + werror = cli_spoolss_enumforms( + hnd->cli, hnd->mem_ctx, 0, &needed, &hnd->pol, level, + &num_forms, &forms); + + if (W_ERROR_V(werror) == ERRinsufficientbuffer) + werror = cli_spoolss_enumforms( + hnd->cli, hnd->mem_ctx, needed, NULL, &hnd->pol, level, + &num_forms, &forms); + + if (!W_ERROR_IS_OK(werror)) { + PyErr_SetObject(spoolss_werror, + PyInt_FromLong(W_ERROR_V(werror))); + return NULL; + } + + result = PyList_New(num_forms); + + for (i = 0; i < num_forms; i++) { + PyObject *obj = NULL; + + switch(level) { + case 1: + obj = from_struct(&forms[i], py_FORM_1); + break; + } + + PyList_SetItem(result, i, obj); + } + + return result; +} -- cgit