修正:审计页面没有显示用户姓名,仅显示了用户登录账号名;

修正:telnet配置为无用户名密码登录时,总是提示参数错误;
其他:去掉构建脚本对python2的支持;
dev
Apex Liu 2020-12-05 01:33:47 +08:00
parent a50b540b95
commit 3a42600b73
11 changed files with 129 additions and 263 deletions

View File

@ -4,9 +4,6 @@ MESSAGE(STATUS "operation system is ${CMAKE_SYSTEM}")
MESSAGE(STATUS "root source directory is ${PROJECT_SOURCE_DIR}")
MESSAGE(STATUS "current source directory is ${CMAKE_CURRENT_SOURCE_DIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/out/server/x64/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/out/server/x64/bin")
set(CMAKE_CONFIGURATION_TYPES Debug Release)
# Determine the platform.
@ -16,12 +13,16 @@ if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
set(OS_POSIX 1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(TP_EXTERNAL_RELEASE_DIR "${PROJECT_SOURCE_DIR}/external/macos/release")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/out/server/macos/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/out/server/macos/bin")
elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
MESSAGE(STATUS "build on Linux...")
set(OS_LINUX 1)
set(OS_POSIX 1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(TP_EXTERNAL_RELEASE_DIR "${PROJECT_SOURCE_DIR}/external/linux/release")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/out/server/linux/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/out/server/linux/bin")
elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
MESSAGE(FATAL_ERROR "unsupported platform: Windows")
else ()

View File

@ -11,11 +11,6 @@ import builder.core.colorconsole as cc
import builder.core.utils as utils
from builder.core.context import *
if env.is_py2:
_input = raw_input
else:
_input = input
options = list()
options_idx = 0
ctx = BuildContext()
@ -27,9 +22,6 @@ def main():
if not env.init(warn_miss_tool=True):
return
# wget = os.environ.get('TP_TOOLCHAIN_WGET')
# cc.w(wget)
action = None
argv = sys.argv[1:]
if len(argv) >= 1:
@ -46,7 +38,21 @@ def main():
make_options()
if action is not None:
cc.v(action)
if action == '-h' or action == '--help':
max_name_len = 0
for x in options:
if x['id'] != '--SPLIT-LINE--':
max_name_len = max(len(x['name']), max_name_len)
max_name_len += 4
for x in options:
if x['id'] != '--SPLIT-LINE--':
name_pad = max_name_len - len(x['name'])
cc.o((cc.CR_INFO, x['name']), (cc.CR_VERBOSE, ' ' * name_pad), (cc.CR_VERBOSE, x['disp']))
return
# cc.v(action)
opt = select_option_by_name(action)
if opt is None:
cc.e('unknown config: ', action)
@ -61,16 +67,6 @@ def main():
if x == 'q':
break
# if x == 'c':
# clean_all()
# continue
# elif x == 'a':
# clean_everything()
# continue
# elif x == 'e':
# clean_external()
# continue
try:
x = int(x)
except:
@ -91,7 +87,7 @@ def main():
cc.w('\ntask finished, press Enter to continue or Q to quit...', end='')
try:
x = _input()
x = input()
except EOFError:
x = 'q'
if x == 'q':
@ -124,16 +120,16 @@ def clean_everything():
def clean_external():
#utils.remove(os.path.join(env.root_path, 'out'))
# utils.remove(os.path.join(env.root_path, 'out'))
utils.remove(os.path.join(env.root_path, 'external', 'jsoncpp'))
utils.remove(os.path.join(env.root_path, 'external', 'libuv'))
utils.remove(os.path.join(env.root_path, 'external', 'mbedtls'))
utils.remove(os.path.join(env.root_path, 'external', 'mongoose'))
#utils.remove(os.path.join(env.root_path, 'external', 'openssl'))
#utils.remove(os.path.join(env.root_path, 'external', 'python'))
#utils.remove(os.path.join(env.root_path, 'external', 'libssh-win-static', 'lib'))
#utils.remove(os.path.join(env.root_path, 'external', 'libssh-win-static', 'src'))
#utils.remove(os.path.join(env.root_path, 'external', 'linux', 'tmp'))
# utils.remove(os.path.join(env.root_path, 'external', 'openssl'))
# utils.remove(os.path.join(env.root_path, 'external', 'python'))
# utils.remove(os.path.join(env.root_path, 'external', 'libssh-win-static', 'lib'))
# utils.remove(os.path.join(env.root_path, 'external', 'libssh-win-static', 'src'))
# utils.remove(os.path.join(env.root_path, 'external', 'linux', 'tmp'))
utils.remove(os.path.join(env.root_path, 'external', 'linux', 'release', 'lib', 'libmbedcrypto.a'))
utils.remove(os.path.join(env.root_path, 'external', 'linux', 'release', 'lib', 'libmbedtls.a'))
utils.remove(os.path.join(env.root_path, 'external', 'linux', 'release', 'lib', 'libmbedx509.a'))
@ -153,9 +149,6 @@ def do_opt(opt):
elif 'pysrt' == opt['name']:
script = 'build-pysrt.py'
# elif 'external' == opt['name']:
# script = 'build-external.py'
# arg = '%s %s' % (ctx.target_path, opt['bits'])
elif opt['name'] in ['ext-client', 'ext-server', 'clear-ext-client', 'clear-ext-server']:
script = 'build-external.py'
arg = '%s %s %s' % (opt['name'], ctx.target_path, opt['bits'])
@ -166,15 +159,12 @@ def do_opt(opt):
elif 'server-installer' == opt['name']:
script = 'build-installer.py'
# arg = 'installer'
arg = '%s %s server-installer' % (ctx.dist, opt['bits'])
elif 'client' == opt['name']:
script = 'build-assist.py'
arg = '%s %s exe' % (ctx.target_path, opt['bits'])
# elif 'assist-rdp' == opt['name']:
# script = 'build-assist.py'
# arg = '%s rdp' % (opt['bits'])
elif 'client-installer' == opt['name']:
script = 'build-assist.py'
arg = '%s %s installer' % (ctx.dist, opt['bits'])
@ -183,47 +173,35 @@ def do_opt(opt):
cc.e('unknown option: ', opt['name'])
return
# cmd = '"%s" -B "%s" %s' % (utils.cfg.py_exec, os.path.join(BUILDER_PATH, script), arg)
cmd = '%s -B %s %s' % (env.py_exec, os.path.join(env.builder_path, script), arg)
print(cmd)
os.system(cmd)
def select_option_by_name(name):
global options
for o in range(len(options)):
if options[o] is None:
continue
if name == options[o]['name']:
return options[o]
for x in options:
if x['id'] != '--SPLIT-LINE--':
if name == x['name']:
return x
return None
def select_option_by_id(_id):
global options
for x in options:
if x['id'] == _id:
return x
for o in range(len(options)):
if options[o] is None:
continue
if options[o]['id'] == _id:
return options[o]
return None
def add_option(bits, name, disp):
global options, options_idx
options_idx += 1
# if bits is not None:
# disp = '[%s] %s' % (bits, disp)
options.append({'id': options_idx, 'name': name, 'disp': disp, 'bits': bits})
def add_split(title=None):
global options
# options.append(None)
options.append({'id': '--SPLIT-LINE--', 'title': title})
@ -258,8 +236,8 @@ def make_options():
add_option('x64', 'client', 'build client applications [%s]' % ctx.target_path)
add_option('x64', 'client-installer', 'make client installer')
add_split('server side')
add_option('x64', 'ext-server', 'build external libraries for server')
add_option('x64', 'server', '(DEV-ONLY) build server applications [%s]' % ctx.target_path)
add_option('x64', 'ext-server', '(DEV-ONLY) build external libraries for server')
add_option('x64', 'server', '(DEV-ONLY) build server applications for MacOS [%s]' % ctx.target_path)
add_split('clear')
add_option('x64', 'clear-ext-client', 'clear external libraries for client')
add_option('x64', 'clear-ext-server', 'clear external libraries for server')
@ -282,47 +260,36 @@ def make_options():
def get_input(msg, log_func=cc.w):
log_func(msg, end=' ')
try:
return _input()
return input()
except EOFError:
return ''
def show_logo():
cc.v('[]==========================================================[]')
cc.o((cc.CR_VERBOSE, ' | '), (cc.CR_INFO, 'Teleport Projects Builder'), (cc.CR_VERBOSE, ' |'))
cc.v(' | Teleport Projects Builder v2.0 |')
cc.v(' | auth: apex.liu@qq.com |')
cc.v('[]==========================================================[]')
def show_menu():
cc.v('\n=====================[ MENU ]===============================')
for o in range(len(options)):
if options[o]['id'] == '--SPLIT-LINE--':
if options[o]['title'] is not None:
# title = ' {}: '.format(options[o]['title'])
# pad = '-' * (60 - len(title))
# cc.v('\n{}{}'.format(title, pad))
cc.w('\n {}:'.format(options[o]['title']))
for o in options:
if o['id'] == '--SPLIT-LINE--':
if o['title'] is not None:
cc.w('\n {}:'.format(o['title']))
else:
cc.v('\n ----------------------------------------------------------')
continue
# if options[o] is None:
# cc.v(' -------------------------------------------------------')
# continue
cc.o((cc.CR_NORMAL, ' ['), (cc.CR_INFO, '%2d' % options[o]['id']), (cc.CR_NORMAL, '] ', options[o]['disp']))
# cc.v(' -------------------------------------------------------')
# cc.o((cc.CR_NORMAL, ' ['), (cc.CR_INFO, ' E'), (cc.CR_NORMAL, '] clean external temp. files.'))
# cc.o((cc.CR_NORMAL, ' ['), (cc.CR_INFO, ' C'), (cc.CR_NORMAL, '] clean build and dist.'))
# cc.o((cc.CR_NORMAL, ' ['), (cc.CR_INFO, ' A'), (cc.CR_NORMAL, '] clean everything.'))
cc.o((cc.CR_NORMAL, ' ['), (cc.CR_INFO, '%2d' % o['id']), (cc.CR_NORMAL, '] ', o['disp']))
cc.v('\n ----------------------------------------------------------')
cc.o((cc.CR_NORMAL, ' ['), (cc.CR_INFO, ' Q'), (cc.CR_NORMAL, '] exit'))
cc.w('\nselect action: ', end='')
try:
x = _input()
x = input()
except EOFError:
x = 'q'
@ -338,4 +305,4 @@ if __name__ == '__main__':
except RuntimeError as e:
cc.e(e.__str__())
except:
cc.f('got exception.')
cc.f('got an exception.')

View File

@ -166,7 +166,7 @@ class BuilderWin(BuilderBase):
cc.w('please install OpenSSL into "{}".'.format(self.OPENSSL_PATH_SRC))
cc.w('\nOnce the OpenSSL installed, press Enter to continue or Q to quit...', end='')
try:
x = env.input()
x = input()
except EOFError:
x = 'q'
if x == 'q':
@ -349,7 +349,7 @@ class BuilderWin(BuilderBase):
cc.w('for Visual Studio 2017. Visit https://docs.tp4a.com for more details.')
cc.w('\nOnce the zlib.sln generated, press Enter to continue or Q to quit...', end='')
try:
x = env.input()
x = input()
except EOFError:
x = 'q'
if x == 'q':

View File

@ -129,7 +129,7 @@ class BuilderLinux(BuilderBase):
utils.fix_new_line_flag(os.path.join(self.path_tmp_data, 'tmp', 'etc', 'web.ini'))
utils.fix_new_line_flag(os.path.join(self.path_tmp_data, 'tmp', 'etc', 'core.ini'))
out_path = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, 'bin')
out_path = os.path.join(env.root_path, 'out', 'server', 'linux', 'bin')
bin_path = os.path.join(self.path_tmp_data, 'bin')
utils.copy_ex(out_path, bin_path, 'tp_web')
utils.copy_ex(out_path, bin_path, 'tp_core')

View File

@ -206,85 +206,12 @@ class ColorConsole:
s = traceback.extract_stack()
c = len(s)
self._console_set_color(CR_RED)
for i in range(2, c):
for i in range(1, c):
self._console_output(' ', os.path.abspath(s[c - i - 1][0]), '(', s[c - i - 1][1], '): ', s[c - i - 1][3], sep='')
self._console_restore_color()
sys.stdout.flush()
# def _do_log(self, msg, color=None):
# self._log_console(msg, color)
#
# def _console_default(self, msg, color=None):
# if msg is None:
# return
#
# sys.stdout.writelines(msg)
# sys.stdout.flush()
#
# def _console_win(self, msg, color=None):
# if msg is None:
# return
#
# # 这里的问题很复杂,日常使用没有问题,但是当在工作机上使用时,部分内容是捕获另一个脚本执行的结果再输出
# # 如果结果中有中文,这里就会显示乱码。如果尝试编码转换,会抛出异常。目前暂时采用显示乱码的方式了。
#
# # if CONSOLE_WIN_CMD == self.console_type:
# # try:
# # _msg = unicode(msg, 'utf-8')
# # except:
# # _msg = msg
# # else:
# # _msg = msg
# # _msg = None
# # if isinstance(msg, unicode):
# # _msg = msg
# # else:
# # # _msg = unicode(msg, 'utf-8')
# # try:
# # _msg = unicode(msg, 'utf-8')
# # except:
# # _msg = unicode(msg, 'gb2312')
# # # _msg = msg
# #
# # # if CONSOLE_WIN_CMD == self.console_type:
# # # sys.stdout.writelines(msg.encode('gb2312'))
# # # else:
# # # sys.stdout.writelines(msg.encode('utf-8'))
# #
# #
# # # try:
# # # _msg = unicode(msg, 'utf-8')
# # # except:
# # _msg = msg
#
# if color is None:
# sys.stdout.writelines(msg)
# else:
# self._win_color.set_color(COLORS[color][1])
# sys.stdout.writelines(msg)
# sys.stdout.flush()
# self._win_color.set_color(COLORS[CR_RESTORE][1])
#
# sys.stdout.flush()
#
# def _console_linux(self, msg, cr=None):
# if msg is None:
# return
#
# if cr is None:
# sys.stdout.writelines(msg)
# else:
# sys.stdout.writelines('\x1B')
# sys.stdout.writelines(COLORS[cr][0])
# sys.stdout.writelines(msg)
# sys.stdout.writelines('\x1B[0m')
#
# sys.stdout.flush()
# def _console_set_color_default(self, cr=None):
# pass
def _console_set_color_win(self, cr=None):
if cr is None:
return
@ -325,55 +252,33 @@ class ColorConsole:
sys.stdout.writelines(end)
sys.stdout.flush()
# def _test(self):
# self.log('###################', CR_RESTORE)
# self.log(' CR_RESTORE\n')
# self.log('###################', CR_BLACK)
# self.log(' CR_BLACK\n')
# self.log('###################', CR_LIGHT_GRAY)
# self.log(' CR_LIGHT_GRAY\n')
# self.log('###################', CR_GRAY)
# self.log(' CR_GRAY\n')
# self.log('###################', CR_WHITE)
# self.log(' CR_WHITE\n')
# self.log('###################', CR_RED)
# self.log(' CR_RED\n')
# self.log('###################', CR_GREEN)
# self.log(' CR_GREEN\n')
# self.log('###################', CR_YELLOW)
# self.log(' CR_YELLOW\n')
# self.log('###################', CR_BLUE)
# self.log(' CR_BLUE\n')
# self.log('###################', CR_MAGENTA)
# self.log(' CR_MAGENTA\n')
# self.log('###################', CR_CYAN)
# self.log(' CR_CYAN\n')
# self.log('###################', CR_LIGHT_RED)
# self.log(' CR_LIGHT_RED\n')
# self.log('###################', CR_LIGHT_GREEN)
# self.log(' CR_LIGHT_GREEN\n')
# self.log('###################', CR_LIGHT_YELLOW)
# self.log(' CR_LIGHT_YELLOW\n')
# self.log('###################', CR_LIGHT_BLUE)
# self.log(' CR_LIGHT_BLUE\n')
# self.log('###################', CR_LIGHT_MAGENTA)
# self.log(' CR_LIGHT_MAGENTA\n')
# self.log('###################', CR_LIGHT_CYAN)
# self.log(' CR_LIGHT_CYAN\n')
# # data = b'This is a test string and you can see binary format data here.'
# # self.bin('Binary Data:\n', data)
# # data = b''
# # self.bin('Empty binary\n', data)
# # self.bin('This is string\n\n', 'data')
#
# # self.d('This is DEBUG message.\n')
# self.v('This is VERBOSE message.\n')
# self.i('This is INFORMATION message.\n')
# self.w('This is WARNING message.\n')
# self.e('This is ERROR message.\n')
# self.f('This is FAIL message.\n')
#
# self.v('test auto\nsplit lines.\nYou should see\nmulti-lines.\n')
def test(self):
self.o((CR_RESTORE, '################### CR_RESTORE'))
self.o((CR_BLACK, '################### CR_BLACK'))
self.o((CR_LIGHT_GRAY, '################### CR_LIGHT_GRAY'))
self.o((CR_GRAY, '################### CR_GRAY'))
self.o((CR_WHITE, '################### CR_WHITE'))
self.o((CR_RED, '################### CR_RED'))
self.o((CR_GREEN, '################### CR_GREEN'))
self.o((CR_YELLOW, '################### CR_YELLOW'))
self.o((CR_BLUE, '################### CR_BLUE'))
self.o((CR_MAGENTA, '################### CR_MAGENTA'))
self.o((CR_CYAN, '################### CR_CYAN'))
self.o((CR_LIGHT_RED, '################### CR_LIGHT_RED'))
self.o((CR_LIGHT_GREEN, '################### CR_LIGHT_GREEN'))
self.o((CR_LIGHT_YELLOW, '################### CR_LIGHT_YELLOW'))
self.o((CR_LIGHT_BLUE, '################### CR_LIGHT_BLUE'))
self.o((CR_LIGHT_MAGENTA, '################### CR_LIGHT_MAGENTA'))
self.o((CR_LIGHT_CYAN, '################### CR_LIGHT_CYAN'))
self.v('This is VERBOSE message.')
self.n('This is NORMAL message.')
self.i('This is INFORMATION message.')
self.w('This is WARNING message.')
self.e('This is ERROR message.')
self.f('This is FAIL message, show backtrace also.')
self.v('test auto\nsplit lines.\nYou should see\nmulti-lines.\n')
class Win32ColorConsole:
@ -474,3 +379,7 @@ def e(*args, **kwargs):
def f(*args, **kwargs):
_cc.f(*args, **kwargs)
if __name__ == '__main__':
_cc.test()

View File

@ -26,14 +26,6 @@ class Env(object):
self.build_path = os.path.abspath(os.path.join(_this_path, '..', '..'))
self.builder_path = os.path.join(self.build_path, 'builder')
self.is_py2 = sys.version_info[0] == 2
self.is_py3 = sys.version_info[0] == 3
if self.is_py2:
self.input = raw_input
else:
self.input = input
self.py_ver = platform.python_version_tuple()
self.py_ver_str = '%s%s' % (self.py_ver[0], self.py_ver[1])
self.py_ver_dot = '%s.%s' % (self.py_ver[0], self.py_ver[1])
@ -76,10 +68,8 @@ class Env(object):
def _load_config(self, warn_miss_tool):
_cfg_file = 'config.{}.json'.format(self.plat)
# _cfg_file = os.path.join(self.root_path, 'config.ini')
_cfg_file = os.path.join(self.root_path, _cfg_file)
if not os.path.exists(_cfg_file):
# cc.e('can not load configuration.\n\nplease copy `config.ini.in` to `config.ini` and modify it to fit your condition and try again.')
cc.e('can not load configuration.\n\nplease copy `config.json.in` to `config.{}.json` and modify it to fit your condition and try again.'.format(self.plat))
return False
@ -90,12 +80,6 @@ class Env(object):
cc.e('can ot load configuration file, not in JSON format.')
return False
# _cfg = configparser.ConfigParser()
# _cfg.read(_cfg_file)
# if 'toolchain' not in _cfg.sections():
# cc.e('invalid configuration file: need `toolchain` section.')
# return False
if 'toolchain' not in _cfg:
cc.e('invalid configuration file: need `toolchain` section.')
return False

View File

@ -9,11 +9,8 @@ import time
from . import colorconsole as cc
from .env import env
if env.is_py2:
import imp
elif env.is_py3:
import importlib
import importlib.machinery
import importlib
import importlib.machinery
def _check_download_file(file_name):
@ -96,13 +93,7 @@ def extension_suffixes():
# type为文件类型, 1代表PY_SOURCE, 2代表PY_COMPILED, 3代表C_EXTENSION
EXTENSION_SUFFIXES = list()
if env.is_py2:
suf = imp.get_suffixes()
for s in suf:
if s[2] == 3:
EXTENSION_SUFFIXES.append(s[0])
else:
EXTENSION_SUFFIXES = importlib.machinery.EXTENSION_SUFFIXES
EXTENSION_SUFFIXES = importlib.machinery.EXTENSION_SUFFIXES
if env.is_win:
if '.dll' not in EXTENSION_SUFFIXES:

View File

@ -713,33 +713,35 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf) {
//==============================================
// sorry, TELNET not supported yet for macOS.
_create_json_ret(buf, TPE_NOT_IMPLEMENT);
return;
// _create_json_ret(buf, TPE_NOT_IMPLEMENT);
// return;
// if(g_cfg.telnet.name == "terminal" || g_cfg.telnet.name == "iterm2") {
// char szCmd[1024] = {0};
// ex_strformat(szCmd, 1023, "telnet -l %s %s %d", sid.c_str(), teleport_ip.c_str(), teleport_port);
//
// char szTitle[128] = {0};
// ex_strformat(szTitle, 127, "TP#%s", real_host_ip.c_str());
//
// int ret = AppDelegate_start_ssh_client(g_app, szCmd, g_cfg.telnet.name.c_str(), g_cfg.telnet.cmdline.c_str(), szTitle);
// if(ret == 0)
// _create_json_ret(buf, TPE_OK);
// else
// _create_json_ret(buf, TPE_FAILED);
// return;
// }
//
// if(g_cfg.telnet.application.length() == 0) {
// _create_json_ret(buf, TPE_NOT_EXISTS);
// return;
// }
//
// s_exec = g_cfg.telnet.application;
// s_argv.push_back(s_exec.c_str());
//
// s_arg = g_cfg.telnet.cmdline;
g_cfg.telnet.name = "iterm2";
if(g_cfg.telnet.name == "terminal" || g_cfg.telnet.name == "iterm2") {
char szCmd[1024] = {0};
ex_strformat(szCmd, 1023, "telnet -l %s %s %d", sid.c_str(), teleport_ip.c_str(), teleport_port);
char szTitle[128] = {0};
ex_strformat(szTitle, 127, "TP#%s", real_host_ip.c_str());
int ret = AppDelegate_start_ssh_client(g_app, szCmd, g_cfg.telnet.name.c_str(), g_cfg.telnet.cmdline.c_str(), szTitle);
if(ret == 0)
_create_json_ret(buf, TPE_OK);
else
_create_json_ret(buf, TPE_FAILED);
return;
}
if(g_cfg.telnet.application.length() == 0) {
_create_json_ret(buf, TPE_NOT_EXISTS);
return;
}
s_exec = g_cfg.telnet.application;
s_argv.push_back(s_exec.c_str());
s_arg = g_cfg.telnet.cmdline;
}

