mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
more cli_session_setup() calls. what the heck are these doing???
they should all be replaced with cli_establish_connection(). created cli_use_wait_keyboard() which waits on multiple cli_states and swallows session keepalives.
This commit is contained in:
parent
fa054c96c6
commit
fcc39b3f4f
@ -2182,6 +2182,7 @@ BOOL cli_net_use_del(const char* srv_name,
|
||||
BOOL force_close,
|
||||
BOOL *connection_closed);
|
||||
void cli_net_use_enum(uint32 *num_cons, struct use_info ***use);
|
||||
void cli_use_wait_keyboard(void);
|
||||
|
||||
/*The following definitions come from rpc_client/cli_wkssvc.c */
|
||||
|
||||
|
@ -75,7 +75,7 @@ BOOL remote_password_change(const char *remote_machine, const char *user_name,
|
||||
* Thanks to <Nicholas.S.Jenkins@cdc.com> for this fix.
|
||||
*/
|
||||
|
||||
if (!cli_session_setup(&cli, "", "", 0, "", 0, "")) {
|
||||
if (!cli_session_setup(&cli, global_myname, "", "", 0, "", 0, "")) {
|
||||
slprintf(err_str, err_str_len-1, "machine %s rejected the session setup. Error was : %s.\n",
|
||||
remote_machine, cli_errstr(&cli) );
|
||||
cli_shutdown(&cli);
|
||||
|
@ -92,7 +92,7 @@ static void sync_child(char *name, int nm_type,
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cli_session_setup(&cli, "", "", 1, "", 0, workgroup)) {
|
||||
if (!cli_session_setup(&cli, local_machine, "", "", 1, "", 0, workgroup)) {
|
||||
cli_shutdown(&cli);
|
||||
return;
|
||||
}
|
||||
|
@ -382,3 +382,47 @@ void cli_net_use_enum(uint32 *num_cons, struct use_info ***use)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
wait for keyboard activity, swallowing network packets on all client states.
|
||||
****************************************************************************/
|
||||
void cli_use_wait_keyboard(void)
|
||||
{
|
||||
fd_set fds;
|
||||
struct timeval timeout;
|
||||
|
||||
while (1)
|
||||
{
|
||||
int i;
|
||||
int maxfd = fileno(stdin);
|
||||
FD_ZERO(&fds);
|
||||
FD_SET(fileno(stdin),&fds);
|
||||
for (i = 0; i < num_clis; i++)
|
||||
{
|
||||
if (clis[i] != NULL && clis[i]->cli != NULL)
|
||||
{
|
||||
int fd = clis[i]->cli->fd;
|
||||
FD_SET(fd,&fds);
|
||||
maxfd = MAX(fd, maxfd);
|
||||
}
|
||||
}
|
||||
|
||||
timeout.tv_sec = 20;
|
||||
timeout.tv_usec = 0;
|
||||
sys_select(maxfd+1,NULL, &fds,&timeout);
|
||||
|
||||
if (FD_ISSET(fileno(stdin),&fds))
|
||||
return;
|
||||
|
||||
/* We deliberately use receive_smb instead of
|
||||
client_receive_smb as we want to receive
|
||||
session keepalives and then drop them here.
|
||||
*/
|
||||
for (i = 0; i < num_clis; i++)
|
||||
{
|
||||
int fd = clis[i]->cli->fd;
|
||||
if (FD_ISSET(fd,&fds))
|
||||
receive_smb(fd,clis[i]->cli->inbuf,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -718,36 +718,6 @@ static BOOL do_command(struct client_info *info, char *line)
|
||||
return True;
|
||||
}
|
||||
|
||||
#ifndef HAVE_LIBREADLINE
|
||||
/****************************************************************************
|
||||
wait for keyboard activity, swallowing network packets
|
||||
****************************************************************************/
|
||||
static void wait_keyboard(struct cli_state *cli)
|
||||
{
|
||||
fd_set fds;
|
||||
struct timeval timeout;
|
||||
|
||||
while (1) {
|
||||
FD_ZERO(&fds);
|
||||
FD_SET(cli->fd,&fds);
|
||||
FD_SET(fileno(stdin),&fds);
|
||||
|
||||
timeout.tv_sec = 20;
|
||||
timeout.tv_usec = 0;
|
||||
sys_select(MAX(cli->fd,fileno(stdin))+1,NULL, &fds,&timeout);
|
||||
|
||||
if (FD_ISSET(fileno(stdin),&fds))
|
||||
return;
|
||||
|
||||
/* We deliberately use receive_smb instead of
|
||||
client_receive_smb as we want to receive
|
||||
session keepalives and then drop them here.
|
||||
*/
|
||||
if (FD_ISSET(cli->fd,&fds))
|
||||
receive_smb(cli->fd,cli->inbuf,0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
process commands from the client
|
||||
@ -795,26 +765,13 @@ static BOOL process( struct client_info *info, char *cmd_str)
|
||||
fprintf(out_hnd, "%s$ ", CNV_LANG(cli_info.dest_host));
|
||||
fflush(out_hnd);
|
||||
|
||||
#ifdef CLIX
|
||||
line[0] = wait_keyboard(NULL);
|
||||
/* this might not be such a good idea... */
|
||||
if ( line[0] == EOF)
|
||||
{
|
||||
break;
|
||||
}
|
||||
#else
|
||||
wait_keyboard(NULL);
|
||||
#endif
|
||||
cli_net_wait_keyboard();
|
||||
|
||||
/* and get a response */
|
||||
#ifdef CLIX
|
||||
fgets( &line[1],999, stdin);
|
||||
#else
|
||||
if (!fgets(line,1000,stdin))
|
||||
{
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#else /* HAVE_LIBREADLINE */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user