summaryrefslogtreecommitdiffstats
path: root/source/pam_smbpass/pam_smb_passwd.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/pam_smbpass/pam_smb_passwd.c')
-rw-r--r--source/pam_smbpass/pam_smb_passwd.c38
1 files changed, 18 insertions, 20 deletions
diff --git a/source/pam_smbpass/pam_smb_passwd.c b/source/pam_smbpass/pam_smb_passwd.c
index 91eae3c7a19..4cdf5c3e9b0 100644
--- a/source/pam_smbpass/pam_smb_passwd.c
+++ b/source/pam_smbpass/pam_smb_passwd.c
@@ -33,7 +33,7 @@
#include "support.h"
-int smb_update_db( pam_handle_t *pamh, int ctrl, const char *user, const char *pass_new )
+int smb_update_db( pam_handle_t *pamh, int ctrl, const char *user, char *pass_new )
{
int retval;
pstring err_str;
@@ -93,13 +93,12 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
SAM_ACCOUNT *sampass = NULL;
const char *user;
- char *pass_old;
- char *pass_new;
-
- NTSTATUS nt_status;
+ char *pass_old, *pass_new;
/* Samba initialization. */
setup_logging( "pam_smbpass", False );
+ charset_initialise();
+ codepage_initialise(lp_client_code_page());
in_client = True;
ctrl = set_ctrl(flags, argc, argv);
@@ -126,11 +125,10 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
}
/* obtain user record */
- if (!NT_STATUS_IS_OK(nt_status = pdb_init_sam(&sampass))) {
- return nt_status_to_pam(nt_status);
- }
+ pdb_init_sam(&sampass);
+ pdb_getsampwnam(sampass,user);
- if (!pdb_getsampwnam(sampass,user)) {
+ if (sampass == NULL) {
_log_err( LOG_ALERT, "Failed to find entry for user %s.", user );
return PAM_USER_UNKNOWN;
}
@@ -145,7 +143,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
if (_smb_blankpasswd( ctrl, sampass )) {
- pdb_free_sam(&sampass);
+ pdb_free_sam(sampass);
return PAM_SUCCESS;
}
@@ -158,7 +156,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
Announce = (char *) malloc(sizeof(greeting)+strlen(user));
if (Announce == NULL) {
_log_err(LOG_CRIT, "password: out of memory");
- pdb_free_sam(&sampass);
+ pdb_free_sam(sampass);
return PAM_BUF_ERR;
}
strncpy( Announce, greeting, sizeof(greeting) );
@@ -173,7 +171,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
if (retval != PAM_SUCCESS) {
_log_err( LOG_NOTICE
, "password - (old) token not obtained" );
- pdb_free_sam(&sampass);
+ pdb_free_sam(sampass);
return retval;
}
@@ -187,7 +185,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
}
pass_old = NULL;
- pdb_free_sam(&sampass);
+ pdb_free_sam(sampass);
return retval;
} else if (flags & PAM_UPDATE_AUTHTOK) {
@@ -197,7 +195,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
password synchronization when /other/ tokens are expired. For
now, we change the password whenever we're asked. SRL */
if (flags & PAM_CHANGE_EXPIRED_AUTHTOK) {
- pdb_free_sam(&sampass);
+ pdb_free_sam(sampass);
return PAM_SUCCESS;
}
#endif
@@ -225,7 +223,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
if (retval != PAM_SUCCESS) {
_log_err( LOG_NOTICE, "password: user not authenticated" );
- pdb_free_sam(&sampass);
+ pdb_free_sam(sampass);
return retval;
}
@@ -252,7 +250,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
, "password: new password not obtained" );
}
pass_old = NULL; /* tidy up */
- pdb_free_sam(&sampass);
+ pdb_free_sam(sampass);
return retval;
}
@@ -271,7 +269,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
if (retval != PAM_SUCCESS) {
_log_err(LOG_NOTICE, "new password not acceptable");
pass_new = pass_old = NULL; /* tidy up */
- pdb_free_sam(&sampass);
+ pdb_free_sam(sampass);
return retval;
}
@@ -295,7 +293,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
pass_old = pass_new = NULL;
if (sampass) {
- pdb_free_sam(&sampass);
+ pdb_free_sam(sampass);
sampass = NULL;
}
@@ -307,11 +305,11 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
}
if (sampass) {
- pdb_free_sam(&sampass);
+ pdb_free_sam(sampass);
sampass = NULL;
}
- pdb_free_sam(&sampass);
+ pdb_free_sam(sampass);
return retval;
}