mirror of
https://github.com/samba-team/samba.git
synced 2025-12-24 04:23:53 +03:00
cleanup some of the code in net_rpc_join re const warnings and fstrings. Passdb: Make the %u and %U substituions in passdb work. This is done by declaring these paramters to be 'const' and doing the substitution manually. I'm told this is us going full circle, but I can't really see a better way. Finally these things actually seem to work properly... Make the lanman code use the pdb's recorded values for homedir etc rather than the values from lp_*() Add code to set the plaintext password in the passdb, where it can decide how to store/set it. For use with a future 'ldap password change' option, or somthing like that... Add pdb_unix, so as to remove the 'not in passdb' special cases from the local_lookup_*() code. Quite small, as it uses the new 'struct passwd -> SAM_ACCOUNT' code that is now in just one place. (also used by pdb_smbpasswd) Other: Fix up the adding of [homes] at session setup time to actually pass the right string, that is the unix homedir, not the UNC path. Fix up [homes] so that for winbind users is picks the correct name. (bad interactions with the default domain code previously) Change the rpc_server/srv_lsa_nt.c code to match NT when for the SATUS_NONE_MAPPED reply: This was only being triggered on no queries, now it is on the 'no mappings' (ie all mappings failed). Checked against Win2k. Policy Question: Should SID -> unix_user.234/unix_group.364 be considered a mapping or not? Currently it isn't. Andrew Bartlett
-
127 lines
3.8 KiB
C
127 lines
3.8 KiB
C
/*
|
|
* Unix password backend for samba
|
|
* Copyright (C) Jelmer Vernooij 2002
|
|
*
|
|
* 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"
|
|
|
|
/******************************************************************
|
|
Lookup a name in the SAM database
|
|
******************************************************************/
|
|
|
|
static BOOL unixsam_getsampwnam (struct pdb_methods *methods, SAM_ACCOUNT *user, const char *sname)
|
|
{
|
|
struct passwd *pass;
|
|
if (!methods) {
|
|
DEBUG(0,("invalid methods\n"));
|
|
return False;
|
|
}
|
|
if (!sname) {
|
|
DEBUG(0,("invalid name specified"));
|
|
return False;
|
|
}
|
|
pass = Get_Pwnam(sname);
|
|
|
|
return NT_STATUS_IS_OK(pdb_fill_sam_pw(user, pass));
|
|
}
|
|
|
|
|
|
/***************************************************************************
|
|
Search by rid
|
|
**************************************************************************/
|
|
|
|
static BOOL unixsam_getsampwrid (struct pdb_methods *methods,
|
|
SAM_ACCOUNT *user, uint32 rid)
|
|
{
|
|
struct passwd *pass;
|
|
BOOL ret = False;
|
|
if (!methods) {
|
|
DEBUG(0,("invalid methods\n"));
|
|
return False;
|
|
}
|
|
|
|
if (pdb_rid_is_user(rid)) {
|
|
pass = getpwuid_alloc(fallback_pdb_user_rid_to_uid (rid));
|
|
|
|
if (pass) {
|
|
ret = NT_STATUS_IS_OK(pdb_fill_sam_pw(user, pass));
|
|
passwd_free(&pass);
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/***************************************************************************
|
|
Delete a SAM_ACCOUNT
|
|
****************************************************************************/
|
|
|
|
static BOOL unixsam_delete_sam_account(struct pdb_methods *methods, const SAM_ACCOUNT *sam_pass)
|
|
{
|
|
/*
|
|
* Unsupported as well - we don't need to get involved in
|
|
* unix passdb's - and hey, we would need to use pam for that anyway
|
|
*/
|
|
return False;
|
|
}
|
|
|
|
/***************************************************************************
|
|
Modifies an existing SAM_ACCOUNT
|
|
****************************************************************************/
|
|
|
|
static BOOL unixsam_update_sam_account (struct pdb_methods *methods, const SAM_ACCOUNT *newpwd)
|
|
{
|
|
return False;
|
|
}
|
|
|
|
/***************************************************************************
|
|
Adds an existing SAM_ACCOUNT
|
|
****************************************************************************/
|
|
|
|
static BOOL unixsam_add_sam_account (struct pdb_methods *methods, const SAM_ACCOUNT *newpwd)
|
|
{
|
|
DEBUG(0,("pdb_unix should not be listed as the first passdb backend! You can't add users to it.\n"));
|
|
return False;
|
|
}
|
|
|
|
NTSTATUS pdb_init_unixsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
|
|
{
|
|
NTSTATUS nt_status;
|
|
|
|
if (!pdb_context) {
|
|
DEBUG(0, ("invalid pdb_context specified\n"));
|
|
return NT_STATUS_UNSUCCESSFUL;
|
|
}
|
|
|
|
if (!NT_STATUS_IS_OK(nt_status = make_pdb_methods(pdb_context->mem_ctx, pdb_method))) {
|
|
return nt_status;
|
|
}
|
|
|
|
(*pdb_method)->name = "unixsam";
|
|
|
|
(*pdb_method)->setsampwent = NULL;
|
|
(*pdb_method)->endsampwent = NULL;
|
|
(*pdb_method)->getsampwent = NULL;
|
|
(*pdb_method)->getsampwnam = unixsam_getsampwnam;
|
|
(*pdb_method)->getsampwrid = unixsam_getsampwrid;
|
|
(*pdb_method)->add_sam_account = unixsam_add_sam_account;
|
|
(*pdb_method)->update_sam_account = unixsam_update_sam_account;
|
|
(*pdb_method)->delete_sam_account = unixsam_delete_sam_account;
|
|
|
|
/* There's not very much to initialise here */
|
|
return NT_STATUS_OK;
|
|
}
|