mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-11-15 12:45:14 +08:00
37 lines
1.3 KiB
Go
37 lines
1.3 KiB
Go
package activedir
|
|
|
|
import (
|
|
"encoding/json"
|
|
"flag"
|
|
"fmt"
|
|
"runtime"
|
|
|
|
"github.com/StackExchange/dnscontrol/providers"
|
|
)
|
|
|
|
var flagFakePowerShell = flag.Bool("fakeps", false, "ACTIVEDIR: Do not run PowerShell. Open adzonedump.*.json files for input, and write to -psout any PS1 commands that make changes.")
|
|
var flagPsFuture = flag.String("psout", "dns_update_commands.ps1", "ACTIVEDIR: Where to write PS1 commands for future execution.")
|
|
var flagPsLog = flag.String("pslog", "powershell.log", "ACTIVEDIR: filename of PS1 command log.")
|
|
|
|
// This is the struct that matches either (or both) of the Registrar and/or DNSProvider interfaces:
|
|
type adProvider struct {
|
|
adServer string
|
|
}
|
|
|
|
// Register with the dnscontrol system.
|
|
// This establishes the name (all caps), and the function to call to initialize it.
|
|
func init() {
|
|
providers.RegisterDomainServiceProviderType("ACTIVEDIRECTORY_PS", newDNS)
|
|
}
|
|
|
|
func newDNS(config map[string]string, metadata json.RawMessage) (providers.DNSServiceProvider, error) {
|
|
if runtime.GOOS == "windows" || *flagFakePowerShell {
|
|
srv := config["ADServer"]
|
|
if srv == "" {
|
|
return nil, fmt.Errorf("ADServer required for Active Directory provider")
|
|
}
|
|
return &adProvider{adServer: srv}, nil
|
|
}
|
|
fmt.Printf("WARNING: PowerShell not available. ActiveDirectory will not be updated.\n")
|
|
return providers.None{}, nil
|
|
}
|