compile error for drsblob

Matthias Dieter Wallnöfer mdw at samba.org
Tue Apr 20 01:36:24 MDT 2010


Is this still an issue?

Matthias

Matthieu Patou wrote:
> Hello Metze,
>
> I tried to create a python lib for drs object manipulation and 
> received this error :
> [1228/1933] Compiling default/librpc/gen_ndr/py_drsblobs.c
> default/librpc/gen_ndr/py_drsblobs.c: In function 
> ‘py_package_PrimaryKerberosString_get_string’:
> default/librpc/gen_ndr/py_drsblobs.c:3188: warning: passing argument 1 
> of ‘PyString_FromString’ makes pointer from integer without a cast
> /usr/include/python2.6/stringobject.h:63: note: expected ‘const char 
> *’ but argument is of type ‘char’
> default/librpc/gen_ndr/py_drsblobs.c: In function 
> ‘py_package_PrimaryKerberosString_set_string’:
> default/librpc/gen_ndr/py_drsblobs.c:3196: warning: passing argument 1 
> of ‘_talloc_free’ discards qualifiers from pointer target type
> ../../lib/talloc/talloc.h:212: note: expected ‘void *’ but argument is 
> of type ‘const char *’
> default/librpc/gen_ndr/py_drsblobs.c:3201: error: assignment of 
> read-only location ‘*object->string’
> compilation terminated due to -Wfatal-errors.
> Waf: Leaving directory `/usr/local/src/samba4/source4/bin'
> Build failed: -> task failed (err #1):
> {task: cc py_drsblobs.c -> py_drsblobs_146.o}
> make: *** [all] Erreur 1
>
> After some investigation I have the impression that something is not 
> ok ... but I don't really know how to fix it so that's why I ask you :-)
>
> the generated code is
>
> static int py_package_PrimaryKerberosString_set_string(PyObject 
> *py_obj, PyObject *value, void *closure)
> {
> struct package_PrimaryKerberosString *object = (struct 
> package_PrimaryKerberosString *)py_talloc_get_ptr(py_obj);
> talloc_free(object->string);
> if (value == Py_None) {
> object->string = NULL;
> } else {
> object->string = talloc_ptrtype(py_talloc_get_mem_ctx(py_obj), 
> object->string);
> *object->string = talloc_strdup(py_talloc_get_mem_ctx(py_obj), 
> PyString_AsString(value));
> }
> return 0;
> }
>
> and
>
> struct package_PrimaryKerberosString {
> uint16_t length;/* [value(2*strlen_m(string))] */
> uint16_t size;/* [value(2*strlen_m(string))] */
> const char * string;/* 
> [relative,subcontext_size(size),subcontext(0),flag(LIBNDR_FLAG_STR_NOTERM|LIBNDR_FLAG_REMAINING)] 
> */
> };
>
> It seems a bit wrong as if the object is a char* then we should do 
> object->string = ...
> My understanding is that the pidl is doing it wrong as we have *string 
> and as string is already a char* then we should get a char**, but the 
> fix in pidl is not obvious and I'm not sure that the analysis is correct.
>
> What do you think ?
> Matthieu.
>



More information about the samba-technical mailing list