intial import
This commit is contained in:
commit
2e90d32ce2
5 changed files with 264 additions and 0 deletions
70
nameserver.go
Normal file
70
nameserver.go
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"net"
|
||||
"os/exec"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func createQuery(data userData, addr net.IP, deleteRecord bool) string {
|
||||
var query strings.Builder
|
||||
|
||||
query.WriteString(fmt.Sprintf("key %s\n", data.tsigkey))
|
||||
query.WriteString(fmt.Sprintf("server %s\n", data.nameserver))
|
||||
query.WriteString(fmt.Sprintf("zone %s\n", data.zonename))
|
||||
if deleteRecord {
|
||||
query.WriteString(fmt.Sprintf("update delete %s. A\n", data.hostname))
|
||||
}
|
||||
query.WriteString(fmt.Sprintf("update add %s. A %s\n", data.hostname,
|
||||
addr.String()))
|
||||
query.WriteString("show\n")
|
||||
query.WriteString("send\n")
|
||||
|
||||
return query.String()
|
||||
}
|
||||
|
||||
func queryNameserver(query string) error {
|
||||
var (
|
||||
stdout bytes.Buffer
|
||||
stderr bytes.Buffer
|
||||
)
|
||||
|
||||
cmd := exec.Command("knsupdate", "-v")
|
||||
cmd.Stdin = strings.NewReader(query)
|
||||
cmd.Stdout = &stdout
|
||||
cmd.Stderr = &stderr
|
||||
err := cmd.Run()
|
||||
fmt.Printf(stdout.String())
|
||||
fmt.Printf(stderr.String())
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func updateNameserver(data userData, addr net.IP) (bool, error) {
|
||||
updateRecord := true
|
||||
deleteRecord := true
|
||||
|
||||
addrs, err := net.LookupIP(data.hostname)
|
||||
if err != nil {
|
||||
deleteRecord = false
|
||||
} else {
|
||||
for _, ip := range addrs {
|
||||
if ip.Equal(addr) {
|
||||
updateRecord = false
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if !updateRecord {
|
||||
return false, nil
|
||||
} else {
|
||||
query := createQuery(data, addr, deleteRecord)
|
||||
err = queryNameserver(query)
|
||||
if err != nil {
|
||||
return true, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue