98 lines
1.8 KiB
Go
98 lines
1.8 KiB
Go
// Various Linux/Unix'y things
|
|
|
|
// https://wiki.archlinux.org/title/Dynamic_DNS
|
|
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"net"
|
|
"bytes"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"go.wit.com/log"
|
|
"go.wit.com/shell"
|
|
)
|
|
|
|
func CheckSuperuser() bool {
|
|
return os.Getuid() == 0
|
|
}
|
|
|
|
func Escalate() {
|
|
if os.Getuid() != 0 {
|
|
cmd := exec.Command("sudo", "./control-panel-dns") // TODO: get the actual path
|
|
cmd.Stdin = os.Stdin
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
err := cmd.Run()
|
|
if err != nil {
|
|
log.Error(err, "exit in Escalate()")
|
|
log.Exit(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
// You need permission to do a zone transfer. Otherwise:
|
|
// dig +noall +answer +multiline lab.wit.com any
|
|
// dig +all +multiline fire.lab.wit.com # gives the zonefile header (ttl vals)
|
|
func DumpPublicDNSZone(zone string) {
|
|
entries, err := net.LookupHost(zone)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
for _, entry := range entries {
|
|
log.Println(entry)
|
|
}
|
|
}
|
|
|
|
func dumpIPs(host string) {
|
|
ips, err := net.LookupIP(host)
|
|
if err != nil {
|
|
log.Error(err, "dumpIPs() failed")
|
|
}
|
|
for _, ip := range ips {
|
|
log.Println(host, ip)
|
|
}
|
|
}
|
|
|
|
/*
|
|
check if ddclient is installed, working, and/or configured
|
|
https://github.com/ddclient/ddclient
|
|
*/
|
|
func ddclient() {
|
|
}
|
|
|
|
/*
|
|
check if ddupdate is installed, working, and/or configured
|
|
*/
|
|
func ddupdate() {
|
|
}
|
|
|
|
func run(s string) string {
|
|
cmdArgs := strings.Fields(s)
|
|
// Define the command you want to run
|
|
// cmd := exec.Command(cmdArgs)
|
|
cmd := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)
|
|
|
|
// Create a buffer to capture the output
|
|
var out bytes.Buffer
|
|
|
|
// Set the output of the command to the buffer
|
|
cmd.Stdout = &out
|
|
|
|
// Run the command
|
|
err := cmd.Run()
|
|
if err != nil {
|
|
fmt.Println("Error running command:", err)
|
|
return ""
|
|
}
|
|
|
|
tmp := shell.Chomp(out.String())
|
|
// Output the results
|
|
log.Info("Command Output:", tmp)
|
|
|
|
return tmp
|
|
}
|