compile error for drsblob

Matthieu Patou mat+Informatique.Samba at matws.net
Tue Apr 20 12:09:36 MDT 2010


Not anymore thanks to kamenin for pointing me the update in master.

On 20/04/2010 11:36, Matthias Dieter Wallnöfer wrote:
> 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