diff --git a/source/include/proto.h b/source/include/proto.h index 3c7128efff8..e84607e726a 100644 --- a/source/include/proto.h +++ b/source/include/proto.h @@ -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 */ diff --git a/source/libsmb/passchange.c b/source/libsmb/passchange.c index 4cca1927fa0..b5552d4cea1 100644 --- a/source/libsmb/passchange.c +++ b/source/libsmb/passchange.c @@ -75,7 +75,7 @@ BOOL remote_password_change(const char *remote_machine, const char *user_name, * Thanks to 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); diff --git a/source/nmbd/nmbd_synclists.c b/source/nmbd/nmbd_synclists.c index dae25b6eca3..aab1e4349ca 100644 --- a/source/nmbd/nmbd_synclists.c +++ b/source/nmbd/nmbd_synclists.c @@ -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; } diff --git a/source/rpc_client/cli_use.c b/source/rpc_client/cli_use.c index a953d332e1e..99cdb129f75 100644 --- a/source/rpc_client/cli_use.c +++ b/source/rpc_client/cli_use.c @@ -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); + } + } +} diff --git a/source/rpcclient/rpcclient.c b/source/rpcclient/rpcclient.c index 4dc919fd97f..6c9af8815f6 100644 --- a/source/rpcclient/rpcclient.c +++ b/source/rpcclient/rpcclient.c @@ -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 */