diff options
Diffstat (limited to 'source4')
-rw-r--r-- | source4/build/pidl/swig.pm | 5 | ||||
-rw-r--r-- | source4/scripting/swig/dcerpc.i | 20 |
2 files changed, 15 insertions, 10 deletions
diff --git a/source4/build/pidl/swig.pm b/source4/build/pidl/swig.pm index 1ddb54c77b..e9b2d220b8 100644 --- a/source4/build/pidl/swig.pm +++ b/source4/build/pidl/swig.pm @@ -96,6 +96,11 @@ sub FieldFromPython($$) return $result; } + if ($e->{TYPE} eq "DATA_BLOB") { + $result .= "\tDATA_BLOB_ptr_from_python(mem_ctx, &s->$prefix$e->{NAME}, $obj, \"$e->{NAME}\");\n"; + return $result; + } + # Generate conversion for element if (util::is_scalar_type($e->{TYPE})) { diff --git a/source4/scripting/swig/dcerpc.i b/source4/scripting/swig/dcerpc.i index 606f236f35..918445d7e3 100644 --- a/source4/scripting/swig/dcerpc.i +++ b/source4/scripting/swig/dcerpc.i @@ -254,28 +254,28 @@ PyObject *string_ptr_to_python(TALLOC_CTX *mem_ctx, char *obj) #define dom_sid2_ptr_to_python dom_sid_ptr_to_python #define dom_sid2_ptr_from_python dom_sid_ptr_from_python -DATA_BLOB DATA_BLOB_from_python(PyObject *obj, char *name) +void DATA_BLOB_ptr_from_python(TALLOC_CTX *mem_ctx, DATA_BLOB **s, + PyObject *obj, char *name) { - DATA_BLOB ret; - - /* Because we treat DATA_BLOB as a scalar type (why?) there - doesn't seem to be a way to pass back when an error has - occured. */ - if (obj == NULL) { PyErr_Format(PyExc_ValueError, "Expecting key %s", name); return; } + if (obj == Py_None) { + *s = NULL; + return; + } + if (!PyString_Check(obj)) { PyErr_Format(PyExc_TypeError, "Expecting string value for key '%s'", name); return; } - ret.length = PyString_Size(obj); - ret.data = PyString_AsString(obj); + *s = talloc(mem_ctx, sizeof(DATA_BLOB)); - return ret; + (*s)->length = PyString_Size(obj); + (*s)->data = PyString_AsString(obj); } PyObject *DATA_BLOB_to_python(DATA_BLOB obj) |