summaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2012-10-18 23:33:06 +0200
committerSergei Golubchik <sergii@pisem.net>2012-10-18 23:33:06 +0200
commit68baf07dcd985376fae9d24c12ee0ff560b61e8f (patch)
tree175f775e9847a50e7b51162573ae24f276abea96 /plugin
parentcbaf6e6b61241db6e97648c73dbeb0a15614a7aa (diff)
parent362c2bca3e170031d33622f27d978c9570d0a9f5 (diff)
downloadmariadb-git-68baf07dcd985376fae9d24c12ee0ff560b61e8f.tar.gz
5.3 merge
Diffstat (limited to 'plugin')
-rw-r--r--plugin/auth_pam/mapper/pam_user_map.c93
-rw-r--r--plugin/auth_pam/testing/pam_mariadb_mtr.c20
2 files changed, 98 insertions, 15 deletions
diff --git a/plugin/auth_pam/mapper/pam_user_map.c b/plugin/auth_pam/mapper/pam_user_map.c
new file mode 100644
index 00000000000..e73ab6de544
--- /dev/null
+++ b/plugin/auth_pam/mapper/pam_user_map.c
@@ -0,0 +1,93 @@
+/*
+ Pam module to change user names arbitrarily in the pam stack.
+
+ Compile as
+
+ gcc pam_user_map.c -shared -lpam -fPIC -o pam_user_map.so
+
+ Install as appropriate (for example, in /lib/security/).
+ Add to your /etc/pam.d/mysql (preferrably, at the end) this line:
+=========================================================
+auth required pam_user_map.so
+=========================================================
+
+ And create /etc/security/user_map.conf with the desired mapping
+ in the format: orig_user_name: mapped_user_name
+=========================================================
+#comments and emty lines are ignored
+john: jack
+bob: admin
+top: accounting
+=========================================================
+
+*/
+
+#include <stdio.h>
+#include <syslog.h>
+#include <security/pam_modules.h>
+
+#define FILENAME "/etc/security/user_map.conf"
+#define skip(what) while (*s && (what)) s++
+
+int pam_sm_authenticate(pam_handle_t *pamh, int flags,
+ int argc, const char *argv[])
+{
+ int pam_err, line= 0;
+ const char *username;
+ char buf[256];
+ FILE *f;
+
+ f= fopen(FILENAME, "r");
+ if (f == NULL)
+ {
+ pam_syslog(pamh, LOG_ERR, "Cannot open '%s'\n", FILENAME);
+ return PAM_SYSTEM_ERR;
+ }
+
+ pam_err = pam_get_item(pamh, PAM_USER, (const void**)&username);
+ if (pam_err != PAM_SUCCESS)
+ goto ret;
+
+ while (fgets(buf, sizeof(buf), f) != NULL)
+ {
+ char *s= buf, *from, *to, *end_from, *end_to;
+ line++;
+
+ skip(isspace(*s));
+ if (*s == '#' || *s == 0) continue;
+ from= s;
+ skip(isalnum(*s) || (*s == '_'));
+ end_from= s;
+ skip(isspace(*s));
+ if (end_from == from || *s++ != ':') goto syntax_error;
+ skip(isspace(*s));
+ to= s;
+ skip(isalnum(*s) || (*s == '_'));
+ end_to= s;
+ if (end_to == to) goto syntax_error;
+
+ *end_from= *end_to= 0;
+ if (strcmp(username, from) == 0)
+ {
+ pam_err= pam_set_item(pamh, PAM_USER, to);
+ goto ret;
+ }
+ }
+ pam_err= PAM_SUCCESS;
+ goto ret;
+
+syntax_error:
+ pam_syslog(pamh, LOG_ERR, "Syntax error at %s:%d", FILENAME, line);
+ pam_err= PAM_SYSTEM_ERR;
+ret:
+ fclose(f);
+ return pam_err;
+}
+
+int pam_sm_setcred(pam_handle_t *pamh, int flags,
+ int argc, const char *argv[])
+{
+
+ return PAM_SUCCESS;
+}
+
diff --git a/plugin/auth_pam/testing/pam_mariadb_mtr.c b/plugin/auth_pam/testing/pam_mariadb_mtr.c
index 8ad1e18e696..473ec246fe0 100644
--- a/plugin/auth_pam/testing/pam_mariadb_mtr.c
+++ b/plugin/auth_pam/testing/pam_mariadb_mtr.c
@@ -12,7 +12,7 @@
Create /etc/pam.d/mariadb_mtr with
=========================================================
auth required pam_mariadb_mtr.so pam_test
-account required pam_mariadb_mtr.so
+account required pam_permit.so
=========================================================
*/
@@ -23,9 +23,8 @@ account required pam_mariadb_mtr.so
#define N 3
-PAM_EXTERN int
-pam_sm_authenticate(pam_handle_t *pamh, int flags,
- int argc, const char *argv[])
+int pam_sm_authenticate(pam_handle_t *pamh, int flags,
+ int argc, const char *argv[])
{
struct pam_conv *conv;
struct pam_response *resp = 0;
@@ -71,17 +70,8 @@ ret:
return retval;
}
-PAM_EXTERN int
-pam_sm_setcred(pam_handle_t *pamh, int flags,
- int argc, const char *argv[])
-{
-
- return PAM_SUCCESS;
-}
-
-PAM_EXTERN int
-pam_sm_acct_mgmt(pam_handle_t *pamh, int flags,
- int argc, const char *argv[])
+int pam_sm_setcred(pam_handle_t *pamh, int flags,
+ int argc, const char *argv[])
{
return PAM_SUCCESS;