summaryrefslogtreecommitdiffstats
path: root/source/rpc_server/srv_pipe.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/rpc_server/srv_pipe.c')
-rw-r--r--source/rpc_server/srv_pipe.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/source/rpc_server/srv_pipe.c b/source/rpc_server/srv_pipe.c
index 1ad57a9b016..7594ae58e4e 100644
--- a/source/rpc_server/srv_pipe.c
+++ b/source/rpc_server/srv_pipe.c
@@ -324,7 +324,7 @@ static BOOL api_pipe_ntlmssp_verify(pipes_struct *p, RPC_AUTH_NTLMSSP_RESP *ntlm
{
guest_user = True;
- fstrcpy(pipe_user_name, lp_guestaccount(-1));
+ fstrcpy(pipe_user_name, lp_guestaccount(-1));
DEBUG(100,("Null user in NTLMSSP verification. Using guest = %s\n", pipe_user_name));
smb_passwd_ptr = null_smb_passwd;
@@ -380,8 +380,8 @@ failed authentication on named pipe %s.\n", domain, pipe_user_name, wks, p->name
unbecome_root();
- /* Quit if the account was disabled. */
- if((pdb_get_acct_ctrl(sampass) & ACB_DISABLED) || !pdb_get_lanman_passwd(sampass)) {
+ /* Quit if the account was disabled. */
+ if((pdb_get_acct_ctrl(sampass) & ACB_DISABLED) || !pdb_get_lanman_passwd(sampass)) {
DEBUG(1,("Account for user '%s' was disabled.\n", pipe_user_name));
pdb_free_sam(sampass);
return False;
@@ -393,7 +393,31 @@ failed authentication on named pipe %s.\n", domain, pipe_user_name, wks, p->name
return False;
}
- smb_passwd_ptr = pdb_get_lanman_passwd(sampass);
+ smb_passwd_ptr = pdb_get_lanman_passwd(sampass);
+
+ /*
+ * Store the UNIX credential data (uid/gid pair) in the pipe structure.
+ */
+
+ p->pipe_user.uid = pdb_get_uid(sampass);
+ p->pipe_user.gid = pdb_get_gid(sampass);
+ }
+ else {
+ struct passwd *pw;
+
+ /* setup the guest credentials; assuming that the guest
+ account does not have to exist in the smbpasswd file */
+
+ if ( (pw = sys_getpwnam(pipe_user_name)) == NULL ) {
+ DEBUG(0,("api_pipe_ntlmssp_verify: Invalid guest account [%s]. getpwnam() failed!\n",
+ pipe_user_name));
+ pdb_free_sam(sampass);
+ return False;
+ }
+
+ p->pipe_user.uid = pw->pw_uid;
+ p->pipe_user.gid = pw->pw_gid;
+
}
/*
@@ -440,13 +464,6 @@ failed authentication on named pipe %s.\n", domain, pipe_user_name, wks, p->name
fstrcpy(p->domain, domain);
fstrcpy(p->wks, wks);
- /*
- * Store the UNIX credential data (uid/gid pair) in the pipe structure.
- */
-
- p->pipe_user.uid = pdb_get_uid(sampass);
- p->pipe_user.gid = pdb_get_gid(sampass);
-
/* Set up pipe user group membership. */
initialise_groups(pipe_user_name, p->pipe_user.uid, p->pipe_user.gid);
get_current_groups( p->pipe_user.gid, &p->pipe_user.ngroups, &p->pipe_user.groups);