mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-02-03 22:18:39 +00:00
By looking for any additional dnsmasq configuration files under /tmp/etc, and handling them like default one.
91 lines
2.3 KiB
Go
91 lines
2.3 KiB
Go
package dnsmasq
|
|
|
|
import (
|
|
"bufio"
|
|
"bytes"
|
|
"errors"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func InterfaceNameFromConfig(filename string) (string, error) {
|
|
buf, err := os.ReadFile(filename)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return interfaceNameFromReader(bytes.NewReader(buf))
|
|
}
|
|
|
|
func interfaceNameFromReader(r io.Reader) (string, error) {
|
|
scanner := bufio.NewScanner(r)
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
after, found := strings.CutPrefix(line, "interface=")
|
|
if found {
|
|
return after, nil
|
|
}
|
|
}
|
|
return "", errors.New("not found")
|
|
}
|
|
|
|
// AdditionalConfigFiles returns a list of Dnsmasq configuration files found in the "/tmp/etc" directory.
|
|
func AdditionalConfigFiles() []string {
|
|
if paths, err := filepath.Glob("/tmp/etc/dnsmasq-*.conf"); err == nil {
|
|
return paths
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// AdditionalLeaseFiles returns a list of lease file paths corresponding to the Dnsmasq configuration files.
|
|
func AdditionalLeaseFiles() []string {
|
|
cfgFiles := AdditionalConfigFiles()
|
|
if len(cfgFiles) == 0 {
|
|
return nil
|
|
}
|
|
leaseFiles := make([]string, 0, len(cfgFiles))
|
|
for _, cfgFile := range cfgFiles {
|
|
if leaseFile := leaseFileFromConfigFileName(cfgFile); leaseFile != "" {
|
|
leaseFiles = append(leaseFiles, leaseFile)
|
|
|
|
} else {
|
|
leaseFiles = append(leaseFiles, defaultLeaseFileFromConfigPath(cfgFile))
|
|
}
|
|
}
|
|
return leaseFiles
|
|
}
|
|
|
|
// leaseFileFromConfigFileName retrieves the DHCP lease file path by reading and parsing the provided configuration file.
|
|
func leaseFileFromConfigFileName(cfgFile string) string {
|
|
if f, err := os.Open(cfgFile); err == nil {
|
|
return leaseFileFromReader(f)
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// leaseFileFromReader parses the given io.Reader for the "dhcp-leasefile" configuration and returns its value as a string.
|
|
func leaseFileFromReader(r io.Reader) string {
|
|
scanner := bufio.NewScanner(r)
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
if strings.HasPrefix(line, "#") {
|
|
continue
|
|
}
|
|
before, after, found := strings.Cut(line, "=")
|
|
if !found {
|
|
continue
|
|
}
|
|
if before == "dhcp-leasefile" {
|
|
return after
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// defaultLeaseFileFromConfigPath generates the default lease file path based on the provided configuration file path.
|
|
func defaultLeaseFileFromConfigPath(path string) string {
|
|
name := filepath.Base(path)
|
|
return filepath.Join("/var/lib/misc", strings.TrimSuffix(name, ".conf")+".leases")
|
|
}
|