View File

@ -94,7 +94,7 @@ function build_macos
{
check_cfg_file
python3 -B "${PATH_ROOT}/build/build.py" $@
python3 -B "${PATH_ROOT}/build/build.py" $@
}
function on_error()

View File

@ -194,7 +194,7 @@ int ts_web_rpc_get_conn_info(int conn_id, TS_CONNECT_INFO& info)
|| user_username.length() == 0
|| host_ip.length() == 0 || conn_ip.length() == 0 || client_ip.length() == 0
|| conn_port <= 0 || conn_port >= 65535
|| acc_username.length() == 0 || acc_secret.length() == 0
|| acc_username.length() == 0
|| !(protocol_type == TP_PROTOCOL_TYPE_RDP || protocol_type == TP_PROTOCOL_TYPE_SSH || protocol_type == TP_PROTOCOL_TYPE_TELNET)
|| !(auth_type == TP_AUTH_TYPE_NONE || auth_type == TP_AUTH_TYPE_PASSWORD || auth_type == TP_AUTH_TYPE_PRIVATE_KEY)
)
@ -202,7 +202,11 @@ int ts_web_rpc_get_conn_info(int conn_id, TS_CONNECT_INFO& info)
return TPE_PARAM;
}
if (_enc) {
if(auth_type != TP_AUTH_TYPE_NONE && acc_secret.length() == 0) {
return TPE_PARAM;
}
if (_enc && !acc_secret.empty()) {
ex_astr _auth;
if (!ts_db_field_decrypt(acc_secret, _auth))
return TPE_FAILED;

View File

@ -493,10 +493,18 @@ def session_fix():
def session_begin(sid, user_id, host_id, acc_id, user_username, acc_username, host_ip, conn_ip, conn_port, client_ip, auth_type, protocol_type, protocol_sub_type):
db = get_db()
sql = 'INSERT INTO `{}record` (sid,user_id,host_id,acc_id,state,user_username,host_ip,conn_ip,conn_port,client_ip,acc_username,auth_type,protocol_type,protocol_sub_type,time_begin,time_end) ' \
'VALUES ("{sid}",{user_id},{host_id},{acc_id},0,"{user_username}","{host_ip}","{conn_ip}",{conn_port},"{client_ip}","{acc_username}",{auth_type},{protocol_type},{protocol_sub_type},{time_begin},0)' \
sql = 'SELECT surname FROM `{tp}user` WHERE id={ph};'.format(tp=db.table_prefix, ph=db.place_holder)
db_ret = db.query(sql, (user_id, ))
if db_ret is None or len(db_ret) == 0:
user_surname = user_username
else:
user_surname = db_ret[0][0]
sql = 'INSERT INTO `{}record` (sid,user_id,host_id,acc_id,state,user_username,user_surname,host_ip,conn_ip,conn_port,client_ip,acc_username,auth_type,protocol_type,protocol_sub_type,time_begin,time_end) ' \
'VALUES ("{sid}",{user_id},{host_id},{acc_id},0,"{user_username}","{user_surname}","{host_ip}","{conn_ip}",{conn_port},"{client_ip}","{acc_username}",{auth_type},{protocol_type},{protocol_sub_type},{time_begin},0)' \
';'.format(db.table_prefix,
sid=sid, user_id=user_id, host_id=host_id, acc_id=acc_id, user_username=user_username, host_ip=host_ip, conn_ip=conn_ip, conn_port=conn_port,
sid=sid, user_id=user_id, host_id=host_id, acc_id=acc_id, user_username=user_username, user_surname=user_surname, host_ip=host_ip, conn_ip=conn_ip, conn_port=conn_port,
client_ip=client_ip, acc_username=acc_username, auth_type=auth_type, protocol_type=protocol_type, protocol_sub_type=protocol_sub_type,
time_begin=tp_timestamp_sec())