summaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
authorMichael Widenius <monty@askmonty.org>2012-01-08 20:29:05 +0200
committerMichael Widenius <monty@askmonty.org>2012-01-08 20:29:05 +0200
commit629cdab80827e7ad6bb23f7c8dc20724eb87f4d9 (patch)
tree09881fe66fc7e71108aaf870cfd85758b8b46655 /plugin
parent7e576c07103fc27e8d2a6a4f6d709426cc782f44 (diff)
downloadmariadb-git-629cdab80827e7ad6bb23f7c8dc20724eb87f4d9.tar.gz
Fixed compiler and test failures found by buildbot
configure.in: Added testing of STRNDUP (not found on solaris) mysql-test/include/wait_until_connected_again.inc: Also test for error 2005 (can happen on windows) mysql-test/include/wait_until_disconnected.inc: Also test for error 2005 (can happen on windows) mysql-test/suite/innodb_plugin/r/innodb_bug30423.result: Number of rows is not stable (found difference on Solaris) mysql-test/suite/innodb_plugin/t/innodb_bug30423.test: Number of rows is not stable (found difference on Solaris) plugin/auth_pam/auth_pam.c: Use internal strndup if it doesn't exist on system (solaris) Changed code so that it should also compile on solaris.
Diffstat (limited to 'plugin')
-rw-r--r--plugin/auth_pam/auth_pam.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/plugin/auth_pam/auth_pam.c b/plugin/auth_pam/auth_pam.c
index 45c49975f6e..0d9cf2ae0af 100644
--- a/plugin/auth_pam/auth_pam.c
+++ b/plugin/auth_pam/auth_pam.c
@@ -1,5 +1,6 @@
#include <mysql/plugin_auth.h>
#include <string.h>
+#include <my_config.h>
#include <security/pam_appl.h>
#include <security/pam_modules.h>
@@ -8,6 +9,24 @@ struct param {
MYSQL_PLUGIN_VIO *vio;
};
+/* It least solaris doesn't have strndup */
+
+#ifndef HAVE_STRNDUP
+char *strndup(const char *from, size_t length)
+{
+ char *ptr;
+ size_t max_length= strlen(from);
+ if (length > max_length)
+ length= max_length;
+ if ((ptr= (char*) malloc(length+1)) != 0)
+ {
+ memcpy((char*) ptr, (char*) from, length);
+ ptr[length]=0;
+ }
+ return ptr;
+}
+#endif
+
static int conv(int n, const struct pam_message **msg,
struct pam_response **resp, void *data)
{
@@ -71,13 +90,21 @@ static int conv(int n, const struct pam_message **msg,
#define DO(X) if ((status = (X)) != PAM_SUCCESS) goto end
+#ifdef SOLARIS
+typedef void** pam_get_item_3_arg;
+#else
+typedef const void** pam_get_item_3_arg;
+#endif
+
static int pam_auth(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info)
{
pam_handle_t *pamh = NULL;
int status;
const char *new_username;
struct param param;
- struct pam_conv c = { &conv, &param };
+ /* The following is written in such a way to make also solaris happy */
+ struct pam_conv pam_start_arg = { &conv, NULL };
+ pam_start_arg.appdata_ptr= (char*) &param;
/*
get the service name, as specified in
@@ -90,10 +117,10 @@ static int pam_auth(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info)
param.ptr = param.buf + 1;
param.vio = vio;
- DO( pam_start(service, info->user_name, &c, &pamh) );
+ DO( pam_start(service, info->user_name, &pam_start_arg, &pamh) );
DO( pam_authenticate (pamh, 0) );
DO( pam_acct_mgmt(pamh, 0) );
- DO( pam_get_item(pamh, PAM_USER, (const void**)&new_username) );
+ DO( pam_get_item(pamh, PAM_USER, (pam_get_item_3_arg) &new_username) );
if (new_username && strcmp(new_username, info->user_name))
strncpy(info->authenticated_as, new_username,