X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=goircd.go;h=f70e11c68e9a21d31fb98460ea1d41451075aedd;hb=4f5fa5132780b50c7f2b51329b2a68d3cbbff939;hp=366032c7735d1709f52a267d65c6b40823b59bd1;hpb=1a2241388b07687d842bf3ff052cc0c8a4e222cc;p=goircd.git diff --git a/goircd.go b/goircd.go index 366032c..f70e11c 100644 --- a/goircd.go +++ b/goircd.go @@ -23,17 +23,22 @@ import ( "io/ioutil" "log" "net" + "os" + "os/signal" "path" "path/filepath" "strings" + "syscall" ) var ( - hostname = flag.String("hostname", "localhost", "Hostname") - bind = flag.String("bind", ":6667", "Address to bind to") - motd = flag.String("motd", "", "Path to MOTD file") - logdir = flag.String("logdir", "", "Absolute path to directory for logs") - statedir = flag.String("statedir", "", "Absolute path to directory for states") + version string + hostname = flag.String("hostname", "localhost", "Hostname") + bind = flag.String("bind", ":6667", "Address to bind to") + motd = flag.String("motd", "", "Path to MOTD file") + logdir = flag.String("logdir", "", "Absolute path to directory for logs") + statedir = flag.String("statedir", "", "Absolute path to directory for states") + passwords = flag.String("passwords", "", "Optional path to passwords file") tlsKey = flag.String("tls_key", "", "TLS keyfile") tlsCert = flag.String("tls_cert", "", "TLS certificate") @@ -46,11 +51,11 @@ func Run() { events := make(chan ClientEvent) log.SetFlags(log.Ldate | log.Lmicroseconds | log.Lshortfile) - log_sink := make(chan LogEvent) + logSink := make(chan LogEvent) if *logdir == "" { // Dummy logger go func() { - for _ = range log_sink { + for _ = range logSink { } }() } else { @@ -58,17 +63,17 @@ func Run() { log.Fatalln("Need absolute path for logdir") return } - go Logger(*logdir, log_sink) + go Logger(*logdir, logSink) log.Println(*logdir, "logger initialized") } - state_sink := make(chan StateEvent) - daemon := NewDaemon(*hostname, *motd, log_sink, state_sink) + stateSink := make(chan StateEvent) + daemon := NewDaemon(version, *hostname, *motd, logSink, stateSink) daemon.Verbose = *verbose if *statedir == "" { // Dummy statekeeper go func() { - for _ = range state_sink { + for _ = range stateSink { } }() } else { @@ -94,7 +99,7 @@ func Run() { log.Println("Loaded state for room", room.name) } } - go StateKeeper(*statedir, state_sink) + go StateKeeper(*statedir, stateSink) log.Println(*statedir, "statekeeper initialized") } @@ -116,7 +121,19 @@ func Run() { log.Fatalf("Can not listen on %s: %v", *bind, err) } } - log.Println("Listening on", *bind) + log.Println("goircd "+daemon.version+" listening on", *bind) + + if *passwords != "" { + daemon.PasswordsRefresh() + hups := make(chan os.Signal) + signal.Notify(hups, syscall.SIGHUP) + go func() { + for { + <-hups + daemon.PasswordsRefresh() + } + }() + } go daemon.Processor(events) for {