mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
git-serve: Implement IP address bans
Currently, IP address bans affect the web interface only. Make sure they are honored in the SSH interface as well. Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
parent
70db022aa8
commit
0e34dd6542
2 changed files with 16 additions and 0 deletions
|
@ -6,6 +6,10 @@ class MaintenanceException(AurwebException):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class BannedException(AurwebException):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class PermissionDeniedException(AurwebException):
|
class PermissionDeniedException(AurwebException):
|
||||||
def __init__(self, user):
|
def __init__(self, user):
|
||||||
msg = 'permission denied: {:s}'.format(user)
|
msg = 'permission denied: {:s}'.format(user)
|
||||||
|
|
|
@ -422,6 +422,14 @@ def log_ssh_login(user, remote_addr):
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
|
def bans_match(remote_addr):
|
||||||
|
conn = aurweb.db.Connection()
|
||||||
|
|
||||||
|
cur = conn.execute("SELECT COUNT(*) FROM Bans WHERE IPAddress = ?",
|
||||||
|
[remote_addr])
|
||||||
|
return cur.fetchone()[0] > 0
|
||||||
|
|
||||||
|
|
||||||
def die(msg):
|
def die(msg):
|
||||||
sys.stderr.write("{:s}\n".format(msg))
|
sys.stderr.write("{:s}\n".format(msg))
|
||||||
exit(1)
|
exit(1)
|
||||||
|
@ -463,6 +471,8 @@ def serve(action, cmdargv, user, privileged, remote_addr):
|
||||||
if enable_maintenance:
|
if enable_maintenance:
|
||||||
if remote_addr not in maintenance_exc:
|
if remote_addr not in maintenance_exc:
|
||||||
raise aurweb.exceptions.MaintenanceException
|
raise aurweb.exceptions.MaintenanceException
|
||||||
|
if bans_match(remote_addr):
|
||||||
|
raise aurweb.exceptions.BannedException
|
||||||
log_ssh_login(user, remote_addr)
|
log_ssh_login(user, remote_addr)
|
||||||
|
|
||||||
if action == 'git' and cmdargv[1] in ('upload-pack', 'receive-pack'):
|
if action == 'git' and cmdargv[1] in ('upload-pack', 'receive-pack'):
|
||||||
|
@ -586,6 +596,8 @@ def main():
|
||||||
serve(action, cmdargv, user, privileged, remote_addr)
|
serve(action, cmdargv, user, privileged, remote_addr)
|
||||||
except aurweb.exceptions.MaintenanceException:
|
except aurweb.exceptions.MaintenanceException:
|
||||||
die("The AUR is down due to maintenance. We will be back soon.")
|
die("The AUR is down due to maintenance. We will be back soon.")
|
||||||
|
except aurweb.exceptions.BannedException:
|
||||||
|
die("The SSH interface is disabled for your IP address.")
|
||||||
except aurweb.exceptions.InvalidArgumentsException as e:
|
except aurweb.exceptions.InvalidArgumentsException as e:
|
||||||
die_with_help('{:s}: {}'.format(action, e))
|
die_with_help('{:s}: {}'.format(action, e))
|
||||||
except aurweb.exceptions.AurwebException as e:
|
except aurweb.exceptions.AurwebException as e:
|
||||||
|
|
Loading…
Add table
Reference in a new issue