From 987b1c2c36d69fba70ebc6e5077403d832f2d288 Mon Sep 17 00:00:00 2001 From: kelianchun_miller Date: Wed, 11 May 2016 11:10:48 +0800 Subject: [PATCH 1/7] fix passwd input --- connect.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/connect.py b/connect.py index 8e138c6c5..f11dbf9d9 100755 --- a/connect.py +++ b/connect.py @@ -305,7 +305,6 @@ class SshTty(Tty): old_tty = termios.tcgetattr(sys.stdin) pre_timestamp = time.time() data = '' - input_str = '' input_mode = False try: tty.setraw(sys.stdin.fileno()) @@ -325,8 +324,7 @@ class SshTty(Tty): x = self.channel.recv(10240) if len(x) == 0: break - if self.vim_flag: - self.vim_data += x + index = 0 len_x = len(x) while index < len_x: @@ -347,11 +345,11 @@ class SshTty(Tty): pre_timestamp = now_timestamp log_file_f.flush() - if input_mode and not self.is_output(x): + if self.vim_flag: + self.vim_data += x + elif input_mode: data += x - input_str = '' - except socket.timeout: pass @@ -362,11 +360,7 @@ class SshTty(Tty): pass termlog.recoder = True input_mode = True - input_str += x - if str(x) in ['\r', '\n', '\r\n']: - # 这个是用来处理用户的复制操作 - if input_str != x: - data += input_str + if self.is_output(str(x)): if self.vim_flag: match = self.vim_end_pattern.findall(self.vim_data) if match: @@ -376,11 +370,13 @@ class SshTty(Tty): else: self.vim_end_flag = True else: + # 如果len(str(x)) > 1 说明是复制输入的 + if len(str(x)) > 1: + data = x data = self.deal_command(data)[0:200] if len(data) > 0: TtyLog(log=log, datetime=datetime.datetime.now(), cmd=data).save() data = '' - input_str = '' self.vim_data = '' input_mode = False From f71c8551e8a2351ff10c749483ffc318e3c50b0b Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 11 May 2016 11:31:53 +0800 Subject: [PATCH 2/7] fix passwd input (#232) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复记录敏感密码bug --- connect.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/connect.py b/connect.py index 2c312fe25..97362eb68 100755 --- a/connect.py +++ b/connect.py @@ -305,7 +305,6 @@ class SshTty(Tty): old_tty = termios.tcgetattr(sys.stdin) pre_timestamp = time.time() data = '' - input_str = '' input_mode = False try: tty.setraw(sys.stdin.fileno()) @@ -325,8 +324,7 @@ class SshTty(Tty): x = self.channel.recv(10240) if len(x) == 0: break - if self.vim_flag: - self.vim_data += x + index = 0 len_x = len(x) while index < len_x: @@ -347,11 +345,11 @@ class SshTty(Tty): pre_timestamp = now_timestamp log_file_f.flush() - if input_mode and not self.is_output(x): + if self.vim_flag: + self.vim_data += x + elif input_mode: data += x - input_str = '' - except socket.timeout: pass @@ -362,11 +360,7 @@ class SshTty(Tty): pass termlog.recoder = True input_mode = True - input_str += x - if str(x) in ['\r', '\n', '\r\n']: - # 这个是用来处理用户的复制操作 - if input_str != x: - data += input_str + if self.is_output(str(x)): if self.vim_flag: match = self.vim_end_pattern.findall(self.vim_data) if match: @@ -376,11 +370,13 @@ class SshTty(Tty): else: self.vim_end_flag = True else: + # 如果len(str(x)) > 1 说明是复制输入的 + if len(str(x)) > 1: + data = x data = self.deal_command(data)[0:200] if len(data) > 0: TtyLog(log=log, datetime=datetime.datetime.now(), cmd=data).save() data = '' - input_str = '' self.vim_data = '' input_mode = False From dff50305dea035d0f464f420da09c2b7d959d597 Mon Sep 17 00:00:00 2001 From: kelianchun_miller Date: Wed, 11 May 2016 17:18:40 +0800 Subject: [PATCH 3/7] fix passwd input --- connect.py | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/connect.py b/connect.py index f11dbf9d9..5073d2d47 100755 --- a/connect.py +++ b/connect.py @@ -93,9 +93,7 @@ class Tty(object): self.remote_ip = '' self.login_type = login_type self.vim_flag = False - self.vim_end_flag = False self.vim_end_pattern = re.compile(r'\x1b\[\?1049', re.X) - self.vim_pattern = re.compile(r'\W?vi[m]?\s.* | \W?fg\s.*', re.X) self.vim_data = '' self.stream = None self.screen = None @@ -117,7 +115,8 @@ class Tty(object): return True return False - def command_parser(self, command): + @staticmethod + def command_parser(command): """ 处理命令中如果有ps1或者mysql的特殊情况,极端情况下会有ps1和mysql :param command:要处理的字符传 @@ -157,14 +156,10 @@ class Tty(object): else: command = line_data break - if command != '': - # 判断用户输入的是否是vim 或者fg命令 - if self.vim_pattern.search(command): - self.vim_flag = True - # 虚拟屏幕清空 - self.screen.reset() except Exception: pass + # 虚拟屏幕清空 + self.screen.reset() return command def get_log(self): @@ -345,9 +340,8 @@ class SshTty(Tty): pre_timestamp = now_timestamp log_file_f.flush() - if self.vim_flag: - self.vim_data += x - elif input_mode: + self.vim_data += x + if input_mode: data += x except socket.timeout: @@ -361,21 +355,20 @@ class SshTty(Tty): termlog.recoder = True input_mode = True if self.is_output(str(x)): - if self.vim_flag: - match = self.vim_end_pattern.findall(self.vim_data) - if match: - if self.vim_end_flag or len(match) == 2: - self.vim_flag = False - self.vim_end_flag = False - else: - self.vim_end_flag = True - else: - # 如果len(str(x)) > 1 说明是复制输入的 - if len(str(x)) > 1: - data = x + # 如果len(str(x)) > 1 说明是复制输入的 + if len(str(x)) > 1: + data = x + match = self.vim_end_pattern.findall(self.vim_data) + if match: + if self.vim_flag or len(match) == 2: + self.vim_flag = False + else: + self.vim_flag = True + elif not self.vim_flag: + self.vim_flag = False data = self.deal_command(data)[0:200] - if len(data) > 0: - TtyLog(log=log, datetime=datetime.datetime.now(), cmd=data).save() + if data is not None: + TtyLog(log=log, datetime=datetime.datetime.now(), cmd=result).save() data = '' self.vim_data = '' input_mode = False From 3ef3b452e29ec5a585a314ab577d7bc418bff5cd Mon Sep 17 00:00:00 2001 From: kelianchun_miller Date: Wed, 11 May 2016 17:21:15 +0800 Subject: [PATCH 4/7] fix passwd input --- connect.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/connect.py b/connect.py index 5073d2d47..f9adccd79 100755 --- a/connect.py +++ b/connect.py @@ -368,7 +368,7 @@ class SshTty(Tty): self.vim_flag = False data = self.deal_command(data)[0:200] if data is not None: - TtyLog(log=log, datetime=datetime.datetime.now(), cmd=result).save() + TtyLog(log=log, datetime=datetime.datetime.now(), cmd=data).save() data = '' self.vim_data = '' input_mode = False From c0e91896df336ba518fd7e146e9f0abf897df647 Mon Sep 17 00:00:00 2001 From: kelianchun_miller Date: Wed, 11 May 2016 18:27:26 +0800 Subject: [PATCH 5/7] fix passwd input --- run_server.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/run_server.py b/run_server.py index 416c86f70..51c080529 100755 --- a/run_server.py +++ b/run_server.py @@ -373,15 +373,13 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler): self.termlog.recoder = True self.term.input_mode = True if str(jsondata['data']) in ['\r', '\n', '\r\n']: - if self.term.vim_flag: - match = re.compile(r'\x1b\[\?1049', re.X).findall(self.term.vim_data) - if match: - if self.term.vim_end_flag or len(match) == 2: - self.term.vim_flag = False - self.term.vim_end_flag = False - else: - self.term.vim_end_flag = True - else: + match = re.compile(r'\x1b\[\?1049', re.X).findall(self.term.vim_data) + if match: + if self.term.vim_flag or len(match) == 2: + self.term.vim_flag = False + else: + self.term.vim_flag = True + elif not self.term.vim_flag: result = self.term.deal_command(self.term.data)[0:200] if len(result) > 0: TtyLog(log=self.log, datetime=datetime.datetime.now(), cmd=result).save() @@ -424,8 +422,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler): if not len(recv): return data += recv - if self.term.vim_flag: - self.term.vim_data += recv + self.term.vim_data += recv try: self.write_message(data.decode('utf-8', 'replace')) self.termlog.write(data) @@ -436,7 +433,7 @@ class WebTerminalHandler(tornado.websocket.WebSocketHandler): pre_timestamp = now_timestamp self.log_file_f.flush() self.log_time_f.flush() - if self.term.input_mode and not self.term.is_output(data): + if self.term.input_mode: self.term.data += data data = '' except UnicodeDecodeError: From a1859676e422916e263273e12716b6348cd2f499 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 11 May 2016 19:13:38 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix(connect)=20=E8=BE=93=E5=85=A5role=20id?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E8=BE=93=E5=85=A5=E4=BA=86role=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 抓取后并处理 --- connect.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/connect.py b/connect.py index f0f8effd3..5ff7ae268 100755 --- a/connect.py +++ b/connect.py @@ -585,7 +585,7 @@ class Nav(object): print "请输入运行命令所关联系统用户的ID, q退出" try: - role_id = raw_input("\033[1;32mRole>:\033[0m ").strip() + role_id = int(raw_input("\033[1;32mRole>:\033[0m ").strip()) if role_id == 'q': break except (IndexError, ValueError): From 08717d196f1392f6e8c8d7204e78136d4daaba53 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 18 May 2016 17:00:35 +0800 Subject: [PATCH 7/7] Update perm_role_edit.html --- templates/jperm/perm_role_edit.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/jperm/perm_role_edit.html b/templates/jperm/perm_role_edit.html index 8ad8ed973..fe10b6c44 100644 --- a/templates/jperm/perm_role_edit.html +++ b/templates/jperm/perm_role_edit.html @@ -94,7 +94,7 @@ $('#roleForm').validator({ timely: 2, theme: "yellow_right_effect", rules: { - check_name: [/(?!^root$)^\w{2,20}$/i, '大小写字母数字和下划线,2-20位,并且非root'], + check_name: [/(?!^root$)^[\w.]{2,20}$/i, '大小写字母数字和下划线小数点,2-20位,并且非root'], check_begin: [/^[\-]+BEGIN RSA PRIVATE KEY[\-]+/gm, 'RSA Key填写有误,请检查'], },