func (c *Conn) initConnection() error { var err error c.conn, err = dbus.SystemBusPrivate() if err != nil { return err } // Only use EXTERNAL method, and hardcode the uid (not username) // to avoid a username lookup (which requires a dynamically linked // libc) methods := []dbus.Auth{dbus.AuthExternal(strconv.Itoa(os.Getuid()))} err = c.conn.Auth(methods) if err != nil { c.conn.Close() return err } err = c.conn.Hello() if err != nil { c.conn.Close() return err } c.object = c.conn.Object("org.freedesktop.login1", dbus.ObjectPath(dbusPath)) return nil }
func (c *Conn) initConnection() error { var err error c.sysconn, err = dbus.SystemBusPrivate() if err != nil { return err } // Only use EXTERNAL method, and hardcode the uid (not username) // to avoid a username lookup (which requires a dynamically linked // libc) methods := []dbus.Auth{dbus.AuthExternal(strconv.Itoa(os.Getuid()))} err = c.sysconn.Auth(methods) if err != nil { c.sysconn.Close() return err } err = c.sysconn.Hello() if err != nil { c.sysconn.Close() return err } c.sysobj = c.sysconn.Object("org.freedesktop.systemd1", dbus.ObjectPath("/org/freedesktop/systemd1")) // Setup the listeners on jobs so that we can get completions c.sysconn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0, "type='signal', interface='org.freedesktop.systemd1.Manager', member='JobRemoved'") c.initSubscription() c.initDispatch() return nil }
func NewAccountService() (*AccountService, error) { a := &AccountService{} var err error a.dconn, err = dbus.SystemBusPrivate() if err != nil { return nil, err } err = a.dconn.Auth(nil) if err != nil { a.dconn.Close() return nil, err } err = a.dconn.Hello() if err != nil { a.dconn.Close() return nil, err } a.service = a.dconn.Object("org.freedesktop.Accounts", "/org/freedesktop/Accounts") a.propMethodMap = map[string]string{ "RealName": "SetRealName", "Email": "SetEmail", "HomeDirectory": "SetHomeDirectory", "Shell": "SetShell", "Locked": "SetLocked", "AccountType": "SetAccountType", } return a, nil }
func (c *Conn) initConnection() error { var err error c.sysconn, err = dbus.SystemBusPrivate() if err != nil { return err } err = c.sysconn.Auth(nil) if err != nil { c.sysconn.Close() return err } err = c.sysconn.Hello() if err != nil { c.sysconn.Close() return err } c.sysobj = c.sysconn.Object("org.freedesktop.systemd1", dbus.ObjectPath("/org/freedesktop/systemd1")) // Setup the listeners on jobs so that we can get completions c.sysconn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0, "type='signal', interface='org.freedesktop.systemd1.Manager', member='JobRemoved'") c.initSubscription() c.initDispatch() return nil }
func newDbus() (*logindDbus, error) { conn, err := dbus.SystemBusPrivate() if err != nil { return nil, err } methods := []dbus.Auth{dbus.AuthExternal(strconv.Itoa(os.Getuid()))} err = conn.Auth(methods) if err != nil { conn.Close() return nil, err } err = conn.Hello() if err != nil { conn.Close() return nil, err } object := conn.Object(dbusObject, dbus.ObjectPath(dbusPath)) return &logindDbus{ conn: conn, object: object, }, nil }
// making using the private bus usable, should be upstream: // TODO: https://github.com/godbus/dbus/issues/15 func SystemBusPrivateUsable() (conn *dbus.Conn, err error) { conn, err = dbus.SystemBusPrivate() 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 }
func NewController() (controller *Controller, fail error) { con, err := dbus.SystemBusPrivate() if err != nil { fail = err return } err = con.Auth(nil) if err != nil { log.Panicf("Can't authenticate to Dbus: %v", err) fail = err return } obj := con.Object("com.ubuntu.Upstart", "/com/ubuntu/Upstart") controller = &Controller{conn: con, upstartObject: obj} return }
func New() (c *Client, err error) { c = new(Client) c.conn, err = dbus.SystemBusPrivate() if err != nil { c.conn.Close() return nil, err } methods := []dbus.Auth{dbus.AuthExternal(strconv.Itoa(os.Getuid()))} err = c.conn.Auth(methods) if err != nil { c.conn.Close() return nil, err } err = c.conn.Hello() if err != nil { c.conn.Close() return nil, err } c.object = c.conn.Object(dbusInterface, dbus.ObjectPath(dbusPath)) // Setup the filter for the StatusUpdate signals match := fmt.Sprintf("type='signal',interface='%s',member='%s'", dbusInterface, dbusMember) call := c.conn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0, match) if call.Err != nil { return nil, err } c.ch = make(chan *dbus.Signal, signalBuffer) c.conn.Signal(c.ch) return c, nil }