[SCM] Samba Shared Repository - branch master updated -
release-4-0-0alpha6-313-g50ca5af
Volker Lendecke
vlendec at samba.org
Sun Feb 1 13:35:04 GMT 2009
The branch, master has been updated
via 50ca5af9f38b46fb3c7dea5b50997d3bd1c7e46f (commit)
via 7967d8c779935df17363dd1cd3bea25d6e1b8479 (commit)
via 53394980ad7dc09af4412a6c4ee75241798b0e7c (commit)
via 3cd8c121dc27739a9a70bf47e32dcd19e35ddf14 (commit)
via 57de60a83f3f88566d356547eb20a6f0569f76ec (commit)
via dba6624dca024d144b0adb1016d17d176d38b735 (commit)
via 19ce90b90e0024aa1d2453fcdc52828f6bee2f33 (commit)
from 16f072809cf0e8542b776988d3fe1a0db055a74b (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 50ca5af9f38b46fb3c7dea5b50997d3bd1c7e46f
Author: Volker Lendecke <vl at samba.org>
Date: Sat Jan 31 17:58:30 2009 +0100
Convert api_RNetUserEnum to use the srv_samr_nt.c directly
This is a sample for other accesses to pdb to go via samr. The goal is to
access passdb only via srv_samr_nt.c. If that is done, then we can easily swap
in another samr implementation like for example samba4's via a unix domain
socket.
commit 7967d8c779935df17363dd1cd3bea25d6e1b8479
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 1 13:01:54 2009 +0100
Move rpc_pipe_open_internal to srv_pipe_hnd.c
This is a smbd-only function
commit 53394980ad7dc09af4412a6c4ee75241798b0e7c
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 1 12:03:31 2009 +0100
Replace pipe names in pipes_struct by ndr_syntax_id
This was mainly used for debugging output
commit 3cd8c121dc27739a9a70bf47e32dcd19e35ddf14
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 1 00:31:16 2009 +0100
Fix some type-punned warnings
commit 57de60a83f3f88566d356547eb20a6f0569f76ec
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 1 00:30:04 2009 +0100
cli_get_pipe_name_from_interface does not really need a talloc_ctx
commit dba6624dca024d144b0adb1016d17d176d38b735
Author: Volker Lendecke <vl at samba.org>
Date: Sat Jan 31 16:57:46 2009 +0100
Fix nonempty blank lines
commit 19ce90b90e0024aa1d2453fcdc52828f6bee2f33
Author: Volker Lendecke <vl at samba.org>
Date: Sat Jan 31 16:47:15 2009 +0100
Just for fun: Move some bytes from bss to text
-----------------------------------------------------------------------
Summary of changes:
source3/include/ntdomain.h | 3 +-
source3/include/proto.h | 8 +-
source3/lib/netapi/cm.c | 2 +-
source3/passdb/passdb.c | 121 +++++++++---------
source3/rpc_client/cli_pipe.c | 67 +++-------
source3/rpc_client/rpc_transport_np.c | 13 +--
source3/rpc_server/srv_lsa_hnd.c | 22 ++--
source3/rpc_server/srv_pipe.c | 81 ++++++++-----
source3/rpc_server/srv_pipe_hnd.c | 115 +++++++++++++-----
source3/rpcclient/rpcclient.c | 9 +-
source3/smbd/lanman.c | 218 ++++++++++++++++++++-------------
source3/smbd/mangle_hash.c | 2 +-
source3/smbd/mangle_hash2.c | 2 +-
source3/utils/net_rpc.c | 9 +-
14 files changed, 381 insertions(+), 291 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/include/ntdomain.h b/source3/include/ntdomain.h
index 3f50155..2d6a358 100644
--- a/source3/include/ntdomain.h
+++ b/source3/include/ntdomain.h
@@ -214,8 +214,7 @@ typedef struct pipes_struct {
struct auth_serversupplied_info *server_info;
- fstring name;
- fstring pipe_srv_name;
+ struct ndr_syntax_id syntax;
/* linked list of rpc dispatch tables associated
with the open rpc contexts */
diff --git a/source3/include/proto.h b/source3/include/proto.h
index fd55669..c97adaa 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -5852,8 +5852,7 @@ bool prs_data_blob(prs_struct *prs, DATA_BLOB *blob, TALLOC_CTX *mem_ctx);
/* The following definitions come from rpc_parse/parse_rpc.c */
-const char *cli_get_pipe_name_from_iface(TALLOC_CTX *mem_ctx,
- const struct ndr_syntax_id *interface);
+const char *get_pipe_name_from_iface(const struct ndr_syntax_id *interface);
void init_rpc_hdr(RPC_HDR *hdr, enum RPC_PKT_TYPE pkt_type, uint8 flags,
uint32 call_id, int data_len, int auth_len);
bool smb_io_rpc_hdr(const char *desc, RPC_HDR *rpc, prs_struct *ps, int depth);
@@ -6272,7 +6271,8 @@ NTSTATUS _eventlog_read_eventlog( pipes_struct * p,
/* The following definitions come from rpc_server/srv_lsa_hnd.c */
-bool init_pipe_handle_list(pipes_struct *p, const char *pipe_name);
+bool init_pipe_handle_list(pipes_struct *p,
+ const struct ndr_syntax_id *syntax);
bool create_policy_hnd(pipes_struct *p, POLICY_HND *hnd, void *data_ptr);
bool find_policy_by_hnd(pipes_struct *p, POLICY_HND *hnd, void **data_p);
bool close_policy_hnd(pipes_struct *p, POLICY_HND *hnd);
@@ -6295,7 +6295,7 @@ NTSTATUS rpc_srv_register(int version, const char *clnt,
const char *srv,
const struct ndr_interface_table *iface,
const struct api_struct *cmds, int size);
-bool is_known_pipename(const char *cli_filename);
+bool is_known_pipename(const char *cli_filename, struct ndr_syntax_id *syntax);
bool api_pipe_bind_req(pipes_struct *p, prs_struct *rpc_in_p);
bool api_pipe_alter_context(pipes_struct *p, prs_struct *rpc_in_p);
bool api_pipe_ntlmssp_auth_process(pipes_struct *p, prs_struct *rpc_in,
diff --git a/source3/lib/netapi/cm.c b/source3/lib/netapi/cm.c
index d5ef09d..233255f 100644
--- a/source3/lib/netapi/cm.c
+++ b/source3/lib/netapi/cm.c
@@ -184,7 +184,7 @@ WERROR libnetapi_open_pipe(struct libnetapi_ctx *ctx,
status = pipe_cm_open(ctx, cli, interface, &result);
if (!NT_STATUS_IS_OK(status)) {
libnetapi_set_error_string(ctx, "failed to open PIPE %s: %s",
- cli_get_pipe_name_from_iface(debug_ctx(), interface),
+ get_pipe_name_from_iface(interface),
get_friendly_nt_error_msg(status));
return WERR_DEST_NOT_FOUND;
}
diff --git a/source3/passdb/passdb.c b/source3/passdb/passdb.c
index e677d42..d26a667 100644
--- a/source3/passdb/passdb.c
+++ b/source3/passdb/passdb.c
@@ -7,17 +7,17 @@
Copyright (C) Andrew Bartlett 2001-2002
Copyright (C) Simo Sorce 2003
Copyright (C) Volker Lendecke 2006
-
+
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 3 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, see <http://www.gnu.org/licenses/>.
*/
@@ -67,16 +67,16 @@ static int samu_destroy(struct samu *user)
struct samu *samu_new( TALLOC_CTX *ctx )
{
struct samu *user;
-
+
if ( !(user = TALLOC_ZERO_P( ctx, struct samu )) ) {
DEBUG(0,("samuser_new: Talloc failed!\n"));
return NULL;
}
-
+
talloc_set_destructor( user, samu_destroy );
-
+
/* no initial methods */
-
+
user->methods = NULL;
/* Don't change these timestamp settings without a good reason.
@@ -98,7 +98,7 @@ struct samu *samu_new( TALLOC_CTX *ctx )
/* Some parts of samba strlen their pdb_get...() returns,
so this keeps the interface unchanged for now. */
-
+
user->username = "";
user->domain = "";
user->nt_username = "";
@@ -118,8 +118,7 @@ struct samu *samu_new( TALLOC_CTX *ctx )
asks for a filtered list of users. */
user->acct_ctrl = ACB_NORMAL;
-
-
+
return user;
}
@@ -140,7 +139,7 @@ static NTSTATUS samu_set_unix_internal(struct samu *user, const struct passwd *p
}
/* Basic properties based upon the Unix account information */
-
+
pdb_set_username(user, pwd->pw_name, PDB_SET);
pdb_set_fullname(user, pwd->pw_gecos, PDB_SET);
pdb_set_domain (user, get_global_sam_name(), PDB_DEFAULT);
@@ -149,29 +148,29 @@ static NTSTATUS samu_set_unix_internal(struct samu *user, const struct passwd *p
will be rejected by other parts of the Samba code.
Rely on pdb_get_group_sid() to "Do The Right Thing" (TM)
--jerry */
-
+
gid_to_sid(&group_sid, pwd->pw_gid);
pdb_set_group_sid(user, &group_sid, PDB_SET);
#endif
-
+
/* save the password structure for later use */
-
+
user->unix_pw = tcopy_passwd( user, pwd );
/* Special case for the guest account which must have a RID of 501 */
-
+
if ( strequal( pwd->pw_name, guest_account ) ) {
if ( !pdb_set_user_sid_from_rid(user, DOMAIN_USER_RID_GUEST, PDB_DEFAULT)) {
return NT_STATUS_NO_SUCH_USER;
}
return NT_STATUS_OK;
}
-
+
/* Non-guest accounts...Check for a workstation or user account */
if (pwd->pw_name[strlen(pwd->pw_name)-1] == '$') {
/* workstation */
-
+
if (!pdb_set_acct_ctrl(user, ACB_WSTRUST, PDB_DEFAULT)) {
DEBUG(1, ("Failed to set 'workstation account' flags for user %s.\n",
pwd->pw_name));
@@ -180,15 +179,15 @@ static NTSTATUS samu_set_unix_internal(struct samu *user, const struct passwd *p
}
else {
/* user */
-
+
if (!pdb_set_acct_ctrl(user, ACB_NORMAL, PDB_DEFAULT)) {
DEBUG(1, ("Failed to set 'normal account' flags for user %s.\n",
pwd->pw_name));
return NT_STATUS_INVALID_ACCOUNT_NAME;
}
-
+
/* set some basic attributes */
-
+
pdb_set_profile_path(user, talloc_sub_specified(user,
lp_logon_path(), pwd->pw_name, domain, pwd->pw_uid, pwd->pw_gid),
PDB_DEFAULT);
@@ -202,7 +201,7 @@ static NTSTATUS samu_set_unix_internal(struct samu *user, const struct passwd *p
lp_logon_script(), pwd->pw_name, domain, pwd->pw_uid, pwd->pw_gid),
PDB_DEFAULT);
}
-
+
/* Now deal with the user SID. If we have a backend that can generate
RIDs, then do so. But sometimes the caller just wanted a structure
initialized and will fill in these fields later (such as from a
@@ -211,7 +210,7 @@ static NTSTATUS samu_set_unix_internal(struct samu *user, const struct passwd *p
if ( create && !pdb_rid_algorithm() ) {
uint32 user_rid;
DOM_SID user_sid;
-
+
if ( !pdb_new_rid( &user_rid ) ) {
DEBUG(3, ("Could not allocate a new RID\n"));
return NT_STATUS_ACCESS_DENIED;
@@ -224,18 +223,18 @@ static NTSTATUS samu_set_unix_internal(struct samu *user, const struct passwd *p
DEBUG(3, ("pdb_set_user_sid failed\n"));
return NT_STATUS_INTERNAL_ERROR;
}
-
+
return NT_STATUS_OK;
}
/* generate a SID for the user with the RID algorithm */
-
+
urid = algorithmic_pdb_uid_to_user_rid( user->unix_pw->pw_uid );
-
+
if ( !pdb_set_user_sid_from_rid( user, urid, PDB_SET) ) {
return NT_STATUS_INTERNAL_ERROR;
}
-
+
return NT_STATUS_OK;
}
@@ -365,10 +364,10 @@ bool pdb_gethexpwd(const char *p, unsigned char *pwd)
unsigned char lonybble, hinybble;
const char *hexchars = "0123456789ABCDEF";
char *p1, *p2;
-
+
if (!p)
return false;
-
+
for (i = 0; i < 32; i += 2) {
hinybble = toupper_ascii(p[i]);
lonybble = toupper_ascii(p[i + 1]);
@@ -554,16 +553,16 @@ bool lookup_global_sam_name(const char *name, int flags, uint32_t *rid,
{
GROUP_MAP map;
bool ret;
-
+
/* Windows treats "MACHINE\None" as a special name for
rid 513 on non-DCs. You cannot create a user or group
name "None" on Windows. You will get an error that
the group already exists. */
-
+
if ( strequal( name, "None" ) ) {
*rid = DOMAIN_GROUP_RID_USERS;
*type = SID_NAME_DOM_GRP;
-
+
return True;
}
@@ -578,7 +577,7 @@ bool lookup_global_sam_name(const char *name, int flags, uint32_t *rid,
if ( !(sam_account = samu_new( NULL )) ) {
return False;
}
-
+
become_root();
ret = pdb_getsampwnam(sam_account, name);
unbecome_root();
@@ -586,7 +585,7 @@ bool lookup_global_sam_name(const char *name, int flags, uint32_t *rid,
if (ret) {
sid_copy(&user_sid, pdb_get_user_sid(sam_account));
}
-
+
TALLOC_FREE(sam_account);
if (ret) {
@@ -654,7 +653,7 @@ NTSTATUS local_password_change(const char *user_name,
if(!pdb_getsampwnam(sam_pass, user_name)) {
unbecome_root();
TALLOC_FREE(sam_pass);
-
+
if ((local_flags & LOCAL_ADD_USER) || (local_flags & LOCAL_DELETE_USER)) {
int tmp_debug = DEBUGLEVEL;
struct passwd *pwd;
@@ -754,7 +753,7 @@ NTSTATUS local_password_change(const char *user_name,
return NT_STATUS_UNSUCCESSFUL;
}
}
-
+
if (local_flags & LOCAL_SET_NO_PASSWORD) {
if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)|ACB_PWNOTREQ, PDB_CHANGED)) {
if (asprintf(pp_err_str, "Failed to set 'no password required' flag for user %s.\n", user_name) < 0) {
@@ -789,7 +788,7 @@ NTSTATUS local_password_change(const char *user_name,
TALLOC_FREE(sam_pass);
return NT_STATUS_UNSUCCESSFUL;
}
-
+
if (!pdb_set_plaintext_passwd (sam_pass, new_passwd)) {
if (asprintf(pp_err_str, "Failed to set password for user %s.\n", user_name) < 0) {
*pp_err_str = NULL;
@@ -893,7 +892,7 @@ static bool init_samu_from_buffer_v0(struct samu *sampass, uint8 *buf, uint32 bu
dir_drive_len, unknown_str_len, munged_dial_len,
fullname_len, homedir_len, logon_script_len,
profile_path_len, acct_desc_len, workstations_len;
-
+
uint32 user_rid, group_rid, remove_me, hours_len, unknown_6;
uint16 acct_ctrl, logon_divs;
uint16 bad_password_count, logon_count;
@@ -902,7 +901,7 @@ static bool init_samu_from_buffer_v0(struct samu *sampass, uint8 *buf, uint32 bu
uint32 len = 0;
uint32 lm_pw_len, nt_pw_len, hourslen;
bool ret = True;
-
+
if(sampass == NULL || buf == NULL) {
DEBUG(0, ("init_samu_from_buffer_v0: NULL parameters found!\n"));
return False;
@@ -942,7 +941,7 @@ static bool init_samu_from_buffer_v0(struct samu *sampass, uint8 *buf, uint32 bu
&bad_password_count, /* w */
&logon_count, /* w */
&unknown_6); /* d */
-
+
if (len == (uint32) -1) {
ret = False;
goto done;
@@ -987,7 +986,7 @@ static bool init_samu_from_buffer_v0(struct samu *sampass, uint8 *buf, uint32 bu
lp_logon_script()),
PDB_DEFAULT);
}
-
+
if (profile_path) {
pdb_set_profile_path(sampass, profile_path, PDB_SET);
} else {
@@ -1079,7 +1078,7 @@ static bool init_samu_from_buffer_v1(struct samu *sampass, uint8 *buf, uint32 bu
dir_drive_len, unknown_str_len, munged_dial_len,
fullname_len, homedir_len, logon_script_len,
profile_path_len, acct_desc_len, workstations_len;
-
+
uint32 user_rid, group_rid, remove_me, hours_len, unknown_6;
uint16 acct_ctrl, logon_divs;
uint16 bad_password_count, logon_count;
@@ -1088,7 +1087,7 @@ static bool init_samu_from_buffer_v1(struct samu *sampass, uint8 *buf, uint32 bu
uint32 len = 0;
uint32 lm_pw_len, nt_pw_len, hourslen;
bool ret = True;
-
+
if(sampass == NULL || buf == NULL) {
DEBUG(0, ("init_samu_from_buffer_v1: NULL parameters found!\n"));
return False;
@@ -1130,7 +1129,7 @@ static bool init_samu_from_buffer_v1(struct samu *sampass, uint8 *buf, uint32 bu
&bad_password_count, /* w */
&logon_count, /* w */
&unknown_6); /* d */
-
+
if (len == (uint32) -1) {
ret = False;
goto done;
@@ -1178,7 +1177,7 @@ static bool init_samu_from_buffer_v1(struct samu *sampass, uint8 *buf, uint32 bu
lp_logon_script()),
PDB_DEFAULT);
}
-
+
if (profile_path) {
pdb_set_profile_path(sampass, profile_path, PDB_SET);
} else {
@@ -1268,7 +1267,7 @@ static bool init_samu_from_buffer_v2(struct samu *sampass, uint8 *buf, uint32 bu
dir_drive_len, unknown_str_len, munged_dial_len,
fullname_len, homedir_len, logon_script_len,
profile_path_len, acct_desc_len, workstations_len;
-
+
uint32 user_rid, group_rid, hours_len, unknown_6;
uint16 acct_ctrl, logon_divs;
uint16 bad_password_count, logon_count;
@@ -1280,12 +1279,12 @@ static bool init_samu_from_buffer_v2(struct samu *sampass, uint8 *buf, uint32 bu
bool ret = True;
fstring tmp_string;
bool expand_explicit = lp_passdb_expand_explicit();
-
+
if(sampass == NULL || buf == NULL) {
DEBUG(0, ("init_samu_from_buffer_v2: NULL parameters found!\n"));
return False;
}
-
+
/* SAMU_BUFFER_FORMAT_V2 "dddddddBBBBBBBBBBBBddBBBwwdBwwd" */
/* unpack the buffer into variables */
@@ -1323,7 +1322,7 @@ static bool init_samu_from_buffer_v2(struct samu *sampass, uint8 *buf, uint32 bu
&bad_password_count, /* w */
&logon_count, /* w */
&unknown_6); /* d */
-
+
if (len == (uint32) -1) {
ret = False;
goto done;
@@ -1376,7 +1375,7 @@ static bool init_samu_from_buffer_v2(struct samu *sampass, uint8 *buf, uint32 bu
lp_logon_script()),
PDB_DEFAULT);
}
-
+
if (profile_path) {
fstrcpy( tmp_string, profile_path );
if (expand_explicit) {
@@ -1503,7 +1502,7 @@ static bool init_samu_from_buffer_v3(struct samu *sampass, uint8 *buf, uint32 bu
dir_drive_len, unknown_str_len, munged_dial_len,
fullname_len, homedir_len, logon_script_len,
profile_path_len, acct_desc_len, workstations_len;
-
+
uint32 user_rid, group_rid, hours_len, unknown_6, acct_ctrl;
uint16 logon_divs;
uint16 bad_password_count, logon_count;
@@ -1515,12 +1514,12 @@ static bool init_samu_from_buffer_v3(struct samu *sampass, uint8 *buf, uint32 bu
bool ret = True;
fstring tmp_string;
bool expand_explicit = lp_passdb_expand_explicit();
-
+
if(sampass == NULL || buf == NULL) {
DEBUG(0, ("init_samu_from_buffer_v3: NULL parameters found!\n"));
return False;
}
-
+
/* SAMU_BUFFER_FORMAT_V3 "dddddddBBBBBBBBBBBBddBBBdwdBwwd" */
/* unpack the buffer into variables */
@@ -1559,7 +1558,7 @@ static bool init_samu_from_buffer_v3(struct samu *sampass, uint8 *buf, uint32 bu
&bad_password_count, /* w */
&logon_count, /* w */
&unknown_6); /* d */
-
+
if (len == (uint32) -1) {
ret = False;
goto done;
@@ -1612,7 +1611,7 @@ static bool init_samu_from_buffer_v3(struct samu *sampass, uint8 *buf, uint32 bu
lp_logon_script()),
PDB_DEFAULT);
}
-
+
if (profile_path) {
fstrcpy( tmp_string, profile_path );
if (expand_explicit) {
@@ -1839,12 +1838,12 @@ static uint32 init_buffer_from_samu_v3 (uint8 **buf, struct samu *sampass, bool
} else {
profile_path_len = 0;
}
-
+
lm_pw = pdb_get_lanman_passwd(sampass);
if (!lm_pw) {
lm_pw_len = 0;
}
-
+
nt_pw = pdb_get_nt_passwd(sampass);
if (!nt_pw) {
nt_pw_len = 0;
@@ -1927,7 +1926,7 @@ static uint32 init_buffer_from_samu_v3 (uint8 **buf, struct samu *sampass, bool
DEBUG(0,("init_buffer_from_samu_v3: Unable to malloc() memory for buffer!\n"));
return (-1);
}
-
+
/* now for the real call to tdb_pack() */
buflen = tdb_pack(*buf, len, SAMU_BUFFER_FORMAT_V3,
logon_time, /* d */
@@ -1961,7 +1960,7 @@ static uint32 init_buffer_from_samu_v3 (uint8 **buf, struct samu *sampass, bool
pdb_get_bad_password_count(sampass), /* w */
pdb_get_logon_count(sampass), /* w */
pdb_get_unknown_6(sampass)); /* d */
-
+
/* check to make sure we got it correct */
if (buflen != len) {
DEBUG(0, ("init_buffer_from_samu_v3: somthing odd is going on here: bufflen (%lu) != len (%lu) in tdb_pack operations!\n",
@@ -2038,7 +2037,7 @@ bool pdb_copy_sam_account(struct samu *dst, struct samu *src )
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list