summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/Makefile.in2
-rw-r--r--source3/client/client.c2
-rw-r--r--source3/include/proto.h8
-rw-r--r--source3/lib/readline.c174
-rw-r--r--source3/rpcclient/rpcclient.c1
-rw-r--r--source3/torture/vfstest.c1
-rw-r--r--source3/utils/net_rpc_shell.c1
-rw-r--r--source3/wscript1
-rw-r--r--source3/wscript_build15
9 files changed, 12 insertions, 193 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 139ea70909..8be50fc519 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -481,7 +481,7 @@ LIB_OBJ = $(LIBSAMBAUTIL_OBJ) $(UTIL_OBJ) $(CRYPTO_OBJ) \
LIB_DUMMY_OBJ = lib/dummysmbd.o lib/dummyroot.o
LIB_NONSMBD_OBJ = $(LIB_OBJ) $(LIB_DUMMY_OBJ)
-READLINE_OBJ = lib/readline.o
+READLINE_OBJ = ../libcli/smbreadline/smbreadline.o
# Also depends on $(SECRETS_OBJ) $(LIBSAMBA_OBJ)
# Be sure to include them into your application
diff --git a/source3/client/client.c b/source3/client/client.c
index e79ea16191..a24b7e3144 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -26,6 +26,8 @@
#include "client/client_proto.h"
#include "../librpc/gen_ndr/cli_srvsvc.h"
#include "../lib/util/select.h"
+#include "system/readline.h"
+#include "../libcli/smbreadline/smbreadline.h"
#ifndef REGISTER
#define REGISTER 0
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 4f4ea996e6..7fb0a3d088 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -654,14 +654,6 @@ void privilege_set_free(PRIVILEGE_SET *priv_set);
bool is_privileged_sid( const struct dom_sid *sid );
bool grant_all_privileges( const struct dom_sid *sid );
-/* The following definitions come from lib/readline.c */
-
-void smb_readline_done(void);
-char *smb_readline(const char *prompt, void (*callback)(void),
- char **(completion_fn)(const char *text, int start, int end));
-const char *smb_readline_get_line_buffer(void);
-void smb_readline_ca_char(char c);
-
/* The following definitions come from lib/recvfile.c */
ssize_t sys_recvfile(int fromfd,
diff --git a/source3/lib/readline.c b/source3/lib/readline.c
deleted file mode 100644
index f20fc0f1db..0000000000
--- a/source3/lib/readline.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- Unix SMB/CIFS implementation.
- Samba readline wrapper implementation
- Copyright (C) Simo Sorce 2001
- Copyright (C) Andrew Tridgell 2001
-
- This program is free software; you can redistribute it and/or modify
- 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/>.
-*/
-
-#include "includes.h"
-#include "../lib/util/select.h"
-
-#ifdef HAVE_LIBREADLINE
-# ifdef HAVE_READLINE_READLINE_H
-# include <readline/readline.h>
-# ifdef HAVE_READLINE_HISTORY_H
-# include <readline/history.h>
-# endif
-# else
-# ifdef HAVE_READLINE_H
-# include <readline.h>
-# ifdef HAVE_HISTORY_H
-# include <history.h>
-# endif
-# else
-# undef HAVE_LIBREADLINE
-# endif
-# endif
-#endif
-
-static bool smb_rl_done;
-
-#if HAVE_LIBREADLINE
-/*
- * MacOS/X does not have rl_done in readline.h, but
- * readline.so has it
- */
-extern int rl_done;
-#endif
-
-void smb_readline_done(void)
-{
- smb_rl_done = true;
-#if HAVE_LIBREADLINE
- rl_done = 1;
-#endif
-}
-
-/****************************************************************************
- Display the prompt and wait for input. Call callback() regularly
-****************************************************************************/
-
-static char *smb_readline_replacement(const char *prompt, void (*callback)(void),
- char **(completion_fn)(const char *text, int start, int end))
-{
- fd_set fds;
- char *line = NULL;
- struct timeval timeout;
- int fd = x_fileno(x_stdin);
- char *ret;
-
- /* Prompt might be NULL in non-interactive mode. */
- if (prompt) {
- x_fprintf(x_stdout, "%s", prompt);
- x_fflush(x_stdout);
- }
-
- line = (char *)SMB_MALLOC(BUFSIZ);
- if (!line) {
- return NULL;
- }
-
- while (!smb_rl_done) {
- timeout.tv_sec = 5;
- timeout.tv_usec = 0;
-
- FD_ZERO(&fds);
- FD_SET(fd,&fds);
-
- if (sys_select_intr(fd+1,&fds,NULL,NULL,&timeout) == 1) {
- ret = x_fgets(line, BUFSIZ, x_stdin);
- if (ret == 0) {
- SAFE_FREE(line);
- }
- return ret;
- }
- if (callback) {
- callback();
- }
- }
- SAFE_FREE(line);
- return NULL;
-}
-
-/****************************************************************************
- Display the prompt and wait for input. Call callback() regularly.
-****************************************************************************/
-
-char *smb_readline(const char *prompt, void (*callback)(void),
- char **(completion_fn)(const char *text, int start, int end))
-{
- char *ret;
- bool interactive;
-
- interactive = isatty(x_fileno(x_stdin)) || getenv("CLI_FORCE_INTERACTIVE");
- if (!interactive) {
- return smb_readline_replacement(NULL, callback, completion_fn);
- }
-
-#if HAVE_LIBREADLINE
-
- /* Aargh! Readline does bizzare things with the terminal width
- that mucks up expect(1). Set CLI_NO_READLINE in the environment
- to force readline not to be used. */
-
- if (getenv("CLI_NO_READLINE"))
- return smb_readline_replacement(prompt, callback, completion_fn);
-
- if (completion_fn) {
- /* The callback prototype has changed slightly between
- different versions of Readline, so the same function
- works in all of them to date, but we get compiler
- warnings in some. */
- rl_attempted_completion_function = RL_COMPLETION_CAST completion_fn;
- }
-
-#if HAVE_DECL_RL_EVENT_HOOK
- if (callback)
- rl_event_hook = (Function *)callback;
-#endif
- ret = readline(prompt);
- if (ret && *ret)
- add_history(ret);
-
-#else
- ret = smb_readline_replacement(prompt, callback, completion_fn);
-#endif
-
- return ret;
-}
-
-/****************************************************************************
- * return line buffer text
- ****************************************************************************/
-const char *smb_readline_get_line_buffer(void)
-{
-#if defined(HAVE_LIBREADLINE)
- return rl_line_buffer;
-#else
- return NULL;
-#endif
-}
-
-
-/****************************************************************************
- * set completion append character
- ***************************************************************************/
-void smb_readline_ca_char(char c)
-{
-#if defined(HAVE_LIBREADLINE)
- rl_completion_append_character = c;
-#endif
-}
diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c
index a1faca78d8..b0412ef1d2 100644
--- a/source3/rpcclient/rpcclient.c
+++ b/source3/rpcclient/rpcclient.c
@@ -27,6 +27,7 @@
#include "rpc_client/cli_lsarpc.h"
#include "../librpc/gen_ndr/ndr_netlogon.h"
#include "rpc_client/cli_netlogon.h"
+#include "../libcli/smbreadline/smbreadline.h"
enum pipe_auth_type_spnego {
PIPE_AUTH_TYPE_SPNEGO_NONE = 0,
diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c
index 923b5479ab..76025eef1f 100644
--- a/source3/torture/vfstest.c
+++ b/source3/torture/vfstest.c
@@ -26,6 +26,7 @@
#include "includes.h"
#include "popt_common.h"
#include "vfstest.h"
+#include "../libcli/smbreadline/smbreadline.h"
/* List to hold groups of commands */
static struct cmd_list {
diff --git a/source3/utils/net_rpc_shell.c b/source3/utils/net_rpc_shell.c
index d005da63e7..82f9f29ced 100644
--- a/source3/utils/net_rpc_shell.c
+++ b/source3/utils/net_rpc_shell.c
@@ -23,6 +23,7 @@
#include "utils/net.h"
#include "../librpc/gen_ndr/ndr_samr.h"
#include "lib/netapi/netapi.h"
+#include "../libcli/smbreadline/smbreadline.h"
static NTSTATUS rpc_sh_info(struct net_context *c,
TALLOC_CTX *mem_ctx, struct rpc_sh_ctx *ctx,
diff --git a/source3/wscript b/source3/wscript
index 909008b234..d39bedb13a 100644
--- a/source3/wscript
+++ b/source3/wscript
@@ -87,6 +87,7 @@ def configure(conf):
conf.RECURSE('../lib/nss_wrapper')
conf.RECURSE('../lib/socket_wrapper')
conf.RECURSE('../lib/zlib')
+ conf.RECURSE('../libcli/smbreadline')
conf.CHECK_HEADERS('execinfo.h libexc.h libunwind.h netdb.h')
diff --git a/source3/wscript_build b/source3/wscript_build
index 0d70a936ec..f724729f3b 100644
--- a/source3/wscript_build
+++ b/source3/wscript_build
@@ -215,8 +215,6 @@ LIB_SRC = '''${LIBSAMBAUTIL_SRC} ${UTIL_SRC}
LIB_DUMMY_SRC = '''lib/dummysmbd.c lib/dummyroot.c'''
LIB_NONSMBD_SRC = '''${LIB_DUMMY_SRC}'''
-READLINE_SRC = '''lib/readline.c'''
-
POPT_LIB_SRC = '''lib/popt_common.c'''
PARAM_WITHOUT_REG_SRC = '''param/loadparm.c param/util.c param/loadparm_server_role.c
@@ -986,6 +984,7 @@ t.env.BUILDDIR = bld.path.abspath()
bld.SETUP_BUILD_GROUPS()
bld.RECURSE('../lib/replace')
+bld.RECURSE('../libcli/smbreadline')
print "SBINDIR=%s" % bld.env.SBINDIR
bld.RECURSE('build')
@@ -1220,10 +1219,6 @@ bld.SAMBA_SUBSYSTEM('PROFILE',
source='${PROFILE_SRC}',
vars=locals())
-bld.SAMBA_SUBSYSTEM('READLINE',
- source=READLINE_SRC,
- vars=locals())
-
bld.SAMBA_SUBSYSTEM('PRINTBASE',
source=PRINTBASE_SRC,
vars=locals())
@@ -1359,21 +1354,21 @@ bld.SAMBA_BINARY('rpcclient/rpcclient',
source=RPCCLIENT_SRC,
deps='''talloc tdb cap resolv POPT_SAMBA PASSDB LIBSMB LIB_NONSMBD
PARAM_WITHOUT_REG libwbclient PARAM KRBCLIENT LIBMSRPC_GEN LIBMSRPC
- LIBADS READLINE DISPLAY_SEC DCUTIL''',
+ LIBADS SMBREADLINE DISPLAY_SEC DCUTIL''',
vars=locals())
bld.SAMBA_BINARY('smbclient',
source=CLIENT_SRC,
deps='''talloc tdb cap resolv POPT_SAMBA PASSDB LIBSMB LIB_NONSMBD
PARAM_WITHOUT_REG libwbclient PARAM KRBCLIENT LIBMSRPC_GEN
- LIBMSRPC READLINE DISPLAY_SEC SOCKET_WRAPPER''',
+ LIBMSRPC SMBREADLINE DISPLAY_SEC SOCKET_WRAPPER''',
vars=locals())
bld.SAMBA_BINARY('net',
source=NET_SRC,
deps='''talloc tdb libnetapi libaddns cap resolv POPT_SAMBA PASSDB LIBSMB LIB_NONSMBD
PARAM_WITHOUT_REG libwbclient PARAM KRBCLIENT LIBMSRPC_GEN LIBMSRPC LIBGPO LIBADS LIBADS_SERVER LIBADS_PRINTER
- LOCALE_DIR LIBAFS LIBAFS_SETTOKEN READLINE PASSWD_UTIL LIBNET
+ LOCALE_DIR LIBAFS LIBAFS_SETTOKEN SMBREADLINE PASSWD_UTIL LIBNET
LIBNET_DSSYNC LIBNET_SAMSYNC LIBEVENTLOG DISPLAY_SEC DCUTIL
REGFIO NDR_NTPRINTING''',
vars=locals())
@@ -1507,7 +1502,7 @@ bld.SAMBA_BINARY('pdbtest',
bld.SAMBA_BINARY('vfstest',
source=VFSTEST_SRC,
- deps='''SMBD_BASE READLINE''',
+ deps='''SMBD_BASE SMBREADLINE''',
vars=locals())
bld.SAMBA_BINARY('smbiconv',