2001-08-12 15:19:57 +04:00
/*
Unix SMB / Netbios implementation .
Version 2.2
Password and authentication handling
Copyright ( C ) Andrew Bartlett 2001
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# include "includes.h"
extern int DEBUGLEVEL ;
/****************************************************************************
update the encrypted smbpasswd file from the plaintext username and password
this ugly hack needs to die , but not quite yet . . .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static BOOL update_smbpassword_file ( char * user , char * password )
{
SAM_ACCOUNT * sampass = NULL ;
BOOL ret ;
pdb_init_sam ( & sampass ) ;
become_root ( ) ;
ret = pdb_getsampwnam ( sampass , user ) ;
unbecome_root ( ) ;
if ( ret = = False ) {
DEBUG ( 0 , ( " pdb_getsampwnam returned NULL \n " ) ) ;
pdb_free_sam ( sampass ) ;
return False ;
}
/*
* Remove the account disabled flag - we are updating the
* users password from a login .
*/
pdb_set_acct_ctrl ( sampass , pdb_get_acct_ctrl ( sampass ) & ~ ACB_DISABLED ) ;
/* Here, the flag is one, because we want to ignore the
XXXXXXX ' d out password */
ret = change_oem_password ( sampass , password , True ) ;
if ( ret = = False ) {
DEBUG ( 3 , ( " change_oem_password returned False \n " ) ) ;
}
pdb_free_sam ( sampass ) ;
return ret ;
}
/****************************************************************************
check if a username / password is OK assuming the password
in PLAIN TEXT
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-09-04 11:13:01 +04:00
NTSTATUS check_unix_security ( const auth_usersupplied_info * user_info , auth_serversupplied_info * server_info )
2001-08-12 15:19:57 +04:00
{
2001-09-04 11:13:01 +04:00
NTSTATUS nt_status ;
2001-09-19 09:26:11 +04:00
struct passwd * pass = NULL ;
2001-08-12 15:19:57 +04:00
become_root ( ) ;
2001-09-19 09:26:11 +04:00
pass = Get_Pwnam ( user_info - > unix_username . str , False ) ;
nt_status = ( pass_check ( pass ,
2001-09-20 07:31:57 +04:00
pass ? pass - > pw_name : user_info - > unix_username . str ,
2001-09-19 09:26:11 +04:00
user_info - > plaintext_password . str ,
2001-08-12 15:19:57 +04:00
user_info - > plaintext_password . len ,
2001-09-12 10:39:50 +04:00
lp_update_encrypted ( ) ?
2001-09-19 09:26:11 +04:00
update_smbpassword_file : NULL ,
True )
2001-08-27 23:46:22 +04:00
? NT_STATUS_OK : NT_STATUS_LOGON_FAILURE ) ;
2001-08-12 15:19:57 +04:00
unbecome_root ( ) ;
return nt_status ;
}