Merge "Prevent kmip_protocol logger from logging at DEBUG"
This commit is contained in:
commit
1cbf0731e0
swift/common
test/unit/common/middleware/crypto
@ -17,6 +17,7 @@ import logging
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from swift.common.middleware.crypto import keymaster
|
from swift.common.middleware.crypto import keymaster
|
||||||
|
from swift.common.utils import LogLevelFilter
|
||||||
|
|
||||||
from kmip.pie.client import ProxyKmipClient
|
from kmip.pie.client import ProxyKmipClient
|
||||||
|
|
||||||
@ -122,6 +123,18 @@ class KmipKeyMaster(keymaster.BaseKeyMaster):
|
|||||||
for handler in self.logger.logger.handlers:
|
for handler in self.logger.logger.handlers:
|
||||||
kmip_logger.addHandler(handler)
|
kmip_logger.addHandler(handler)
|
||||||
|
|
||||||
|
debug_filter = LogLevelFilter(logging.DEBUG)
|
||||||
|
for name in (
|
||||||
|
# The kmip_protocol logger includes hex-encoded data off the
|
||||||
|
# wire, which may include key material!! We *NEVER* want that
|
||||||
|
# enabled.
|
||||||
|
'kmip.services.server.kmip_protocol',
|
||||||
|
# The config_helper logger includes any password that may be
|
||||||
|
# provided, which doesn't seem great either.
|
||||||
|
'kmip.core.config_helper',
|
||||||
|
):
|
||||||
|
logging.getLogger(name).addFilter(debug_filter)
|
||||||
|
|
||||||
multikey_opts = self._load_multikey_opts(conf, 'key_id')
|
multikey_opts = self._load_multikey_opts(conf, 'key_id')
|
||||||
if not multikey_opts:
|
if not multikey_opts:
|
||||||
raise ValueError('key_id option is required')
|
raise ValueError('key_id option is required')
|
||||||
|
@ -2088,6 +2088,25 @@ class SwiftLogFormatter(logging.Formatter):
|
|||||||
return msg
|
return msg
|
||||||
|
|
||||||
|
|
||||||
|
class LogLevelFilter(object):
|
||||||
|
"""
|
||||||
|
Drop messages for the logger based on level.
|
||||||
|
|
||||||
|
This is useful when dependencies log too much information.
|
||||||
|
|
||||||
|
:param level: All messages at or below this level are dropped
|
||||||
|
(DEBUG < INFO < WARN < ERROR < CRITICAL|FATAL)
|
||||||
|
Default: DEBUG
|
||||||
|
"""
|
||||||
|
def __init__(self, level=logging.DEBUG):
|
||||||
|
self.level = level
|
||||||
|
|
||||||
|
def filter(self, record):
|
||||||
|
if record.levelno <= self.level:
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
def get_logger(conf, name=None, log_to_console=False, log_route=None,
|
def get_logger(conf, name=None, log_to_console=False, log_route=None,
|
||||||
fmt="%(server)s: %(message)s"):
|
fmt="%(server)s: %(message)s"):
|
||||||
"""
|
"""
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import logging
|
||||||
import mock
|
import mock
|
||||||
import os
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
@ -62,6 +63,15 @@ def create_mock_client(secrets, calls):
|
|||||||
return mock_client
|
return mock_client
|
||||||
|
|
||||||
|
|
||||||
|
class InMemoryHandler(logging.Handler):
|
||||||
|
def __init__(self):
|
||||||
|
self.messages = []
|
||||||
|
super(InMemoryHandler, self).__init__()
|
||||||
|
|
||||||
|
def handle(self, record):
|
||||||
|
self.messages.append(record.msg)
|
||||||
|
|
||||||
|
|
||||||
class TestKmipKeymaster(unittest.TestCase):
|
class TestKmipKeymaster(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -269,3 +279,38 @@ class TestKmipKeymaster(unittest.TestCase):
|
|||||||
with self.assertRaises(ValueError) as cm:
|
with self.assertRaises(ValueError) as cm:
|
||||||
KmipKeyMaster(None, conf)
|
KmipKeyMaster(None, conf)
|
||||||
self.assertIn('key_id option is required', str(cm.exception))
|
self.assertIn('key_id option is required', str(cm.exception))
|
||||||
|
|
||||||
|
def test_logger_manipulations(self):
|
||||||
|
root_logger = logging.getLogger()
|
||||||
|
old_level = root_logger.getEffectiveLevel()
|
||||||
|
handler = InMemoryHandler()
|
||||||
|
try:
|
||||||
|
root_logger.setLevel(logging.DEBUG)
|
||||||
|
root_logger.addHandler(handler)
|
||||||
|
|
||||||
|
conf = {'__file__': '/etc/swift/proxy-server.conf',
|
||||||
|
'__name__': 'kmip_keymaster'}
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
# missing key_id, as above, but that's not the interesting bit
|
||||||
|
KmipKeyMaster(None, conf)
|
||||||
|
|
||||||
|
self.assertEqual(handler.messages, [])
|
||||||
|
|
||||||
|
logger = logging.getLogger('kmip.services.server.kmip_protocol')
|
||||||
|
logger.debug('Something secret!')
|
||||||
|
logger.info('Something useful')
|
||||||
|
self.assertNotIn('Something secret!', handler.messages)
|
||||||
|
self.assertIn('Something useful', handler.messages)
|
||||||
|
|
||||||
|
logger = logging.getLogger('kmip.core.config_helper')
|
||||||
|
logger.debug('Also secret')
|
||||||
|
logger.warning('Also useful')
|
||||||
|
self.assertNotIn('Also secret', handler.messages)
|
||||||
|
self.assertIn('Also useful', handler.messages)
|
||||||
|
|
||||||
|
logger = logging.getLogger('kmip')
|
||||||
|
logger.debug('Boring, but not secret')
|
||||||
|
self.assertIn('Boring, but not secret', handler.messages)
|
||||||
|
finally:
|
||||||
|
root_logger.setLevel(old_level)
|
||||||
|
root_logger.removeHandler(handler)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user