maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #12422
Re: 727d97feb99: MDEV-23926: Fix warnings generated during compilation of plugin/auth_pam/mapper/pam_user_map.c on MacOS
Hi, Dmitry!
plugin code should stay in the plugin directory.
please move the check to plugin/auth_pam/CMakeLists.txt
Also, what about an alternative fix:
#ifdef HAVE_POSIX_GETGROUPLIST
typedef gid_t my_gid_t;
#else
typedef int my_gid_t;
#end
would that help but with less ifdefs?
On Oct 19, Dmitry Shulga wrote:
> revision-id: 727d97feb99 (mariadb-10.2.31-489-g727d97feb99)
> parent(s): 8984d779103
> author: Dmitry Shulga <dmitry.shulga@xxxxxxxxxxx>
> committer: Dmitry Shulga <dmitry.shulga@xxxxxxxxxxx>
> timestamp: 2020-10-09 20:35:48 +0700
> message:
>
> MDEV-23926: Fix warnings generated during compilation of plugin/auth_pam/mapper/pam_user_map.c on MacOS
>
> Compiler warnings listed below are generated during server build on MacOS:
>
> 88%] Building C object plugin/auth_pam/CMakeFiles/pam_user_map.dir/mapper/pam_user_map.c.o
> /Users/shulga/projects/mariadb/server-10.2/plugin/auth_pam/mapper/pam_user_map.c:87:41: error: passing
> 'gid_t *' (aka 'unsigned int *') to parameter of type 'int *' converts between pointers to integer types
> with different sign [-Werror,-Wpointer-sign]
> if (getgrouplist(user, user_group_id, loc_groups, &ng) < 0)
> ^~~~~~~~~~
> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include/unistd.h:650:43: note:
> passing argument to parameter here
> int getgrouplist(const char *, int, int *, int *);
> ^
> /Users/shulga/projects/mariadb/server-10.2/plugin/auth_pam/mapper/pam_user_map.c:95:46: error: passing
> 'gid_t *' (aka 'unsigned int *') to parameter of type 'int *' converts between pointers to integer types
> with different sign [-Werror,-Wpointer-sign]
> (void) getgrouplist(user, user_group_id, loc_groups, &ng);
> ^~~~~~~~~~
> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/includ
> e/unistd.h:650:43: note:
> passing argument to parameter here
> int getgrouplist(const char *, int, int *, int *);
> ^
> 2 errors generated.
>
> In case MariaDB serer is build with -DCMAKE_BUILD_TYPE=Debug it results in
> uild error.
>
> The reason of compiler warnings is that declaration of the Posix C API function
> getgrouplist() on MacOS differs from declration of getgrouplist() proposed
> by Posix.
>
> To suppress this compiler warning cmake configure was adapted to detect what
> kind of getgrouplist() function is declared on the building platform and
> set the macros HAVE_POSIX_GETGROUPLIST in case the building platform suppors
> Posix compatible interface of the getgrouplist() function. Depending on
> whether this macros is set the compatible type of arguments is used to pass
> parameter values to the function.
>
> ---
> config.h.cmake | 1 +
> configure.cmake | 22 ++++++++++++++++++++++
> plugin/auth_pam/mapper/pam_user_map.c | 13 ++++++++++++-
> 3 files changed, 35 insertions(+), 1 deletion(-)
>
> diff --git a/config.h.cmake b/config.h.cmake
> index 0e19dd44694..07e4647f0bf 100644
> --- a/config.h.cmake
> +++ b/config.h.cmake
> @@ -188,6 +188,7 @@
> #cmakedefine HAVE_POSIX_FALLOCATE 1
> #cmakedefine HAVE_LINUX_FALLOC_H 1
> #cmakedefine HAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE 1
> +#cmakedefine HAVE_POSIX_GETGROUPLIST 1
> #cmakedefine HAVE_PREAD 1
> #cmakedefine HAVE_PAUSE_INSTRUCTION 1
> #cmakedefine HAVE_FAKE_PAUSE_INSTRUCTION 1
> diff --git a/configure.cmake b/configure.cmake
> index 58e1111bfc7..c6db3ecb912 100644
> --- a/configure.cmake
> +++ b/configure.cmake
> @@ -1031,3 +1031,25 @@ IF(NOT MSVC)
> HAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE
> )
> ENDIF()
> +
> +# Check whether getgrouplist uses git_t for second and third arguments.
> +SET(CMAKE_REQUIRED_FLAGS -Werror)
> +CHECK_C_SOURCE_COMPILES(
> +"
> +#ifdef HAVE_GRP_H
> +#include <grp.h>
> +#endif
> +#ifdef HAVE_UNISTD_H
> +#include <unistd.h>
> +#endif
> +int main() {
> + char *arg_1;
> + gid_t arg_2, arg_3;
> + int arg_4;
> + (void)getgrouplist(arg_1,arg_2,&arg_3,arg_4);
> + return 0;
> +}
> +"
> +HAVE_POSIX_GETGROUPLIST
> +)
> +SET(CMAKE_REQUIRED_FLAGS)
> diff --git a/plugin/auth_pam/mapper/pam_user_map.c b/plugin/auth_pam/mapper/pam_user_map.c
> index 9d7ed53f8b1..b0d2affac5c 100644
> --- a/plugin/auth_pam/mapper/pam_user_map.c
> +++ b/plugin/auth_pam/mapper/pam_user_map.c
> @@ -31,6 +31,8 @@ These comments are written to the syslog as 'authpriv.debug'
> and usually end up in /var/log/secure file.
> */
>
> +#include <my_config.h>
> +
> #include <stdlib.h>
> #include <stdio.h>
> #include <ctype.h>
> @@ -72,8 +74,13 @@ static const char debug_keyword[]= "debug";
>
> static int populate_user_groups(const char *user, gid_t **groups)
> {
> +#ifdef HAVE_POSIX_GETGROUPLIST
> gid_t user_group_id;
> gid_t *loc_groups= *groups;
> +#else
> + int user_group_id;
> + int *loc_groups= (int*)*groups;
> +#endif
> int ng;
>
> {
> @@ -88,12 +95,16 @@ static int populate_user_groups(const char *user, gid_t **groups)
> {
> /* The rare case when the user is present in more than */
> /* GROUP_BUFFER_SIZE groups. */
> +#ifdef HAVE_POSIX_GETGROUPLIST
> loc_groups= (gid_t *) malloc(ng * sizeof (gid_t));
> +#else
> + loc_groups= (int *) malloc(ng * sizeof (gid_t));
> +#endif
> if (!loc_groups)
> return 0;
>
> (void) getgrouplist(user, user_group_id, loc_groups, &ng);
> - *groups= loc_groups;
> + *groups= (gid_t*)loc_groups;
> }
>
> return ng;
>
Regards,
Sergei
VP of MariaDB Server Engineering
and security@xxxxxxxxxxx