[CONC-464] AUTH plugins cannot be built statically as documented Created: 2020-03-15  Updated: 2021-11-19  Resolved: 2020-03-15

Status: Closed
Project: MariaDB Connector/C
Component/s: None
Affects Version/s: 3.1.7
Fix Version/s: 3.1.8

Type: Bug Priority: Major
Reporter: Jeroen Ooms Assignee: Georg Richter
Resolution: Fixed Votes: 0
Labels: None
Environment:

cmake



 Description   

I maintain the R bindings for mariadb-connector-c. I need to build a version of libmariadbclient for MacOS with only static plugins. This does not work (at least not as documented).

Accoring to the documentation it should be possible to:

cmake .. -DCLIENT_PLUGIN_{PLUGIN_NAME}=[STATIC|DYNAMIC|OFF]

However when I try this cmake says the following:

   CMake Warning:
      Manually-specified variables were not used by the project:
 
    CLIENT_PLUGIN_AUTH_GSSAPI

And it still builds the following plugins as shared libraries:

auth_gssapi_client.so		client_ed25519.so		remote_io.so
caching_sha2_password.so	mysql_clear_password.so

I also noticed that the documentation says that the CMAKE parameter AUTH_GSSAPI_PLUGIN_TYPE was recently renamed to CLIENT_PLUGIN_AUTH_GSSAPI, however the top level CMakeLists.txt still contains some reference to AUTH_GSSAPI_PLUGIN_TYPE, so perhaps that is the problem?



 Comments   
Comment by Georg Richter [ 2020-03-15 ]

Fixed in rev fbf1db627030b49e2c2f30d3c21baebd3b68ffc3

Comment by Georg Richter [ 2020-03-15 ]

Jeroen,

thanks for your bug report. Please note that the corrrect cmake parameter is

-DCLIENT_PLUGIN_AUTH_GSSAPI_CLIENT=STATIC

Comment by Jeroen Ooms [ 2020-03-15 ]

Could you please give me a full cmake line to build all the plugins as static? Because I also noticed the documentation doesn't mention all plugin names.

Comment by Jeroen Ooms [ 2020-03-15 ]

I'm sorry but I don't think this fixed it. The bug is in cmake, but you only changed a line of C code?

I'm now building as follows:

cmake . -DCMAKE_C_FLAGS_RELEASE=-DNDEBUG -DCMAKE_CXX_FLAGS_RELEASE=-DNDEBUG -DCMAKE_INSTALL_PREFIX=/usr/local/Cellar/mariadb-connector-c/HEAD-1059275_1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_FIND_FRAMEWORK=LAST -DCMAKE_VERBOSE_MAKEFILE=ON -Wno-dev -DHAVE_CLOCK_GETTIME:INTERNAL=0 -DOPENSSL_INCLUDE_DIR=/usr/local/opt/openssl@1.1/include -DAUTH_GSSAPI_PLUGIN_TYPE=STATIC -DCLIENT_PLUGIN_DIALOG=STATIC -DCLIENT_PLUGIN_SHA256_PASSWORD=STATIC -DCLIENT_PLUGIN_CACHING_SHA2_PASSWORD=STATIC -DCLIENT_PLUGIN_CLIENT_ED25519=STATIC -DCLIENT_PLUGIN_MYSQL_CLEAR_PASSWORD=STATIC -DCLIENT_PLUGIN_AUTH_GSSAPI_CLIENT=STATIC -DCLIENT_PLUGIN_REMOTE_IO=OFF
-- The C compiler identification is AppleClang 8.0.0.8000042
-- Check for working C compiler: /usr/local/Homebrew/Library/Homebrew/shims/mac/super/clang
-- Check for working C compiler: /usr/local/Homebrew/Library/Homebrew/shims/mac/super/clang -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found GSSAPI: -dynamic -Wl,-search_paths_first -lkrb5
-- Found Git: /usr/local/Homebrew/Library/Homebrew/shims/mac/super/git (found version "2.10.1 (Apple Git-78)")
-- Found ZLIB: /usr/lib/libz.dylib (found version "1.2.5")
...

Which eventually fails with:

