git-serve: Save last SSH login date and IP address

In addition to logging the last login date and IP address on the web
interface, store the time stamp and IP address of the last SSH login in
the database.

This simplifies user banning if one of the new SSH interface features,
such as the voting mechanism implemented in 7ee2fdd (git-serve: Add
support for (un-)voting, 2017-01-23), is abused.

Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
Lukas Fleischer 2017-01-25 08:22:54 +01:00
parent b8df10e227
commit f8916d7e9b
3 changed files with 24 additions and 1 deletions

View file

@ -410,6 +410,18 @@ def pkgbase_has_full_access(pkgbase, user):
return cur.fetchone()[0] > 0
def log_ssh_login(user, remote_addr):
conn = aurweb.db.Connection()
now = int(time.time())
conn.execute("UPDATE Users SET LastSSHLogin = ?, " +
"LastSSHLoginIPAddress = ? WHERE Username = ?",
[now, remote_addr, user])
conn.commit()
conn.close()
def die(msg):
sys.stderr.write("{:s}\n".format(msg))
exit(1)
@ -451,6 +463,7 @@ def serve(action, cmdargv, user, privileged, remote_addr):
if enable_maintenance:
if remote_addr not in maintenance_exc:
raise aurweb.exceptions.MaintenanceException
log_ssh_login(user, remote_addr)
if action == 'git' and cmdargv[1] in ('upload-pack', 'receive-pack'):
action = action + '-' + cmdargv[1]