X-Git-Url: https://git.ralfj.de/dyn-nsupdate.git/blobdiff_plain/9ea63288e65a4da36f902d49d534db12cbf0c520..HEAD:/server-scripts/update?ds=inline diff --git a/server-scripts/update b/server-scripts/update index 3d6331e..48c791c 100755 --- a/server-scripts/update +++ b/server-scripts/update @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # Copyright (c) 2014, Ralf Jung # All rights reserved. # @@ -21,36 +21,45 @@ # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# The views and conclusions contained in the software and documentation are those -# of the authors and should not be interpreted as representing official policies, -# either expressed or implied, of the FreeBSD Project. import cgi, os, sys, subprocess -form = cgi.FieldStorage() +form = cgi.FieldStorage(keep_blank_values=True) # print headers -print "Content-Type: text/plain" -print "" +print("Content-Type: text/plain") +print("") # get input -if "password" not in form or "domain" not in form or "ip" not in form: - print "Mandatory argument missing: You must supply all of 'password', 'domain', 'ip'" +if "password" not in form or "domain" not in form or ("ip" not in form and "ipv6" not in form): + print("Mandatory argument missing: You must supply all of 'password', 'domain' and at least either 'ip' or 'ipv6'") sys.exit() -ip = form["ip"].value -domain = form["domain"].value -password = form["password"].value +domain = form.getfirst("domain") +password = form.getfirst("password") +ip = form.getfirst("ip") +ipv6 = form.getfirst("ipv6") +assert domain is not None and password is not None +assert ip is not None or ipv6 is not None # run update program -p = subprocess.Popen(["/var/lib/named/dyn-nsupdate", domain, password, ip], stdout=subprocess.PIPE, stderr=subprocess.PIPE) +args = ["/var/lib/bind/dyn-nsupdate", "--domain", domain, "--password", password] +if ip is not None: + args += ["--ipv4", ip] +if ipv6 is not None: + args += ["--ipv6", ipv6] +p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdout, stderr) = p.communicate() # check what it did if p.returncode or stderr or stdout: # error :/ - print "There was an error while updating the DNS: Return code %d" % p.returncode - if stdout: print stdout - if stderr: print stderr + print("There was an error while updating the DNS: Return code %d" % p.returncode) + if stdout: print(stdout) + if stderr: print(stderr) else: - print "good",ip + out = "good" + if ip is not None: + out += " "+ip + if ipv6 is not None: + out += " "+ipv6 + print(out)