[ 62%] Linking C shared library libmariadb.dylib
cd /tmp/mariadb-connector-c-20200315-28775-sex2lo/libmariadb && /usr/local/Cellar/cmake/3.12.2/bin/cmake -E cmake_link_script CMakeFiles/libmariadb.dir/link.txt --verbose=1
/usr/local/Homebrew/Library/Homebrew/shims/mac/super/clang -DNDEBUG -DDBUG_OFF -dynamiclib -Wl,-headerpad_max_install_names -compatibility_version 3.0.0 -current_version 3.0.0 -o libmariadb.3.dylib -install_name /tmp/mariadb-connector-c-20200315-28775-sex2lo/libmariadb/libmariadb.3.dylib CMakeFiles/mariadb_obj.dir/__/plugins/auth/my_auth.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/dialog.c.o CMakeFiles/mariadb_obj.dir/get_password.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ed25519.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_0.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_isnegative.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_sub.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_p1p1_to_p2.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_p3_to_cached.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/open.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_1.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_isnonzero.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_tobytes.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_p1p1_to_p3.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_p3_to_p2.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/sc_muladd.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_add.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_mul.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_add.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_p2_0.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_precomp_0.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/sc_reduce.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_cmov.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_neg.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_double_scalarmult.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_p2_dbl.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_scalarmult_base.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/sign.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_copy.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_pow22523.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_frombytes.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_p3_0.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_sub.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/verify.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_frombytes.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_sq2.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_madd.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_p3_dbl.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_tobytes.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_invert.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/fe_sq.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_msub.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/ge_p3_tobytes.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/ref10/keypair.c.o CMakeFiles/mariadb_obj.dir/secure/openssl_crypt.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/caching_sha2_pw.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/auth_gssapi_client.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/gssapi_client.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/gssapi_errmsg.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/sha256_pw.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/old_password.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/mariadb_cleartext.c.o CMakeFiles/mariadb_obj.dir/__/plugins/pvio/pvio_socket.c.o CMakeFiles/mariadb_obj.dir/ma_array.c.o CMakeFiles/mariadb_obj.dir/ma_charset.c.o CMakeFiles/mariadb_obj.dir/ma_hash.c.o CMakeFiles/mariadb_obj.dir/ma_net.c.o CMakeFiles/mariadb_obj.dir/mariadb_charset.c.o CMakeFiles/mariadb_obj.dir/ma_time.c.o CMakeFiles/mariadb_obj.dir/ma_default.c.o CMakeFiles/mariadb_obj.dir/ma_errmsg.c.o CMakeFiles/mariadb_obj.dir/mariadb_lib.c.o CMakeFiles/mariadb_obj.dir/ma_list.c.o CMakeFiles/mariadb_obj.dir/ma_pvio.c.o CMakeFiles/mariadb_obj.dir/ma_tls.c.o CMakeFiles/mariadb_obj.dir/ma_alloc.c.o CMakeFiles/mariadb_obj.dir/ma_compress.c.o CMakeFiles/mariadb_obj.dir/ma_init.c.o CMakeFiles/mariadb_obj.dir/ma_password.c.o CMakeFiles/mariadb_obj.dir/ma_ll2str.c.o CMakeFiles/mariadb_obj.dir/ma_sha1.c.o CMakeFiles/mariadb_obj.dir/mariadb_stmt.c.o CMakeFiles/mariadb_obj.dir/ma_loaddata.c.o CMakeFiles/mariadb_obj.dir/ma_stmt_codec.c.o CMakeFiles/mariadb_obj.dir/ma_string.c.o CMakeFiles/mariadb_obj.dir/ma_dtoa.c.o CMakeFiles/mariadb_obj.dir/mariadb_rpl.c.o CMakeFiles/mariadb_obj.dir/ma_client_plugin.c.o CMakeFiles/mariadb_obj.dir/ma_io.c.o CMakeFiles/mariadb_obj.dir/secure/openssl.c.o CMakeFiles/mariadb_obj.dir/mariadb_dyncol.c.o CMakeFiles/mariadb_obj.dir/mariadb_async.c.o CMakeFiles/mariadb_obj.dir/ma_context.c.o -dynamic -Wl,-search_paths_first -lkrb5 /usr/lib/libz.dylib /usr/lib/libiconv.dylib /usr/local/opt/openssl@1.1/lib/libssl.dylib /usr/local/opt/openssl@1.1/lib/libcrypto.dylib -dynamic -Wl,-search_paths_first -lkrb5 /usr/local/opt/openssl@1.1/lib/libssl.dylib /usr/local/opt/openssl@1.1/lib/libcrypto.dylib /usr/local/opt/openssl@1.1/lib/libssl.dylib /usr/local/opt/openssl@1.1/lib/libcrypto.dylib -dynamic -Wl,-search_paths_first -lkrb5 /usr/local/opt/openssl@1.1/lib/libssl.dylib /usr/local/opt/openssl@1.1/lib/libcrypto.dylib
Undefined symbols for architecture x86_64:
  "_auth_gssapi_client_client_plugin", referenced from:
      _mysql_client_builtins in ma_client_plugin.c.o
  "_client_ed25519_client_plugin", referenced from:
      _mysql_client_builtins in ma_client_plugin.c.o

Comment by Georg Richter [ 2020-03-15 ]

Did you remove your CMakeCache.txt before.
I just checked on Linux,

CFLAGS=-DMYSQL_CLIENT=1 cmake .. -DCLIENT_PLUGIN_AUTH_GSSAPI_CLIENT=STATIC -DCLIENT_PLUGIN_DIALOG=STATIC -DCLIENT_PLUGIN_CLIENT_ED25519=STATIC -DCLIENT_PLUGIN_CACHING_SHA2_PASSWORD=STATIC -DCLIENT_PLUGIN_SHA256_PASSWORD=STATIC -DCLIENT_PLUGIN_MYSQL_CLEAR_PASSWORD=STATIC -DCLIENT_PLUGIN_MYSQL_OLD_PASSWORD=STATIC 

works fine for me.

Comment by Jeroen Ooms [ 2020-03-15 ]

Your command still generates a shared plugin for io. Does

 -DCLIENT_PLUGIN_REMOTE_IO=STATIC 

work for you?

Comment by Jeroen Ooms [ 2020-03-15 ]

OK shit, all this time I was building from your master branch, but i now see that you are pushing to the 3.1 branch. That explains why I wasn't seeing your fix

So when I build from the 3.1 branch I get the same result as you. That fixes the issue for the AUTH_GSSAPI plugin, but the same issue still persists for the REMOTE_IO plugin. Can you see if this if fixable as well?

Comment by Daniel Lenski [ 2021-11-19 ]

Fixed in rev fbf1db627030b49e2c2f30d3c21baebd3b68ffc3

georg, you referenced this commit, but it doesn't exist in the Github MariaDB server repository (https://github.com/MariaDB/server/fbf1db627030b49e2c2f30d3c21baebd3b68ffc3).

Was it perhaps force-pushed-over? Or is it in a different repo, and never merged upstream?

UPDATE: Ah, found it (https://github.com/mariadb-corporation/mariadb-connector-c/commit/fbf1db627030b49e2c2f30d3c21baebd3b68ffc3).

Generated at Thu Feb 08 03:05:30 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.