Shuffle things around - preparing for next change, and arguably slightly better
Better logging of invalid requests.
This commit is contained in:
Родитель
ca9403962a
Коммит
3d5673e997
|
@ -129,17 +129,9 @@ class proxyserver(object):
|
|||
return self.run_wsgi(req)
|
||||
|
||||
def run_wsgi(self, req):
|
||||
proto = protocol.webproto(req, self.ui)
|
||||
path = req.env['PATH_INFO'].replace('\\', '/').strip('/')
|
||||
|
||||
u = util.url(self.serverurl)
|
||||
|
||||
# Simple path validation - probably only sufficient on Linux
|
||||
path = req.env['PATH_INFO'].replace('\\', '/').strip('/')
|
||||
if ':' in path or path.startswith('.') or '/.' in path:
|
||||
self.ui.warn(_('bad request path %r\n') % path)
|
||||
req.respond(common.HTTP_BAD_REQUEST, protocol.HGTYPE)
|
||||
return []
|
||||
|
||||
# Forward HTTP basic authorization headers through the layers
|
||||
authheader = req.env.get('HTTP_AUTHORIZATION')
|
||||
if authheader and authheader.lower().startswith('basic '):
|
||||
|
@ -147,18 +139,12 @@ class proxyserver(object):
|
|||
if ':' in userpasswd:
|
||||
u.user, u.passwd = userpasswd.split(':', 1)
|
||||
|
||||
# Bounce early on missing credentials
|
||||
if not (self.anonymous or u.user and u.passwd):
|
||||
er = common.ErrorResponse(common.HTTP_UNAUTHORIZED,
|
||||
'Authentication is mandatory',
|
||||
self.authheaders)
|
||||
req.respond(er, protocol.HGTYPE)
|
||||
return ['HTTP authentication required']
|
||||
|
||||
proto = protocol.webproto(req, self.ui)
|
||||
# MIME and HTTP allows multiple headers by the same name - we only
|
||||
# use and care about one
|
||||
args = dict((k, v[0]) for k, v in proto._args().items())
|
||||
cmd = args.pop('cmd', None)
|
||||
|
||||
self.ui.write("%s@%s cmd: %s args: %s\n" %
|
||||
(u.user, path or '/', cmd, ' '.join('%s=%s' % (k, v)
|
||||
for k, v in sorted(args.items()))))
|
||||
|
@ -168,6 +154,20 @@ class proxyserver(object):
|
|||
req.respond(common.HTTP_BAD_REQUEST, protocol.HGTYPE)
|
||||
return []
|
||||
|
||||
# Simple path validation - probably only sufficient on Linux
|
||||
if ':' in path or path.startswith('.') or '/.' in path:
|
||||
self.ui.warn(_('bad request path %r\n') % path)
|
||||
req.respond(common.HTTP_BAD_REQUEST, protocol.HGTYPE)
|
||||
return []
|
||||
|
||||
# Bounce early on missing credentials
|
||||
if not (self.anonymous or u.user and u.passwd):
|
||||
er = common.ErrorResponse(common.HTTP_UNAUTHORIZED,
|
||||
'Authentication is mandatory',
|
||||
self.authheaders)
|
||||
req.respond(er, protocol.HGTYPE)
|
||||
return ['HTTP authentication required']
|
||||
|
||||
u.path = posixpath.join(u.path or '', req.env['PATH_INFO']).strip('/')
|
||||
url = str(u)
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче