From 2388222e98462fdbbe44f3e091b2b79d80956a9a Mon Sep 17 00:00:00 2001 From: Valentin Rothberg Date: Mon, 24 Jun 2019 21:29:31 +0200 Subject: update dependencies Ran a `go get -u` and bumped K8s deps to 1.15.0. Signed-off-by: Valentin Rothberg --- vendor/github.com/coreos/go-systemd/dbus/dbus.go | 6 +- .../github.com/coreos/go-systemd/dbus/methods.go | 14 +- .../coreos/go-systemd/dbus/subscription.go | 2 +- .../coreos/go-systemd/journal/journal.go | 143 ++++++++++++++------- .../coreos/go-systemd/sdjournal/journal.go | 56 ++++---- 5 files changed, 136 insertions(+), 85 deletions(-) (limited to 'vendor/github.com/coreos/go-systemd') diff --git a/vendor/github.com/coreos/go-systemd/dbus/dbus.go b/vendor/github.com/coreos/go-systemd/dbus/dbus.go index 1d54810af..f652582e6 100644 --- a/vendor/github.com/coreos/go-systemd/dbus/dbus.go +++ b/vendor/github.com/coreos/go-systemd/dbus/dbus.go @@ -143,7 +143,7 @@ func NewUserConnection() (*Conn, error) { func NewSystemdConnection() (*Conn, error) { return NewConnection(func() (*dbus.Conn, error) { // We skip Hello when talking directly to systemd. - return dbusAuthConnection(func() (*dbus.Conn, error) { + return dbusAuthConnection(func(opts ...dbus.ConnOption) (*dbus.Conn, error) { return dbus.Dial("unix:path=/run/systemd/private") }) }) @@ -201,7 +201,7 @@ func (c *Conn) GetManagerProperty(prop string) (string, error) { return variant.String(), nil } -func dbusAuthConnection(createBus func() (*dbus.Conn, error)) (*dbus.Conn, error) { +func dbusAuthConnection(createBus func(opts ...dbus.ConnOption) (*dbus.Conn, error)) (*dbus.Conn, error) { conn, err := createBus() if err != nil { return nil, err @@ -221,7 +221,7 @@ func dbusAuthConnection(createBus func() (*dbus.Conn, error)) (*dbus.Conn, error return conn, nil } -func dbusAuthHelloConnection(createBus func() (*dbus.Conn, error)) (*dbus.Conn, error) { +func dbusAuthHelloConnection(createBus func(opts ...dbus.ConnOption) (*dbus.Conn, error)) (*dbus.Conn, error) { conn, err := dbusAuthConnection(createBus) if err != nil { return nil, err diff --git a/vendor/github.com/coreos/go-systemd/dbus/methods.go b/vendor/github.com/coreos/go-systemd/dbus/methods.go index 0b4207229..5859583eb 100644 --- a/vendor/github.com/coreos/go-systemd/dbus/methods.go +++ b/vendor/github.com/coreos/go-systemd/dbus/methods.go @@ -117,13 +117,13 @@ func (c *Conn) TryRestartUnit(name string, mode string, ch chan<- string) (int, return c.startJob(ch, "org.freedesktop.systemd1.Manager.TryRestartUnit", name, mode) } -// ReloadOrRestart attempts a reload if the unit supports it and use a restart +// ReloadOrRestartUnit attempts a reload if the unit supports it and use a restart // otherwise. func (c *Conn) ReloadOrRestartUnit(name string, mode string, ch chan<- string) (int, error) { return c.startJob(ch, "org.freedesktop.systemd1.Manager.ReloadOrRestartUnit", name, mode) } -// ReloadOrTryRestart attempts a reload if the unit supports it and use a "Try" +// ReloadOrTryRestartUnit attempts a reload if the unit supports it and use a "Try" // flavored restart otherwise. func (c *Conn) ReloadOrTryRestartUnit(name string, mode string, ch chan<- string) (int, error) { return c.startJob(ch, "org.freedesktop.systemd1.Manager.ReloadOrTryRestartUnit", name, mode) @@ -192,11 +192,17 @@ func (c *Conn) GetUnitProperties(unit string) (map[string]interface{}, error) { return c.getProperties(path, "org.freedesktop.systemd1.Unit") } -// GetUnitProperties takes the (escaped) unit path and returns all of its dbus object properties. +// GetUnitPathProperties takes the (escaped) unit path and returns all of its dbus object properties. func (c *Conn) GetUnitPathProperties(path dbus.ObjectPath) (map[string]interface{}, error) { return c.getProperties(path, "org.freedesktop.systemd1.Unit") } +// GetAllProperties takes the (unescaped) unit name and returns all of its dbus object properties. +func (c *Conn) GetAllProperties(unit string) (map[string]interface{}, error) { + path := unitPath(unit) + return c.getProperties(path, "") +} + func (c *Conn) getProperty(unit string, dbusInterface string, propertyName string) (*Property, error) { var err error var prop dbus.Variant @@ -291,6 +297,8 @@ func (c *Conn) listUnitsInternal(f storeFunc) ([]UnitStatus, error) { // ListUnits returns an array with all currently loaded units. Note that // units may be known by multiple names at the same time, and hence there might // be more unit names loaded than actual units behind them. +// Also note that a unit is only loaded if it is active and/or enabled. +// Units that are both disabled and inactive will thus not be returned. func (c *Conn) ListUnits() ([]UnitStatus, error) { return c.listUnitsInternal(c.sysobj.Call("org.freedesktop.systemd1.Manager.ListUnits", 0).Store) } diff --git a/vendor/github.com/coreos/go-systemd/dbus/subscription.go b/vendor/github.com/coreos/go-systemd/dbus/subscription.go index 70e63a6f1..f6d7a08a1 100644 --- a/vendor/github.com/coreos/go-systemd/dbus/subscription.go +++ b/vendor/github.com/coreos/go-systemd/dbus/subscription.go @@ -94,7 +94,7 @@ func (c *Conn) dispatch() { }() } -// Returns two unbuffered channels which will receive all changed units every +// SubscribeUnits returns two unbuffered channels which will receive all changed units every // interval. Deleted units are sent as nil. func (c *Conn) SubscribeUnits(interval time.Duration) (<-chan map[string]*UnitStatus, <-chan error) { return c.SubscribeUnitsCustom(interval, 0, func(u1, u2 *UnitStatus) bool { return *u1 != *u2 }, nil) diff --git a/vendor/github.com/coreos/go-systemd/journal/journal.go b/vendor/github.com/coreos/go-systemd/journal/journal.go index ef85a3ba2..a0f4837a0 100644 --- a/vendor/github.com/coreos/go-systemd/journal/journal.go +++ b/vendor/github.com/coreos/go-systemd/journal/journal.go @@ -33,7 +33,10 @@ import ( "os" "strconv" "strings" + "sync" + "sync/atomic" "syscall" + "unsafe" ) // Priority of a journal message @@ -50,19 +53,35 @@ const ( PriDebug ) -var conn net.Conn +var ( + // This can be overridden at build-time: + // https://github.com/golang/go/wiki/GcToolchainTricks#including-build-information-in-the-executable + journalSocket = "/run/systemd/journal/socket" + + // unixConnPtr atomically holds the local unconnected Unix-domain socket. + // Concrete safe pointer type: *net.UnixConn + unixConnPtr unsafe.Pointer + // onceConn ensures that unixConnPtr is initialized exactly once. + onceConn sync.Once +) func init() { - var err error - conn, err = net.Dial("unixgram", "/run/systemd/journal/socket") - if err != nil { - conn = nil - } + onceConn.Do(initConn) } -// Enabled returns true if the local systemd journal is available for logging +// Enabled checks whether the local systemd journal is available for logging. func Enabled() bool { - return conn != nil + onceConn.Do(initConn) + + if (*net.UnixConn)(atomic.LoadPointer(&unixConnPtr)) == nil { + return false + } + + if _, err := net.Dial("unixgram", journalSocket); err != nil { + return false + } + + return true } // Send a message to the local systemd journal. vars is a map of journald @@ -73,8 +92,14 @@ func Enabled() bool { // (http://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html) // for more details. vars may be nil. func Send(message string, priority Priority, vars map[string]string) error { + conn := (*net.UnixConn)(atomic.LoadPointer(&unixConnPtr)) if conn == nil { - return journalError("could not connect to journald socket") + return errors.New("could not initialize socket to journald") + } + + socketAddr := &net.UnixAddr{ + Name: journalSocket, + Net: "unixgram", } data := new(bytes.Buffer) @@ -84,32 +109,30 @@ func Send(message string, priority Priority, vars map[string]string) error { appendVariable(data, k, v) } - _, err := io.Copy(conn, data) - if err != nil && isSocketSpaceError(err) { - file, err := tempFd() - if err != nil { - return journalError(err.Error()) - } - defer file.Close() - _, err = io.Copy(file, data) - if err != nil { - return journalError(err.Error()) - } - - rights := syscall.UnixRights(int(file.Fd())) + _, _, err := conn.WriteMsgUnix(data.Bytes(), nil, socketAddr) + if err == nil { + return nil + } + if !isSocketSpaceError(err) { + return err + } - /* this connection should always be a UnixConn, but better safe than sorry */ - unixConn, ok := conn.(*net.UnixConn) - if !ok { - return journalError("can't send file through non-Unix connection") - } - _, _, err = unixConn.WriteMsgUnix([]byte{}, rights, nil) - if err != nil { - return journalError(err.Error()) - } - } else if err != nil { - return journalError(err.Error()) + // Large log entry, send it via tempfile and ancillary-fd. + file, err := tempFd() + if err != nil { + return err + } + defer file.Close() + _, err = io.Copy(file, data) + if err != nil { + return err } + rights := syscall.UnixRights(int(file.Fd())) + _, _, err = conn.WriteMsgUnix([]byte{}, rights, socketAddr) + if err != nil { + return err + } + return nil } @@ -119,8 +142,8 @@ func Print(priority Priority, format string, a ...interface{}) error { } func appendVariable(w io.Writer, name, value string) { - if !validVarName(name) { - journalError("variable name contains invalid character, ignoring") + if err := validVarName(name); err != nil { + fmt.Fprintf(os.Stderr, "variable name %s contains invalid character, ignoring\n", name) } if strings.ContainsRune(value, '\n') { /* When the value contains a newline, we write: @@ -137,32 +160,42 @@ func appendVariable(w io.Writer, name, value string) { } } -func validVarName(name string) bool { - /* The variable name must be in uppercase and consist only of characters, - * numbers and underscores, and may not begin with an underscore. (from the docs) - */ +// validVarName validates a variable name to make sure journald will accept it. +// The variable name must be in uppercase and consist only of characters, +// numbers and underscores, and may not begin with an underscore: +// https://www.freedesktop.org/software/systemd/man/sd_journal_print.html +func validVarName(name string) error { + if name == "" { + return errors.New("Empty variable name") + } else if name[0] == '_' { + return errors.New("Variable name begins with an underscore") + } - valid := name[0] != '_' for _, c := range name { - valid = valid && ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || c == '_' + if !(('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || c == '_') { + return errors.New("Variable name contains invalid characters") + } } - return valid + return nil } +// isSocketSpaceError checks whether the error is signaling +// an "overlarge message" condition. func isSocketSpaceError(err error) bool { opErr, ok := err.(*net.OpError) - if !ok { + if !ok || opErr == nil { return false } - sysErr, ok := opErr.Err.(syscall.Errno) - if !ok { + sysErr, ok := opErr.Err.(*os.SyscallError) + if !ok || sysErr == nil { return false } - return sysErr == syscall.EMSGSIZE || sysErr == syscall.ENOBUFS + return sysErr.Err == syscall.EMSGSIZE || sysErr.Err == syscall.ENOBUFS } +// tempFd creates a temporary, unlinked file under `/dev/shm`. func tempFd() (*os.File, error) { file, err := ioutil.TempFile("/dev/shm/", "journal.XXXXX") if err != nil { @@ -175,8 +208,18 @@ func tempFd() (*os.File, error) { return file, nil } -func journalError(s string) error { - s = "journal error: " + s - fmt.Fprintln(os.Stderr, s) - return errors.New(s) +// initConn initializes the global `unixConnPtr` socket. +// It is meant to be called exactly once, at program startup. +func initConn() { + autobind, err := net.ResolveUnixAddr("unixgram", "") + if err != nil { + return + } + + sock, err := net.ListenUnixgram("unixgram", autobind) + if err != nil { + return + } + + atomic.StorePointer(&unixConnPtr, unsafe.Pointer(sock)) } diff --git a/vendor/github.com/coreos/go-systemd/sdjournal/journal.go b/vendor/github.com/coreos/go-systemd/sdjournal/journal.go index 9f3d92342..7f840def8 100644 --- a/vendor/github.com/coreos/go-systemd/sdjournal/journal.go +++ b/vendor/github.com/coreos/go-systemd/sdjournal/journal.go @@ -414,7 +414,7 @@ func NewJournal() (j *Journal, err error) { r := C.my_sd_journal_open(sd_journal_open, &j.cjournal, C.SD_JOURNAL_LOCAL_ONLY) if r < 0 { - return nil, fmt.Errorf("failed to open journal: %d", syscall.Errno(-r)) + return nil, fmt.Errorf("failed to open journal: %s", syscall.Errno(-r).Error()) } return j, nil @@ -435,7 +435,7 @@ func NewJournalFromDir(path string) (j *Journal, err error) { r := C.my_sd_journal_open_directory(sd_journal_open_directory, &j.cjournal, p, 0) if r < 0 { - return nil, fmt.Errorf("failed to open journal in directory %q: %d", path, syscall.Errno(-r)) + return nil, fmt.Errorf("failed to open journal in directory %q: %s", path, syscall.Errno(-r).Error()) } return j, nil @@ -461,7 +461,7 @@ func NewJournalFromFiles(paths ...string) (j *Journal, err error) { r := C.my_sd_journal_open_files(sd_journal_open_files, &j.cjournal, &cPaths[0], 0) if r < 0 { - return nil, fmt.Errorf("failed to open journals in paths %q: %d", paths, syscall.Errno(-r)) + return nil, fmt.Errorf("failed to open journals in paths %q: %s", paths, syscall.Errno(-r).Error()) } return j, nil @@ -496,7 +496,7 @@ func (j *Journal) AddMatch(match string) error { j.mu.Unlock() if r < 0 { - return fmt.Errorf("failed to add match: %d", syscall.Errno(-r)) + return fmt.Errorf("failed to add match: %s", syscall.Errno(-r).Error()) } return nil @@ -514,7 +514,7 @@ func (j *Journal) AddDisjunction() error { j.mu.Unlock() if r < 0 { - return fmt.Errorf("failed to add a disjunction in the match list: %d", syscall.Errno(-r)) + return fmt.Errorf("failed to add a disjunction in the match list: %s", syscall.Errno(-r).Error()) } return nil @@ -532,7 +532,7 @@ func (j *Journal) AddConjunction() error { j.mu.Unlock() if r < 0 { - return fmt.Errorf("failed to add a conjunction in the match list: %d", syscall.Errno(-r)) + return fmt.Errorf("failed to add a conjunction in the match list: %s", syscall.Errno(-r).Error()) } return nil @@ -562,7 +562,7 @@ func (j *Journal) Next() (uint64, error) { j.mu.Unlock() if r < 0 { - return 0, fmt.Errorf("failed to iterate journal: %d", syscall.Errno(-r)) + return 0, fmt.Errorf("failed to iterate journal: %s", syscall.Errno(-r).Error()) } return uint64(r), nil @@ -581,7 +581,7 @@ func (j *Journal) NextSkip(skip uint64) (uint64, error) { j.mu.Unlock() if r < 0 { - return 0, fmt.Errorf("failed to iterate journal: %d", syscall.Errno(-r)) + return 0, fmt.Errorf("failed to iterate journal: %s", syscall.Errno(-r).Error()) } return uint64(r), nil @@ -599,7 +599,7 @@ func (j *Journal) Previous() (uint64, error) { j.mu.Unlock() if r < 0 { - return 0, fmt.Errorf("failed to iterate journal: %d", syscall.Errno(-r)) + return 0, fmt.Errorf("failed to iterate journal: %s", syscall.Errno(-r).Error()) } return uint64(r), nil @@ -618,7 +618,7 @@ func (j *Journal) PreviousSkip(skip uint64) (uint64, error) { j.mu.Unlock() if r < 0 { - return 0, fmt.Errorf("failed to iterate journal: %d", syscall.Errno(-r)) + return 0, fmt.Errorf("failed to iterate journal: %s", syscall.Errno(-r).Error()) } return uint64(r), nil @@ -641,7 +641,7 @@ func (j *Journal) getData(field string) (unsafe.Pointer, C.int, error) { j.mu.Unlock() if r < 0 { - return nil, 0, fmt.Errorf("failed to read message: %d", syscall.Errno(-r)) + return nil, 0, fmt.Errorf("failed to read message: %s", syscall.Errno(-r).Error()) } return d, C.int(l), nil @@ -736,7 +736,7 @@ func (j *Journal) GetEntry() (*JournalEntry, error) { var realtimeUsec C.uint64_t r = C.my_sd_journal_get_realtime_usec(sd_journal_get_realtime_usec, j.cjournal, &realtimeUsec) if r < 0 { - return nil, fmt.Errorf("failed to get realtime timestamp: %d", syscall.Errno(-r)) + return nil, fmt.Errorf("failed to get realtime timestamp: %s", syscall.Errno(-r).Error()) } entry.RealtimeTimestamp = uint64(realtimeUsec) @@ -746,7 +746,7 @@ func (j *Journal) GetEntry() (*JournalEntry, error) { r = C.my_sd_journal_get_monotonic_usec(sd_journal_get_monotonic_usec, j.cjournal, &monotonicUsec, &boot_id) if r < 0 { - return nil, fmt.Errorf("failed to get monotonic timestamp: %d", syscall.Errno(-r)) + return nil, fmt.Errorf("failed to get monotonic timestamp: %s", syscall.Errno(-r).Error()) } entry.MonotonicTimestamp = uint64(monotonicUsec) @@ -757,7 +757,7 @@ func (j *Journal) GetEntry() (*JournalEntry, error) { r = C.my_sd_journal_get_cursor(sd_journal_get_cursor, j.cjournal, &c) defer C.free(unsafe.Pointer(c)) if r < 0 { - return nil, fmt.Errorf("failed to get cursor: %d", syscall.Errno(-r)) + return nil, fmt.Errorf("failed to get cursor: %s", syscall.Errno(-r).Error()) } entry.Cursor = C.GoString(c) @@ -773,7 +773,7 @@ func (j *Journal) GetEntry() (*JournalEntry, error) { } if r < 0 { - return nil, fmt.Errorf("failed to read message field: %d", syscall.Errno(-r)) + return nil, fmt.Errorf("failed to read message field: %s", syscall.Errno(-r).Error()) } msg := C.GoStringN((*C.char)(d), C.int(l)) @@ -803,7 +803,7 @@ func (j *Journal) SetDataThreshold(threshold uint64) error { j.mu.Unlock() if r < 0 { - return fmt.Errorf("failed to set data threshold: %d", syscall.Errno(-r)) + return fmt.Errorf("failed to set data threshold: %s", syscall.Errno(-r).Error()) } return nil @@ -826,7 +826,7 @@ func (j *Journal) GetRealtimeUsec() (uint64, error) { j.mu.Unlock() if r < 0 { - return 0, fmt.Errorf("failed to get realtime timestamp: %d", syscall.Errno(-r)) + return 0, fmt.Errorf("failed to get realtime timestamp: %s", syscall.Errno(-r).Error()) } return uint64(usec), nil @@ -850,7 +850,7 @@ func (j *Journal) GetMonotonicUsec() (uint64, error) { j.mu.Unlock() if r < 0 { - return 0, fmt.Errorf("failed to get monotonic timestamp: %d", syscall.Errno(-r)) + return 0, fmt.Errorf("failed to get monotonic timestamp: %s", syscall.Errno(-r).Error()) } return uint64(usec), nil @@ -875,7 +875,7 @@ func (j *Journal) GetCursor() (string, error) { defer C.free(unsafe.Pointer(d)) if r < 0 { - return "", fmt.Errorf("failed to get cursor: %d", syscall.Errno(-r)) + return "", fmt.Errorf("failed to get cursor: %s", syscall.Errno(-r).Error()) } cursor := C.GoString(d) @@ -899,7 +899,7 @@ func (j *Journal) TestCursor(cursor string) error { j.mu.Unlock() if r < 0 { - return fmt.Errorf("failed to test to cursor %q: %d", cursor, syscall.Errno(-r)) + return fmt.Errorf("failed to test to cursor %q: %s", cursor, syscall.Errno(-r).Error()) } else if r == 0 { return ErrNoTestCursor } @@ -921,7 +921,7 @@ func (j *Journal) SeekHead() error { j.mu.Unlock() if r < 0 { - return fmt.Errorf("failed to seek to head of journal: %d", syscall.Errno(-r)) + return fmt.Errorf("failed to seek to head of journal: %s", syscall.Errno(-r).Error()) } return nil @@ -941,7 +941,7 @@ func (j *Journal) SeekTail() error { j.mu.Unlock() if r < 0 { - return fmt.Errorf("failed to seek to tail of journal: %d", syscall.Errno(-r)) + return fmt.Errorf("failed to seek to tail of journal: %s", syscall.Errno(-r).Error()) } return nil @@ -961,7 +961,7 @@ func (j *Journal) SeekRealtimeUsec(usec uint64) error { j.mu.Unlock() if r < 0 { - return fmt.Errorf("failed to seek to %d: %d", usec, syscall.Errno(-r)) + return fmt.Errorf("failed to seek to %d: %s", usec, syscall.Errno(-r).Error()) } return nil @@ -984,7 +984,7 @@ func (j *Journal) SeekCursor(cursor string) error { j.mu.Unlock() if r < 0 { - return fmt.Errorf("failed to seek to cursor %q: %d", cursor, syscall.Errno(-r)) + return fmt.Errorf("failed to seek to cursor %q: %s", cursor, syscall.Errno(-r).Error()) } return nil @@ -1031,7 +1031,7 @@ func (j *Journal) GetUsage() (uint64, error) { j.mu.Unlock() if r < 0 { - return 0, fmt.Errorf("failed to get journal disk space usage: %d", syscall.Errno(-r)) + return 0, fmt.Errorf("failed to get journal disk space usage: %s", syscall.Errno(-r).Error()) } return uint64(out), nil @@ -1065,7 +1065,7 @@ func (j *Journal) GetUniqueValues(field string) ([]string, error) { r := C.my_sd_journal_query_unique(sd_journal_query_unique, j.cjournal, f) if r < 0 { - return nil, fmt.Errorf("failed to query journal: %d", syscall.Errno(-r)) + return nil, fmt.Errorf("failed to query journal: %s", syscall.Errno(-r).Error()) } // Implements the SD_JOURNAL_FOREACH_UNIQUE macro from sd-journal.h @@ -1079,7 +1079,7 @@ func (j *Journal) GetUniqueValues(field string) ([]string, error) { } if r < 0 { - return nil, fmt.Errorf("failed to read message field: %d", syscall.Errno(-r)) + return nil, fmt.Errorf("failed to read message field: %s", syscall.Errno(-r).Error()) } msg := C.GoStringN((*C.char)(d), C.int(l)) @@ -1111,7 +1111,7 @@ func (j *Journal) GetCatalog() (string, error) { defer C.free(unsafe.Pointer(c)) if r < 0 { - return "", fmt.Errorf("failed to retrieve catalog entry for current journal entry: %d", syscall.Errno(-r)) + return "", fmt.Errorf("failed to retrieve catalog entry for current journal entry: %s", syscall.Errno(-r).Error()) } catalog := C.GoString(c) -- cgit v1.2.3-54-g00ecf