]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Add utility to read user's input with prompt
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 16 Oct 2017 07:31:14 +0000 (08:31 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 16 Oct 2017 07:31:14 +0000 (08:31 +0100)
src/CMakeLists.txt
src/client/CMakeLists.txt
src/lua/lua_util.c
utils/CMakeLists.txt

index 4cca7dc027b70f48d415bf96db4ad1a3dce3082e..f01f7a45cff782ce11ef6341432284646004a14a 100644 (file)
@@ -183,6 +183,8 @@ IF (ENABLE_HYPERSCAN MATCHES "ON")
        TARGET_LINK_LIBRARIES(rspamd hs)
 ENDIF()
 
+TARGET_LINK_LIBRARIES(rspamd rspamd-linenoise)
+
 IF(USE_CXX_LINKER)
        SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE CXX)
 ENDIF()
index 0a92019d8c750d793d317a9c0c19b3020a053708..29abfb2c02c317343ed08b29d11fd5bd355db0e0 100644 (file)
@@ -8,6 +8,7 @@ ADD_EXECUTABLE(rspamc ${RSPAMCSRC} ${LIBRSPAMDCLIENTSRC})
 SET_TARGET_PROPERTIES(rspamc PROPERTIES COMPILE_FLAGS "-I${CMAKE_SOURCE_DIR}/lib")
 TARGET_LINK_LIBRARIES(rspamc rspamd-server)
 TARGET_LINK_LIBRARIES(rspamc ${RSPAMD_REQUIRED_LIBRARIES})
+TARGET_LINK_LIBRARIES(rspamc rspamd-linenoise)
 IF(USE_CXX_LINKER)
        SET_TARGET_PROPERTIES(rspamc PROPERTIES LINKER_LANGUAGE CXX)
 ENDIF()
index eedfcb625696c5b87e059a1e64ca6e6d7c38783c..6f782b254620ed21d22e48a7fc12adf72e397c05 100644 (file)
@@ -19,6 +19,7 @@
 #include "unix-std.h"
 #include "contrib/zstd/zstd.h"
 #include "libmime/email_addr.h"
+#include "linenoise.h"
 #include <math.h>
 #include <glob.h>
 
@@ -374,6 +375,13 @@ LUA_FUNCTION_DEF (util, is_utf_spoofed);
  */
 LUA_FUNCTION_DEF (util, is_valid_utf8);
 
+/***
+ * @function util.readline([prompt])
+ * Returns string read from stdin with history and editing support
+ * @return {boolean} true if a string is spoofed
+ */
+LUA_FUNCTION_DEF (util, readline);
+
 /***
  * @function util.pack(fmt, ...)
  *
@@ -516,6 +524,7 @@ static const struct luaL_reg utillib_f[] = {
        LUA_INTERFACE_DEF (util, caseless_hash_fast),
        LUA_INTERFACE_DEF (util, is_utf_spoofed),
        LUA_INTERFACE_DEF (util, is_valid_utf8),
+       LUA_INTERFACE_DEF (util, readline),
        LUA_INTERFACE_DEF (util, get_hostname),
        LUA_INTERFACE_DEF (util, pack),
        LUA_INTERFACE_DEF (util, unpack),
@@ -2046,6 +2055,30 @@ lua_util_is_valid_utf8 (lua_State *L)
        return 1;
 }
 
+static gint
+lua_util_readline (lua_State *L)
+{
+       const gchar *prompt = NULL;
+       gchar *input;
+
+       if (lua_type (L, 1) == LUA_TSTRING) {
+               prompt = lua_tostring (L, 1);
+       }
+
+       input = linenoise (prompt);
+
+       if (input) {
+               lua_pushstring (L, input);
+               linenoiseHistoryAdd (input);
+               linenoiseFree (input);
+       }
+       else {
+               lua_pushnil (L);
+       }
+
+       return 1;
+}
+
 /* Backport from Lua 5.3 */
 
 /******************************************************************************
index 9d42c604edf55a2d4b45c2220e0e67ad0a672ea3..0f65b06ceb5163e5886e96fe77853c4a870cb546 100644 (file)
@@ -19,6 +19,7 @@ MACRO(ADD_UTIL NAME)
        IF(ENABLE_HIREDIS MATCHES "ON")
                TARGET_LINK_LIBRARIES("${NAME}" rspamd-hiredis)
        ENDIF()
+       TARGET_LINK_LIBRARIES(${NAME} rspamd-linenoise)
        TARGET_LINK_LIBRARIES("${NAME}" ${RSPAMD_REQUIRED_LIBRARIES})
 ENDMACRO()