summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2009-10-08 15:16:25 +0200
committerKarolin Seeger <kseeger@samba.org>2009-10-08 15:24:29 +0200
commit410d1ca0d90f1296351315ff4f09ebae38998b9b (patch)
tree63f7fdf4b1648360c30bf16cea4d4cb88d90e49b
parent2dcc87e48c1df6e83a001b8cbadf6c53293b491c (diff)
downloadsamba-410d1ca0d90f1296351315ff4f09ebae38998b9b.tar.gz
samba-410d1ca0d90f1296351315ff4f09ebae38998b9b.tar.xz
samba-410d1ca0d90f1296351315ff4f09ebae38998b9b.zip
s3-pamsmbpass: copy _pam_get_item and _pam_get_data from pam_winbind.
Fix bug #6790. Guenther (cherry picked from commit baa2c10b11a960dd70b3d32b4868a303d85ca9b2)
-rw-r--r--source/pam_smbpass/pam_smb_auth.c4
-rw-r--r--source/pam_smbpass/pam_smb_passwd.c8
-rw-r--r--source/pam_smbpass/support.c38
-rw-r--r--source/pam_smbpass/support.h7
-rw-r--r--source/utils/net_rpc.c6
5 files changed, 45 insertions, 18 deletions
diff --git a/source/pam_smbpass/pam_smb_auth.c b/source/pam_smbpass/pam_smb_auth.c
index 3dceb52c7db..b5a6a473b6a 100644
--- a/source/pam_smbpass/pam_smb_auth.c
+++ b/source/pam_smbpass/pam_smb_auth.c
@@ -179,7 +179,7 @@ int pam_sm_setcred(pam_handle_t *pamh, int flags,
retval = PAM_SUCCESS;
- pam_get_data(pamh, "smb_setcred_return", (const void **) &pretval);
+ _pam_get_data(pamh, "smb_setcred_return", &pretval);
if(pretval) {
retval = *pretval;
SAFE_FREE(pretval);
@@ -199,7 +199,7 @@ static int _smb_add_user(pam_handle_t *pamh, unsigned int ctrl,
int retval;
/* Get the authtok; if we don't have one, silently fail. */
- retval = pam_get_item( pamh, PAM_AUTHTOK, (const void **) &pass );
+ retval = _pam_get_item( pamh, PAM_AUTHTOK, &pass );
if (retval != PAM_SUCCESS) {
_log_err( LOG_ALERT
diff --git a/source/pam_smbpass/pam_smb_passwd.c b/source/pam_smbpass/pam_smb_passwd.c
index b6de43ff975..dce6e01ae93 100644
--- a/source/pam_smbpass/pam_smb_passwd.c
+++ b/source/pam_smbpass/pam_smb_passwd.c
@@ -229,11 +229,11 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
*/
if (off( SMB_NOT_SET_PASS, ctrl )) {
- retval = pam_get_item( pamh, PAM_OLDAUTHTOK,
- (const void **)&pass_old );
+ retval = _pam_get_item( pamh, PAM_OLDAUTHTOK,
+ &pass_old );
} else {
- retval = pam_get_data( pamh, _SMB_OLD_AUTHTOK,
- (const void **)&pass_old );
+ retval = _pam_get_data( pamh, _SMB_OLD_AUTHTOK,
+ &pass_old );
if (retval == PAM_NO_MODULE_DATA) {
pass_old = NULL;
retval = PAM_SUCCESS;
diff --git a/source/pam_smbpass/support.c b/source/pam_smbpass/support.c
index 8f537c4d8da..7dcdabac223 100644
--- a/source/pam_smbpass/support.c
+++ b/source/pam_smbpass/support.c
@@ -83,7 +83,7 @@ int converse( pam_handle_t * pamh, int ctrl, int nargs
int retval;
struct pam_conv *conv;
- retval = pam_get_item(pamh, PAM_CONV, (const void **) &conv);
+ retval = _pam_get_item(pamh, PAM_CONV, &conv);
if (retval == PAM_SUCCESS) {
retval = conv->conv(nargs, (const struct pam_message **) message
@@ -276,7 +276,7 @@ void _cleanup_failures( pam_handle_t * pamh, void *fl, int err )
/* log the number of authentication failures */
if (failure->count != 0) {
- pam_get_item( pamh, PAM_SERVICE, (const void **) &service );
+ _pam_get_item( pamh, PAM_SERVICE, &service );
_log_err( LOG_NOTICE
, "%d authentication %s "
"from %s for service %s as %s(%d)"
@@ -332,7 +332,7 @@ int _smb_verify_password( pam_handle_t * pamh, struct samu *sampass,
} else {
const char *service;
- pam_get_item( pamh, PAM_SERVICE, (const void **)&service );
+ _pam_get_item( pamh, PAM_SERVICE, &service );
_log_err( LOG_NOTICE, "failed auth request by %s for service %s as %s",
uidtoname(getuid()), service ? service : "**unknown**", name);
return PAM_AUTH_ERR;
@@ -367,7 +367,7 @@ int _smb_verify_password( pam_handle_t * pamh, struct samu *sampass,
const char *service;
- pam_get_item( pamh, PAM_SERVICE, (const void **)&service );
+ _pam_get_item( pamh, PAM_SERVICE, &service );
if (data_name != NULL) {
struct _pam_failed_auth *newauth = NULL;
@@ -380,7 +380,7 @@ int _smb_verify_password( pam_handle_t * pamh, struct samu *sampass,
if (newauth != NULL) {
/* any previous failures for this user ? */
- pam_get_data(pamh, data_name, (const void **) &old);
+ _pam_get_data(pamh, data_name, &old);
if (old != NULL) {
newauth->count = old->count + 1;
@@ -485,7 +485,7 @@ int _smb_read_password( pam_handle_t * pamh, unsigned int ctrl,
/* should we obtain the password from a PAM item ? */
if (on(SMB_TRY_FIRST_PASS, ctrl) || on(SMB_USE_FIRST_PASS, ctrl)) {
- retval = pam_get_item( pamh, authtok_flag, (const void **) &item );
+ retval = _pam_get_item( pamh, authtok_flag, &item );
if (retval != PAM_SUCCESS) {
/* very strange. */
_log_err( LOG_ALERT
@@ -578,8 +578,8 @@ int _smb_read_password( pam_handle_t * pamh, unsigned int ctrl,
retval = pam_set_item( pamh, authtok_flag, (const void *)token );
_pam_delete( token ); /* clean it up */
if (retval != PAM_SUCCESS
- || (retval = pam_get_item( pamh, authtok_flag
- ,(const void **)&item )) != PAM_SUCCESS)
+ || (retval = _pam_get_item( pamh, authtok_flag
+ ,&item )) != PAM_SUCCESS)
{
_log_err( LOG_CRIT, "error manipulating password" );
return retval;
@@ -592,7 +592,7 @@ int _smb_read_password( pam_handle_t * pamh, unsigned int ctrl,
retval = pam_set_data( pamh, data_name, (void *) token, _cleanup );
if (retval != PAM_SUCCESS
- || (retval = pam_get_data( pamh, data_name, (const void **)&item ))
+ || (retval = _pam_get_data( pamh, data_name, &item ))
!= PAM_SUCCESS)
{
_log_err( LOG_CRIT, "error manipulating password data [%s]"
@@ -630,3 +630,23 @@ int _pam_smb_approve_pass(pam_handle_t * pamh,
return PAM_SUCCESS;
}
+
+/*
+ * Work around the pam API that has functions with void ** as parameters
+ * These lead to strict aliasing warnings with gcc.
+ */
+int _pam_get_item(const pam_handle_t *pamh,
+ int item_type,
+ const void *_item)
+{
+ const void **item = (const void **)_item;
+ return pam_get_item(pamh, item_type, item);
+}
+
+int _pam_get_data(const pam_handle_t *pamh,
+ const char *module_data_name,
+ const void *_data)
+{
+ const void **data = (const void **)_data;
+ return pam_get_data(pamh, module_data_name, data);
+}
diff --git a/source/pam_smbpass/support.h b/source/pam_smbpass/support.h
index 5ac48c3afa0..87f1690a608 100644
--- a/source/pam_smbpass/support.h
+++ b/source/pam_smbpass/support.h
@@ -48,3 +48,10 @@ extern int _smb_read_password( pam_handle_t *, unsigned int, const char*,
extern int _pam_smb_approve_pass(pam_handle_t *, unsigned int, const char *,
const char *);
+
+int _pam_get_item(const pam_handle_t *pamh,
+ int item_type,
+ const void *_item);
+int _pam_get_data(const pam_handle_t *pamh,
+ const char *module_data_name,
+ const void *_data);
diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c
index 60de1cb8a8d..d90aac1af29 100644
--- a/source/utils/net_rpc.c
+++ b/source/utils/net_rpc.c
@@ -798,7 +798,7 @@ static int rpc_user_info(struct net_context *c, int argc, const char **argv)
status = NetUserGetGroups(c->opt_host,
argv[0],
0,
- (uint8_t **)&u0,
+ (uint8_t **)(void *)&u0,
(uint32_t)-1,
&entries_read,
&total_entries);
@@ -2998,7 +2998,7 @@ static int rpc_share_list(struct net_context *c, int argc, const char **argv)
status = NetShareEnum(c->opt_host,
level,
- (uint8_t **)&i1,
+ (uint8_t **)(void *)&i1,
(uint32_t)-1,
&entries_read,
&total_entries,
@@ -4774,7 +4774,7 @@ static int rpc_file_user(struct net_context *c, int argc, const char **argv)
NULL,
username,
3,
- (uint8_t **)&i3,
+ (uint8_t **)(void *)&i3,
preferred_len,
&entries_read,
&total_entries,