mirror of
https://github.com/samba-team/samba.git
synced 2025-12-12 12:23:50 +03:00
200 lines
5.7 KiB
C
200 lines
5.7 KiB
C
/*
|
|
* Unix SMB/Netbios implementation. Version 1.9. SMB parameters and setup
|
|
* Copyright (C) Andrew Tridgell 1992-1998 Modified by Jeremy Allison 1995.
|
|
*
|
|
* 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 02139, USA.
|
|
*/
|
|
|
|
#include "includes.h"
|
|
|
|
#ifdef USE_SMBPASS_DB
|
|
|
|
extern int DEBUGLEVEL;
|
|
extern pstring samlogon_user;
|
|
extern BOOL sam_logon_in_ssb;
|
|
|
|
extern DOM_SID global_sam_sid;
|
|
|
|
/***************************************************************
|
|
Start to enumerate the smbpasswd list. Returns a void pointer
|
|
to ensure no modification outside this module.
|
|
****************************************************************/
|
|
|
|
void *startsamfilepwent(BOOL update)
|
|
{
|
|
return startsmbpwent(update);
|
|
}
|
|
|
|
/***************************************************************
|
|
End enumeration of the smbpasswd list.
|
|
****************************************************************/
|
|
|
|
void endsamfilepwent(void *vp)
|
|
{
|
|
endsmbpwent(vp);
|
|
}
|
|
|
|
/*************************************************************************
|
|
Return the current position in the smbpasswd list as an SMB_BIG_UINT.
|
|
This must be treated as an opaque token.
|
|
*************************************************************************/
|
|
|
|
SMB_BIG_UINT getsamfilepwpos(void *vp)
|
|
{
|
|
return getsmbpwpos(vp);
|
|
}
|
|
|
|
/*************************************************************************
|
|
Set the current position in the smbpasswd list from an SMB_BIG_UINT.
|
|
This must be treated as an opaque token.
|
|
*************************************************************************/
|
|
|
|
BOOL setsamfilepwpos(void *vp, SMB_BIG_UINT tok)
|
|
{
|
|
return setsmbpwpos(vp, tok);
|
|
}
|
|
|
|
/*************************************************************************
|
|
Routine to return the next entry in the smbpasswd list.
|
|
this function is a nice, messy combination of reading:
|
|
- the smbpasswd file
|
|
- the unix password database
|
|
- smb.conf options (not done at present).
|
|
*************************************************************************/
|
|
|
|
static struct sam_passwd *getsamfile21pwent(void *vp)
|
|
{
|
|
struct sam_passwd *user;
|
|
|
|
static pstring full_name;
|
|
static pstring home_dir;
|
|
static pstring home_drive;
|
|
static pstring logon_script;
|
|
static pstring profile_path;
|
|
static pstring acct_desc;
|
|
static pstring workstations;
|
|
|
|
DEBUG(5,("getsamfile21pwent\n"));
|
|
|
|
user = pwdb_smb_to_sam(getsmbpwent(vp));
|
|
if (user == NULL)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* get all the other gubbins we need. substitute unix name for %U
|
|
* as putting the nt name in is a bit meaningless.
|
|
*/
|
|
|
|
pstrcpy(samlogon_user, user->unix_name);
|
|
|
|
if (samlogon_user[strlen(samlogon_user)-1] == '$' &&
|
|
user->group_rid != DOMAIN_GROUP_RID_USERS)
|
|
{
|
|
DEBUG(0,("trust account %s should be in DOMAIN_GROUP_RID_USERS\n",
|
|
samlogon_user));
|
|
}
|
|
|
|
/* XXXX hack to get standard_sub_basic() to use sam logon username */
|
|
/* possibly a better way would be to do a become_user() call */
|
|
sam_logon_in_ssb = True;
|
|
|
|
pstrcpy(full_name , "");
|
|
pstrcpy(logon_script , lp_logon_script ());
|
|
pstrcpy(profile_path , lp_logon_path ());
|
|
pstrcpy(home_drive , lp_logon_drive ());
|
|
pstrcpy(home_dir , lp_logon_home ());
|
|
pstrcpy(acct_desc , "");
|
|
pstrcpy(workstations , "");
|
|
|
|
sam_logon_in_ssb = False;
|
|
|
|
user->full_name = full_name;
|
|
user->home_dir = home_dir;
|
|
user->dir_drive = home_drive;
|
|
user->logon_script = logon_script;
|
|
user->profile_path = profile_path;
|
|
user->acct_desc = acct_desc;
|
|
user->workstations = workstations;
|
|
|
|
user->unknown_str = NULL; /* don't know, yet! */
|
|
user->munged_dial = NULL; /* "munged" dial-back telephone number */
|
|
|
|
user->unknown_3 = 0xffffff; /* don't know */
|
|
user->logon_divs = 168; /* hours per week */
|
|
user->hours_len = 21; /* 21 times 8 bits = 168 */
|
|
memset(user->hours, 0xff, user->hours_len); /* available at all hours */
|
|
user->unknown_5 = 0x00020000; /* don't know */
|
|
user->unknown_6 = 0x000004ec; /* don't know */
|
|
|
|
return user;
|
|
}
|
|
|
|
/*
|
|
* Stub functions - implemented in terms of others.
|
|
*/
|
|
|
|
static BOOL mod_samfile21pwd_entry(struct sam_passwd* pwd, BOOL override)
|
|
{
|
|
return mod_smbpwd_entry(pwdb_sam_to_smb(pwd), override);
|
|
}
|
|
|
|
static BOOL add_samfile21pwd_entry(struct sam_passwd *newpwd)
|
|
{
|
|
return add_smbpwd_entry(pwdb_sam_to_smb(newpwd));
|
|
}
|
|
|
|
static struct sam_disp_info *getsamfiledispntnam(const char *ntname)
|
|
{
|
|
return pwdb_sam_to_dispinfo(getsam21pwntnam(ntname));
|
|
}
|
|
|
|
static struct sam_disp_info *getsamfiledisprid(uint32 rid)
|
|
{
|
|
return pwdb_sam_to_dispinfo(getsam21pwrid(rid));
|
|
}
|
|
|
|
static struct sam_disp_info *getsamfiledispent(void *vp)
|
|
{
|
|
return pwdb_sam_to_dispinfo(getsam21pwent(vp));
|
|
}
|
|
|
|
static struct sam_passdb_ops file_ops = {
|
|
startsamfilepwent,
|
|
endsamfilepwent,
|
|
getsamfilepwpos,
|
|
setsamfilepwpos,
|
|
iterate_getsam21pwntnam,
|
|
iterate_getsam21pwuid,
|
|
iterate_getsam21pwrid,
|
|
getsamfile21pwent,
|
|
add_samfile21pwd_entry,
|
|
mod_samfile21pwd_entry,
|
|
getsamfiledispntnam,
|
|
getsamfiledisprid,
|
|
getsamfiledispent
|
|
};
|
|
|
|
struct sam_passdb_ops *file_initialise_sam_password_db(void)
|
|
{
|
|
return &file_ops;
|
|
}
|
|
|
|
#else
|
|
/* Do *NOT* make this function static. It breaks the compile on gcc. JRA */
|
|
void sampass_dummy_function(void) { } /* stop some compilers complaining */
|
|
#endif /* USE_SMBPASS_DB */
|