[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Sat Feb 20 11:00:10 MST 2010
The branch, master has been updated
via 2beaa19... s3: Slightly simplify the logic of completion_remote_filter
via 48d6ed7... s3: Fix some nonempty blank lines
via 1f451d1... s3: Remove a "typedef struct"
via f27857e... s3: Fix a typo
via 8930a9c... s3: Convert cli_qpathinfo_basic to use cli_trans()
via b69a74e... s3: Convert cli_raw_ioctl to use cli_smb()
via 89e6a52... s3: Add cli_smb()
from a7036a9... librpc/ndr Remove unused macros
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 2beaa190295bc6e4c9e7f8a3768c74ad0a4359fe
Author: Volker Lendecke <vl at samba.org>
Date: Thu Feb 18 22:52:41 2010 +0100
s3: Slightly simplify the logic of completion_remote_filter
commit 48d6ed7cac1e948b604ff44eee3528c396d5ecef
Author: Volker Lendecke <vl at samba.org>
Date: Tue Feb 16 22:07:22 2010 +0100
s3: Fix some nonempty blank lines
commit 1f451d122e869ae7c880e6d347ff127aa9d87d72
Author: Volker Lendecke <vl at samba.org>
Date: Mon Feb 15 23:53:18 2010 +0100
s3: Remove a "typedef struct"
commit f27857e655c410559b8717ce03049b7d7be3aa1f
Author: Volker Lendecke <vl at samba.org>
Date: Mon Feb 15 23:52:51 2010 +0100
s3: Fix a typo
commit 8930a9c52008c7c9a755b213f857dfa2247f6823
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 7 14:07:17 2010 +0100
s3: Convert cli_qpathinfo_basic to use cli_trans()
commit b69a74eeca6acbfb1be0ef3eb8f84e2f4700f2a9
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 7 13:36:49 2010 +0100
s3: Convert cli_raw_ioctl to use cli_smb()
commit 89e6a5263e29759c4edd1a8e856443f59dff0c31
Author: Volker Lendecke <vl at samba.org>
Date: Sun Feb 7 13:24:41 2010 +0100
s3: Add cli_smb()
This is a sync wrapper around cli_smb_send/cli_smb_recv. This is a hack to
speed up converting libsmb/ away from cli_send_smb/cli_receive_smb. Some
routines in libsmb/ are only called in one place in smbtorture for example,
where making it async right now is not worth it. With cli_smb_send/cli_smb_recv
in place, pushing the asynchronosity out one level is "just" boilerplate code
that is easy to do should it become necessary.
-----------------------------------------------------------------------
Summary of changes:
source3/auth/auth_util.c | 116 +++++++++++++++++++++----------------------
source3/client/client.c | 104 +++++++++++++++++++++------------------
source3/include/proto.h | 11 +++-
source3/libsmb/clidfs.c | 4 +-
source3/libsmb/clientgen.c | 36 ++++++++++++++
source3/libsmb/clifile.c | 28 ++++-------
source3/libsmb/clirap.c | 65 ++++++++++---------------
7 files changed, 198 insertions(+), 166 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c
index 46b7af4..6ec19da 100644
--- a/source3/auth/auth_util.c
+++ b/source3/auth/auth_util.c
@@ -11,12 +11,12 @@
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/>.
*/
@@ -136,7 +136,7 @@ static NTSTATUS make_user_info(struct auth_usersupplied_info **user_info,
free_user_info(user_info);
return NT_STATUS_NO_MEMORY;
}
-
+
(*user_info)->internal_username = SMB_STRDUP(internal_username);
if ((*user_info)->internal_username == NULL) {
free_user_info(user_info);
@@ -305,40 +305,40 @@ bool make_user_info_netlogon_interactive(struct auth_usersupplied_info **user_in
unsigned char local_lm_response[24];
unsigned char local_nt_response[24];
unsigned char key[16];
-
+
memcpy(key, dc_sess_key, 16);
-
+
if (lm_interactive_pwd)
memcpy(lm_pwd, lm_interactive_pwd, sizeof(lm_pwd));
if (nt_interactive_pwd)
memcpy(nt_pwd, nt_interactive_pwd, sizeof(nt_pwd));
-
+
#ifdef DEBUG_PASSWORD
DEBUG(100,("key:"));
dump_data(100, key, sizeof(key));
-
+
DEBUG(100,("lm owf password:"));
dump_data(100, lm_pwd, sizeof(lm_pwd));
-
+
DEBUG(100,("nt owf password:"));
dump_data(100, nt_pwd, sizeof(nt_pwd));
#endif
-
+
if (lm_interactive_pwd)
arcfour_crypt(lm_pwd, key, sizeof(lm_pwd));
-
+
if (nt_interactive_pwd)
arcfour_crypt(nt_pwd, key, sizeof(nt_pwd));
-
+
#ifdef DEBUG_PASSWORD
DEBUG(100,("decrypt of lm owf password:"));
dump_data(100, lm_pwd, sizeof(lm_pwd));
-
+
DEBUG(100,("decrypt of nt owf password:"));
dump_data(100, nt_pwd, sizeof(nt_pwd));
#endif
-
+
if (lm_interactive_pwd)
SMBOWFencrypt(lm_pwd, chal,
local_lm_response);
@@ -346,7 +346,7 @@ bool make_user_info_netlogon_interactive(struct auth_usersupplied_info **user_in
if (nt_interactive_pwd)
SMBOWFencrypt(nt_pwd, chal,
local_nt_response);
-
+
/* Password info paranoia */
ZERO_STRUCT(key);
@@ -358,7 +358,7 @@ bool make_user_info_netlogon_interactive(struct auth_usersupplied_info **user_in
DATA_BLOB lm_interactive_blob;
DATA_BLOB nt_interactive_blob;
-
+
if (lm_interactive_pwd) {
local_lm_blob = data_blob(local_lm_response,
sizeof(local_lm_response));
@@ -366,7 +366,7 @@ bool make_user_info_netlogon_interactive(struct auth_usersupplied_info **user_in
sizeof(lm_pwd));
ZERO_STRUCT(lm_pwd);
}
-
+
if (nt_interactive_pwd) {
local_nt_blob = data_blob(local_nt_response,
sizeof(local_nt_response));
@@ -412,17 +412,17 @@ bool make_user_info_for_reply(struct auth_usersupplied_info **user_info,
DATA_BLOB local_lm_blob;
DATA_BLOB local_nt_blob;
NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
-
+
/*
* Not encrypted - do so.
*/
-
+
DEBUG(5,("make_user_info_for_reply: User passwords not in encrypted "
"format.\n"));
-
+
if (plaintext_password.data) {
unsigned char local_lm_response[24];
-
+
#ifdef DEBUG_PASSWORD
DEBUG(10,("Unencrypted password (len %d):\n",
(int)plaintext_password.length));
@@ -433,16 +433,15 @@ bool make_user_info_for_reply(struct auth_usersupplied_info **user_info,
SMBencrypt( (const char *)plaintext_password.data,
(const uchar*)chal, local_lm_response);
local_lm_blob = data_blob(local_lm_response, 24);
-
+
/* We can't do an NT hash here, as the password needs to be
case insensitive */
local_nt_blob = data_blob_null;
-
} else {
local_lm_blob = data_blob_null;
local_nt_blob = data_blob_null;
}
-
+
ret = make_user_info_map(
user_info, smb_name, client_domain,
get_remote_machine_name(),
@@ -451,7 +450,7 @@ bool make_user_info_for_reply(struct auth_usersupplied_info **user_info,
NULL, NULL,
plaintext_password.data ? &plaintext_password : NULL,
False);
-
+
data_blob_free(&local_lm_blob);
return NT_STATUS_IS_OK(ret) ? True : False;
}
@@ -490,7 +489,7 @@ bool make_user_info_guest(struct auth_usersupplied_info **user_info)
NULL, NULL,
NULL,
True);
-
+
return NT_STATUS_IS_OK(nt_status) ? True : False;
}
@@ -642,7 +641,7 @@ NTSTATUS make_server_info_sam(struct auth_serversupplied_info **server_info,
/* For now we throw away the gids and convert via sid_to_gid
* later. This needs fixing, but I'd like to get the code straight and
* simple first. */
-
+
TALLOC_FREE(gids);
DEBUG(5,("make_server_info_sam: made server info for user %s -> %s\n",
@@ -1108,7 +1107,6 @@ bool user_in_group_sid(const char *username, const DOM_SID *group_sid)
TALLOC_FREE(mem_ctx);
return result;
-
}
bool user_in_group(const char *username, const char *groupname)
@@ -1152,11 +1150,11 @@ NTSTATUS make_server_info_pw(struct auth_serversupplied_info **server_info,
DOM_SID u_sid;
enum lsa_SidType type;
struct auth_serversupplied_info *result;
-
+
if ( !(sampass = samu_new( NULL )) ) {
return NT_STATUS_NO_MEMORY;
}
-
+
status = samu_set_unix( sampass, pwd );
if (!NT_STATUS_IS_OK(status)) {
return status;
@@ -1290,7 +1288,7 @@ static NTSTATUS make_new_server_info_guest(struct auth_serversupplied_info **ser
TALLOC_FREE(sampass);
return status;
}
-
+
(*server_info)->guest = True;
status = create_local_token(*server_info);
@@ -1381,7 +1379,7 @@ struct auth_serversupplied_info *copy_serverinfo(TALLOC_CTX *mem_ctx,
return NULL;
}
}
-
+
dst->user_session_key = data_blob_talloc( dst, src->user_session_key.data,
src->user_session_key.length);
@@ -1398,7 +1396,7 @@ struct auth_serversupplied_info *copy_serverinfo(TALLOC_CTX *mem_ctx,
TALLOC_FREE(dst);
return NULL;
}
-
+
dst->pam_handle = NULL;
dst->unix_name = talloc_strdup(dst, src->unix_name);
if (!dst->unix_name) {
@@ -1514,15 +1512,15 @@ static NTSTATUS fill_sam_account(TALLOC_CTX *mem_ctx,
one we actually looked up and succeeded. Have I mentioned
why I hate the 'winbind use default domain' parameter?
--jerry */
-
+
*found_username = talloc_strdup( mem_ctx, real_username );
-
+
DEBUG(5,("fill_sam_account: located username was [%s]\n", *found_username));
nt_status = samu_set_unix( account, passwd );
-
+
TALLOC_FREE(passwd);
-
+
return nt_status;
}
@@ -1531,28 +1529,28 @@ static NTSTATUS fill_sam_account(TALLOC_CTX *mem_ctx,
try again in case a local UNIX user is already there. Also run through
the username if we fallback to the username only.
****************************************************************************/
-
+
struct passwd *smb_getpwnam( TALLOC_CTX *mem_ctx, char *domuser,
fstring save_username, bool create )
{
struct passwd *pw = NULL;
char *p;
fstring username;
-
+
/* we only save a copy of the username it has been mangled
by winbindd use default domain */
-
+
save_username[0] = '\0';
-
+
/* don't call map_username() here since it has to be done higher
up the stack so we don't call it mutliple times */
fstrcpy( username, domuser );
-
+
p = strchr_m( username, *lp_winbind_separator() );
-
+
/* code for a DOMAIN\user string */
-
+
if ( p ) {
fstring strip_username;
@@ -1563,7 +1561,7 @@ struct passwd *smb_getpwnam( TALLOC_CTX *mem_ctx, char *domuser,
if ( !strchr_m( pw->pw_name, *lp_winbind_separator() ) ) {
char *domain;
-
+
/* split the domain and username into 2 strings */
*p = '\0';
domain = username;
@@ -1584,16 +1582,16 @@ struct passwd *smb_getpwnam( TALLOC_CTX *mem_ctx, char *domuser,
fstrcpy( strip_username, p );
fstrcpy( username, strip_username );
}
-
+
/* just lookup a plain username */
-
+
pw = Get_Pwnam_alloc(mem_ctx, username);
-
+
/* Create local user if requested but only if winbindd
is not running. We need to protect against cases
where winbindd is failing and then prematurely
creating users in /etc/passwd */
-
+
if ( !pw && create && !winbind_ping() ) {
/* Don't add a machine account. */
if (username[strlen(username)-1] == '$')
@@ -1602,9 +1600,9 @@ struct passwd *smb_getpwnam( TALLOC_CTX *mem_ctx, char *domuser,
_smb_create_user(NULL, username, NULL);
pw = Get_Pwnam_alloc(mem_ctx, username);
}
-
+
/* one last check for a valid passwd struct */
-
+
if ( pw )
fstrcpy( save_username, pw->pw_name );
@@ -1646,7 +1644,7 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
if (!sid_compose(&user_sid, info3->base.domain_sid, info3->base.rid)) {
return NT_STATUS_INVALID_PARAMETER;
}
-
+
if (!sid_compose(&group_sid, info3->base.domain_sid,
info3->base.primary_gid)) {
return NT_STATUS_INVALID_PARAMETER;
@@ -1665,7 +1663,7 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
* them */
nt_domain = domain;
}
-
+
/* try to fill the SAM account.. If getpwnam() fails, then try the
add user script (2.2.x behavior).
@@ -1677,7 +1675,7 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
called map_username() unnecessarily in make_user_info_map() but
that is how the current code is designed. Making the change here
is the least disruptive place. -- jerry */
-
+
if ( !(sam_account = samu_new( NULL )) ) {
return NT_STATUS_NO_MEMORY;
}
@@ -1688,10 +1686,10 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
&found_username, &uid, &gid, sam_account,
&username_was_mapped);
-
+
/* if we still don't have a valid unix account check for
'map to guest = bad uid' */
-
+
if (!NT_STATUS_IS_OK(nt_status)) {
TALLOC_FREE( sam_account );
if ( lp_map_to_guest() == MAP_TO_GUEST_ON_BAD_UID ) {
@@ -1700,7 +1698,7 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
}
return nt_status;
}
-
+
if (!pdb_set_nt_username(sam_account, nt_username, PDB_CHANGED)) {
TALLOC_FREE(sam_account);
return NT_STATUS_NO_MEMORY;
@@ -1799,7 +1797,7 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
/* save this here to _net_sam_logon() doesn't fail (it assumes a
valid struct samu) */
-
+
result->sam_account = sam_account;
result->unix_name = talloc_strdup(result, found_username);
@@ -2152,7 +2150,7 @@ bool make_auth_methods(struct auth_context *auth_context, auth_methods **auth_me
return False;
}
ZERO_STRUCTP(*auth_method);
-
+
return True;
}
@@ -2212,7 +2210,7 @@ bool is_trusted_domain(const char* dom_name)
/* The only other possible result is that winbind is not up
and running. We need to update the trustdom_cache
ourselves */
-
+
update_trustdom_cache();
}
diff --git a/source3/client/client.c b/source3/client/client.c
index 1ceb3ab..f275ddd 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -408,8 +408,12 @@ static int do_cd(const char *new_dir)
Except Win9x doesn't support the qpathinfo_basic() call..... */
if (targetcli->protocol > PROTOCOL_LANMAN2 && !targetcli->win95) {
- if (!cli_qpathinfo_basic( targetcli, targetpath, &sbuf, &attributes ) ) {
- d_printf("cd %s: %s\n", new_cd, cli_errstr(targetcli));
+ NTSTATUS status;
+
+ status = cli_qpathinfo_basic(targetcli, targetpath, &sbuf,
+ &attributes);
+ if (!NT_STATUS_IS_OK(status)) {
+ d_printf("cd %s: %s\n", new_cd, nt_errstr(status));
client_set_cur_dir(saved_dir);
goto out;
}
@@ -4157,68 +4161,74 @@ static int process_command_string(const char *cmd_in)
#define MAX_COMPLETIONS 100
-typedef struct {
+struct completion_remote {
char *dirmask;
char **matches;
int count, samelen;
const char *text;
int len;
-} completion_remote_t;
+};
static void completion_remote_filter(const char *mnt,
file_info *f,
const char *mask,
void *state)
{
- completion_remote_t *info = (completion_remote_t *)state;
-
- if ((info->count < MAX_COMPLETIONS - 1) &&
- (strncmp(info->text, f->name, info->len) == 0) &&
- (strcmp(f->name, ".") != 0) &&
- (strcmp(f->name, "..") != 0)) {
- if ((info->dirmask[0] == 0) && !(f->mode & aDIR))
- info->matches[info->count] = SMB_STRDUP(f->name);
- else {
- TALLOC_CTX *ctx = talloc_stackframe();
- char *tmp;
-
- tmp = talloc_strdup(ctx,info->dirmask);
- if (!tmp) {
- TALLOC_FREE(ctx);
- return;
- }
- tmp = talloc_asprintf_append(tmp, "%s", f->name);
- if (!tmp) {
- TALLOC_FREE(ctx);
- return;
- }
- if (f->mode & aDIR) {
- tmp = talloc_asprintf_append(tmp, "%s", CLI_DIRSEP_STR);
- }
- if (!tmp) {
- TALLOC_FREE(ctx);
- return;
- }
- info->matches[info->count] = SMB_STRDUP(tmp);
+ struct completion_remote *info = (struct completion_remote *)state;
+
+ if (info->count >= MAX_COMPLETIONS - 1) {
+ return;
+ }
+ if (strncmp(info->text, f->name, info->len) != 0) {
+ return;
+ }
+ if (ISDOT(f->name) || ISDOTDOT(f->name)) {
+ return;
+ }
+
+ if ((info->dirmask[0] == 0) && !(f->mode & aDIR))
+ info->matches[info->count] = SMB_STRDUP(f->name);
+ else {
+ TALLOC_CTX *ctx = talloc_stackframe();
+ char *tmp;
+
+ tmp = talloc_strdup(ctx,info->dirmask);
+ if (!tmp) {
TALLOC_FREE(ctx);
+ return;
}
- if (info->matches[info->count] == NULL) {
+ tmp = talloc_asprintf_append(tmp, "%s", f->name);
+ if (!tmp) {
+ TALLOC_FREE(ctx);
return;
}
if (f->mode & aDIR) {
- smb_readline_ca_char(0);
+ tmp = talloc_asprintf_append(tmp, "%s",
+ CLI_DIRSEP_STR);
}
- if (info->count == 1) {
--
Samba Shared Repository
More information about the samba-cvs
mailing list