PyObject *obj, *dict_copy = PyDict_Copy(dict);
BOOL result = False;
- if (!(obj = PyDict_GetItemString(dict_copy, "level")))
- goto done;
-
- if (!PyInt_Check(obj))
+ if (!(obj = PyDict_GetItemString(dict_copy, "level")) ||
+ !PyInt_Check(obj))
goto done;
PyDict_DelItemString(dict_copy, "level");
PyObject *obj, *dict_copy = PyDict_Copy(dict);
BOOL result = False;
- /* Convert security descriptor */
+ /* Convert security descriptor - may be NULL */
- if (!(obj = PyDict_GetItemString(dict_copy, "security_descriptor")))
- goto done;
+ info->secdesc = NULL;
- if (!PyDict_Check(obj))
- goto done;
+ if ((obj = PyDict_GetItemString(dict_copy, "security_descriptor"))) {
- if (!py_to_SECDESC(&info->secdesc, obj, mem_ctx))
- goto done;
+ if (!PyDict_Check(obj))
+ goto done;
- PyDict_DelItemString(dict_copy, "security_descriptor");
+ if (!py_to_SECDESC(&info->secdesc, obj, mem_ctx))
+ goto done;
- /* Convert device mode */
+ PyDict_DelItemString(dict_copy, "security_descriptor");
+ }
- if (!(obj = PyDict_GetItemString(dict_copy, "device_mode")))
- goto done;
+ /* Convert device mode */
- if (!PyDict_Check(obj))
+ if (!(obj = PyDict_GetItemString(dict_copy, "device_mode"))
+ || !PyDict_Check(obj))
goto done;
info->devmode = talloc(mem_ctx, sizeof(DEVICEMODE));
PyDict_DelItemString(dict_copy, "device_mode");
+ /* Check info level */
+
+ if (!(obj = PyDict_GetItemString(dict_copy, "level")) ||
+ !PyInt_Check(obj))
+ goto done;
+
+ PyDict_DelItemString(dict_copy, "level");
+
/* Convert remaining elements of dictionary */
if (!to_struct(info, dict_copy, py_PRINTER_INFO_2))