summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/include/proto.h1
-rw-r--r--source3/libsmb/clientgen.c19
-rw-r--r--source3/smbd/password.c1
3 files changed, 21 insertions, 0 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 433e833c31..da1293fa69 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -65,6 +65,7 @@ BOOL cli_session_setup(struct cli_state *cli,
char *pass, int passlen,
char *ntpass, int ntpasslen,
char *workgroup);
+BOOL cli_ulogoff(struct cli_state *cli);
BOOL cli_send_tconX(struct cli_state *cli,
char *share, char *dev, char *pass, int passlen);
BOOL cli_tdis(struct cli_state *cli);
diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c
index 1f2f746576..ea51395a8f 100644
--- a/source3/libsmb/clientgen.c
+++ b/source3/libsmb/clientgen.c
@@ -528,6 +528,25 @@ BOOL cli_session_setup(struct cli_state *cli,
return True;
}
+/****************************************************************************
+ Send a uloggoff.
+*****************************************************************************/
+
+BOOL cli_ulogoff(struct cli_state *cli)
+{
+ bzero(cli->outbuf,smb_size);
+ set_message(cli->outbuf,2,0,True);
+ CVAL(cli->outbuf,smb_com) = SMBulogoffX;
+ cli_setup_packet(cli);
+ SSVAL(cli->outbuf,smb_vwv0,0xFF);
+ SSVAL(cli->outbuf,smb_vwv2,0); /* no additional info */
+
+ send_smb(cli->fd,cli->outbuf);
+ if (!client_receive_smb(cli->fd,cli->inbuf,cli->timeout))
+ return False;
+
+ return CVAL(cli->inbuf,smb_rcls) == 0;
+}
/****************************************************************************
send a tconX
diff --git a/source3/smbd/password.c b/source3/smbd/password.c
index fe3ac5c765..b4d728d0c2 100644
--- a/source3/smbd/password.c
+++ b/source3/smbd/password.c
@@ -1816,6 +1816,7 @@ BOOL server_validate(char *user, char *domain,
DEBUG(3,("password server %s accepted the password\n", cli.desthost));
cli_tdis(&cli);
+ cli_ulogoff(&cli);
return(True);
}