mirror of
https://github.com/adnanh/webhook.git
synced 2025-05-13 09:04:44 +00:00
Refactor fatal logging during service startup
Create a log queue to postpone the first log write until after privilege dropping and log file opening.
This commit is contained in:
parent
5af6e4d1ec
commit
fda328dc23
1 changed files with 24 additions and 11 deletions
35
webhook.go
35
webhook.go
|
@ -94,13 +94,14 @@ func main() {
|
||||||
if *justListCiphers {
|
if *justListCiphers {
|
||||||
err := writeTLSSupportedCipherStrings(os.Stdout, getTLSMinVersion(*tlsMinVersion))
|
err := writeTLSSupportedCipherStrings(os.Stdout, getTLSMinVersion(*tlsMinVersion))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*setUID != 0 || *setGID != 0) && (*setUID == 0 || *setGID == 0) {
|
if (*setUID != 0 || *setGID != 0) && (*setUID == 0 || *setGID == 0) {
|
||||||
fmt.Println("Error: setuid and setgid options must be used together")
|
fmt.Println("error: setuid and setgid options must be used together")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,37 +113,49 @@ func main() {
|
||||||
hooksFiles = append(hooksFiles, "hooks.json")
|
hooksFiles = append(hooksFiles, "hooks.json")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// logQueue is a queue for log messages encountered during startup. We need
|
||||||
|
// to queue the messages so that we can handle any privilege dropping and
|
||||||
|
// log file opening prior to writing our first log message.
|
||||||
|
var logQueue []string
|
||||||
|
|
||||||
addr := fmt.Sprintf("%s:%d", *ip, *port)
|
addr := fmt.Sprintf("%s:%d", *ip, *port)
|
||||||
|
|
||||||
// Open listener early so we can drop privileges.
|
// Open listener early so we can drop privileges.
|
||||||
ln, err := net.Listen("tcp", addr)
|
ln, err := net.Listen("tcp", addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error listening on port: %s", err)
|
logQueue = append(logQueue, fmt.Sprintf("error listening on port: %s", err))
|
||||||
return
|
// we'll bail out below
|
||||||
}
|
}
|
||||||
|
|
||||||
if *setUID != 0 {
|
if *setUID != 0 {
|
||||||
err := dropPrivileges(*setUID, *setGID)
|
err := dropPrivileges(*setUID, *setGID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error dropping privileges: %s", err)
|
logQueue = append(logQueue, fmt.Sprintf("error dropping privileges: %s", err))
|
||||||
return
|
// we'll bail out below
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if *logPath != "" {
|
if *logPath != "" {
|
||||||
file, err := os.OpenFile(*logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
|
file, err := os.OpenFile(*logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error opening log file %q: %v", *logPath, err)
|
logQueue = append(logQueue, fmt.Sprintf("error opening log file %q: %v", *logPath, err))
|
||||||
|
// we'll bail out below
|
||||||
return
|
} else {
|
||||||
|
log.SetOutput(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.SetOutput(file)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log.SetPrefix("[webhook] ")
|
log.SetPrefix("[webhook] ")
|
||||||
log.SetFlags(log.Ldate | log.Ltime)
|
log.SetFlags(log.Ldate | log.Ltime)
|
||||||
|
|
||||||
|
if len(logQueue) != 0 {
|
||||||
|
for i := range logQueue {
|
||||||
|
log.Println(logQueue[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
if !*verbose {
|
if !*verbose {
|
||||||
log.SetOutput(ioutil.Discard)
|
log.SetOutput(ioutil.Discard)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue