Browse Source

Improve scanning of passwords in file names.

Replace regexes by plain logic to allow "/" and "{{" and "}}” in passwords.
tags/0.7.17Beta1
shypike 12 years ago
parent
commit
62792f859b
  1. 36
      sabnzbd/nzbstuff.py

36
sabnzbd/nzbstuff.py

@ -1629,24 +1629,36 @@ def format_time_string(seconds, days=0):
return completestr.strip()
RE_PASSWORD1 = re.compile(r'([^/\\]+)[/\\](.+)')
RE_PASSWORD2 = re.compile(r'(.+){{([^{}]+)}}$')
RE_PASSWORD3 = re.compile(r'(.+)\s+password\s*=\s*(.+)$', re.I)
def scan_password(name):
""" Get password (if any) from the title
"""
if 'http://' in name or 'https://' in name:
return name, None
m = RE_PASSWORD1.search(name)
if not m:
m = RE_PASSWORD2.search(name)
if not m:
m = RE_PASSWORD3.search(name)
if m:
return m.group(1).strip('. '), m.group(2).strip()
else:
return name.strip('. '), None
braces = name.find('{{')
if braces < 0:
braces = len(name)
slash = name.find('/')
# Look for name/password, but make sure that '/' comes before any {{
if slash >= 0 and slash < braces and not 'password=' in name:
return name[:slash].strip('. '), name[slash+1:]
# Look for "name password=password"
pw = name.find('password=')
if pw >= 0:
return name[:pw].strip('. '), name[pw+9:]
# Look for name{{password}}
if braces < len(name) and name.endswith('}}'):
return name[:braces].strip('. '), name[braces+2:len(name)-2]
# Look again for name/password
if slash >= 0:
return name[:slash].strip('. '), name[slash+1:]
# No password found
return name, None
def get_attrib_file(path, size):

Loading…
Cancel
Save