[libvirt] [PATCH RFC] build: fix build with libselinux 2.3

Jim Fehlig jfehlig at suse.com
Wed May 28 04:43:24 UTC 2014


Eric Blake wrote:
> On 05/27/2014 10:05 PM, Jim Fehlig wrote:
>   
>> The attached patch is an attempt to fix recent build failures I've
>> noticed with libselinux 2.3
>>
>> CC       securityselinuxhelper.lo
>> securityselinuxhelper.c:159:5: error: conflicting types for 'setcon_raw'
>>  int setcon_raw(security_context_t context)
>>      ^
>>     
>
>   
>> Noticing that security_context_t changed to 'const char *', my first
>> thought was to use AC_CHECK_TYPE to check for security_conext_t, but
>> alas the typedef remains in 2.3 with the comment "No longer used; here
>> for compatibility with legacy callers".
>>
>> I then pursued the approach in this patch of defining a config var based
>> on 'pkg-config --modversion', which works in a test script, but not in
>> the context of the LIBVIRT_CHECK_SELINUX macro.  Probably due to some
>> missed quoting, but I'm reaching the m4 knowledge barrier.  Before
>> attempting to bypass that, I'd like to see what others think of this
>> approach.  Is there a simpler solution?
>>     
>
> So the difference is deciding whether the const is present? It should be
> possible to write an AC_COMPILE_IF test that passes or fails based on
> whether you have a compatible redeclaration of the function.
>
>   
>>    if test "$with_selinux" = "yes"; then
>> +    AC_MSG_CHECKING([SELinux version])
>> +    ver=$(pkg-config --modversion libselinux)
>> +    major_ver=`echo $ver | awk -F. '{print $1}'`
>> +    minor_ver=`echo $ver | awk -F. '{print $2}'`
>> +    SELINUX_VER=`expr $major_ver + $minor_ver`
>> +    AC_MSG_RESULT([$SELINUX_VER])
>> +    if test $SELINUX_VER -ge 2003; then
>> +       AC_DEFINE_UNQUOTED([SELINUX_CTX_CHAR_PTR], 1,
>> +                          [SELinux uses char * for security context])
>> +    fi
>>     
>
> Eww.  Version-check tests are inherently fragile;

Understood.  That's why this was my second approach.

>  we want to do a
> feature check (does a const char * compile) not a version check.  I'll
> take some time tomorrow to propose an alternative.  My idea is to define
> a new macro VIR_SELINUX_CTX_CONST to either '' or 'const' depending on
> which version builds,

But I didn't think of that.  Much better indeed.

Regards,
Jim




More information about the libvir-list mailing list