diff --git a/db.py b/db.py
index db07d3397e35ddbcd677e3ea35d225d62f84bafa..4213d1709d4d0704e44ccdbf2ecc85356e0e906c 100644
--- a/db.py
+++ b/db.py
@@ -99,6 +99,8 @@ def ldapget(user):
 		conn = ldap3.Connection('ldaps://rumo.fsmpi.rwth-aachen.de', auto_bind=True)
 		conn.search("ou=users,dc=fsmpi,dc=rwth-aachen,dc=de", "(uid=%s)"%user,
 				attributes=ldap3.ALL_ATTRIBUTES)
+		if not conn.entries:
+			return {}
 		e = conn.entries[0]
 		return {'uid': user, 'givenName': e.givenName.value, 'sn':e.sn.value}
 	else:
diff --git a/server.py b/server.py
index e7572d7da8843da52bb052e50753d7e62e32b059..c7bca4b85a82d14ffb964ec8e45c2267657a25e5 100755
--- a/server.py
+++ b/server.py
@@ -132,10 +132,15 @@ def login():
 	if request.method == 'GET':
 		return render_template('login.html')
 	user, groups = ldapauth(request.form.get('user'), request.form.get('password'))
-	if user and 'users' in groups:
-		session['user'] = ldapget(user)
-	else:
+	if not user or not 'users' in groups:
 		flash('Login fehlgeschlagen!')
+		return render_template('login.html')
+	session['user'] = ldapget(user)
+	dbuser = query('SELECT * FROM users WHERE name = ?', user)
+	if not dbuser:
+		query('INSERT INTO users (name, realname, fsacc, level, calendar_key, rfc6238) VALUES (?, ?, ?, 1, "", "")', user, session['user']['givenName'], user)
+		dbuser = query('SELECT * FROM users WHERE name = ?', user)
+	session['user']['dbid'] = dbuser[0]['id']
 	return redirect(request.values.get('ref', url_for('index')))
 
 @app.route('/logout', methods=['GET', 'POST'])
@@ -164,6 +169,10 @@ def edit():
 		table, id, column = key.split('.', 2)
 		assert table in tabs
 		assert column in tabs[table][2]
+		old = query('SELECT %s AS value FROM %s WHERE %s = ?'%(column, table, tabs[table][1]), id)
+		query('''INSERT INTO changelog ("when", who, "table", id_key, id_value, field, value_old, value_new, executed)
+				VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1)''', datetime.now(), session['user']['dbid'], table,
+				tabs[table][1], id, column, old[0]['value'], val)
 		query('UPDATE %s SET %s = ? WHERE %s = ?'%(tabs[table][0], column,
 					tabs[table][1]), val, id)
 	query('COMMIT')
@@ -254,4 +263,5 @@ def stats():
 @register_navbar('Changelog', 'book')
 @mod_required
 def log():
-	return render_template('log.html', changelog=query('SELECT * FROM changelog ORDER BY "when" LIMIT 10'))
+	changelog = query('SELECT * FROM changelog LEFT JOIN users ON (changelog.who = users.id) ORDER BY "when" DESC LIMIT 10')
+	return render_template('log.html', changelog=changelog)
diff --git a/templates/log.html b/templates/log.html
index 188c0c0d0c1c7083d76e2c21dc183126bff6d138..8d4db3260770eab4c4f5449ee7c8ab4f6073f1f6 100644
--- a/templates/log.html
+++ b/templates/log.html
@@ -18,7 +18,11 @@
 			{% for i in changelog %}
 				<tr>
 					<td>{{i.when}}</td>
+					{% if i.realname %}
+					<td>{{i.realname}} ({{i.who}})</td>
+					{% else %}
 					<td>{{i.who}}</td>
+					{% endif %}
 					<td>{{i.path}}</td>
 					<td>"{{i.value_old}}"</td>
 					<td>"{{i.value_new}}"</td>