[project @ Arch-1:robey@lag.net--2003-public%secsh--dev--1.0--patch-141]

misc logging fixes
change the level of some log messages so interesting stuff gets logged at
info instead of debug.  fix an oops where channels defaulted to being in
ultra debug mode, and make this mode depend on a new Transport method:
"set_hexdump".
This commit is contained in:
Robey Pointer 2005-01-25 05:17:55 +00:00
parent 8878a5f3c2
commit c1ed20c4af
6 changed files with 23 additions and 10 deletions

View File

@ -326,7 +326,7 @@ class Transport (BaseTransport):
self._disconnect_service_not_available() self._disconnect_service_not_available()
return return
if (self.auth_username is not None) and (self.auth_username != username): if (self.auth_username is not None) and (self.auth_username != username):
self._log(DEBUG, 'Auth rejected because the client attempted to change username in mid-flight') self._log(WARNING, 'Auth rejected because the client attempted to change username in mid-flight')
self._disconnect_no_more_auth() self._disconnect_no_more_auth()
return return
self.auth_username = username self.auth_username = username
@ -351,10 +351,10 @@ class Transport (BaseTransport):
try: try:
key = self._key_info[keytype](Message(keyblob)) key = self._key_info[keytype](Message(keyblob))
except SSHException, e: except SSHException, e:
self._log(DEBUG, 'Auth rejected: public key: %s' % str(e)) self._log(INFO, 'Auth rejected: public key: %s' % str(e))
key = None key = None
except: except:
self._log(DEBUG, 'Auth rejected: unsupported or mangled public key') self._log(INFO, 'Auth rejected: unsupported or mangled public key')
key = None key = None
if key is None: if key is None:
self._disconnect_no_more_auth() self._disconnect_no_more_auth()
@ -375,18 +375,18 @@ class Transport (BaseTransport):
sig = Message(m.get_string()) sig = Message(m.get_string())
blob = self._get_session_blob(key, service, username) blob = self._get_session_blob(key, service, username)
if not key.verify_ssh_sig(blob, sig): if not key.verify_ssh_sig(blob, sig):
self._log(DEBUG, 'Auth rejected: invalid signature') self._log(INFO, 'Auth rejected: invalid signature')
result = AUTH_FAILED result = AUTH_FAILED
else: else:
result = self.server_object.check_auth_none(username) result = self.server_object.check_auth_none(username)
# okay, send result # okay, send result
m = Message() m = Message()
if result == AUTH_SUCCESSFUL: if result == AUTH_SUCCESSFUL:
self._log(DEBUG, 'Auth granted.') self._log(INFO, 'Auth granted (%s).' % method)
m.add_byte(chr(MSG_USERAUTH_SUCCESS)) m.add_byte(chr(MSG_USERAUTH_SUCCESS))
self.authenticated = True self.authenticated = True
else: else:
self._log(DEBUG, 'Auth rejected.') self._log(INFO, 'Auth rejected (%s).' % method)
m.add_byte(chr(MSG_USERAUTH_FAILURE)) m.add_byte(chr(MSG_USERAUTH_FAILURE))
m.add_string(self.server_object.get_allowed_auths(username)) m.add_string(self.server_object.get_allowed_auths(username))
if result == AUTH_PARTIALLY_SUCCESSFUL: if result == AUTH_PARTIALLY_SUCCESSFUL:

View File

@ -822,7 +822,7 @@ class Channel (object):
nbytes = m.get_int() nbytes = m.get_int()
try: try:
self.lock.acquire() self.lock.acquire()
if self.ultra_debug or True: if self.ultra_debug:
self._log(DEBUG, 'window up %d' % nbytes) self._log(DEBUG, 'window up %d' % nbytes)
self.out_window_size += nbytes self.out_window_size += nbytes
self.out_buffer_cv.notifyAll() self.out_buffer_cv.notifyAll()

View File

@ -118,7 +118,7 @@ class BaseSFTP (object):
return version return version
def _log(self, level, msg): def _log(self, level, msg):
if type(msg) == type([]): if issubclass(type(msg), list):
for m in msg: for m in msg:
self.logger.log(level, m) self.logger.log(level, m)
else: else:

View File

@ -53,6 +53,7 @@ class SFTPClient (BaseSFTP):
transport = self.sock.get_transport() transport = self.sock.get_transport()
self.logger = logging.getLogger(transport.get_log_channel() + '.' + self.logger = logging.getLogger(transport.get_log_channel() + '.' +
self.sock.get_name() + '.sftp') self.sock.get_name() + '.sftp')
self.ultra_debug = transport.ultra_debug
self._send_version() self._send_version()
def from_transport(selfclass, t): def from_transport(selfclass, t):

View File

@ -57,10 +57,10 @@ class SFTPServer (BaseSFTP, SubsystemHandler):
""" """
BaseSFTP.__init__(self) BaseSFTP.__init__(self)
SubsystemHandler.__init__(self, channel, name) SubsystemHandler.__init__(self, channel, name)
self.ultra_debug = True
transport = channel.get_transport() transport = channel.get_transport()
self.logger = logging.getLogger(transport.get_log_channel() + '.' + self.logger = logging.getLogger(transport.get_log_channel() + '.' +
channel.get_name() + '.sftp') channel.get_name() + '.sftp')
self.ultra_debug = transport.ultra_debug
self.next_handle = 1 self.next_handle = 1
# map of handle-string to SFTPHandle for files & folders: # map of handle-string to SFTPHandle for files & folders:
self.file_table = { } self.file_table = { }

View File

@ -806,12 +806,24 @@ class BaseTransport (threading.Thread):
""" """
return self.log_name return self.log_name
def set_hexdump(self, hexdump):
"""
Turn on/off logging a hex dump of protocol traffic at DEBUG level in
the logs. Normally you would want this off (which is the default),
but if you are debugging something, it may be useful.
@param hexdump: C{True} to log protocol traffix (in hex) to the log;
C{False} otherwise.
@type hexdump: bool
"""
self.ultra_debug = hexdump
### internals... ### internals...
def _log(self, level, msg): def _log(self, level, msg):
if type(msg) == type([]): if issubclass(type(msg), list):
for m in msg: for m in msg:
self.logger.log(level, m) self.logger.log(level, m)
else: else: