engine: resources: svc: Use dbus session bus for user session svc
This patch adds a util function, SessionBusUsable, that makes and returns a new usable dbus session bus. If the svc bool session is true, the resource will use a bus created with that function.
This commit is contained in:
committed by
James Shubin
parent
4297a39d03
commit
28f343ac50
@@ -86,6 +86,7 @@ func (obj *SvcRes) Watch() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var conn *systemd.Conn
|
var conn *systemd.Conn
|
||||||
|
var bus *dbus.Conn
|
||||||
var err error
|
var err error
|
||||||
if obj.Session {
|
if obj.Session {
|
||||||
conn, err = systemd.NewUserConnection() // user session
|
conn, err = systemd.NewUserConnection() // user session
|
||||||
@@ -99,7 +100,11 @@ func (obj *SvcRes) Watch() error {
|
|||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
|
||||||
// if we share the bus with others, we will get each others messages!!
|
// if we share the bus with others, we will get each others messages!!
|
||||||
bus, err := util.SystemBusPrivateUsable() // don't share the bus connection!
|
if obj.Session {
|
||||||
|
bus, err = util.SessionBusPrivateUsable()
|
||||||
|
} else {
|
||||||
|
bus, err = util.SystemBusPrivateUsable()
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errwrap.Wrapf(err, "failed to connect to bus")
|
return errwrap.Wrapf(err, "failed to connect to bus")
|
||||||
}
|
}
|
||||||
|
|||||||
21
util/util.go
21
util/util.go
@@ -359,7 +359,7 @@ func TimeAfterOrBlock(t int) <-chan time.Time {
|
|||||||
return time.After(time.Duration(t) * time.Second)
|
return time.After(time.Duration(t) * time.Second)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SystemBusPrivateUsable makes using the private bus usable
|
// SystemBusPrivateUsable makes using the private bus usable.
|
||||||
// TODO: should be upstream: https://github.com/godbus/dbus/issues/15
|
// TODO: should be upstream: https://github.com/godbus/dbus/issues/15
|
||||||
func SystemBusPrivateUsable() (conn *dbus.Conn, err error) {
|
func SystemBusPrivateUsable() (conn *dbus.Conn, err error) {
|
||||||
conn, err = dbus.SystemBusPrivate()
|
conn, err = dbus.SystemBusPrivate()
|
||||||
@@ -378,6 +378,25 @@ func SystemBusPrivateUsable() (conn *dbus.Conn, err error) {
|
|||||||
return conn, nil // success
|
return conn, nil // success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SessionBusPrivateUsable makes using the private bus usable.
|
||||||
|
// TODO: should be upstream: https://github.com/godbus/dbus/issues/15
|
||||||
|
func SessionBusPrivateUsable() (conn *dbus.Conn, err error) {
|
||||||
|
conn, err = dbus.SessionBusPrivate()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err = conn.Auth(nil); err != nil {
|
||||||
|
conn.Close()
|
||||||
|
conn = nil
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = conn.Hello(); err != nil {
|
||||||
|
conn.Close()
|
||||||
|
conn = nil
|
||||||
|
}
|
||||||
|
return conn, nil // success
|
||||||
|
}
|
||||||
|
|
||||||
// SortedStrSliceCompare takes two lists of strings and returns whether or not
|
// SortedStrSliceCompare takes two lists of strings and returns whether or not
|
||||||
// they are equivalent. It will return nil if both sets contain the same
|
// they are equivalent. It will return nil if both sets contain the same
|
||||||
// elements, regardless of order, and an error if they do not.
|
// elements, regardless of order, and an error if they do not.
|
||||||
|
|||||||
Reference in New Issue
Block a user