python/py_spoolss.h

ソースコードを見る。

データ構造

struct  spoolss_policy_hnd_object

関数

PyObject * new_spoolss_policy_hnd_object (struct cli_state *cli, TALLOC_CTX *mem_ctx, POLICY_HND *pol)
PyObject * spoolss_enumprinterdrivers (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_getprinterdriver (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_getprinterdriverdir (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_addprinterdriver (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_addprinterdriverex (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_deleteprinterdriver (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_deleteprinterdriverex (PyObject *self, PyObject *args, PyObject *kw)
BOOL py_from_DRIVER_INFO_1 (PyObject **dict, DRIVER_INFO_1 *info)
BOOL py_to_DRIVER_INFO_1 (DRIVER_INFO_1 *info, PyObject *dict)
BOOL py_from_DRIVER_INFO_2 (PyObject **dict, DRIVER_INFO_2 *info)
BOOL py_to_DRIVER_INFO_2 (DRIVER_INFO_2 *info, PyObject *dict)
BOOL py_from_DRIVER_INFO_3 (PyObject **dict, DRIVER_INFO_3 *info)
BOOL py_to_DRIVER_INFO_3 (DRIVER_INFO_3 *info, PyObject *dict, TALLOC_CTX *mem_ctx)
BOOL py_from_DRIVER_INFO_6 (PyObject **dict, DRIVER_INFO_6 *info)
BOOL py_to_DRIVER_INFO_6 (DRIVER_INFO_6 *info, PyObject *dict)
BOOL py_from_DRIVER_DIRECTORY_1 (PyObject **dict, DRIVER_DIRECTORY_1 *info)
BOOL py_to_DRIVER_DIRECTORY_1 (DRIVER_DIRECTORY_1 *info, PyObject *dict)
PyObject * spoolss_hnd_addform (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_getform (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_setform (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_deleteform (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_enumforms (PyObject *self, PyObject *args, PyObject *kw)
BOOL py_from_FORM_1 (PyObject **dict, FORM_1 *form)
BOOL py_to_FORM (FORM *form, PyObject *dict)
PyObject * spoolss_hnd_enumjobs (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_setjob (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_getjob (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_startpageprinter (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_endpageprinter (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_startdocprinter (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_enddocprinter (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_writeprinter (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_addjob (PyObject *self, PyObject *args, PyObject *kw)
BOOL py_from_JOB_INFO_1 (PyObject **dict, JOB_INFO_1 *info)
BOOL py_to_JOB_INFO_1 (JOB_INFO_1 *info, PyObject *dict)
BOOL py_from_JOB_INFO_2 (PyObject **dict, JOB_INFO_2 *info)
BOOL py_to_JOB_INFO_2 (JOB_INFO_2 *info, PyObject *dict)
BOOL py_from_DOC_INFO_1 (PyObject **dict, DOC_INFO_1 *info)
BOOL py_to_DOC_INFO_1 (DOC_INFO_1 *info, PyObject *dict)
PyObject * spoolss_enumports (PyObject *self, PyObject *args, PyObject *kw)
BOOL py_from_PORT_INFO_1 (PyObject **dict, PORT_INFO_1 *info)
BOOL py_to_PORT_INFO_1 (PORT_INFO_1 *info, PyObject *dict)
BOOL py_from_PORT_INFO_2 (PyObject **dict, PORT_INFO_2 *info)
BOOL py_to_PORT_INFO_2 (PORT_INFO_2 *info, PyObject *dict)
PyObject * spoolss_hnd_getprinterdata (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_setprinterdata (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_enumprinterdata (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_deleteprinterdata (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_getprinterdataex (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_setprinterdataex (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_enumprinterdataex (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_deleteprinterdataex (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_enumprinterkey (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_deleteprinterkey (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_openprinter (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_closeprinter (PyObject *self, PyObject *args)
PyObject * spoolss_hnd_getprinter (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_hnd_setprinter (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_enumprinters (PyObject *self, PyObject *args, PyObject *kw)
PyObject * spoolss_addprinterex (PyObject *self, PyObject *args, PyObject *kw)
BOOL py_from_DEVICEMODE (PyObject **dict, DEVICEMODE *devmode)
BOOL py_to_DEVICEMODE (DEVICEMODE *devmode, PyObject *dict)
BOOL py_from_PRINTER_INFO_0 (PyObject **dict, PRINTER_INFO_0 *info)
BOOL py_to_PRINTER_INFO_0 (PRINTER_INFO_0 *info, PyObject *dict)
BOOL py_from_PRINTER_INFO_1 (PyObject **dict, PRINTER_INFO_1 *info)
BOOL py_to_PRINTER_INFO_1 (PRINTER_INFO_1 *info, PyObject *dict)
BOOL py_from_PRINTER_INFO_2 (PyObject **dict, PRINTER_INFO_2 *info)
BOOL py_to_PRINTER_INFO_2 (PRINTER_INFO_2 *info, PyObject *dict, TALLOC_CTX *mem_ctx)
BOOL py_from_PRINTER_INFO_3 (PyObject **dict, PRINTER_INFO_3 *info)
BOOL py_to_PRINTER_INFO_3 (PRINTER_INFO_3 *info, PyObject *dict, TALLOC_CTX *mem_ctx)

変数

PyTypeObject spoolss_policy_hnd_type
PyObject * spoolss_error
PyObject * spoolss_werror


関数

PyObject* new_spoolss_policy_hnd_object ( struct cli_state cli,
TALLOC_CTX mem_ctx,
POLICY_HND pol 
)

py_spoolss_common.c23 行で定義されています。

参照先 spoolss_policy_hnd_object::cliclispoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpolspoolss_policy_hnd_type.

参照元 spoolss_openprinter().

00025 {
00026         spoolss_policy_hnd_object *o;
00027 
00028         o = PyObject_New(spoolss_policy_hnd_object, &spoolss_policy_hnd_type);
00029 
00030         o->cli = cli;
00031         o->mem_ctx = mem_ctx;
00032         memcpy(&o->pol, pol, sizeof(POLICY_HND));
00033 
00034         return (PyObject*)o;
00035 }

PyObject* spoolss_enumprinterdrivers ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_drivers.c25 行で定義されています。

参照先 UNISTR::bufferclicli_shutdown()driver_info_info::info1driver_info_info::info2driver_info_info::info3driver_info_info::info6levelcli_state::mem_ctxnamedriver_info_1::namedriver_info_2::namedriver_info_3::namedriver_info_6::nameopen_pipe_creds()cli_state::pipe_listpy_from_DRIVER_INFO_1()py_from_DRIVER_INFO_2()py_from_DRIVER_INFO_3()py_from_DRIVER_INFO_6()py_werror_tuple()resultrpccli_spoolss_enumprinterdrivers()rpcstr_pull()serverspoolss_errorspoolss_werrortalloc_init()werror.

00027 {
00028         WERROR werror;
00029         PyObject *result = NULL, *creds = NULL;
00030         PRINTER_DRIVER_CTR ctr;
00031         int level = 1, i;
00032         uint32 num_drivers;
00033         char *arch = "Windows NT x86", *server, *errstr;
00034         static char *kwlist[] = {"server", "level", "creds", "arch", NULL};
00035         struct cli_state *cli = NULL;
00036         TALLOC_CTX *mem_ctx = NULL;
00037         
00038         /* Parse parameters */
00039 
00040         if (!PyArg_ParseTupleAndKeywords(
00041                     args, kw, "s|iOs", kwlist, &server, &level, &creds,
00042                     &arch)) 
00043                 return NULL;
00044         
00045         if (server[0] != '\\' || server[1] != '\\') {
00046                 PyErr_SetString(PyExc_ValueError, "UNC name required");
00047                 return NULL;
00048         }
00049 
00050         server += 2;
00051 
00052         if (creds && creds != Py_None && !PyDict_Check(creds)) {
00053                 PyErr_SetString(PyExc_TypeError, 
00054                                 "credentials must be dictionary or None");
00055                 return NULL;
00056         }
00057 
00058         /* Call rpc function */
00059         
00060         if (!(cli = open_pipe_creds(server, creds, PI_SPOOLSS, &errstr))) {
00061                 PyErr_SetString(spoolss_error, errstr);
00062                 free(errstr);
00063                 goto done;
00064         }
00065 
00066         if (!(mem_ctx = talloc_init("spoolss_enumprinterdrivers"))) {
00067                 PyErr_SetString(
00068                         spoolss_error, "unable to init talloc context\n");
00069                 goto done;
00070         }       
00071 
00072         werror = rpccli_spoolss_enumprinterdrivers(
00073                 cli->pipe_list, mem_ctx, level, arch,
00074                 &num_drivers, &ctr);
00075 
00076         if (!W_ERROR_IS_OK(werror)) {
00077                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00078                 goto done;
00079         }
00080 
00081         /* Return value */
00082 
00083         switch (level) {
00084         case 1:
00085                 result = PyDict_New();
00086                 
00087                 for (i = 0; i < num_drivers; i++) {
00088                         PyObject *value;
00089                         fstring name;
00090                         
00091                         rpcstr_pull(name, ctr.info1[i].name.buffer,
00092                                     sizeof(fstring), -1, STR_TERMINATE);
00093 
00094                         py_from_DRIVER_INFO_1(&value, &ctr.info1[i]);
00095 
00096                         PyDict_SetItemString(result, name, value);
00097                 }
00098                 
00099                 break;
00100         case 2: 
00101                 result = PyDict_New();
00102 
00103                 for(i = 0; i < num_drivers; i++) {
00104                         PyObject *value;
00105                         fstring name;
00106 
00107                         rpcstr_pull(name, ctr.info2[i].name.buffer,
00108                                     sizeof(fstring), -1, STR_TERMINATE);
00109 
00110                         py_from_DRIVER_INFO_2(&value, &ctr.info2[i]);
00111 
00112                         PyDict_SetItemString(result, name, value);
00113                 }
00114 
00115                 break;
00116         case 3: 
00117                 result = PyDict_New();
00118 
00119                 for(i = 0; i < num_drivers; i++) {
00120                         PyObject *value;
00121                         fstring name;
00122 
00123                         rpcstr_pull(name, ctr.info3[i].name.buffer,
00124                                     sizeof(fstring), -1, STR_TERMINATE);
00125 
00126                         py_from_DRIVER_INFO_3(&value, &ctr.info3[i]);
00127 
00128                         PyDict_SetItemString(result, name, value);
00129                 }
00130 
00131                 break;
00132         case 6: 
00133                 result = PyDict_New();
00134 
00135                 for(i = 0; i < num_drivers; i++) {
00136                         PyObject *value;
00137                         fstring name;
00138 
00139                         rpcstr_pull(name, ctr.info6[i].name.buffer,
00140                                     sizeof(fstring), -1, STR_TERMINATE);
00141 
00142                         py_from_DRIVER_INFO_6(&value, &ctr.info6[i]);
00143 
00144                         PyList_SetItem(result, i, value);
00145                 }
00146 
00147                 break;
00148         default:
00149                 PyErr_SetString(spoolss_error, "unknown info level");
00150                 goto done;
00151         }
00152         
00153  done:
00154         if (cli)
00155                 cli_shutdown(cli);
00156 
00157         if (mem_ctx)
00158                 talloc_destroy(mem_ctx);
00159 
00160         return result;
00161 }

PyObject* spoolss_hnd_getprinterdriver ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_drivers.c165 行で定義されています。

参照先 spoolss_policy_hnd_object::clidriver_info_info::info1driver_info_info::info2driver_info_info::info3driver_info_info::info6levelspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_from_DRIVER_INFO_1()py_from_DRIVER_INFO_2()py_from_DRIVER_INFO_3()py_from_DRIVER_INFO_6()py_werror_tuple()resultrpccli_spoolss_getprinterdriver()spoolss_errorspoolss_werrorwerror.

00167 {
00168         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00169         WERROR werror;
00170         PyObject *result = Py_None;
00171         PRINTER_DRIVER_CTR ctr;
00172         int level = 1;
00173         char *arch = "Windows NT x86";
00174         int version = 2;
00175         static char *kwlist[] = {"level", "arch", NULL};
00176 
00177         /* Parse parameters */
00178 
00179         if (!PyArg_ParseTupleAndKeywords(
00180                     args, kw, "|is", kwlist, &level, &arch))
00181                 return NULL;
00182 
00183         /* Call rpc function */
00184 
00185         werror = rpccli_spoolss_getprinterdriver(
00186                 hnd->cli, hnd->mem_ctx, &hnd->pol, level, arch, version, &ctr);
00187 
00188         if (!W_ERROR_IS_OK(werror)) {
00189                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00190                 return NULL;
00191         }
00192 
00193         /* Return value */
00194         
00195         switch (level) {
00196         case 1:
00197                 py_from_DRIVER_INFO_1(&result, ctr.info1);
00198                 break;
00199         case 2: 
00200                 py_from_DRIVER_INFO_2(&result, ctr.info2);
00201                 break;
00202         case 3: 
00203                 py_from_DRIVER_INFO_3(&result, ctr.info3);
00204                 break;
00205         case 6:
00206                 py_from_DRIVER_INFO_6(&result, ctr.info6);
00207                 break;
00208         default:
00209                 PyErr_SetString(spoolss_error, "unsupported info level");
00210                 return NULL;
00211         }
00212         
00213         Py_INCREF(result);
00214         return result;
00215 }

PyObject* spoolss_getprinterdriverdir ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_drivers.c219 行で定義されています。

参照先 clicli_shutdown()driver_info_ctr_info::info1levelcli_state::mem_ctxopen_pipe_creds()cli_state::pipe_listpy_from_DRIVER_DIRECTORY_1()py_werror_tuple()resultrpccli_spoolss_getprinterdriverdir()serverspoolss_errorspoolss_werrortalloc_init()werror.

00221 {
00222         WERROR werror;
00223         PyObject *result = NULL, *creds = NULL;
00224         DRIVER_DIRECTORY_CTR ctr;
00225         uint32 level = 1;
00226         char *arch = "Windows NT x86", *server, *errstr;
00227         static char *kwlist[] = {"server", "level", "arch", "creds", NULL};
00228         struct cli_state *cli = NULL;
00229         TALLOC_CTX *mem_ctx = NULL;
00230 
00231         /* Parse parameters */
00232 
00233         if (!PyArg_ParseTupleAndKeywords(
00234                     args, kw, "s|isO", kwlist, &server, &level,
00235                     &arch, &creds))
00236                 return NULL;
00237 
00238         if (server[0] != '\\' || server[1] != '\\') {
00239                 PyErr_SetString(PyExc_ValueError, "UNC name required");
00240                 return NULL;
00241         }
00242 
00243         server += 2;
00244 
00245         if (creds && creds != Py_None && !PyDict_Check(creds)) {
00246                 PyErr_SetString(PyExc_TypeError, 
00247                                 "credentials must be dictionary or None");
00248                 return NULL;
00249         }
00250 
00251         /* Call rpc function */
00252 
00253         if (!(cli = open_pipe_creds(server, creds, PI_SPOOLSS, &errstr))) {
00254                 PyErr_SetString(spoolss_error, errstr);
00255                 free(errstr);
00256                 goto done;
00257         }
00258         
00259         if (!(mem_ctx = talloc_init("spoolss_getprinterdriverdir"))) {
00260                 PyErr_SetString(
00261                         spoolss_error, "unable to init talloc context\n");
00262                 goto done;
00263         }       
00264 
00265         werror = rpccli_spoolss_getprinterdriverdir(
00266                 cli->pipe_list, mem_ctx, level, arch, &ctr);
00267 
00268         if (!W_ERROR_IS_OK(werror)) {
00269                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00270                 goto done;
00271         }
00272 
00273         /* Return value */
00274         
00275         switch (level) {
00276         case 1:
00277                 py_from_DRIVER_DIRECTORY_1(&result, ctr.info1);
00278                 break;
00279         default:
00280                 PyErr_SetString(spoolss_error, "unknown info level");
00281                 goto done;      
00282         }
00283         
00284  done:
00285         if (cli)
00286                 cli_shutdown(cli);
00287         
00288         if (mem_ctx)
00289                 talloc_destroy(mem_ctx);
00290 
00291         return result;
00292 }

PyObject* spoolss_addprinterdriver ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_drivers.c294 行で定義されています。

参照先 clicli_shutdown()get_level_value()driver_info_info::info3levelcli_state::mem_ctxopen_pipe_creds()cli_state::pipe_listpy_to_DRIVER_INFO_3()py_werror_tuple()resultrpccli_spoolss_addprinterdriver()serverspoolss_errorspoolss_werrortalloc_init()werror.

00296 {
00297         static char *kwlist[] = { "server", "info", "creds", NULL };
00298         char *server, *errstr;
00299         uint32 level;
00300         PyObject *info, *result = NULL, *creds = NULL;
00301         WERROR werror;
00302         TALLOC_CTX *mem_ctx = NULL;
00303         struct cli_state *cli = NULL;
00304         PRINTER_DRIVER_CTR ctr;
00305         union {
00306                 DRIVER_INFO_3 driver_3;
00307         } dinfo;
00308 
00309         if (!PyArg_ParseTupleAndKeywords(
00310                     args, kw, "sO!|O", kwlist, &server, &PyDict_Type,
00311                     &info, &creds))
00312                 return NULL;
00313         
00314         if (server[0] == '\\' || server[1] == '\\')
00315                 server += 2;
00316 
00317         if (creds && creds != Py_None && !PyDict_Check(creds)) {
00318                 PyErr_SetString(PyExc_TypeError, 
00319                                 "credentials must be dictionary or None");
00320                 return NULL;
00321         }
00322 
00323         if (!(mem_ctx = talloc_init("spoolss_addprinterdriver"))) {
00324                 PyErr_SetString(
00325                         spoolss_error, "unable to init talloc context\n");
00326                 return NULL;
00327         }
00328 
00329         if (!(cli = open_pipe_creds(server, creds, PI_SPOOLSS, &errstr))) {
00330                 PyErr_SetString(spoolss_error, errstr);
00331                 free(errstr);
00332                 goto done;
00333         }
00334 
00335         if (!get_level_value(info, &level)) {
00336                 PyErr_SetString(spoolss_error, "invalid info level");
00337                 goto done;
00338         }
00339 
00340         if (level != 3) {
00341                 PyErr_SetString(spoolss_error, "unsupported info level");
00342                 goto done;
00343         }
00344 
00345         ZERO_STRUCT(ctr);
00346         ZERO_STRUCT(dinfo);
00347 
00348         switch(level) {
00349         case 3:
00350                 ctr.info3 = &dinfo.driver_3;
00351 
00352                 if (!py_to_DRIVER_INFO_3(&dinfo.driver_3, info, mem_ctx)) {
00353                         PyErr_SetString(spoolss_error,
00354                                         "error converting to driver info 3");
00355                         goto done;
00356                 }
00357 
00358                 break;
00359         default:
00360                 PyErr_SetString(spoolss_error, "unsupported info level");
00361                 goto done;
00362         }
00363 
00364         werror = rpccli_spoolss_addprinterdriver(cli->pipe_list, mem_ctx, level, &ctr);
00365 
00366         if (!W_ERROR_IS_OK(werror)) {
00367                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00368                 goto done;
00369         }
00370 
00371         Py_INCREF(Py_None);
00372         result = Py_None;
00373 
00374 done:
00375         if (cli)
00376                 cli_shutdown(cli);
00377 
00378         if (mem_ctx)
00379                 talloc_destroy(mem_ctx);
00380         
00381         return result;
00382         
00383 }

PyObject* spoolss_addprinterdriverex ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_drivers.c385 行で定義されています。

参照先 spoolss_error.

00387 {
00388         /* Not supported by Samba server */
00389         
00390         PyErr_SetString(spoolss_error, "Not implemented");
00391         return NULL;
00392 }

PyObject* spoolss_deleteprinterdriver ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_drivers.c394 行で定義されています。

参照先 spoolss_error.

00396 {
00397         PyErr_SetString(spoolss_error, "Not implemented");
00398         return NULL;
00399 }

PyObject* spoolss_deleteprinterdriverex ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_drivers.c401 行で定義されています。

参照先 spoolss_error.

00403 {
00404         PyErr_SetString(spoolss_error, "Not implemented");
00405         return NULL;
00406 }

BOOL py_from_DRIVER_INFO_1 ( PyObject **  dict,
DRIVER_INFO_1 info 
)

py_spoolss_drivers_conv.c126 行で定義されています。

参照先 from_struct()py_DRIVER_INFO_1.

参照元 spoolss_enumprinterdrivers()spoolss_hnd_getprinterdriver().

00127 {
00128         *dict = from_struct(info, py_DRIVER_INFO_1);
00129         PyDict_SetItemString(*dict, "level", PyInt_FromLong(1));
00130 
00131         return True;
00132 }

BOOL py_to_DRIVER_INFO_1 ( DRIVER_INFO_1 info,
PyObject *  dict 
)

py_spoolss_drivers_conv.c134 行で定義されています。

00135 {
00136         return False;
00137 }

BOOL py_from_DRIVER_INFO_2 ( PyObject **  dict,
DRIVER_INFO_2 info 
)

py_spoolss_drivers_conv.c139 行で定義されています。

参照先 from_struct()py_DRIVER_INFO_2.

参照元 spoolss_enumprinterdrivers()spoolss_hnd_getprinterdriver().

00140 {
00141         *dict = from_struct(info, py_DRIVER_INFO_2);
00142         PyDict_SetItemString(*dict, "level", PyInt_FromLong(2));
00143 
00144         return True;
00145 }

BOOL py_to_DRIVER_INFO_2 ( DRIVER_INFO_2 info,
PyObject *  dict 
)

py_spoolss_drivers_conv.c147 行で定義されています。

00148 {
00149         return False;
00150 }

BOOL py_from_DRIVER_INFO_3 ( PyObject **  dict,
DRIVER_INFO_3 info 
)

py_spoolss_drivers_conv.c152 行で定義されています。

参照先 driver_info_3::dependentfilesfrom_struct()from_unistr_list()py_DRIVER_INFO_3.

参照元 spoolss_enumprinterdrivers()spoolss_hnd_getprinterdriver().

00153 {
00154         *dict = from_struct(info, py_DRIVER_INFO_3);
00155 
00156         PyDict_SetItemString(*dict, "level", PyInt_FromLong(3));
00157 
00158         PyDict_SetItemString(
00159                 *dict, "dependent_files", 
00160                 from_unistr_list(info->dependentfiles));
00161 
00162         return True;
00163 }

BOOL py_to_DRIVER_INFO_3 ( DRIVER_INFO_3 info,
PyObject *  dict,
TALLOC_CTX mem_ctx 
)

py_spoolss_drivers_conv.c165 行で定義されています。

参照先 driver_info_3::dependentfilespy_DRIVER_INFO_3resultto_dependentfiles()to_struct().

参照元 spoolss_addprinterdriver().

00167 {
00168         PyObject *obj, *dict_copy = PyDict_Copy(dict);
00169         BOOL result = False;
00170 
00171         if (!(obj = PyDict_GetItemString(dict_copy, "dependent_files")))
00172                 goto done;
00173 
00174         if (!(info->dependentfiles = to_dependentfiles(obj, mem_ctx)))
00175                 goto done;
00176 
00177         PyDict_DelItemString(dict_copy, "dependent_files");
00178 
00179         if (!(obj = PyDict_GetItemString(dict_copy, "level")) ||
00180             !PyInt_Check(obj))
00181                 goto done;
00182 
00183         PyDict_DelItemString(dict_copy, "level");
00184 
00185         if (!to_struct(info, dict_copy, py_DRIVER_INFO_3))
00186             goto done;
00187 
00188         result = True;
00189 
00190 done:
00191         Py_DECREF(dict_copy);
00192         return result;
00193 }

BOOL py_from_DRIVER_INFO_6 ( PyObject **  dict,
DRIVER_INFO_6 info 
)

py_spoolss_drivers_conv.c195 行で定義されています。

参照先 driver_info_6::dependentfilesfrom_struct()from_unistr_list()py_DRIVER_INFO_6.

参照元 spoolss_enumprinterdrivers()spoolss_hnd_getprinterdriver().

00196 {
00197         *dict = from_struct(info, py_DRIVER_INFO_6);
00198         PyDict_SetItemString(*dict, "level", PyInt_FromLong(6));
00199         PyDict_SetItemString(
00200                 *dict, "dependent_files", 
00201                 from_unistr_list(info->dependentfiles));
00202         return True;
00203 }

BOOL py_to_DRIVER_INFO_6 ( DRIVER_INFO_6 info,
PyObject *  dict 
)

py_spoolss_drivers_conv.c205 行で定義されています。

00206 {
00207         return False;
00208 }

BOOL py_from_DRIVER_DIRECTORY_1 ( PyObject **  dict,
DRIVER_DIRECTORY_1 info 
)

py_spoolss_drivers_conv.c210 行で定義されています。

参照先 from_struct()py_DRIVER_DIRECTORY_1.

参照元 spoolss_getprinterdriverdir().

00211 {
00212         *dict = from_struct(info, py_DRIVER_DIRECTORY_1);
00213         PyDict_SetItemString(*dict, "level", PyInt_FromLong(1));
00214         return True;
00215 }

BOOL py_to_DRIVER_DIRECTORY_1 ( DRIVER_DIRECTORY_1 info,
PyObject *  dict 
)

py_spoolss_drivers_conv.c217 行で定義されています。

00218 {
00219         return False;
00220 }

PyObject* spoolss_hnd_addform ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_forms.c25 行で定義されています。

参照先 spoolss_policy_hnd_object::cliform_name()get_level_value()init_unistr2()levelspoolss_policy_hnd_object::mem_ctx_form::namespoolss_policy_hnd_object::polpy_to_FORM()py_werror_tuple()rpccli_spoolss_addform()spoolss_errorspoolss_werrorUNI_STR_TERMINATEwerror.

00026 {
00027         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00028         WERROR werror;
00029         PyObject *info;
00030         FORM form;
00031         int level;
00032         static char *kwlist[] = {"form", NULL};
00033 
00034         /* Parse parameters */
00035         
00036         if (!PyArg_ParseTupleAndKeywords(
00037                     args, kw, "O!", kwlist, &PyDict_Type, &info))
00038                 return NULL;
00039         
00040         /* Call rpc function */
00041         
00042         if (!py_to_FORM(&form, info)) {
00043                 PyErr_SetString(spoolss_error, "invalid form");
00044                 return NULL;
00045         }
00046 
00047         if (!get_level_value(info, &level)) {
00048                 PyErr_SetString(spoolss_error, "invalid info level");
00049                 return NULL;
00050         }
00051 
00052         if (level != 1) {
00053                 PyErr_SetString(spoolss_error, "unsupported info level");
00054                 return NULL;
00055         }
00056         
00057         switch (level) {
00058         case 1: {
00059                 PyObject *obj = PyDict_GetItemString(info, "name");
00060                 char *form_name = PyString_AsString(obj);
00061 
00062                 init_unistr2(&form.name, form_name, UNI_STR_TERMINATE);
00063                 break;
00064         }
00065         default:
00066                 PyErr_SetString(spoolss_error, "unsupported info level");
00067                 return NULL;
00068         }
00069                 
00070         werror = rpccli_spoolss_addform(hnd->cli, hnd->mem_ctx, &hnd->pol,
00071                                         level, &form);
00072 
00073 
00074         if (!W_ERROR_IS_OK(werror)) {
00075                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00076                 return NULL;
00077         }
00078 
00079         Py_INCREF(Py_None);
00080         return Py_None;
00081 }

PyObject* spoolss_hnd_getform ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_forms.c85 行で定義されています。

参照先 spoolss_policy_hnd_object::cliform_name()levelspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_from_FORM_1()py_werror_tuple()resultrpccli_spoolss_getform()spoolss_werrorwerror.

00086 {
00087         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00088         WERROR werror;
00089         PyObject *result;
00090         char *form_name;
00091         int level = 1;
00092         static char *kwlist[] = {"form_name", "level", NULL};
00093         FORM_1 form;
00094 
00095         /* Parse parameters */
00096 
00097         if (!PyArg_ParseTupleAndKeywords(
00098                     args, kw, "s|i", kwlist, &form_name, &level))
00099                 return NULL;
00100         
00101         /* Call rpc function */
00102 
00103         werror = rpccli_spoolss_getform(
00104                 hnd->cli, hnd->mem_ctx, &hnd->pol, form_name, level, &form);
00105 
00106         if (!W_ERROR_IS_OK(werror)) {
00107                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00108                 return NULL;
00109         }
00110 
00111         result = Py_None;
00112 
00113         switch(level) {
00114         case 1:
00115                 py_from_FORM_1(&result, &form);
00116                 break;
00117         }
00118 
00119         Py_INCREF(result);
00120         return result;
00121 }

PyObject* spoolss_hnd_setform ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_forms.c125 行で定義されています。

参照先 spoolss_policy_hnd_object::cliform_name()get_level_value()levelspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_to_FORM()py_werror_tuple()rpccli_spoolss_setform()spoolss_errorspoolss_werrorwerror.

00126 {
00127         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00128         WERROR werror;
00129         PyObject *info, *form_name;
00130         int level;
00131         static char *kwlist[] = { "form", NULL};
00132         FORM form;
00133 
00134         /* Parse parameters */
00135 
00136         if (!PyArg_ParseTupleAndKeywords(
00137                     args, kw, "O!", kwlist, &PyDict_Type, &info))
00138                 return NULL;
00139 
00140         if (!get_level_value(info, &level)) {
00141                 PyErr_SetString(spoolss_error, "invalid info level");
00142                 return NULL;
00143         }
00144 
00145         if (level != 1) {
00146                 PyErr_SetString(spoolss_error, "unsupported info level");
00147                 return NULL;
00148         }
00149 
00150         /* Call rpc function */
00151 
00152         if (!py_to_FORM(&form, info)) {
00153                 PyErr_SetString(spoolss_error, "invalid form");
00154                 return NULL;
00155         }
00156 
00157         form_name = PyDict_GetItemString(info, "name");
00158 
00159         werror = rpccli_spoolss_setform(
00160                 hnd->cli, hnd->mem_ctx, &hnd->pol, level, 
00161                 PyString_AsString(form_name), &form);
00162 
00163         if (!W_ERROR_IS_OK(werror)) {
00164                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00165                 return NULL;
00166         }
00167 
00168         Py_INCREF(Py_None);
00169         return Py_None;
00170 }

PyObject* spoolss_hnd_deleteform ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_forms.c174 行で定義されています。

参照先 spoolss_policy_hnd_object::cliform_name()spoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_werror_tuple()rpccli_spoolss_deleteform()spoolss_werrorwerror.

00175 {
00176         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00177         WERROR werror;
00178         static char *kwlist[] = {"form_name", NULL};
00179         char *form_name;
00180 
00181         /* Parse parameters */
00182         
00183         if (!PyArg_ParseTupleAndKeywords(
00184                     args, kw, "s", kwlist, &form_name))
00185                 return NULL;
00186         
00187         /* Call rpc function */
00188 
00189         werror = rpccli_spoolss_deleteform(
00190                 hnd->cli, hnd->mem_ctx, &hnd->pol, form_name);
00191 
00192         if (!W_ERROR_IS_OK(werror)) {
00193                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00194                 return NULL;
00195         }
00196 
00197         Py_INCREF(Py_None);
00198         return Py_None;
00199 }

PyObject* spoolss_hnd_enumforms ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_forms.c203 行で定義されています。

参照先 spoolss_policy_hnd_object::clilevelspoolss_policy_hnd_object::mem_ctxnamespoolss_policy_hnd_object::polpy_from_FORM_1()py_werror_tuple()resultrpccli_spoolss_enumforms()rpcstr_pull()spoolss_errorspoolss_werrorwerror.

00204 {
00205         PyObject *result;
00206         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00207         WERROR werror;
00208         uint32 level = 1, num_forms, i;
00209         static char *kwlist[] = {"level", NULL};
00210         FORM_1 *forms;
00211 
00212         /* Parse parameters */
00213         
00214         if (!PyArg_ParseTupleAndKeywords(
00215                     args, kw, "|i", kwlist, &level))
00216                 return NULL;
00217         
00218         /* Call rpc function */
00219 
00220         werror = rpccli_spoolss_enumforms(
00221                 hnd->cli, hnd->mem_ctx, &hnd->pol, level, &num_forms, &forms);
00222 
00223         if (!W_ERROR_IS_OK(werror)) {
00224                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00225                 return NULL;
00226         }
00227 
00228         switch(level) {
00229         case 1:
00230                 result = PyDict_New();
00231 
00232                 for (i = 0; i < num_forms; i++) {
00233                         PyObject *value;
00234                         fstring name;
00235 
00236                         rpcstr_pull(name, forms[i].name.buffer,
00237                                     sizeof(fstring), -1, STR_TERMINATE);
00238 
00239                         py_from_FORM_1(&value, &forms[i]);
00240 
00241                         PyDict_SetItemString(
00242                                 value, "level", PyInt_FromLong(1));
00243 
00244                         PyDict_SetItemString(result, name, value);
00245                 }
00246 
00247                 break;
00248         default:
00249                 PyErr_SetString(spoolss_error, "unknown info level");
00250                 return NULL;
00251         }
00252 
00253         return result;
00254 }

BOOL py_from_FORM_1 ( PyObject **  dict,
FORM_1 form 
)

py_spoolss_forms_conv.c47 行で定義されています。

参照先 from_struct()py_FORM_1.

参照元 spoolss_hnd_enumforms()spoolss_hnd_getform().

00048 {
00049         *dict = from_struct(form, py_FORM_1);
00050 
00051         PyDict_SetItemString(*dict, "level", PyInt_FromLong(1));
00052 
00053         return True;
00054 }

BOOL py_to_FORM ( FORM form,
PyObject *  dict 
)

py_spoolss_forms_conv.c56 行で定義されています。

参照先 init_unistr2()name_form::namepy_FORMresultto_struct()UNI_STR_TERMINATE.

参照元 spoolss_hnd_addform()spoolss_hnd_setform().

00057 {
00058         PyObject *obj, *dict_copy = PyDict_Copy(dict);
00059         char *name;
00060         BOOL result = False;
00061 
00062         if (!(obj = PyDict_GetItemString(dict_copy, "name")) || 
00063             !PyString_Check(obj))
00064                 goto done;
00065 
00066         PyDict_DelItemString(dict_copy, "name");
00067 
00068         if (!(obj = PyDict_GetItemString(dict_copy, "level")) ||
00069             !PyInt_Check(obj))
00070                 goto done;
00071 
00072         PyDict_DelItemString(dict_copy, "level");
00073 
00074         if (!to_struct(form, dict_copy, py_FORM))
00075                 goto done;
00076 
00077         /* Careful!  We can't call PyString_AsString(obj) then delete
00078            obj and still expect to have our pointer pointing somewhere
00079            useful. */
00080 
00081         obj = PyDict_GetItemString(dict, "name");
00082         name = PyString_AsString(obj);
00083 
00084         init_unistr2(&form->name, name, UNI_STR_TERMINATE);
00085         
00086         result = True;
00087 
00088 done:
00089         Py_DECREF(dict_copy);
00090         return result;
00091 }

PyObject* spoolss_hnd_enumjobs ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_jobs.c25 行で定義されています。

参照先 spoolss_policy_hnd_object::clijob_info_ctr_info::jobjob_info_ctr_info::job_info_1job_info_ctr_info::job_info_2levelspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_from_JOB_INFO_1()py_from_JOB_INFO_2()py_werror_tuple()resultrpccli_spoolss_enumjobs()spoolss_werrorwerror.

00026 {
00027         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00028         WERROR werror;
00029         PyObject *result;
00030         int level = 1;
00031         uint32 i, num_jobs;
00032         static char *kwlist[] = {"level", NULL};
00033         JOB_INFO_CTR ctr;
00034 
00035         /* Parse parameters */
00036 
00037         if (!PyArg_ParseTupleAndKeywords(args, kw, "|i", kwlist, &level))
00038                 return NULL;
00039         
00040         /* Call rpc function */
00041         
00042         werror = rpccli_spoolss_enumjobs(
00043                 hnd->cli, hnd->mem_ctx, &hnd->pol, level, 0, 1000, 
00044                 &num_jobs, &ctr);
00045 
00046         /* Return value */
00047         
00048         result = Py_None;
00049 
00050         if (!W_ERROR_IS_OK(werror)) {
00051                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00052                 goto done;
00053         }
00054 
00055         result = PyList_New(num_jobs);
00056 
00057         switch (level) {
00058         case 1: 
00059                 for (i = 0; i < num_jobs; i++) {
00060                         PyObject *value;
00061 
00062                         py_from_JOB_INFO_1(&value, &ctr.job.job_info_1[i]);
00063 
00064                         PyList_SetItem(result, i, value);
00065                 }
00066 
00067                 break;
00068         case 2:
00069                 for(i = 0; i < num_jobs; i++) {
00070                         PyObject *value;
00071 
00072                         py_from_JOB_INFO_2(&value, &ctr.job.job_info_2[i]);
00073 
00074                         PyList_SetItem(result, i, value);
00075                 }
00076                 
00077                 break;
00078         }
00079 
00080  done:
00081         Py_INCREF(result);
00082         return result;
00083 }

PyObject* spoolss_hnd_setjob ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_jobs.c87 行で定義されています。

参照先 spoolss_policy_hnd_object::clilevelspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_werror_tuple()rpccli_spoolss_setjob()spoolss_werrorwerror.

00088 {
00089         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00090         WERROR werror;
00091         uint32 level = 0, command, jobid;
00092         static char *kwlist[] = {"jobid", "command", "level", NULL};
00093 
00094         /* Parse parameters */
00095 
00096         if (!PyArg_ParseTupleAndKeywords(
00097                     args, kw, "ii|i", kwlist, &jobid, &command, &level))
00098                 return NULL;
00099         
00100         /* Call rpc function */
00101         
00102         werror = rpccli_spoolss_setjob(
00103                 hnd->cli, hnd->mem_ctx, &hnd->pol, jobid, level, command);
00104 
00105         if (!W_ERROR_IS_OK(werror)) {
00106                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00107                 return NULL;
00108         }
00109         
00110         Py_INCREF(Py_None);
00111         return Py_None;
00112 }

PyObject* spoolss_hnd_getjob ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_jobs.c116 行で定義されています。

参照先 spoolss_policy_hnd_object::clijob_info_ctr_info::jobjob_info_ctr_info::job_info_1job_info_ctr_info::job_info_2levelspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_from_JOB_INFO_1()py_from_JOB_INFO_2()py_werror_tuple()resultrpccli_spoolss_getjob()spoolss_werrorwerror.

00117 {
00118         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00119         WERROR werror;
00120         PyObject *result;
00121         uint32 level = 1, jobid;
00122         static char *kwlist[] = {"jobid", "level", NULL};
00123         JOB_INFO_CTR ctr;
00124 
00125         /* Parse parameters */
00126 
00127         if (!PyArg_ParseTupleAndKeywords(
00128                     args, kw, "i|i", kwlist, &jobid, &level))
00129                 return NULL;
00130         
00131         /* Call rpc function */
00132         
00133         werror = rpccli_spoolss_getjob(
00134                 hnd->cli, hnd->mem_ctx, &hnd->pol, jobid, level, &ctr);
00135 
00136         if (!W_ERROR_IS_OK(werror)) {
00137                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00138                 return NULL;
00139         }
00140 
00141         switch(level) {
00142         case 1:
00143                 py_from_JOB_INFO_1(&result, &ctr.job.job_info_1[0]);
00144                 break;
00145         case 2:
00146                 py_from_JOB_INFO_2(&result, &ctr.job.job_info_2[0]);
00147                 break;
00148         }
00149 
00150         return result;
00151 }

PyObject* spoolss_hnd_startpageprinter ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_jobs.c156 行で定義されています。

参照先 spoolss_policy_hnd_object::clispoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_werror_tuple()rpccli_spoolss_startpageprinter()spoolss_werrorwerror.

00157 {
00158         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00159         WERROR werror;
00160         static char *kwlist[] = { NULL };
00161 
00162         /* Parse parameters */
00163 
00164         if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist))
00165                 return NULL;
00166         
00167         /* Call rpc function */
00168         
00169         werror = rpccli_spoolss_startpageprinter(
00170                 hnd->cli, hnd->mem_ctx, &hnd->pol);
00171 
00172         if (!W_ERROR_IS_OK(werror)) {
00173                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00174                 return NULL;
00175         }
00176         
00177         Py_INCREF(Py_None);
00178         return Py_None;
00179 }

PyObject* spoolss_hnd_endpageprinter ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_jobs.c184 行で定義されています。

参照先 spoolss_policy_hnd_object::clispoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_werror_tuple()rpccli_spoolss_endpageprinter()spoolss_werrorwerror.

00185 {
00186         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00187         WERROR werror;
00188         static char *kwlist[] = { NULL };
00189 
00190         /* Parse parameters */
00191 
00192         if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist))
00193                 return NULL;
00194         
00195         /* Call rpc function */
00196         
00197         werror = rpccli_spoolss_endpageprinter(
00198                 hnd->cli, hnd->mem_ctx, &hnd->pol);
00199 
00200         if (!W_ERROR_IS_OK(werror)) {
00201                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00202                 return NULL;
00203         }
00204         
00205         Py_INCREF(Py_None);
00206         return Py_None;
00207 }

PyObject* spoolss_hnd_startdocprinter ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_jobs.c212 行で定義されています。

参照先 spoolss_policy_hnd_object::cliget_level_value()levelspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_werror_tuple()rpccli_spoolss_startdocprinter()spoolss_errorspoolss_werrorwerror.

00213 {
00214         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00215         WERROR werror;
00216         static char *kwlist[] = { "document_info", NULL };
00217         PyObject *info, *obj;
00218         uint32 level, jobid;
00219         char *document_name = NULL, *output_file = NULL, *data_type = NULL;
00220 
00221         /* Parse parameters */
00222 
00223         if (!PyArg_ParseTupleAndKeywords(
00224                     args, kw, "O!", kwlist, &PyDict_Type, &info))
00225                 return NULL;
00226         
00227         /* Check document_info parameter */
00228 
00229         if (!get_level_value(info, &level)) {
00230                 PyErr_SetString(spoolss_error, "invalid info level");
00231                 return NULL;
00232         }
00233 
00234         if (level != 1) {
00235                 PyErr_SetString(spoolss_error, "unsupported info level");
00236                 return NULL;
00237         }
00238 
00239         if ((obj = PyDict_GetItemString(info, "document_name"))) {
00240 
00241                 if (!PyString_Check(obj) && obj != Py_None) {
00242                         PyErr_SetString(spoolss_error,
00243                                         "document_name not a string");
00244                         return NULL;
00245                 }
00246                 
00247                 if (PyString_Check(obj))
00248                         document_name = PyString_AsString(obj);
00249 
00250         } else {
00251                 PyErr_SetString(spoolss_error, "no document_name present");
00252                 return NULL;
00253         }
00254 
00255         if ((obj = PyDict_GetItemString(info, "output_file"))) {
00256 
00257                 if (!PyString_Check(obj) && obj != Py_None) {
00258                         PyErr_SetString(spoolss_error,
00259                                         "output_file not a string");
00260                         return NULL;
00261                 }
00262                 
00263                 if (PyString_Check(obj))
00264                         output_file = PyString_AsString(obj);
00265 
00266         } else {
00267                 PyErr_SetString(spoolss_error, "no output_file present");
00268                 return NULL;
00269         }
00270 
00271         if ((obj = PyDict_GetItemString(info, "data_type"))) {
00272                 
00273                 if (!PyString_Check(obj) && obj != Py_None) {
00274                         PyErr_SetString(spoolss_error,
00275                                         "data_type not a string");
00276                         return NULL;
00277                 }
00278 
00279                 if (PyString_Check(obj))
00280                         data_type = PyString_AsString(obj);
00281 
00282         } else {
00283                 PyErr_SetString(spoolss_error, "no data_type present");
00284                 return NULL;
00285         }
00286 
00287         /* Call rpc function */
00288         
00289         werror = rpccli_spoolss_startdocprinter(
00290                 hnd->cli, hnd->mem_ctx, &hnd->pol, document_name,
00291                 output_file, data_type, &jobid);
00292 
00293         if (!W_ERROR_IS_OK(werror)) {
00294                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00295                 return NULL;
00296         }
00297         
00298         /* The return value is zero for an error (where does the status
00299            code come from now??) and the return value is the jobid
00300            allocated for the new job. */
00301 
00302         return Py_BuildValue("i", jobid);
00303 }

PyObject* spoolss_hnd_enddocprinter ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_jobs.c308 行で定義されています。

参照先 spoolss_policy_hnd_object::clispoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_werror_tuple()rpccli_spoolss_enddocprinter()spoolss_werrorwerror.

00309 {
00310         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00311         WERROR werror;
00312         static char *kwlist[] = { NULL };
00313 
00314         /* Parse parameters */
00315 
00316         if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist))
00317                 return NULL;
00318         
00319         /* Call rpc function */
00320         
00321         werror = rpccli_spoolss_enddocprinter(
00322                 hnd->cli, hnd->mem_ctx, &hnd->pol);
00323 
00324         if (!W_ERROR_IS_OK(werror)) {
00325                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00326                 return NULL;
00327         }
00328         
00329         Py_INCREF(Py_None);
00330         return Py_None;
00331 }

PyObject* spoolss_hnd_writeprinter ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_jobs.c335 行で定義されています。

参照先 spoolss_policy_hnd_object::clispoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_werror_tuple()rpccli_spoolss_writeprinter()spoolss_werrorwerror.

00336 {
00337         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00338         WERROR werror;
00339         static char *kwlist[] = { "data", NULL };
00340         PyObject *data;
00341         uint32 num_written;
00342 
00343         /* Parse parameters */
00344 
00345         if (!PyArg_ParseTupleAndKeywords(
00346                     args, kw, "O!", kwlist, &PyString_Type, &data))
00347                 return NULL;
00348         
00349         /* Call rpc function */
00350         
00351         werror = rpccli_spoolss_writeprinter(
00352                 hnd->cli, hnd->mem_ctx, &hnd->pol, PyString_Size(data),
00353                 PyString_AsString(data), &num_written);
00354 
00355         if (!W_ERROR_IS_OK(werror)) {
00356                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00357                 return NULL;
00358         }
00359 
00360         Py_INCREF(Py_None);
00361         return Py_None;
00362 }

PyObject* spoolss_hnd_addjob ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_jobs.c364 行で定義されています。

参照先 spoolss_error.

00365 {
00366         PyErr_SetString(spoolss_error, "Not implemented");
00367         return NULL;
00368 }

BOOL py_from_JOB_INFO_1 ( PyObject **  dict,
JOB_INFO_1 info 
)

py_spoolss_jobs_conv.c71 行で定義されています。

参照先 from_struct()py_JOB_INFO_1.

参照元 spoolss_hnd_enumjobs()spoolss_hnd_getjob().

00072 {
00073         *dict = from_struct(info, py_JOB_INFO_1);
00074         return True;
00075 }

BOOL py_to_JOB_INFO_1 ( JOB_INFO_1 info,
PyObject *  dict 
)

py_spoolss_jobs_conv.c77 行で定義されています。

00078 {
00079         return False;
00080 }

BOOL py_from_JOB_INFO_2 ( PyObject **  dict,
JOB_INFO_2 info 
)

py_spoolss_jobs_conv.c82 行で定義されています。

参照先 from_struct()py_JOB_INFO_2.

参照元 spoolss_hnd_enumjobs()spoolss_hnd_getjob().

00083 {
00084         *dict = from_struct(info, py_JOB_INFO_2);
00085         return True;
00086 }

BOOL py_to_JOB_INFO_2 ( JOB_INFO_2 info,
PyObject *  dict 
)

py_spoolss_jobs_conv.c88 行で定義されています。

00089 {
00090         return False;
00091 }

BOOL py_from_DOC_INFO_1 ( PyObject **  dict,
DOC_INFO_1 info 
)

py_spoolss_jobs_conv.c93 行で定義されています。

参照先 from_struct()py_DOC_INFO_1.

00094 {
00095         *dict = from_struct(info, py_DOC_INFO_1);
00096         return True;
00097 }

BOOL py_to_DOC_INFO_1 ( DOC_INFO_1 info,
PyObject *  dict 
)

py_spoolss_jobs_conv.c99 行で定義されています。

参照先 py_DOC_INFO_1to_struct().

00100 {
00101         return to_struct(info, dict, py_DOC_INFO_1);
00102 }

PyObject* spoolss_enumports ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_ports.c25 行で定義されています。

参照先 UNISTR::bufferclicli_shutdown()port_info_ctr_info::info_1port_info_ctr_info::info_2levelnameopen_pipe_creds()cli_state::pipe_listport_info_ctr_info::ports_port_info_1::port_names_port_info_2::port_namepy_from_PORT_INFO_1()py_from_PORT_INFO_2()py_werror_tuple()resultrpccli_spoolss_enum_ports()rpcstr_pull()serverspoolss_errorspoolss_werrortalloc_init()werror.

00026 {
00027         WERROR werror;
00028         PyObject *result = NULL, *creds = NULL;
00029         uint32 level = 1;
00030         uint32 i, needed, num_ports;
00031         static char *kwlist[] = {"server", "level", "creds", NULL};
00032         TALLOC_CTX *mem_ctx = NULL;
00033         struct cli_state *cli = NULL;
00034         char *server, *errstr;
00035         PORT_INFO_CTR ctr;
00036 
00037         /* Parse parameters */
00038 
00039         if (!PyArg_ParseTupleAndKeywords(
00040                     args, kw, "s|iO", kwlist, &server, &level, &creds))
00041                 return NULL;
00042         
00043         if (server[0] != '\\' || server[1] != '\\') {
00044                 PyErr_SetString(PyExc_ValueError, "UNC name required");
00045                 return NULL;
00046         }
00047 
00048         server += 2;
00049 
00050         if (creds && creds != Py_None && !PyDict_Check(creds)) {
00051                 PyErr_SetString(PyExc_TypeError, 
00052                                 "credentials must be dictionary or None");
00053                 return NULL;
00054         }
00055 
00056         if (!(cli = open_pipe_creds(server, creds, PI_SPOOLSS, &errstr))) {
00057                 PyErr_SetString(spoolss_error, errstr);
00058                 free(errstr);
00059                 goto done;
00060         }
00061 
00062         if (!(mem_ctx = talloc_init("spoolss_enumports"))) {
00063                 PyErr_SetString(
00064                         spoolss_error, "unable to init talloc context\n");
00065                 goto done;
00066         }
00067 
00068         /* Call rpc function */
00069         
00070         werror = rpccli_spoolss_enum_ports( 
00071                 cli->pipe_list, mem_ctx, level, &num_ports, &ctr);
00072 
00073         if (!W_ERROR_IS_OK(werror)) {
00074                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00075                 goto done;
00076         }
00077 
00078         /* Return value */
00079         
00080         switch (level) {
00081         case 1: 
00082                 result = PyDict_New();
00083 
00084                 for (i = 0; i < num_ports; i++) {
00085                         PyObject *value;
00086                         fstring name;
00087 
00088                         rpcstr_pull(name, ctr.port.info_1[i].port_name.buffer,
00089                                     sizeof(fstring), -1, STR_TERMINATE);
00090 
00091                         py_from_PORT_INFO_1(&value, &ctr.port.info_1[i]);
00092 
00093                         PyDict_SetItemString(
00094                                 value, "level", PyInt_FromLong(1));
00095 
00096                         PyDict_SetItemString(result, name, value);
00097                 }
00098 
00099                 break;
00100         case 2:
00101                 result = PyDict_New();
00102 
00103                 for(i = 0; i < num_ports; i++) {
00104                         PyObject *value;
00105                         fstring name;
00106 
00107                         rpcstr_pull(name, ctr.port.info_2[i].port_name.buffer,
00108                                     sizeof(fstring), -1, STR_TERMINATE);
00109 
00110                         py_from_PORT_INFO_2(&value, &ctr.port.info_2[i]);
00111 
00112                         PyDict_SetItemString(
00113                                 value, "level", PyInt_FromLong(2));
00114 
00115                         PyDict_SetItemString(result, name, value);
00116                 }
00117                 
00118                 break;
00119         default:
00120                 PyErr_SetString(spoolss_error, "unknown info level");
00121                 goto done;
00122         }
00123 
00124  done:
00125         if (cli)
00126                 cli_shutdown(cli);
00127         
00128         if (mem_ctx)
00129                 talloc_destroy(mem_ctx);
00130 
00131         return result;
00132 }

BOOL py_from_PORT_INFO_1 ( PyObject **  dict,
PORT_INFO_1 info 
)

py_spoolss_ports_conv.c38 行で定義されています。

参照先 from_struct()py_PORT_INFO_1.

参照元 spoolss_enumports().

00039 {
00040         *dict = from_struct(info, py_PORT_INFO_1);
00041         return True;
00042 }

BOOL py_to_PORT_INFO_1 ( PORT_INFO_1 info,
PyObject *  dict 
)

py_spoolss_ports_conv.c44 行で定義されています。

00045 {
00046         return False;
00047 }

BOOL py_from_PORT_INFO_2 ( PyObject **  dict,
PORT_INFO_2 info 
)

py_spoolss_ports_conv.c49 行で定義されています。

参照先 from_struct()py_PORT_INFO_2.

参照元 spoolss_enumports().

00050 {
00051         *dict = from_struct(info, py_PORT_INFO_2);
00052         return True;
00053 }

BOOL py_to_PORT_INFO_2 ( PORT_INFO_2 info,
PyObject *  dict 
)

py_spoolss_ports_conv.c55 行で定義されています。

00056 {
00057         return False;
00058 }

PyObject* spoolss_hnd_getprinterdata ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printerdata.c109 行で定義されています。

参照先 spoolss_policy_hnd_object::cliREGISTRY_VALUE::data_pspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_from_printerdata()py_werror_tuple()resultrpccli_spoolss_getprinterdata()REGISTRY_VALUE::sizespoolss_werrorREGISTRY_VALUE::typewerror.

00110 {
00111         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00112         static char *kwlist[] = { "value", NULL };
00113         char *valuename;
00114         WERROR werror;
00115         PyObject *result;
00116         REGISTRY_VALUE value;
00117 
00118         /* Parse parameters */
00119 
00120         if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &valuename))
00121                 return NULL;
00122 
00123         /* Call rpc function */
00124 
00125         werror = rpccli_spoolss_getprinterdata(
00126                 hnd->cli, hnd->mem_ctx, &hnd->pol, valuename,
00127                 &value);
00128 
00129         if (!W_ERROR_IS_OK(werror)) {
00130                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00131                 return NULL;
00132         }
00133 
00134         py_from_printerdata(
00135                 &result, NULL, valuename, value.type, value.data_p, 
00136                 value.size);
00137 
00138         return result;
00139 }

PyObject* spoolss_hnd_setprinterdata ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printerdata.c141 行で定義されています。

参照先 spoolss_policy_hnd_object::cliREGISTRY_VALUE::data_pspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_to_printerdata()py_werror_tuple()rpccli_spoolss_setprinterdata()REGISTRY_VALUE::sizespoolss_werrorREGISTRY_VALUE::typeREGISTRY_VALUE::valuenamewerror.

00142 {
00143         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00144         static char *kwlist[] = { "data", NULL };
00145         PyObject *py_data;
00146         char *valuename;
00147         WERROR werror;
00148         REGISTRY_VALUE value;
00149 
00150         if (!PyArg_ParseTupleAndKeywords(
00151                     args, kw, "O!", kwlist, &PyDict_Type, &py_data))
00152                 return NULL;
00153         
00154         if (!py_to_printerdata(
00155                     NULL, &valuename, &value.type, &value.data_p, 
00156                     &value.size, py_data))
00157                 return NULL;
00158 
00159         fstrcpy(value.valuename, valuename);
00160         
00161         /* Call rpc function */
00162 
00163         werror = rpccli_spoolss_setprinterdata(
00164                 hnd->cli, hnd->mem_ctx, &hnd->pol, &value);
00165 
00166         if (!W_ERROR_IS_OK(werror)) {
00167                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00168                 return NULL;
00169         }
00170 
00171         Py_INCREF(Py_None);
00172         return Py_None;
00173 }

PyObject* spoolss_hnd_enumprinterdata ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printerdata.c175 行で定義されています。

参照先 spoolss_policy_hnd_object::cliREGISTRY_VALUE::data_pspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_from_printerdata()py_werror_tuple()resultrpccli_spoolss_enumprinterdata()REGISTRY_VALUE::sizespoolss_werrorREGISTRY_VALUE::typeREGISTRY_VALUE::valuenamewerror.

00176 {
00177         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00178         static char *kwlist[] = { NULL };
00179         uint32 data_needed, value_needed, ndx = 0;
00180         WERROR werror;
00181         PyObject *result;
00182         REGISTRY_VALUE value;
00183 
00184         if (!PyArg_ParseTupleAndKeywords(args, kw, "", kwlist))
00185                 return NULL;
00186 
00187         /* Get max buffer sizes for value and data */
00188 
00189         werror = rpccli_spoolss_enumprinterdata(
00190                 hnd->cli, hnd->mem_ctx, &hnd->pol, ndx, 0, 0,
00191                 &value_needed, &data_needed, NULL);
00192 
00193         if (!W_ERROR_IS_OK(werror)) {
00194                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00195                 return NULL;
00196         }
00197 
00198         /* Iterate over all printerdata */
00199 
00200         result = PyDict_New();
00201 
00202         while (W_ERROR_IS_OK(werror)) {
00203                 PyObject *obj;
00204 
00205                 werror = rpccli_spoolss_enumprinterdata(
00206                         hnd->cli, hnd->mem_ctx, &hnd->pol, ndx,
00207                         value_needed, data_needed, NULL, NULL, &value);
00208 
00209                 if (py_from_printerdata(
00210                             &obj, NULL, value.valuename, value.type, 
00211                             value.data_p, value.size))
00212                         PyDict_SetItemString(result, value.valuename, obj);
00213 
00214                 ndx++;
00215         }
00216 
00217         return result;
00218 }

PyObject* spoolss_hnd_deleteprinterdata ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printerdata.c220 行で定義されています。

参照先 spoolss_policy_hnd_object::clispoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_werror_tuple()rpccli_spoolss_deleteprinterdata()spoolss_werrorwerror.

00221 {
00222         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00223         static char *kwlist[] = { "value", NULL };
00224         char *value;
00225         WERROR werror;
00226 
00227         /* Parse parameters */
00228 
00229         if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &value))
00230                 return NULL;
00231 
00232         /* Call rpc function */
00233 
00234         werror = rpccli_spoolss_deleteprinterdata(
00235                 hnd->cli, hnd->mem_ctx, &hnd->pol, value);
00236 
00237         if (!W_ERROR_IS_OK(werror)) {
00238                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00239                 return NULL;
00240         }
00241 
00242         Py_INCREF(Py_None);
00243         return Py_None;
00244 }

PyObject* spoolss_hnd_getprinterdataex ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printerdata.c246 行で定義されています。

参照先 spoolss_policy_hnd_object::cliREGISTRY_VALUE::data_pspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_from_printerdata()py_werror_tuple()resultrpccli_spoolss_getprinterdataex()REGISTRY_VALUE::sizespoolss_werrorREGISTRY_VALUE::typewerror.

00247 {
00248         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00249         static char *kwlist[] = { "key", "value", NULL };
00250         char *key, *valuename;
00251         WERROR werror;
00252         PyObject *result;
00253         REGISTRY_VALUE value;
00254 
00255         /* Parse parameters */
00256 
00257         if (!PyArg_ParseTupleAndKeywords(args, kw, "ss", kwlist, &key, &valuename))
00258                 return NULL;
00259 
00260         /* Call rpc function */
00261 
00262         werror = rpccli_spoolss_getprinterdataex(
00263                 hnd->cli, hnd->mem_ctx, &hnd->pol, key,
00264                 valuename, &value);
00265 
00266         if (!W_ERROR_IS_OK(werror)) {
00267                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00268                 return NULL;
00269         }
00270 
00271         py_from_printerdata(
00272                 &result, key, valuename, value.type, value.data_p, value.size);
00273 
00274         return result;
00275 }

PyObject* spoolss_hnd_setprinterdataex ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printerdata.c277 行で定義されています。

参照先 spoolss_policy_hnd_object::cliREGISTRY_VALUE::data_pspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_to_printerdata()py_werror_tuple()rpccli_spoolss_setprinterdataex()REGISTRY_VALUE::sizespoolss_werrorREGISTRY_VALUE::typeREGISTRY_VALUE::valuenamewerror.

00278 {
00279         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00280         static char *kwlist[] = { "data", NULL };
00281         PyObject *py_data;
00282         char *keyname, *valuename;
00283         WERROR werror;
00284         REGISTRY_VALUE value;
00285 
00286         if (!PyArg_ParseTupleAndKeywords(
00287                     args, kw, "O!", kwlist, &PyDict_Type, &py_data))
00288                 return NULL;
00289         
00290         if (!py_to_printerdata(
00291                     &keyname, &valuename, &value.type, &value.data_p, &value.size, py_data))
00292                 return NULL;
00293 
00294         fstrcpy(value.valuename,  valuename);
00295 
00296         /* Call rpc function */
00297 
00298         werror = rpccli_spoolss_setprinterdataex(
00299                 hnd->cli, hnd->mem_ctx, &hnd->pol, keyname, &value);
00300 
00301         if (!W_ERROR_IS_OK(werror)) {
00302                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00303                 return NULL;
00304         }
00305 
00306         Py_INCREF(Py_None);
00307         return Py_None;
00308 }

PyObject* spoolss_hnd_enumprinterdataex ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printerdata.c310 行で定義されています。

参照先 spoolss_policy_hnd_object::clispoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_from_printerdata()py_werror_tuple()regval_ctr_numvals()regval_ctr_specific_value()resultrpccli_spoolss_enumprinterdataex()spoolss_errorspoolss_werrorwerror.

00311 {
00312         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00313         static char *kwlist[] = { "key", NULL };
00314         uint32 i;
00315         char *key;
00316         WERROR werror;
00317         PyObject *result;
00318         REGVAL_CTR *ctr;
00319 
00320         if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &key))
00321                 return NULL;
00322 
00323         if (!(ctr = TALLOC_ZERO_P(hnd->mem_ctx, REGVAL_CTR))) {
00324                 PyErr_SetString(spoolss_error, "talloc failed");
00325                 return NULL;
00326         }
00327 
00328         /* Get max buffer sizes for value and data */
00329 
00330         werror = rpccli_spoolss_enumprinterdataex(
00331                 hnd->cli, hnd->mem_ctx, &hnd->pol, key, &ctr);
00332 
00333         if (!W_ERROR_IS_OK(werror)) {
00334                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00335                 return NULL;
00336         }
00337 
00338         /* Iterate over all printerdata */
00339 
00340         result = PyDict_New();
00341 
00342         for (i = 0; i < regval_ctr_numvals(&ctr); i++) {
00343                 REGISTRY_VALUE *value;
00344                 PyObject *item;
00345 
00346                 item = PyDict_New();
00347                 value = regval_ctr_specific_value(&ctr, i);
00348 
00349                 if (py_from_printerdata(
00350                             &item, key, value->valuename, value->type, 
00351                             value->data_p, value->size))
00352                         PyDict_SetItemString(result, value->valuename, item);
00353         }
00354         
00355         return result;
00356 }

PyObject* spoolss_hnd_deleteprinterdataex ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printerdata.c358 行で定義されています。

参照先 spoolss_policy_hnd_object::clispoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_werror_tuple()rpccli_spoolss_deleteprinterdataex()spoolss_werrorwerror.

00359 {
00360         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00361         static char *kwlist[] = { "key", "value", NULL };
00362         char *key, *value;
00363         WERROR werror;
00364 
00365         /* Parse parameters */
00366 
00367         if (!PyArg_ParseTupleAndKeywords(args, kw, "ss", kwlist, &key, &value))
00368                 return NULL;
00369 
00370         /* Call rpc function */
00371 
00372         werror = rpccli_spoolss_deleteprinterdataex(
00373                 hnd->cli, hnd->mem_ctx, &hnd->pol, key, value);
00374 
00375         if (!W_ERROR_IS_OK(werror)) {
00376                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00377                 return NULL;
00378         }
00379 
00380         Py_INCREF(Py_None);
00381         return Py_None;
00382 }

PyObject* spoolss_hnd_enumprinterkey ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printerdata.c384 行で定義されています。

参照先 spoolss_policy_hnd_object::clifrom_unistr_list()spoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polpy_werror_tuple()resultrpccli_spoolss_enumprinterkey()spoolss_werrorwerror.

00386 {
00387         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00388         static char *kwlist[] = { "key", NULL };
00389         char *keyname;
00390         WERROR werror;
00391         uint32 keylist_len;
00392         uint16 *keylist;
00393         PyObject *result;
00394 
00395         /* Parse parameters */
00396 
00397         if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &keyname))
00398                 return NULL;
00399 
00400         /* Call rpc function */
00401 
00402         werror = rpccli_spoolss_enumprinterkey(
00403                 hnd->cli, hnd->mem_ctx, &hnd->pol, keyname, &keylist, 
00404                 &keylist_len);
00405 
00406         if (!W_ERROR_IS_OK(werror)) {
00407                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00408                 return NULL;
00409         }
00410 
00411         result = from_unistr_list(keylist);
00412 
00413         return result;
00414 }

PyObject* spoolss_hnd_deleteprinterkey ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printerdata.c418 行で定義されています。

参照先 werror.

00420 {
00421         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00422         static char *kwlist[] = { "key", NULL };
00423         char *keyname;
00424         WERROR werror;
00425 
00426         if (!PyArg_ParseTupleAndKeywords(args, kw, "s", kwlist, &keyname))
00427                 return NULL;
00428 
00429         Py_INCREF(Py_None);
00430         return Py_None;
00431 }

PyObject* spoolss_openprinter ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printers.c25 行で定義されています。

参照先 cclicli_shutdown()new_spoolss_policy_hnd_object()open_pipe_creds()cli_state::pipe_listpy_werror_tuple()resultrpccli_spoolss_open_printer_ex()serverspoolss_errorspoolss_werrortalloc_init()werror.

00026 {
00027         char *unc_name, *server, *errstr;
00028         TALLOC_CTX *mem_ctx = NULL;
00029         POLICY_HND hnd;
00030         WERROR werror;
00031         PyObject *result = NULL, *creds = NULL;
00032         static char *kwlist[] = { "printername", "creds", "access", NULL };
00033         uint32 desired_access = MAXIMUM_ALLOWED_ACCESS;
00034         struct cli_state *cli;
00035 
00036         if (!PyArg_ParseTupleAndKeywords(
00037                     args, kw, "s|Oi", kwlist, &unc_name, &creds,
00038                     &desired_access))
00039                 return NULL;
00040 
00041         if (unc_name[0] != '\\' || unc_name[1] != '\\') {
00042                 PyErr_SetString(PyExc_ValueError, "UNC name required");
00043                 return NULL;
00044         }
00045 
00046         server = SMB_STRDUP(unc_name + 2);
00047 
00048         if (strchr(server, '\\')) {
00049                 char *c = strchr(server, '\\');
00050                 *c = 0;
00051         }
00052 
00053         if (creds && creds != Py_None && !PyDict_Check(creds)) {
00054                 PyErr_SetString(PyExc_TypeError, 
00055                                 "credentials must be dictionary or None");
00056                 return NULL;
00057         }
00058 
00059         if (!(cli = open_pipe_creds(server, creds, PI_SPOOLSS, &errstr))) {
00060                 PyErr_SetString(spoolss_error, errstr);
00061                 free(errstr);
00062                 goto done;
00063         }
00064 
00065         if (!(mem_ctx = talloc_init("spoolss_openprinter"))) {
00066                 PyErr_SetString(spoolss_error, 
00067                                 "unable to init talloc context\n");
00068                 goto done;
00069         }
00070 
00071         werror = rpccli_spoolss_open_printer_ex(
00072                 cli->pipe_list, mem_ctx, unc_name, "", desired_access, server, 
00073                 "", &hnd);
00074 
00075         if (!W_ERROR_IS_OK(werror)) {
00076                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00077                 goto done;
00078         }
00079 
00080         result = new_spoolss_policy_hnd_object(cli, mem_ctx, &hnd);
00081 
00082  done:
00083         if (!result) {
00084                 if (cli)
00085                         cli_shutdown(cli);
00086 
00087                 if (mem_ctx)
00088                         talloc_destroy(mem_ctx);
00089         }
00090 
00091         SAFE_FREE(server);
00092 
00093         return result;
00094 }

PyObject* spoolss_closeprinter ( PyObject *  self,
PyObject *  args 
)

py_spoolss_printers.c98 行で定義されています。

参照先 spoolss_policy_hnd_object::clispoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polresultrpccli_spoolss_close_printer()spoolss_policy_hnd_type.

00099 {
00100         PyObject *po;
00101         spoolss_policy_hnd_object *hnd;
00102         WERROR result;
00103 
00104         /* Parse parameters */
00105 
00106         if (!PyArg_ParseTuple(args, "O!", &spoolss_policy_hnd_type, &po))
00107                 return NULL;
00108 
00109         hnd = (spoolss_policy_hnd_object *)po;
00110 
00111         /* Call rpc function */
00112 
00113         result = rpccli_spoolss_close_printer(
00114                 hnd->cli, hnd->mem_ctx, &hnd->pol);
00115 
00116         /* Return value */
00117 
00118         Py_INCREF(Py_None);
00119         return Py_None; 
00120 }

PyObject* spoolss_hnd_getprinter ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printers.c124 行で定義されています。

参照先 spoolss_policy_hnd_object::clilevelspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polprinter_info_ctr_info::printers_0printer_info_ctr_info::printers_1printer_info_ctr_info::printers_2printer_info_ctr_info::printers_3py_from_PRINTER_INFO_0()py_from_PRINTER_INFO_1()py_from_PRINTER_INFO_2()py_from_PRINTER_INFO_3()py_werror_tuple()resultrpccli_spoolss_getprinter()spoolss_werrorwerror.

00125 {
00126         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00127         WERROR werror;
00128         PyObject *result = NULL;
00129         PRINTER_INFO_CTR ctr;
00130         int level = 1;
00131         static char *kwlist[] = {"level", NULL};
00132         
00133         /* Parse parameters */
00134 
00135         if (!PyArg_ParseTupleAndKeywords(args, kw, "|i", kwlist, &level))
00136                 return NULL;
00137         
00138         ZERO_STRUCT(ctr);
00139 
00140         /* Call rpc function */
00141         
00142         werror = rpccli_spoolss_getprinter(
00143                 hnd->cli, hnd->mem_ctx, &hnd->pol, level, &ctr);
00144 
00145         /* Return value */
00146 
00147         if (!W_ERROR_IS_OK(werror)) {
00148                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00149                 return NULL;
00150         }
00151 
00152         result = Py_None;
00153 
00154         switch (level) {
00155                 
00156         case 0:
00157                 py_from_PRINTER_INFO_0(&result, ctr.printers_0);
00158                 break;
00159 
00160         case 1:
00161                 py_from_PRINTER_INFO_1(&result, ctr.printers_1);
00162                 break;
00163 
00164         case 2:
00165                 py_from_PRINTER_INFO_2(&result, ctr.printers_2);
00166                 break;
00167 
00168         case 3:
00169                 py_from_PRINTER_INFO_3(&result, ctr.printers_3);
00170                 break;
00171         }
00172 
00173         Py_INCREF(result);
00174         return result;
00175 }

PyObject* spoolss_hnd_setprinter ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printers.c179 行で定義されています。

参照先 spoolss_policy_hnd_object::cliget_level_value()levelspoolss_policy_hnd_object::mem_ctxspoolss_policy_hnd_object::polprinter_info_ctr_info::printers_1printer_info_ctr_info::printers_2printer_info_ctr_info::printers_3py_to_PRINTER_INFO_1()py_to_PRINTER_INFO_2()py_to_PRINTER_INFO_3()py_werror_tuple()rpccli_spoolss_setprinter()spoolss_errorspoolss_werrorwerror.

00180 {
00181         spoolss_policy_hnd_object *hnd = (spoolss_policy_hnd_object *)self;
00182         WERROR werror;
00183         PyObject *info;
00184         PRINTER_INFO_CTR ctr;
00185         uint32 level;
00186         static char *kwlist[] = {"dict", NULL};
00187         union {
00188                 PRINTER_INFO_1 printers_1;
00189                 PRINTER_INFO_2 printers_2;
00190                 PRINTER_INFO_3 printers_3;
00191         } pinfo;
00192 
00193         /* Parse parameters */
00194 
00195         if (!PyArg_ParseTupleAndKeywords(
00196                     args, kw, "O!", kwlist, &PyDict_Type, &info))
00197                 return NULL;
00198         
00199         if (!get_level_value(info, &level)) {
00200                 PyErr_SetString(spoolss_error, "invalid info level");
00201                 return NULL;
00202         }
00203 
00204         if (level < 1 && level > 3) {
00205                 PyErr_SetString(spoolss_error, "unsupported info level");
00206                 return NULL;
00207         }
00208 
00209         /* Fill in printer info */
00210 
00211         ZERO_STRUCT(ctr);
00212 
00213         switch (level) {
00214         case 1:
00215                 ctr.printers_1 = &pinfo.printers_1;
00216 
00217                 if (!py_to_PRINTER_INFO_1(ctr.printers_1, info)){
00218                         PyErr_SetString(spoolss_error, 
00219                                         "error converting printer to info 1");
00220                         return NULL;
00221                 }
00222 
00223                 break;
00224         case 2:
00225                 ctr.printers_2 = &pinfo.printers_2;
00226 
00227                 if (!py_to_PRINTER_INFO_2(ctr.printers_2, info,
00228                                           hnd->mem_ctx)){
00229                         PyErr_SetString(spoolss_error, 
00230                                         "error converting printer to info 2");
00231                         return NULL;
00232                 }
00233 
00234                 break;
00235         case 3:
00236                 ctr.printers_3 = &pinfo.printers_3;
00237 
00238                 if (!py_to_PRINTER_INFO_3(ctr.printers_3, info,
00239                                           hnd->mem_ctx)) {
00240                         PyErr_SetString(spoolss_error,
00241                                         "error converting to printer info 3");
00242                         return NULL;
00243                 }
00244 
00245                 break;
00246         default:
00247                 PyErr_SetString(spoolss_error, "unsupported info level");
00248                 return NULL;
00249         }
00250 
00251         /* Call rpc function */
00252         
00253         werror = rpccli_spoolss_setprinter(
00254                 hnd->cli, hnd->mem_ctx, &hnd->pol, level, &ctr, 0);
00255 
00256         /* Return value */
00257 
00258         if (!W_ERROR_IS_OK(werror)) {
00259                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00260                 return NULL;
00261         }
00262 
00263         Py_INCREF(Py_None);
00264         return Py_None;
00265 }

PyObject* spoolss_enumprinters ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printers.c269 行で定義されています。

参照先 UNISTR::bufferclicli_shutdown()flagslevelnameprinter_info_1::nameopen_pipe_creds()cli_state::pipe_listprinter_info_0::printernameprinter_info_2::printernameprinter_info_ctr_info::printers_0printer_info_ctr_info::printers_1printer_info_ctr_info::printers_2py_from_PRINTER_INFO_0()py_from_PRINTER_INFO_1()py_from_PRINTER_INFO_2()py_werror_tuple()resultrpccli_spoolss_enum_printers()rpcstr_pull()serverspoolss_errorspoolss_werrortalloc_init()werror.

00270 {
00271         WERROR werror;
00272         PyObject *result = NULL, *creds = NULL;
00273         PRINTER_INFO_CTR ctr;
00274         int level = 1, flags = PRINTER_ENUM_LOCAL, i;
00275         uint32 num_printers;
00276         static char *kwlist[] = {"server", "name", "level", "flags", 
00277                                  "creds", NULL};
00278         TALLOC_CTX *mem_ctx = NULL;
00279         struct cli_state *cli = NULL;
00280         char *server, *errstr, *name = NULL;
00281 
00282         /* Parse parameters */
00283 
00284         if (!PyArg_ParseTupleAndKeywords(
00285                     args, kw, "s|siiO", kwlist, &server, &name, &level, 
00286                     &flags, &creds))
00287                 return NULL;
00288         
00289         if (server[0] != '\\' || server[1] != '\\') {
00290                 PyErr_SetString(PyExc_ValueError, "UNC name required");
00291                 return NULL;
00292         }
00293 
00294         server += 2;
00295 
00296         if (creds && creds != Py_None && !PyDict_Check(creds)) {
00297                 PyErr_SetString(PyExc_TypeError, 
00298                                 "credentials must be dictionary or None");
00299                 return NULL;
00300         }
00301 
00302         if (!(cli = open_pipe_creds(server, creds, PI_SPOOLSS, &errstr))) {
00303                 PyErr_SetString(spoolss_error, errstr);
00304                 free(errstr);
00305                 goto done;
00306         }
00307 
00308         if (!(mem_ctx = talloc_init("spoolss_enumprinters"))) {
00309                 PyErr_SetString(
00310                         spoolss_error, "unable to init talloc context\n");
00311                 goto done;
00312         }
00313 
00314         /* This RPC is weird.  By setting the server name to different
00315            values we can get different behaviour.  If however the server
00316            name is not specified, we default it to being the full server
00317            name as this is probably what the caller intended.  To pass a
00318            NULL name, pass a value of "" */
00319 
00320         if (!name)
00321                 name = server;
00322         else {
00323                 if (!name[0])
00324                         name = NULL;
00325         }
00326 
00327         /* Call rpc function */
00328         
00329         werror = rpccli_spoolss_enum_printers(
00330                 cli->pipe_list, mem_ctx, name, flags, level, &num_printers, &ctr);
00331 
00332         if (!W_ERROR_IS_OK(werror)) {
00333                 PyErr_SetObject(spoolss_werror, py_werror_tuple(werror));
00334                 goto done;
00335         }
00336 
00337         /* Return value */
00338         
00339         switch (level) {
00340         case 0: 
00341                 result = PyDict_New();
00342 
00343                 for (i = 0; i < num_printers; i++) {
00344                         PyObject *value;
00345                         fstring s;
00346 
00347                         rpcstr_pull(s, ctr.printers_0[i].printername.buffer,
00348                                     sizeof(fstring), -1, STR_TERMINATE);
00349 
00350                         py_from_PRINTER_INFO_0(&value, &ctr.printers_0[i]);
00351 
00352                         PyDict_SetItemString(
00353                                 value, "level", PyInt_FromLong(0));
00354 
00355                         PyDict_SetItemString(result, s, value);
00356                 }
00357 
00358                 break;
00359         case 1:
00360                 result = PyDict_New();
00361 
00362                 for(i = 0; i < num_printers; i++) {
00363                         PyObject *value;
00364                         fstring s;
00365 
00366                         rpcstr_pull(s, ctr.printers_1[i].name.buffer,
00367                                     sizeof(fstring), -1, STR_TERMINATE);
00368 
00369                         py_from_PRINTER_INFO_1(&value, &ctr.printers_1[i]);
00370 
00371                         PyDict_SetItemString(
00372                                 value, "level", PyInt_FromLong(1));
00373 
00374                         PyDict_SetItemString(result, s, value);
00375                 }
00376                 
00377                 break;
00378         case 2:
00379                 result = PyDict_New();
00380 
00381                 for(i = 0; i < num_printers; i++) {
00382                         PyObject *value;
00383                         fstring s;
00384 
00385                         rpcstr_pull(s, ctr.printers_2[i].printername.buffer,
00386                                     sizeof(fstring), -1, STR_TERMINATE);
00387 
00388                         py_from_PRINTER_INFO_2(&value, &ctr.printers_2[i]);
00389 
00390                         PyDict_SetItemString(
00391                                 value, "level", PyInt_FromLong(2));
00392 
00393                         PyDict_SetItemString(result, s, value);
00394                 }
00395                 
00396                 break;
00397         default:
00398                 PyErr_SetString(spoolss_error, "unknown info level");
00399                 goto done;
00400         }
00401 
00402 done:
00403         if (cli)
00404                 cli_shutdown(cli);
00405 
00406         if (mem_ctx)
00407                 talloc_destroy(mem_ctx);
00408 
00409         return result;
00410 }

PyObject* spoolss_addprinterex ( PyObject *  self,
PyObject *  args,
PyObject *  kw 
)

py_spoolss_printers.c414 行で定義されています。

参照先 clicli_shutdown()cli_state::mem_ctxopen_pipe_creds()cli_state::pipe_listprinter_info_ctr_info::printers_2py_to_PRINTER_INFO_2()resultrpccli_spoolss_addprinterex()serverspoolss_errortalloc_init()werror.

00415 {
00416         static char *kwlist[] = { "server", "printername", "info", "creds", 
00417                                   NULL};
00418         char *printername, *server, *errstr;
00419         PyObject *info, *result = NULL, *creds = NULL;
00420         struct cli_state *cli = NULL;
00421         TALLOC_CTX *mem_ctx = NULL;
00422         PRINTER_INFO_CTR ctr;
00423         PRINTER_INFO_2 info2;
00424         WERROR werror;
00425 
00426         if (!PyArg_ParseTupleAndKeywords(
00427                     args, kw, "ssO!|O!", kwlist, &server, &printername,
00428                     &PyDict_Type, &info, &PyDict_Type, &creds))
00429                 return NULL;
00430 
00431         if (!(cli = open_pipe_creds(server, creds, PI_SPOOLSS, &errstr))) {
00432                 PyErr_SetString(spoolss_error, errstr);
00433                 free(errstr);
00434                 goto done;
00435         }
00436 
00437         if (!(mem_ctx = talloc_init("spoolss_addprinterex"))) {
00438                 PyErr_SetString(
00439                         spoolss_error, "unable to init talloc context\n");
00440                 goto done;
00441         }
00442 
00443         if (!py_to_PRINTER_INFO_2(&info2, info, mem_ctx)) {
00444                 PyErr_SetString(spoolss_error,
00445                                 "error converting to printer info 2");
00446                 goto done;
00447         }
00448 
00449         ctr.printers_2 = &info2;
00450 
00451         werror = rpccli_spoolss_addprinterex(cli->pipe_list, mem_ctx, 2, &ctr);
00452 
00453         Py_INCREF(Py_None);
00454         result = Py_None;
00455 
00456 done:
00457         if (cli)
00458                 cli_shutdown(cli);
00459 
00460         if (mem_ctx)
00461                 talloc_destroy(mem_ctx);
00462 
00463         return result;
00464 }

BOOL py_from_DEVICEMODE ( PyObject **  dict,
DEVICEMODE devmode 
)

py_spoolss_printers_conv.c150 行で定義されています。

参照先 devicemode::dev_privatedevicemode::driverextrafrom_struct()py_DEVICEMODE.

参照元 py_from_PRINTER_INFO_2().

00151 {
00152         *dict = from_struct(devmode, py_DEVICEMODE);
00153 
00154         PyDict_SetItemString(*dict, "private",
00155                              PyString_FromStringAndSize(
00156                                      devmode->dev_private, devmode->driverextra));
00157 
00158         return True;
00159 }

BOOL py_to_DEVICEMODE ( DEVICEMODE devmode,
PyObject *  dict 
)

py_spoolss_printers_conv.c161 行で定義されています。

参照先 devicemode::dev_privatedevicemode::driverextrapy_DEVICEMODEresultto_struct().

参照元 py_to_PRINTER_INFO_2().

00162 {
00163         PyObject *obj, *dict_copy = PyDict_Copy(dict);
00164         BOOL result = False;
00165 
00166         if (!(obj = PyDict_GetItemString(dict_copy, "private")))
00167                 goto done;
00168 
00169         if (!PyString_Check(obj))
00170                 goto done;
00171 
00172         devmode->dev_private = PyString_AsString(obj);
00173         devmode->driverextra = PyString_Size(obj);
00174 
00175         PyDict_DelItemString(dict_copy, "private");
00176 
00177         if (!to_struct(devmode, dict_copy, py_DEVICEMODE))
00178                 goto done;
00179 
00180         result = True;
00181 
00182 done:
00183         Py_DECREF(dict_copy);
00184         return result;
00185 }

BOOL py_from_PRINTER_INFO_0 ( PyObject **  dict,
PRINTER_INFO_0 info 
)

py_spoolss_printers_conv.c191 行で定義されています。

参照先 from_struct()py_PRINTER_INFO_0.

参照元 spoolss_enumprinters()spoolss_hnd_getprinter().

00192 {
00193         *dict = from_struct(info, py_PRINTER_INFO_0);
00194         PyDict_SetItemString(*dict, "level", PyInt_FromLong(0));
00195         return True;
00196 }

BOOL py_to_PRINTER_INFO_0 ( PRINTER_INFO_0 info,
PyObject *  dict 
)

py_spoolss_printers_conv.c198 行で定義されています。

00199 {
00200         return False;
00201 }

BOOL py_from_PRINTER_INFO_1 ( PyObject **  dict,
PRINTER_INFO_1 info 
)

py_spoolss_printers_conv.c207 行で定義されています。

参照先 from_struct()py_PRINTER_INFO_1.

参照元 spoolss_enumprinters()spoolss_hnd_getprinter().

00208 {
00209         *dict = from_struct(info, py_PRINTER_INFO_1);
00210         PyDict_SetItemString(*dict, "level", PyInt_FromLong(1));
00211         return True;
00212 }

BOOL py_to_PRINTER_INFO_1 ( PRINTER_INFO_1 info,
PyObject *  dict 
)

py_spoolss_printers_conv.c214 行で定義されています。

参照先 py_PRINTER_INFO_1resultto_struct().

参照元 spoolss_hnd_setprinter().

00215 {
00216         PyObject *obj, *dict_copy = PyDict_Copy(dict);
00217         BOOL result = False;
00218 
00219         if (!(obj = PyDict_GetItemString(dict_copy, "level")) ||
00220             !PyInt_Check(obj))
00221                 goto done;
00222 
00223         PyDict_DelItemString(dict_copy, "level");
00224 
00225         if (!to_struct(info, dict_copy, py_PRINTER_INFO_1))
00226                 goto done;
00227 
00228         result = True;
00229 
00230 done:
00231         Py_DECREF(dict_copy);
00232         return result;
00233 }

BOOL py_from_PRINTER_INFO_2 ( PyObject **  dict,
PRINTER_INFO_2 info 
)

py_spoolss_printers_conv.c239 行で定義されています。

参照先 printer_info_2::devmodefrom_struct()py_from_DEVICEMODE()py_from_SECDESC()py_PRINTER_INFO_2printer_info_2::secdesc.

参照元 spoolss_enumprinters()spoolss_hnd_getprinter().

00240 {
00241         PyObject *obj;
00242 
00243         *dict = from_struct(info, py_PRINTER_INFO_2);
00244 
00245         /* The security descriptor could be NULL */
00246 
00247         if (info->secdesc) {
00248                 if (py_from_SECDESC(&obj, info->secdesc))
00249                         PyDict_SetItemString(*dict, "security_descriptor", obj);
00250         }
00251 
00252         /* Bong!  The devmode could be NULL */
00253 
00254         if (info->devmode)
00255                 py_from_DEVICEMODE(&obj, info->devmode);
00256         else
00257                 obj = PyDict_New();
00258 
00259         PyDict_SetItemString(*dict, "device_mode", obj);
00260 
00261         PyDict_SetItemString(*dict, "level", PyInt_FromLong(2));
00262 
00263         return True;
00264 }

BOOL py_to_PRINTER_INFO_2 ( PRINTER_INFO_2 info,
PyObject *  dict,
TALLOC_CTX mem_ctx 
)

py_spoolss_printers_conv.c266 行で定義されています。

参照先 _talloc()printer_info_2::devmodepy_PRINTER_INFO_2py_to_DEVICEMODE()py_to_SECDESC()resultprinter_info_2::secdescto_struct().

参照元 spoolss_addprinterex()spoolss_hnd_setprinter().

00268 {
00269         PyObject *obj, *dict_copy = PyDict_Copy(dict);
00270         BOOL result = False;
00271 
00272         /* Convert security descriptor - may be NULL */
00273 
00274         info->secdesc = NULL;
00275 
00276         if ((obj = PyDict_GetItemString(dict_copy, "security_descriptor"))) {
00277 
00278                 if (!PyDict_Check(obj))
00279                         goto done;
00280 
00281                 if (!py_to_SECDESC(&info->secdesc, obj, mem_ctx))
00282                         goto done;
00283 
00284                 PyDict_DelItemString(dict_copy, "security_descriptor");
00285         }
00286 
00287         /* Convert device mode */
00288 
00289         if (!(obj = PyDict_GetItemString(dict_copy, "device_mode"))
00290             || !PyDict_Check(obj))
00291                 goto done;
00292 
00293         info->devmode = _talloc(mem_ctx, sizeof(DEVICEMODE));
00294 
00295         if (!py_to_DEVICEMODE(info->devmode, obj))
00296                 goto done;
00297 
00298         PyDict_DelItemString(dict_copy, "device_mode");
00299 
00300         /* Check info level */
00301 
00302         if (!(obj = PyDict_GetItemString(dict_copy, "level")) ||
00303             !PyInt_Check(obj))
00304                 goto done;
00305 
00306         PyDict_DelItemString(dict_copy, "level");
00307 
00308         /* Convert remaining elements of dictionary */
00309 
00310         if (!to_struct(info, dict_copy, py_PRINTER_INFO_2))
00311                 goto done;
00312 
00313         result = True;
00314 
00315 done:
00316         Py_DECREF(dict_copy);
00317         return result;
00318 }

BOOL py_from_PRINTER_INFO_3 ( PyObject **  dict,
PRINTER_INFO_3 info 
)

py_spoolss_printers_conv.c324 行で定義されています。

参照先 from_struct()py_from_SECDESC()py_PRINTER_INFO_3printer_info_3::secdesc.

参照元 spoolss_hnd_getprinter().

00325 {
00326         PyObject *obj;  
00327 
00328         *dict = from_struct(info, py_PRINTER_INFO_3);
00329 
00330         if (py_from_SECDESC(&obj, info->secdesc))
00331                 PyDict_SetItemString(*dict, "security_descriptor", obj);
00332 
00333         PyDict_SetItemString(*dict, "level", PyInt_FromLong(3));
00334 
00335         return True;
00336 }

BOOL py_to_PRINTER_INFO_3 ( PRINTER_INFO_3 info,
PyObject *  dict,
TALLOC_CTX mem_ctx 
)

py_spoolss_printers_conv.c338 行で定義されています。

参照先 py_PRINTER_INFO_3py_to_SECDESC()printer_info_3::secdescto_struct().

参照元 spoolss_hnd_setprinter().

00340 {
00341         PyObject *obj;
00342 
00343         if (!to_struct(info, dict, py_PRINTER_INFO_3))
00344                 return False;
00345 
00346         if (!(obj = PyDict_GetItemString(dict, "security_descriptor")))
00347                 return False;
00348 
00349         if (!py_to_SECDESC(&info->secdesc, obj, mem_ctx))
00350                 return False;
00351 
00352         return True;
00353 }


変数

PyTypeObject spoolss_policy_hnd_type

py_spoolss.c321 行で定義されています。

参照元 new_spoolss_policy_hnd_object()spoolss_closeprinter().

PyObject* spoolss_error

py_spoolss.c25 行で定義されています。

参照元 initspoolss()py_to_printerdata()spoolss_addprinterdriver()spoolss_addprinterdriverex()spoolss_addprinterex()spoolss_deleteprinterdriver()spoolss_deleteprinterdriverex()spoolss_enumports()spoolss_enumprinterdrivers()spoolss_enumprinters()spoolss_getprinterdriverdir()spoolss_hnd_addform()spoolss_hnd_addjob()spoolss_hnd_enumforms()spoolss_hnd_enumprinterdataex()spoolss_hnd_getprinterdriver()spoolss_hnd_setform()spoolss_hnd_setprinter()spoolss_hnd_startdocprinter()spoolss_openprinter().

PyObject * spoolss_werror

py_spoolss.c25 行で定義されています。

参照元 initspoolss()spoolss_addprinterdriver()spoolss_enumports()spoolss_enumprinterdrivers()spoolss_enumprinters()spoolss_getprinterdriverdir()spoolss_hnd_addform()spoolss_hnd_deleteform()spoolss_hnd_deleteprinterdata()spoolss_hnd_deleteprinterdataex()spoolss_hnd_enddocprinter()spoolss_hnd_endpageprinter()spoolss_hnd_enumforms()spoolss_hnd_enumjobs()spoolss_hnd_enumprinterdata()spoolss_hnd_enumprinterdataex()spoolss_hnd_enumprinterkey()spoolss_hnd_getform()spoolss_hnd_getjob()spoolss_hnd_getprinter()spoolss_hnd_getprinterdata()spoolss_hnd_getprinterdataex()spoolss_hnd_getprinterdriver()spoolss_hnd_setform()spoolss_hnd_setjob()spoolss_hnd_setprinter()spoolss_hnd_setprinterdata()spoolss_hnd_setprinterdataex()spoolss_hnd_startdocprinter()spoolss_hnd_startpageprinter()spoolss_hnd_writeprinter()spoolss_openprinter().


Sambaに対してSat Aug 29 21:24:05 2009に生成されました。  doxygen 1.4.7