2020-08-21 02:03:53 -05:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
"os"
|
2020-08-23 17:31:20 -05:00
|
|
|
"os/signal"
|
|
|
|
"syscall"
|
2020-08-21 02:03:53 -05:00
|
|
|
|
|
|
|
"github.com/hashicorp/go-hclog"
|
|
|
|
"github.com/netauth/ldap/internal/ldap"
|
|
|
|
"github.com/netauth/netauth/pkg/netauth"
|
|
|
|
"github.com/spf13/viper"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
var appLogger hclog.Logger
|
|
|
|
|
|
|
|
llevel := os.Getenv("NETAUTH_LOGLEVEL")
|
|
|
|
if llevel != "" {
|
|
|
|
appLogger = hclog.New(&hclog.LoggerOptions{
|
|
|
|
Name: "ldap-proxy",
|
|
|
|
Level: hclog.LevelFromString(llevel),
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
appLogger = hclog.NewNullLogger()
|
|
|
|
}
|
|
|
|
|
2020-08-23 17:31:20 -05:00
|
|
|
// Take over the built in logger and set it up for Trace level
|
|
|
|
// priority. The only thing that logs at this priority are
|
|
|
|
// protocol messages from the underlying ldap server mux.
|
|
|
|
log.SetOutput(appLogger.Named("ldap.protocol").
|
|
|
|
StandardWriter(
|
|
|
|
&hclog.StandardLoggerOptions{
|
|
|
|
ForceLevel: hclog.Trace,
|
|
|
|
},
|
|
|
|
),
|
|
|
|
)
|
2020-08-21 02:03:53 -05:00
|
|
|
log.SetPrefix("")
|
|
|
|
log.SetFlags(0)
|
|
|
|
|
|
|
|
viper.SetConfigName("config")
|
|
|
|
viper.AddConfigPath("/etc/netauth/")
|
|
|
|
viper.AddConfigPath("$HOME/.netauth/")
|
|
|
|
viper.AddConfigPath(".")
|
|
|
|
if err := viper.ReadInConfig(); err != nil {
|
|
|
|
appLogger.Error("Error loading config", "error", err)
|
|
|
|
os.Exit(5)
|
|
|
|
}
|
|
|
|
|
|
|
|
nacl, err := netauth.NewWithLog(appLogger.Named("netauth"))
|
|
|
|
if err != nil {
|
|
|
|
os.Exit(2)
|
|
|
|
}
|
|
|
|
|
|
|
|
ls := ldap.New(appLogger, nacl)
|
2020-08-22 22:49:54 -05:00
|
|
|
|
2020-08-23 17:31:20 -05:00
|
|
|
ls.SetDomain(viper.GetString("ldap.domain"))
|
2020-08-22 22:49:54 -05:00
|
|
|
|
2020-08-23 17:31:20 -05:00
|
|
|
if err := ls.Serve(viper.GetString("ldap.bind")); err != nil {
|
2020-08-21 02:03:53 -05:00
|
|
|
appLogger.Error("Error serving", "error", err)
|
|
|
|
return
|
|
|
|
}
|
2020-08-23 17:31:20 -05:00
|
|
|
|
|
|
|
// Sit here and wait for a signal to shutdown.
|
|
|
|
ch := make(chan os.Signal, 5)
|
|
|
|
signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
<-ch
|
|
|
|
ls.Stop()
|
|
|
|
|
2020-08-21 02:03:53 -05:00
|
|
|
appLogger.Info("Goodbye!")
|
|
|
|
}
|