diff options
Diffstat (limited to 'source/pam_smbpass/pam_smb_passwd.c')
-rw-r--r-- | source/pam_smbpass/pam_smb_passwd.c | 38 |
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; } |