diff --git a/nsupdate/api/views.py b/nsupdate/api/views.py index 9c605c0..8ec8846 100644 --- a/nsupdate/api/views.py +++ b/nsupdate/api/views.py @@ -1,4 +1,8 @@ # -*- coding: utf-8 -*- + +import logging +logger = logging.getLogger(__name__) + from django.http import HttpResponse from django.conf import settings from main.forms import * @@ -39,29 +43,35 @@ def check_auth(username, password): return password == 'pass' # FIXME -def Response(content, logmsg=None): +def Response(content): return HttpResponse(content, content_type='text/plain') def NicUpdateView(request): - agent = request.META.get('HTTP_USER_AGENT') - if agent in settings.BAD_AGENTS: - return Response('badagent') + hostname = request.GET.get('hostname') auth = request.META.get('HTTP_AUTHORIZATION') if auth is None: + logger.warning('%s - received no auth' % (hostname, )) return basic_challenge("authenticate to update DNS") username, password = basic_authenticate(auth) if not check_auth(username, password): + logger.info('%s - received bad credentials, username: %s' % (hostname, username, )) return Response('badauth') - # as we use update_username == hostname, we can fall back to that: - hostname = request.GET.get('hostname', username) - # XXX when do we return Response('badhost') ? + if hostname is None: + # as we use update_username == hostname, we can fall back to that: + hostname = username ipaddr = request.GET.get('myip') if ipaddr is None: ipaddr = request.META.get('REMOTE_ADDR') + agent = request.META.get('HTTP_USER_AGENT') + if agent in settings.BAD_AGENTS: + logger.info('%s - received update from bad user agent %s' % (hostname, agent, )) + return Response('badagent') ipaddr = str(ipaddr) # XXX bug in dnspython: crashes if ipaddr is unicode, wants a str! try: update(hostname, ipaddr) + logger.info('%s - received good update -> ip: %s' % (hostname, ipaddr, )) return Response('good %s' % ipaddr) except SameIpError: + logger.warning('%s - received no-change update, ip: %s' % (hostname, ipaddr, )) return Response('nochg %s' % ipaddr) diff --git a/nsupdate/nsupdate/settings.py b/nsupdate/nsupdate/settings.py index cf7382b..ac599a8 100644 --- a/nsupdate/nsupdate/settings.py +++ b/nsupdate/nsupdate/settings.py @@ -169,15 +169,30 @@ LOGGING = { 'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler' + }, + 'stderr': { + 'level': 'DEBUG', + 'class': 'logging.StreamHandler', + 'formatter': 'stderr' } }, 'loggers': { + 'api.views': { + 'handlers': ['stderr', ], + 'level': 'DEBUG', + 'propagate': True, + }, 'django.request': { - 'handlers': ['mail_admins'], + 'handlers': ['mail_admins', ], 'level': 'ERROR', 'propagate': True, }, - } + }, + 'formatters': { + 'stderr': { + 'format': '[%(asctime)s] %(levelname)s %(message)s' + }, + }, } ACCOUNT_ACTIVATION_DAYS = 7