From f1375b7622b11fa0faacc7c02ce651317e8f7e3e Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 15 Nov 2014 16:35:51 +0100 Subject: [PATCH 1/7] updated changelog --- CHANGES.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index c64856a..d76b664 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -13,6 +13,7 @@ New Features: * if the abuse / abuse_blocked flag is set for a host, it is removed from DNS * users can delete their accounts, if they want to stop using the service (all hosts, domains, etc. created by this user will be deleted) +* added admin UI for Related Hosts Fixes: @@ -25,6 +26,9 @@ Other changes: * remove support for "south" migrations * add support for django 1.7's builtin migrations * misc. layout / UI improvments +* misc. doc improvements +* improved original strings in translations, use "trimmed" in django templates +* upgraded bootstrap Release 0.9.1 From 3d35cfea60c745476355271594a899e9175cb834 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 15 Nov 2014 16:36:14 +0100 Subject: [PATCH 2/7] bump version to 0.10.0 --- nsupdate/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nsupdate/__init__.py b/nsupdate/__init__.py index 0049972..b223fb9 100644 --- a/nsupdate/__init__.py +++ b/nsupdate/__init__.py @@ -62,4 +62,4 @@ class Version(tuple): # pragma: no cover return version_str -version = Version(0, 8, 0) +version = Version(0, 10, 0) From c432e24c0dd61d0a62042672e9dd46469d85bf76 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sun, 16 Nov 2014 23:05:35 +0100 Subject: [PATCH 3/7] add a managment command "domains" to check the domains, notify owner of domain, update admin docs if a nameserver is not reachable or does not answer queries for the domain, the domain is flagged as not available (and also as not public). also added catching of PeerBadKey exception. --- docs/admin.rst | 21 +++++ nsupdate/main/dnstools.py | 4 + nsupdate/management/commands/domains.py | 105 ++++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 nsupdate/management/commands/domains.py diff --git a/docs/admin.rst b/docs/admin.rst index d676e7e..aa422ec 100644 --- a/docs/admin.rst +++ b/docs/admin.rst @@ -305,6 +305,8 @@ it runs as the same user as the nsupdate.info wsgi application:: 0 3 * * * $HOME/env/bin/python $HOME/env/bin/django-admin.py clearsessions # clear outdated registrations: 30 3 * * * $HOME/env/bin/python $HOME/env/bin/django-admin.py cleanupregistration + # check whether the domain nameservers are reachable / answer queries: + 0 4 * * * $HOME/env/bin/python $HOME/env/bin/django-admin.py domains --check --notify-user Dealing with abuse @@ -342,6 +344,25 @@ While abuse_blocked is set, the service won't accept updates for this host. The user can see the ABUSE-BLOCKED status on the web interface, but can not change the flag. +Dealing with badly configured domains +------------------------------------- + +In the regular jobs example in the previous section, +django-admin.py domains --check --notify-user means that we'll check all +domains that are currently flagged as available. + +We query the nameserver configured for the domain and check if it answers a +SOA query for this domain. If we can't reach the nameserver or it does not +answer the query, we flag the domain as not available. We also flag it as +not public (this only is a change if it was public before). +If --notify-user is given, we notify the owner of the domain by email if we +flag the domain as not available. Owner in this context means: the user who +added the domain to our service. + +Please note that we can not check whether the nameserver accepts dynamic +updates for the domain. The dns admin could have set arbitrary restrictions +on this and we do not know them. So if you have a domain configured with the +service, please make sure that dynamic updates really work. Database contents ----------------- diff --git a/nsupdate/main/dnstools.py b/nsupdate/main/dnstools.py index ede1ad4..2637d0b 100644 --- a/nsupdate/main/dnstools.py +++ b/nsupdate/main/dnstools.py @@ -318,6 +318,10 @@ def update_ns(fqdn, rdtype='A', ipaddr=None, action='upd', ttl=60): logger.error("PeerBadSignature - shared secret mismatch? zone: %s" % (origin, )) set_ns_availability(domain, False) raise DnsUpdateError("PeerBadSignature") + except dns.tsig.PeerBadKey: + logger.error("PeerBadKey - shared secret mismatch? zone: %s" % (origin, )) + set_ns_availability(domain, False) + raise DnsUpdateError("PeerBadKey") except dns.tsig.PeerBadTime: logger.error("PeerBadTime - DNS server did not like the time we sent. zone: %s" % (origin, )) set_ns_availability(domain, False) diff --git a/nsupdate/management/commands/domains.py b/nsupdate/management/commands/domains.py new file mode 100644 index 0000000..477389a --- /dev/null +++ b/nsupdate/management/commands/domains.py @@ -0,0 +1,105 @@ +""" +dealing with domains (Domain records in our database) +""" + +import dns.resolver + +from optparse import make_option + +from django.core.management.base import BaseCommand +from django.core.mail import send_mail +from django.db import transaction + +from nsupdate.main.models import Domain +from nsupdate.main.dnstools import FQDN, query_ns, NameServerNotAvailable + + +MSG = """\ +Your domain: %(domain)s (comment: %(comment)s) + +Issue: The nameserver of the domain is not reachable and was set to not available + (and also to not public, in case it was public). + +Explanation: +You created the domain on our service and entered a primary nameserver IP for it. +We tried to query that nameserver but it either was not reachable or it did not +answer queries for this domain. + +Resolution: +If you really want that domain to work and you really control that nameserver: + +1. fix the nameserver so it responds to queries for this domain +2. make sure the nameserver is reachable from us +3. make sure it accepts dynamic updates for hosts in this domain +4. make sure it uses the same secret as configured on the service +5. set the domain to "available" on the service +6. check if the "public" flag is correctly + +Alternatively, if you do not use the domain with our service, delete the +domain entry, so it is removed from our database. This will also remove all +hosts that were added to this domain (if any). +""" + + +def check_dns(domain): + """ + checks if the nameserver is reachable and answers queries for the domain. + + note: we can't reasonably check for dynamic updates as the dns admin might + have put restrictions on which hosts are allowed to be updated. + + :param domain: domain name + :return: available status + """ + fqdn = FQDN(host=None, domain=domain) + try: + query_ns(fqdn, 'SOA') + queries_ok = True + except (dns.resolver.Timeout, dns.resolver.NoNameservers, + dns.resolver.NXDOMAIN, dns.resolver.NoAnswer, NameServerNotAvailable): + # note: currently the domain is also set to unavailable as a + # side effect in query_ns() + queries_ok = False + return queries_ok + + +class Command(BaseCommand): + help = 'deal with domains' + + option_list = BaseCommand.option_list + ( + make_option('--check', + action='store_true', + dest='check', + default=False, + help='check whether nameserver for domain is reachable and answers queries', + ), + make_option('--notify-user', + action='store_true', + dest='notify_user', + default=False, + help='notify the user by email when domain gets flagged as unavailable', + ), + ) + + def handle(self, *args, **options): + check = options['check'] + notify_user = options['notify_user'] + with transaction.atomic(): + for d in Domain.objects.all(): + if check and d.available: + domain = d.name + comment = d.comment + creator = d.created_by + available = check_dns(domain) + if not available: + d.available = False # see comment in check_dns() + d.public = False + if notify_user: + from_addr = None # will use DEFAULT_FROM_EMAIL + to_addr = creator.email + subject = "issue with your domain %(domain)s" % dict(domain=domain) + msg = MSG % dict(domain=domain, comment=comment) + send_mail(subject, msg, from_addr, [to_addr], fail_silently=True) + msg = "setting unavailable flag for domain %s (created by %s)\n" % (domain, creator, ) + self.stdout.write(msg) + d.save() From 13d8ff4db4fc54ed85a0a8bc364c4cc619d2aa0f Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 17 Nov 2014 20:30:13 +0100 Subject: [PATCH 4/7] updated i18 (*.po) --- nsupdate/locale/de/LC_MESSAGES/django.po | 2 +- nsupdate/locale/en/LC_MESSAGES/django.po | 2 +- nsupdate/locale/fr/LC_MESSAGES/django.po | 2 +- nsupdate/locale/it/LC_MESSAGES/django.po | 15 ++++++++++----- nsupdate/locale/pl/LC_MESSAGES/django.po | 2 +- nsupdate/locale/zh_CN/LC_MESSAGES/django.po | 2 +- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/nsupdate/locale/de/LC_MESSAGES/django.po b/nsupdate/locale/de/LC_MESSAGES/django.po index 808fd4d..d4e6190 100644 --- a/nsupdate/locale/de/LC_MESSAGES/django.po +++ b/nsupdate/locale/de/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: nsupdate.info\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-15 14:39+0100\n" +"POT-Creation-Date: 2014-11-17 20:28+0100\n" "PO-Revision-Date: 2014-11-01 22:30+0000\n" "Last-Translator: Thomas Waldmann \n" "Language-Team: German (http://www.transifex.com/projects/p/nsupdateinfo/" diff --git a/nsupdate/locale/en/LC_MESSAGES/django.po b/nsupdate/locale/en/LC_MESSAGES/django.po index 47ac7e5..22517ca 100644 --- a/nsupdate/locale/en/LC_MESSAGES/django.po +++ b/nsupdate/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-15 14:39+0100\n" +"POT-Creation-Date: 2014-11-17 20:28+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/nsupdate/locale/fr/LC_MESSAGES/django.po b/nsupdate/locale/fr/LC_MESSAGES/django.po index 9b2bf5e..89beea1 100644 --- a/nsupdate/locale/fr/LC_MESSAGES/django.po +++ b/nsupdate/locale/fr/LC_MESSAGES/django.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: nsupdate.info\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-15 14:39+0100\n" +"POT-Creation-Date: 2014-11-17 20:28+0100\n" "PO-Revision-Date: 2014-11-15 13:38+0000\n" "Last-Translator: mandrag0ra \n" "Language-Team: French (http://www.transifex.com/projects/p/nsupdateinfo/" diff --git a/nsupdate/locale/it/LC_MESSAGES/django.po b/nsupdate/locale/it/LC_MESSAGES/django.po index 4c65186..0e25539 100644 --- a/nsupdate/locale/it/LC_MESSAGES/django.po +++ b/nsupdate/locale/it/LC_MESSAGES/django.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: nsupdate.info\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-15 14:39+0100\n" -"PO-Revision-Date: 2014-11-15 13:22+0000\n" -"Last-Translator: Thomas Waldmann \n" +"POT-Creation-Date: 2014-11-17 20:28+0100\n" +"PO-Revision-Date: 2014-11-17 08:47+0000\n" +"Last-Translator: ykmm \n" "Language-Team: Italian (http://www.transifex.com/projects/p/nsupdateinfo/" "language/it/)\n" "Language: it\n" @@ -23,13 +23,15 @@ msgstr "" #: accounts/templates/accounts/delete_user.html:7 msgid "Delete your User Account" -msgstr "" +msgstr "Cancella il tuo Account Utente" #: accounts/templates/accounts/delete_user.html:11 msgid "" "Are you sure you want to delete your user account and all your data on this " "service? You can not undelete your data." msgstr "" +"Sei sicuro di voler cancellare il tuo account utente e tutti i dati ad esso " +"associati? Non sarĂ  possibile annullare la cancellazione." #: accounts/templates/accounts/delete_user.html:16 #: main/templates/main/delete_object.html:11 @@ -55,7 +57,7 @@ msgstr "Dissocia da Account remoto" #: accounts/templates/accounts/user_profile.html:35 #: accounts/templates/accounts/user_profile.html:44 msgid "Delete User Profile" -msgstr "" +msgstr "Cancella Profilo Utente" #: accounts/templates/accounts/user_profile.html:37 msgid "" @@ -63,6 +65,9 @@ msgid "" "all your data (especially all hosts and all domains created by this user), " "you can do it here." msgstr "" +"Se vuoi smettere di utilizzare questo servizio e cancellare questo profilo " +"utente e tutti i tuoi dati (in particolar modo tutti gli host ed i domini " +"creati da questo utente), puoi farlo qui." #: accounts/templates/registration/activate.html:4 #: accounts/templates/registration/activation_complete.html:3 diff --git a/nsupdate/locale/pl/LC_MESSAGES/django.po b/nsupdate/locale/pl/LC_MESSAGES/django.po index 3b0d274..894ec65 100644 --- a/nsupdate/locale/pl/LC_MESSAGES/django.po +++ b/nsupdate/locale/pl/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: nsupdate.info\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-15 14:39+0100\n" +"POT-Creation-Date: 2014-11-17 20:28+0100\n" "PO-Revision-Date: 2014-11-01 22:10+0000\n" "Last-Translator: Thomas Waldmann \n" "Language-Team: Polish (http://www.transifex.com/projects/p/nsupdateinfo/" diff --git a/nsupdate/locale/zh_CN/LC_MESSAGES/django.po b/nsupdate/locale/zh_CN/LC_MESSAGES/django.po index 38116c1..33e9040 100644 --- a/nsupdate/locale/zh_CN/LC_MESSAGES/django.po +++ b/nsupdate/locale/zh_CN/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: nsupdate.info\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-15 14:39+0100\n" +"POT-Creation-Date: 2014-11-17 20:28+0100\n" "PO-Revision-Date: 2014-11-01 22:10+0000\n" "Last-Translator: Thomas Waldmann \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/" From bbcbc37059ce29b170320bc5547e4507510f7504 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 17 Nov 2014 20:30:28 +0100 Subject: [PATCH 5/7] updated i18 (*.mo) --- nsupdate/locale/de/LC_MESSAGES/django.mo | Bin 44136 -> 44136 bytes nsupdate/locale/en/LC_MESSAGES/django.mo | Bin 378 -> 378 bytes nsupdate/locale/fr/LC_MESSAGES/django.mo | Bin 44072 -> 44072 bytes nsupdate/locale/it/LC_MESSAGES/django.mo | Bin 42810 -> 43582 bytes nsupdate/locale/pl/LC_MESSAGES/django.mo | Bin 1970 -> 1970 bytes nsupdate/locale/zh_CN/LC_MESSAGES/django.mo | Bin 16101 -> 16101 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/nsupdate/locale/de/LC_MESSAGES/django.mo b/nsupdate/locale/de/LC_MESSAGES/django.mo index a008f11393449210d0a4de45630144c1919456d0..f41533e55194d7814f35b3b20e31302d3c660b0c 100644 GIT binary patch delta 22 ecmaEHgXzT$rVXoO*v%D;46KYSHgAgA<_`dN1PNvU delta 22 ecmaEHgXzT$rVXoO*i97-O{|P9H*bpB<_`dN6A5Vm diff --git a/nsupdate/locale/en/LC_MESSAGES/django.mo b/nsupdate/locale/en/LC_MESSAGES/django.mo index 97a28f54efe9fce0e636d0c4e53d78c5e8d30f66..764ee41ca0da8fbeb851472ad23d8bd646f5995a 100644 GIT binary patch delta 17 Zcmeyx^owc21a@-;BLgcVi;2@80{}Y;28aLv delta 17 Zcmeyx^owc21a?yeLlY}w%Zbw;0{}Y{28#dy diff --git a/nsupdate/locale/fr/LC_MESSAGES/django.mo b/nsupdate/locale/fr/LC_MESSAGES/django.mo index aafad9631aaa8173788e9cb756877e7541144e74..f38a186b8c185af391cad1a0a2db3d7316f9cdb8 100644 GIT binary patch delta 22 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 delta 20 bcmdnQzlncC0t>sTf}x3(vE}A;7H?(%KePpE diff --git a/nsupdate/locale/zh_CN/LC_MESSAGES/django.mo b/nsupdate/locale/zh_CN/LC_MESSAGES/django.mo index 144bec7aae04ccc348feeeb2562aab1b83f3149a..19535f4c19b47bae4217eb07b65f36bcaca83268 100644 GIT binary patch delta 20 bcmaD_`?PjLv>Lm)f{}rhk;UdDwPpzbSr-Q| delta 20 bcmaD_`?PjLv>Lmqf}x3(vE}9@wPpzbStbWF From 4b5915ab3f4d0ebfe2f8194bc6706d8a6f8e940d Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 17 Nov 2014 20:45:13 +0100 Subject: [PATCH 6/7] updated changelog --- CHANGES.rst | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index d76b664..f95e219 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,12 +1,15 @@ ChangeLog ========= -Release 0.10.0 (not released yet) ---------------------------------- +Important: when you update and your update crosses the 0.9.x / 0.10 boundary, +you must first upgrade to 0.9.x and your database must be migrated to 0.9.x. +AFTER that, you can upgrade to 0.10.x or any later version (and then run the +migrations for that version). For upgrading and migration help, please see +the docs that match the version you are upgrading to. -Important: before upgrading to 0.10.0, your database must be migrated to -latest 0.9.x release of nsupdate.info. So, if you do not run latest 0.9.x -release already, first upgrade to that and run the migrations! + +Release 0.10.0 +-------------- New Features: @@ -14,16 +17,20 @@ New Features: * users can delete their accounts, if they want to stop using the service (all hosts, domains, etc. created by this user will be deleted) * added admin UI for Related Hosts +* added "domains" management command to check the domains (reachability of + nameserver, does nameserver answer queries for the domain?) Fixes: * the link in the registration mail is now https if the site runs with https +* avoid sending unneccessary "delete" updates to master nameserver - first + check if there is something to delete Other changes: * support and require Django >= 1.7 * remove Python 2.6 support, require 2.7 or 3.3+ -* remove support for "south" migrations +* remove support for "south" migrations (used for 0.9.x and before) * add support for django 1.7's builtin migrations * misc. layout / UI improvments * misc. doc improvements From 46cdbd4e5375479c20c6ce29440fd13164ff8f2c Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 17 Nov 2014 20:58:51 +0100 Subject: [PATCH 7/7] fix django requirements: >= 1.7.1 and <1.8 1.7.0 had some bugs in migrations, avoid. 1.8 is not tested. --- requirements.d/all.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.d/all.txt b/requirements.d/all.txt index 85ca678..2717e5e 100644 --- a/requirements.d/all.txt +++ b/requirements.d/all.txt @@ -1,7 +1,7 @@ # packages always needed dnspython netaddr -django==1.7.1 +django>=1.7.1, <1.8 django-bootstrap-form django-registration-redux django-extensions diff --git a/setup.py b/setup.py index 0bbf778..9fa3bc5 100644 --- a/setup.py +++ b/setup.py @@ -55,7 +55,7 @@ setup( platforms='any', install_requires=install_requires + [ 'netaddr', - 'django>=1.7', + 'django>=1.7.1, <1.8', 'django-bootstrap-form', 'django-registration-redux', 'django-extensions',