diff -Nru snapd-2.31.1+17.10/cmd/Makefile.am snapd-2.31.2+17.10/cmd/Makefile.am
--- snapd-2.31.1+17.10/cmd/Makefile.am 2018-01-31 08:47:06.000000000 +0000
+++ snapd-2.31.2+17.10/cmd/Makefile.am 2018-03-09 10:11:31.000000000 +0000
@@ -15,7 +15,7 @@
CHECK_CFLAGS += -Werror
endif
-subdirs = snap-confine snap-discard-ns system-shutdown libsnap-confine-private
+subdirs = snap-confine snap-discard-ns system-shutdown libsnap-confine-private snapd-generator
# Run check-syntax when checking
# TODO: conver those to autotools-style tests later
@@ -443,3 +443,12 @@
system_shutdown_unit_tests_CFLAGS = $(GLIB_CFLAGS)
system_shutdown_unit_tests_LDADD += $(GLIB_LIBS)
endif
+
+##
+## snapd-generator
+##
+
+libexec_PROGRAMS += snapd-generator/snapd-generator
+
+snapd_generator_snapd_generator_SOURCES = snapd-generator/main.c
+snapd_generator_snapd_generator_LDADD = libsnap-confine-private.a
diff -Nru snapd-2.31.1+17.10/cmd/snap-confine/spread-tests/regression/lp-1599608/task.yaml snapd-2.31.2+17.10/cmd/snap-confine/spread-tests/regression/lp-1599608/task.yaml
--- snapd-2.31.1+17.10/cmd/snap-confine/spread-tests/regression/lp-1599608/task.yaml 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/cmd/snap-confine/spread-tests/regression/lp-1599608/task.yaml 2018-03-09 10:11:31.000000000 +0000
@@ -17,7 +17,7 @@
cd /
echo "Install hello-world"
snap install hello-world
- systemctl stop snapd.refresh.timer snapd.service snapd.socket
+ systemctl stop snapd.service snapd.socket
# all of this ls madness can go away when we have remote environment
# variables
echo "Unmount original core snap"
@@ -31,7 +31,7 @@
if [ ! -e $(ls -1 /var/lib/snapd/snaps/ubuntu-core_*.snap | tail -1) ]; then exit 1; fi
echo "Mount modified core snap"
mount $(ls -1 /var/lib/snapd/snaps/ubuntu-core_*.snap | tail -1) $(ls -1d /snap/ubuntu-core/* | grep -v current | tail -1)
- systemctl start snapd.refresh.timer snapd.service snapd.socket
+ systemctl start snapd.service snapd.socket
execute: |
exit 0
cd /
@@ -51,7 +51,7 @@
exit 0
echo "Remove hello-world"
snap remove hello-world
- systemctl stop snapd.refresh.timer snapd.service snapd.socket
+ systemctl stop snapd.service snapd.socket
echo "Unmount the modified core snap"
# all of this ls madness can go away when we have remote environment
# variables
@@ -66,4 +66,4 @@
udevadm settle
udevadm trigger
udevadm settle
- systemctl start snapd.refresh.timer snapd.service snapd.socket
+ systemctl start snapd.service snapd.socket
diff -Nru snapd-2.31.1+17.10/cmd/snapctl/main.go snapd-2.31.2+17.10/cmd/snapctl/main.go
--- snapd-2.31.1+17.10/cmd/snapctl/main.go 2017-12-01 15:51:55.000000000 +0000
+++ snapd-2.31.2+17.10/cmd/snapctl/main.go 2018-03-08 12:45:30.000000000 +0000
@@ -25,6 +25,7 @@
"github.com/snapcore/snapd/client"
"github.com/snapcore/snapd/dirs"
+ "github.com/snapcore/snapd/xdgopenproxy"
)
var clientConfig = client.Config{
@@ -46,6 +47,13 @@
os.Exit(1)
}
}
+ if len(os.Args) == 3 && os.Args[1] == "user-open" {
+ if err := xdgopenproxy.Run(os.Args[2]); err != nil {
+ fmt.Fprintf(os.Stderr, "user-open error: %v\n", err)
+ os.Exit(1)
+ }
+ os.Exit(0)
+ }
// no internal command, route via snapd
stdout, stderr, err := run()
Binary files /tmp/tmp91FF4s/aFTR6688gN/snapd-2.31.1+17.10/cmd/snapd/snapd and /tmp/tmp91FF4s/RbjkpfsFkw/snapd-2.31.2+17.10/cmd/snapd/snapd differ
diff -Nru snapd-2.31.1+17.10/cmd/snapd-generator/main.c snapd-2.31.2+17.10/cmd/snapd-generator/main.c
--- snapd-2.31.1+17.10/cmd/snapd-generator/main.c 1970-01-01 00:00:00.000000000 +0000
+++ snapd-2.31.2+17.10/cmd/snapd-generator/main.c 2018-03-09 10:07:07.000000000 +0000
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2018 Canonical Ltd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#include
+#include
+#include
+
+#include "config.h"
+
+#include "../libsnap-confine-private/cleanup-funcs.h"
+#include "../libsnap-confine-private/mountinfo.h"
+#include "../libsnap-confine-private/string-utils.h"
+
+static struct sc_mountinfo_entry *find_root_mountinfo(struct sc_mountinfo
+ *mounts)
+{
+ struct sc_mountinfo_entry *cur, *root = NULL;
+ for (cur = sc_first_mountinfo_entry(mounts); cur != NULL;
+ cur = sc_next_mountinfo_entry(cur)) {
+ // Look for the mount info entry for the root file-system.
+ if (sc_streq("/", cur->mount_dir)) {
+ root = cur;
+ }
+ }
+ return root;
+}
+
+int main(int argc, char **argv)
+{
+ if (argc != 4) {
+ printf("usage: snapd-workaround-generator "
+ "normal-dir early-dir late-dir\n");
+ return 1;
+ }
+ const char *normal_dir = argv[1];
+ // For reference, but we don't use those variables here.
+ // const char *early_dir = argv[2];
+ // const char *late_dir = argv[3];
+
+ // Load /proc/self/mountinfo so that we can inspect the root filesystem.
+ struct sc_mountinfo *mounts SC_CLEANUP(sc_cleanup_mountinfo) = NULL;
+ mounts = sc_parse_mountinfo(NULL);
+ if (!mounts) {
+ fprintf(stderr, "cannot open or parse /proc/self/mountinfo\n");
+ return 1;
+ }
+
+ struct sc_mountinfo_entry *root = find_root_mountinfo(mounts);
+ if (!root) {
+ fprintf(stderr,
+ "cannot find mountinfo entry of the root filesystem\n");
+ return 1;
+ }
+ // Check if the root file-system is mounted with shared option.
+ if (strstr(root->optional_fields, "shared:") != NULL) {
+ // The workaround is not needed, everything is good as-is.
+ return 0;
+ }
+ // Construct the file name for a new systemd mount unit.
+ char fname[PATH_MAX + 1] = { 0 };
+ sc_must_snprintf(fname, sizeof fname,
+ "%s/" SNAP_MOUNT_DIR ".mount", normal_dir);
+
+ // Open the mount unit and write the contents.
+ FILE *f SC_CLEANUP(sc_cleanup_file) = NULL;
+ f = fopen(fname, "wt");
+ if (!f) {
+ fprintf(stderr, "cannot open %s: %m\n", fname);
+ return 1;
+ }
+ fprintf(f,
+ "# Ensure that snap mount directory is mounted \"shared\" "
+ "so snaps can be refreshed correctly (LP: #1668759).\n");
+ fprintf(f, "[Unit]\n");
+ fprintf(f,
+ "Description=Ensure that the snap directory "
+ "shares mount events.\n");
+ fprintf(f, "[Mount]\n");
+ fprintf(f, "What=" SNAP_MOUNT_DIR "\n");
+ fprintf(f, "Where=" SNAP_MOUNT_DIR "\n");
+ fprintf(f, "Type=none\n");
+ fprintf(f, "Options=bind,shared\n");
+ fprintf(f, "[Install]\n");
+ fprintf(f, "WantedBy=local-fs.target\n");
+ return 0;
+}
diff -Nru snapd-2.31.1+17.10/data/systemd/Makefile snapd-2.31.2+17.10/data/systemd/Makefile
--- snapd-2.31.1+17.10/data/systemd/Makefile 2018-01-31 08:47:06.000000000 +0000
+++ snapd-2.31.2+17.10/data/systemd/Makefile 2018-03-09 10:07:07.000000000 +0000
@@ -22,19 +22,11 @@
SYSTEMD_UNITS_GENERATED := $(wildcard *.in)
SYSTEMD_UNITS = $(SYSTEMD_UNITS_GENERATED:.in=) $(wildcard *.timer) $(wildcard *.socket)
-# The special mount unit for "/snap" must be named after the path and the path
-# is a variable. Compute it in make for simplicity. This is equivalent to
-# calling systemd-escape --path $(SNAP_MOUNT_DIR)
-snap_mount_unit=$(subst /,-,$(patsubst %/,%,$(patsubst /%,%,$(SNAP_MOUNT_DIR)))).mount
-
-# Yes, we want the extra unit too, thank you
-SYSTEMD_UNITS += $(snap_mount_unit)
-
.PHONY: all
all: $(SYSTEMD_UNITS)
.PHONY: install
-install: $(filter-out snap.mount,$(SYSTEMD_UNITS)) $(snap_mount_unit)
+install: $(SYSTEMD_UNITS)
# NOTE: old (e.g. 14.04) GNU coreutils doesn't -D with -t
install -d -m 0755 $(DESTDIR)/$(SYSTEMDSYSTEMUNITDIR)
install -m 0644 -t $(DESTDIR)/$(SYSTEMDSYSTEMUNITDIR) $^
@@ -43,7 +35,7 @@
.PHONY: clean
clean:
- rm -f $(SYSTEMD_UNITS_GENERATED:.in=) $(snap_mount_unit)
+ rm -f $(SYSTEMD_UNITS_GENERATED:.in=)
%: %.in
cat $< | \
@@ -52,10 +44,3 @@
sed s:@bindir@:$(BINDIR):g | \
sed s:@SNAP_MOUNT_DIR@:$(SNAP_MOUNT_DIR):g | \
cat > $@
-
-# If SNAP_MOUNT_DIR uses non-default location then rename snap.mount
-# so that the directory name is encoded in the file name.
-ifneq ($(snap_mount_unit),snap.mount)
-$(snap_mount_unit): snap.mount
- cp $< $@
-endif
diff -Nru snapd-2.31.1+17.10/data/systemd/snapd.refresh.service.in snapd-2.31.2+17.10/data/systemd/snapd.refresh.service.in
--- snapd-2.31.1+17.10/data/systemd/snapd.refresh.service.in 2017-12-01 15:51:55.000000000 +0000
+++ snapd-2.31.2+17.10/data/systemd/snapd.refresh.service.in 1970-01-01 00:00:00.000000000 +0000
@@ -1,11 +0,0 @@
-[Unit]
-Description=Automatically refresh installed snaps
-After=network-online.target snapd.socket
-Requires=snapd.socket
-ConditionPathExistsGlob=@SNAP_MOUNT_DIR@/*/current
-Documentation=man:snap(1)
-
-[Service]
-Type=oneshot
-ExecStart=/bin/sh -c 'if ! @bindir@/snap refresh --time|grep "schedule:.*managed"; then @bindir@/snap refresh; fi'
-Environment=SNAP_REFRESH_FROM_EMERGENCY_TIMER=1
diff -Nru snapd-2.31.1+17.10/data/systemd/snapd.refresh.timer snapd-2.31.2+17.10/data/systemd/snapd.refresh.timer
--- snapd-2.31.1+17.10/data/systemd/snapd.refresh.timer 2017-08-08 06:31:43.000000000 +0000
+++ snapd-2.31.2+17.10/data/systemd/snapd.refresh.timer 1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-[Unit]
-Description=Timer to automatically refresh installed snaps
-
-[Timer]
-# do a weekly refresh using the time to ensure that we can still
-# fix any potential errors in the internal timer handling
-OnCalendar=weekly
-RandomizedDelaySec=6h
-AccuracySec=10min
-Persistent=true
-OnStartupSec=15m
-
-[Install]
-WantedBy=timers.target
diff -Nru snapd-2.31.1+17.10/data/systemd/snap.mount.in snapd-2.31.2+17.10/data/systemd/snap.mount.in
--- snapd-2.31.1+17.10/data/systemd/snap.mount.in 2018-01-31 08:47:06.000000000 +0000
+++ snapd-2.31.2+17.10/data/systemd/snap.mount.in 1970-01-01 00:00:00.000000000 +0000
@@ -1,13 +0,0 @@
-# Ensure $(SNAP_MOUNT_DIR) is mounted "shared" so lxd works correctly (LP: #1668759).
-[Unit]
-Description=Ensure that the snap directory shares mount events.
-ConditionVirtualization=container
-
-[Mount]
-What=@SNAP_MOUNT_DIR@
-Where=@SNAP_MOUNT_DIR@
-Type=none
-Options=bind,shared
-
-[Install]
-WantedBy=local-fs.target
diff -Nru snapd-2.31.1+17.10/debian/changelog snapd-2.31.2+17.10/debian/changelog
--- snapd-2.31.1+17.10/debian/changelog 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/debian/changelog 2018-03-09 10:11:31.000000000 +0000
@@ -1,4 +1,25 @@
-snapd (2.31.1+17.10) artful; urgency=medium
+snapd (2.31.2+17.10) artful; urgency=medium
+
+ * New upstream release, LP: #1745217
+ - many: add the snapd-generator
+ - polkit: ensure error is properly set if dialog is dismissed
+ - xdgopenproxy: integrate xdg-open implementation into snapctl
+ - userd: add an OpenFile method for launching local files with xdg-
+ open
+ - configstate: when disable "ssh" we must disable the "sshd"
+ service
+ - many: remove snapd.refresh.{timer,service}
+ - interfaces/builtin: allow MM to access login1
+ - timeutil: account for 24h wrap when flattening clock spans
+ - interfaces/screen-inhibit-control,network-status: fix dbus path
+ and interface typos
+ - systemd, wrappers: start all snap services in one systemctl
+ call
+ - tests: disable interfaces-location-control on s390x
+
+ -- Michael Vogt Fri, 09 Mar 2018 11:11:31 +0100
+
+snapd (2.31.1) xenial; urgency=medium
* New upstream release, LP: #1745217
- tests: multiple autopkgtest related fixes for 18.04
diff -Nru snapd-2.31.1+17.10/debian/snapd.install snapd-2.31.2+17.10/debian/snapd.install
--- snapd-2.31.1+17.10/debian/snapd.install 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/debian/snapd.install 2018-03-09 10:11:31.000000000 +0000
@@ -6,6 +6,7 @@
usr/bin/snap-update-ns /usr/lib/snapd/
usr/bin/snapd /usr/lib/snapd/
usr/bin/snap-seccomp /usr/lib/snapd/
+usr/lib/snapd/snapd-generator /lib/systemd/system-generators/
# bash completion
data/completion/snap /usr/share/bash-completion/completions
diff -Nru snapd-2.31.1+17.10/interfaces/builtin/desktop.go snapd-2.31.2+17.10/interfaces/builtin/desktop.go
--- snapd-2.31.1+17.10/interfaces/builtin/desktop.go 2018-01-31 08:47:17.000000000 +0000
+++ snapd-2.31.2+17.10/interfaces/builtin/desktop.go 2018-03-09 10:11:31.000000000 +0000
@@ -139,7 +139,7 @@
bus=session
path=/io/snapcraft/Launcher
interface=io.snapcraft.Launcher
- member=OpenURL
+ member={OpenURL,OpenFile}
peer=(label=unconfined),
# Allow checking status, activating and locking the screensaver
diff -Nru snapd-2.31.1+17.10/interfaces/builtin/modem_manager.go snapd-2.31.2+17.10/interfaces/builtin/modem_manager.go
--- snapd-2.31.1+17.10/interfaces/builtin/modem_manager.go 2018-01-31 08:47:06.000000000 +0000
+++ snapd-2.31.2+17.10/interfaces/builtin/modem_manager.go 2018-03-05 13:06:18.000000000 +0000
@@ -117,6 +117,20 @@
path=/org/freedesktop/ModemManager1{,/**}
interface=org.freedesktop.DBus.*
peer=(label=unconfined),
+
+# Allow accessing logind services to properly shutdown devices on suspend
+dbus (receive)
+ bus=system
+ path=/org/freedesktop/login1
+ interface=org.freedesktop.login1.Manager
+ member={PrepareForSleep,SessionNew,SessionRemoved}
+ peer=(label=unconfined),
+dbus (send)
+ bus=system
+ path=/org/freedesktop/login1
+ interface=org.freedesktop.login1.Manager
+ member=Inhibit
+ peer=(label=unconfined),
`
const modemManagerConnectedSlotAppArmor = `
diff -Nru snapd-2.31.1+17.10/interfaces/builtin/network_status.go snapd-2.31.2+17.10/interfaces/builtin/network_status.go
--- snapd-2.31.1+17.10/interfaces/builtin/network_status.go 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/interfaces/builtin/network_status.go 2018-03-05 13:06:18.000000000 +0000
@@ -81,7 +81,7 @@
# Allow all access to NetworkingStatus service
dbus (send)
bus=system
- interface=com.ubuntu.connectivity1.NetworkingStatus{,/**}
+ interface=com.ubuntu.connectivity1.NetworkingStatus{,*}
path=/com/ubuntu/connectivity1/NetworkingStatus
peer=(label=###SLOT_SECURITY_TAGS###),
diff -Nru snapd-2.31.1+17.10/interfaces/builtin/network_status_test.go snapd-2.31.2+17.10/interfaces/builtin/network_status_test.go
--- snapd-2.31.1+17.10/interfaces/builtin/network_status_test.go 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/interfaces/builtin/network_status_test.go 2018-03-05 13:06:18.000000000 +0000
@@ -76,7 +76,7 @@
c.Assert(spec.AddConnectedPlug(s.iface, s.plug, s.slot), IsNil)
c.Assert(spec.SecurityTags(), DeepEquals, []string{"snap.consumer.app"})
c.Assert(spec.SnippetForTag("snap.consumer.app"), testutil.Contains, `peer=(label="snap.provider.app"`)
- c.Assert(spec.SnippetForTag("snap.consumer.app"), testutil.Contains, "interface=com.ubuntu.connectivity1.NetworkingStatus{,/**}")
+ c.Assert(spec.SnippetForTag("snap.consumer.app"), testutil.Contains, "interface=com.ubuntu.connectivity1.NetworkingStatus{,*}")
}
func (s *NetworkStatusSuite) TestAppArmorConnectedSlot(c *C) {
diff -Nru snapd-2.31.1+17.10/interfaces/builtin/screen_inhibit_control.go snapd-2.31.2+17.10/interfaces/builtin/screen_inhibit_control.go
--- snapd-2.31.1+17.10/interfaces/builtin/screen_inhibit_control.go 2018-01-31 08:46:54.000000000 +0000
+++ snapd-2.31.2+17.10/interfaces/builtin/screen_inhibit_control.go 2018-03-05 13:06:18.000000000 +0000
@@ -67,7 +67,7 @@
# API rule
dbus (send)
bus=session
- path=/{,org/freedesktop/,org.gnome/}ScreenSaver
+ path=/{,org/freedesktop/,org/gnome/}ScreenSaver
interface=org.freedesktop.ScreenSaver
member={Inhibit,UnInhibit,SimulateUserActivity}
peer=(label=unconfined),
diff -Nru snapd-2.31.1+17.10/interfaces/builtin/unity7.go snapd-2.31.2+17.10/interfaces/builtin/unity7.go
--- snapd-2.31.1+17.10/interfaces/builtin/unity7.go 2018-02-02 16:53:04.000000000 +0000
+++ snapd-2.31.2+17.10/interfaces/builtin/unity7.go 2018-03-05 13:06:21.000000000 +0000
@@ -112,7 +112,7 @@
bus=session
path=/io/snapcraft/Launcher
interface=io.snapcraft.Launcher
- member=OpenURL
+ member={OpenURL,OpenFile}
peer=(label=unconfined),
# Allow use of snapd's internal 'xdg-settings'
diff -Nru snapd-2.31.1+17.10/osutil/sys/syscall.go snapd-2.31.2+17.10/osutil/sys/syscall.go
--- snapd-2.31.1+17.10/osutil/sys/syscall.go 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/osutil/sys/syscall.go 2018-03-05 13:06:21.000000000 +0000
@@ -95,3 +95,15 @@
}
return errno
}
+
+// As of Go 1.9, the O_PATH constant does not seem to be declared
+// uniformly over all archtiectures.
+const O_PATH = 0x200000
+
+func FcntlGetFl(fd int) (int, error) {
+ flags, _, errno := syscall.Syscall(syscall.SYS_FCNTL, uintptr(fd), uintptr(syscall.F_GETFL), 0)
+ if errno != 0 {
+ return 0, errno
+ }
+ return int(flags), nil
+}
diff -Nru snapd-2.31.1+17.10/overlord/configstate/configcore/services.go snapd-2.31.2+17.10/overlord/configstate/configcore/services.go
--- snapd-2.31.1+17.10/overlord/configstate/configcore/services.go 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/overlord/configstate/configcore/services.go 2018-03-05 13:06:18.000000000 +0000
@@ -35,9 +35,8 @@
// swtichDisableService switches a service in/out of disabled state
// where "true" means disabled and "false" means enabled.
-func switchDisableService(service, value string) error {
+func switchDisableService(serviceName, value string) error {
sysd := systemd.New(dirs.GlobalRootDir, &sysdLogger{})
- serviceName := fmt.Sprintf("%s.service", service)
switch value {
case "true":
@@ -62,16 +61,18 @@
}
// services that can be disabled
-var services = []string{"ssh", "rsyslog"}
-
func handleServiceDisableConfiguration(tr Conf) error {
+ var services = []struct{ configName, systemdName string }{
+ {"ssh", "sshd.service"},
+ {"rsyslog", "rsyslog.service"},
+ }
for _, service := range services {
- output, err := coreCfg(tr, fmt.Sprintf("service.%s.disable", service))
+ output, err := coreCfg(tr, fmt.Sprintf("service.%s.disable", service.configName))
if err != nil {
return err
}
if output != "" {
- if err := switchDisableService(service, output); err != nil {
+ if err := switchDisableService(service.systemdName, output); err != nil {
return err
}
}
diff -Nru snapd-2.31.1+17.10/overlord/configstate/configcore/services_test.go snapd-2.31.2+17.10/overlord/configstate/configcore/services_test.go
--- snapd-2.31.1+17.10/overlord/configstate/configcore/services_test.go 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/overlord/configstate/configcore/services_test.go 2018-03-09 10:11:31.000000000 +0000
@@ -54,28 +54,28 @@
}
func (s *servicesSuite) TestConfigureServiceInvalidValue(c *C) {
- err := configcore.SwitchDisableService("ssh", "xxx")
+ err := configcore.SwitchDisableService("ssh.service", "xxx")
c.Check(err, ErrorMatches, `option "ssh.service" has invalid value "xxx"`)
}
func (s *servicesSuite) TestConfigureServiceNotDisabled(c *C) {
- err := configcore.SwitchDisableService("ssh", "false")
+ err := configcore.SwitchDisableService("sshd.service", "false")
c.Assert(err, IsNil)
c.Check(s.systemctlArgs, DeepEquals, [][]string{
- {"--root", dirs.GlobalRootDir, "unmask", "ssh.service"},
- {"--root", dirs.GlobalRootDir, "enable", "ssh.service"},
- {"start", "ssh.service"},
+ {"--root", dirs.GlobalRootDir, "unmask", "sshd.service"},
+ {"--root", dirs.GlobalRootDir, "enable", "sshd.service"},
+ {"start", "sshd.service"},
})
}
func (s *servicesSuite) TestConfigureServiceDisabled(c *C) {
- err := configcore.SwitchDisableService("ssh", "true")
+ err := configcore.SwitchDisableService("sshd.service", "true")
c.Assert(err, IsNil)
c.Check(s.systemctlArgs, DeepEquals, [][]string{
- {"--root", dirs.GlobalRootDir, "disable", "ssh.service"},
- {"--root", dirs.GlobalRootDir, "mask", "ssh.service"},
- {"stop", "ssh.service"},
- {"show", "--property=ActiveState", "ssh.service"},
+ {"--root", dirs.GlobalRootDir, "disable", "sshd.service"},
+ {"--root", dirs.GlobalRootDir, "mask", "sshd.service"},
+ {"stop", "sshd.service"},
+ {"show", "--property=ActiveState", "sshd.service"},
})
}
@@ -83,16 +83,22 @@
restore := release.MockOnClassic(false)
defer restore()
- for _, srvName := range []string{"ssh", "rsyslog"} {
+ for _, service := range []struct {
+ cfgName string
+ systemdName string
+ }{
+ {"ssh", "sshd.service"},
+ {"rsyslog", "rsyslog.service"},
+ } {
s.systemctlArgs = nil
err := configcore.Run(&mockConf{
conf: map[string]interface{}{
- fmt.Sprintf("service.%s.disable", srvName): true,
+ fmt.Sprintf("service.%s.disable", service.cfgName): true,
},
})
c.Assert(err, IsNil)
- srv := fmt.Sprintf("%s.service", srvName)
+ srv := service.systemdName
c.Check(s.systemctlArgs, DeepEquals, [][]string{
{"--root", dirs.GlobalRootDir, "disable", srv},
{"--root", dirs.GlobalRootDir, "mask", srv},
@@ -106,16 +112,22 @@
restore := release.MockOnClassic(false)
defer restore()
- for _, srvName := range []string{"ssh", "rsyslog"} {
+ for _, service := range []struct {
+ cfgName string
+ systemdName string
+ }{
+ {"ssh", "sshd.service"},
+ {"rsyslog", "rsyslog.service"},
+ } {
s.systemctlArgs = nil
err := configcore.Run(&mockConf{
conf: map[string]interface{}{
- fmt.Sprintf("service.%s.disable", srvName): false,
+ fmt.Sprintf("service.%s.disable", service.cfgName): false,
},
})
c.Assert(err, IsNil)
- srv := fmt.Sprintf("%s.service", srvName)
+ srv := service.systemdName
c.Check(s.systemctlArgs, DeepEquals, [][]string{
{"--root", dirs.GlobalRootDir, "unmask", srv},
{"--root", dirs.GlobalRootDir, "enable", srv},
diff -Nru snapd-2.31.1+17.10/packaging/arch/PKGBUILD snapd-2.31.2+17.10/packaging/arch/PKGBUILD
--- snapd-2.31.1+17.10/packaging/arch/PKGBUILD 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/arch/PKGBUILD 2018-03-09 10:11:31.000000000 +0000
@@ -5,7 +5,7 @@
pkgbase=snapd
pkgname=snapd-git
-pkgver=2.31.1
+pkgver=2.31.2
pkgrel=1
arch=('i686' 'x86_64')
url="https://github.com/snapcore/snapd"
diff -Nru snapd-2.31.1+17.10/packaging/arch/snapd.install snapd-2.31.2+17.10/packaging/arch/snapd.install
--- snapd-2.31.1+17.10/packaging/arch/snapd.install 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/arch/snapd.install 2018-03-09 10:11:31.000000000 +0000
@@ -4,7 +4,7 @@
echo 'To use snapd start/enable the snapd.socket'
echo
echo 'If you want your apps to be automatically updated'
- echo 'from the store start/enable the snapd.refresh.timer'
+ echo 'from the store start/enable the snapd.service'
echo
echo 'NOTE: Desktop entries show up after logging in again'
echo ' or rebooting after snapd installation'
@@ -15,9 +15,7 @@
_systemctl_do_for_all() {
/usr/bin/systemctl "$@" \
snapd.service \
- snapd.socket \
- snapd.refresh.timer \
- snapd.refresh.service > /dev/null 2>&1
+ snapd.socket > /dev/null 2>&1
}
_stop_services() {
@@ -46,9 +44,6 @@
if /usr/bin/systemctl -q is-enabled snapd.socket > /dev/null 2>&1; then
/usr/bin/systemctl start snapd.socket > /dev/null 2>&1 || :
fi
- if systemctl -q is-enabled snapd.refresh.timer > /dev/null 2>&1; then
- systemctl start snapd.refresh.timer > /dev/null 2>&1 || :
- fi
}
# vim:set ts=2 sw=2 et:
diff -Nru snapd-2.31.1+17.10/packaging/fedora/snapd.spec snapd-2.31.2+17.10/packaging/fedora/snapd.spec
--- snapd-2.31.1+17.10/packaging/fedora/snapd.spec 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/fedora/snapd.spec 2018-03-09 10:11:31.000000000 +0000
@@ -50,7 +50,7 @@
%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
%global import_path %{provider_prefix}
-%global snappy_svcs snapd.service snapd.socket snapd.autoimport.service snapd.refresh.timer snapd.refresh.service
+%global snappy_svcs snapd.service snapd.socket snapd.autoimport.service
# Until we have a way to add more extldflags to gobuild macro...
%if 0%{?fedora} >= 26
@@ -70,7 +70,7 @@
%endif
Name: snapd
-Version: 2.31.1
+Version: 2.31.2
Release: 0%{?dist}
Summary: A transactional software package manager
Group: System Environment/Base
@@ -601,9 +601,6 @@
%{_unitdir}/snapd.socket
%{_unitdir}/snapd.service
%{_unitdir}/snapd.autoimport.service
-%{_unitdir}/snapd.refresh.service
-%{_unitdir}/snapd.refresh.timer
-%{_unitdir}/var-lib-snapd-snap.mount
%{_datadir}/dbus-1/services/io.snapcraft.Launcher.service
%{_datadir}/polkit-1/actions/io.snapcraft.snapd.policy
%config(noreplace) %{_sysconfdir}/sysconfig/snapd
@@ -641,6 +638,7 @@
%{_libexecdir}/snapd/snap-seccomp
%{_libexecdir}/snapd/snap-update-ns
%{_libexecdir}/snapd/system-shutdown
+%{_libexecdir}/snapd/snapd-generator
%{_mandir}/man1/snap-confine.1*
%{_mandir}/man5/snap-discard-ns.5*
%{_prefix}/lib/udev/snappy-app-dev
@@ -676,9 +674,6 @@
if systemctl -q is-enabled snapd.socket > /dev/null 2>&1 ; then
systemctl start snapd.socket > /dev/null 2>&1 || :
fi
- if systemctl -q is-enabled snapd.refresh.timer > /dev/null 2>&1 ; then
- systemctl start snapd.refresh.timer > /dev/null 2>&1 || :
- fi
fi
%preun
@@ -711,6 +706,23 @@
%changelog
+* Fri Mar 09 2018 Michael Vogt
+- New upstream release 2.31.2
+ - many: add the snapd-generator
+ - polkit: ensure error is properly set if dialog is dismissed
+ - xdgopenproxy: integrate xdg-open implementation into snapctl
+ - userd: add an OpenFile method for launching local files with xdg-
+ open
+ - configstate: when disable "ssh" we must disable the "sshd"
+ service
+ - many: remove snapd.refresh.{timer,service}
+ - interfaces/builtin: allow MM to access login1
+ - timeutil: account for 24h wrap when flattening clock spans
+ - interfaces/screen-inhibit-control,network-status: fix dbus path
+ and interface typos
+ - systemd, wrappers: start all snap services in one systemctl
+ call
+ - tests: disable interfaces-location-control on s390x
* Tue Feb 20 2018 Michael Vogt
- New upstream release 2.31.1
- tests: multiple autopkgtest related fixes for 18.04
diff -Nru snapd-2.31.1+17.10/packaging/fedora-25/snapd.spec snapd-2.31.2+17.10/packaging/fedora-25/snapd.spec
--- snapd-2.31.1+17.10/packaging/fedora-25/snapd.spec 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/fedora-25/snapd.spec 2018-03-09 10:11:31.000000000 +0000
@@ -50,7 +50,7 @@
%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
%global import_path %{provider_prefix}
-%global snappy_svcs snapd.service snapd.socket snapd.autoimport.service snapd.refresh.timer snapd.refresh.service
+%global snappy_svcs snapd.service snapd.socket snapd.autoimport.service
# Until we have a way to add more extldflags to gobuild macro...
%if 0%{?fedora} >= 26
@@ -70,7 +70,7 @@
%endif
Name: snapd
-Version: 2.31.1
+Version: 2.31.2
Release: 0%{?dist}
Summary: A transactional software package manager
Group: System Environment/Base
@@ -601,9 +601,6 @@
%{_unitdir}/snapd.socket
%{_unitdir}/snapd.service
%{_unitdir}/snapd.autoimport.service
-%{_unitdir}/snapd.refresh.service
-%{_unitdir}/snapd.refresh.timer
-%{_unitdir}/var-lib-snapd-snap.mount
%{_datadir}/dbus-1/services/io.snapcraft.Launcher.service
%{_datadir}/polkit-1/actions/io.snapcraft.snapd.policy
%config(noreplace) %{_sysconfdir}/sysconfig/snapd
@@ -641,6 +638,7 @@
%{_libexecdir}/snapd/snap-seccomp
%{_libexecdir}/snapd/snap-update-ns
%{_libexecdir}/snapd/system-shutdown
+%{_libexecdir}/snapd/snapd-generator
%{_mandir}/man1/snap-confine.1*
%{_mandir}/man5/snap-discard-ns.5*
%{_prefix}/lib/udev/snappy-app-dev
@@ -676,9 +674,6 @@
if systemctl -q is-enabled snapd.socket > /dev/null 2>&1 ; then
systemctl start snapd.socket > /dev/null 2>&1 || :
fi
- if systemctl -q is-enabled snapd.refresh.timer > /dev/null 2>&1 ; then
- systemctl start snapd.refresh.timer > /dev/null 2>&1 || :
- fi
fi
%preun
@@ -711,6 +706,23 @@
%changelog
+* Fri Mar 09 2018 Michael Vogt
+- New upstream release 2.31.2
+ - many: add the snapd-generator
+ - polkit: ensure error is properly set if dialog is dismissed
+ - xdgopenproxy: integrate xdg-open implementation into snapctl
+ - userd: add an OpenFile method for launching local files with xdg-
+ open
+ - configstate: when disable "ssh" we must disable the "sshd"
+ service
+ - many: remove snapd.refresh.{timer,service}
+ - interfaces/builtin: allow MM to access login1
+ - timeutil: account for 24h wrap when flattening clock spans
+ - interfaces/screen-inhibit-control,network-status: fix dbus path
+ and interface typos
+ - systemd, wrappers: start all snap services in one systemctl
+ call
+ - tests: disable interfaces-location-control on s390x
* Tue Feb 20 2018 Michael Vogt
- New upstream release 2.31.1
- tests: multiple autopkgtest related fixes for 18.04
diff -Nru snapd-2.31.1+17.10/packaging/fedora-26/snapd.spec snapd-2.31.2+17.10/packaging/fedora-26/snapd.spec
--- snapd-2.31.1+17.10/packaging/fedora-26/snapd.spec 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/fedora-26/snapd.spec 2018-03-09 10:11:31.000000000 +0000
@@ -50,7 +50,7 @@
%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
%global import_path %{provider_prefix}
-%global snappy_svcs snapd.service snapd.socket snapd.autoimport.service snapd.refresh.timer snapd.refresh.service
+%global snappy_svcs snapd.service snapd.socket snapd.autoimport.service
# Until we have a way to add more extldflags to gobuild macro...
%if 0%{?fedora} >= 26
@@ -70,7 +70,7 @@
%endif
Name: snapd
-Version: 2.31.1
+Version: 2.31.2
Release: 0%{?dist}
Summary: A transactional software package manager
Group: System Environment/Base
@@ -601,9 +601,6 @@
%{_unitdir}/snapd.socket
%{_unitdir}/snapd.service
%{_unitdir}/snapd.autoimport.service
-%{_unitdir}/snapd.refresh.service
-%{_unitdir}/snapd.refresh.timer
-%{_unitdir}/var-lib-snapd-snap.mount
%{_datadir}/dbus-1/services/io.snapcraft.Launcher.service
%{_datadir}/polkit-1/actions/io.snapcraft.snapd.policy
%config(noreplace) %{_sysconfdir}/sysconfig/snapd
@@ -641,6 +638,7 @@
%{_libexecdir}/snapd/snap-seccomp
%{_libexecdir}/snapd/snap-update-ns
%{_libexecdir}/snapd/system-shutdown
+%{_libexecdir}/snapd/snapd-generator
%{_mandir}/man1/snap-confine.1*
%{_mandir}/man5/snap-discard-ns.5*
%{_prefix}/lib/udev/snappy-app-dev
@@ -676,9 +674,6 @@
if systemctl -q is-enabled snapd.socket > /dev/null 2>&1 ; then
systemctl start snapd.socket > /dev/null 2>&1 || :
fi
- if systemctl -q is-enabled snapd.refresh.timer > /dev/null 2>&1 ; then
- systemctl start snapd.refresh.timer > /dev/null 2>&1 || :
- fi
fi
%preun
@@ -711,6 +706,23 @@
%changelog
+* Fri Mar 09 2018 Michael Vogt
+- New upstream release 2.31.2
+ - many: add the snapd-generator
+ - polkit: ensure error is properly set if dialog is dismissed
+ - xdgopenproxy: integrate xdg-open implementation into snapctl
+ - userd: add an OpenFile method for launching local files with xdg-
+ open
+ - configstate: when disable "ssh" we must disable the "sshd"
+ service
+ - many: remove snapd.refresh.{timer,service}
+ - interfaces/builtin: allow MM to access login1
+ - timeutil: account for 24h wrap when flattening clock spans
+ - interfaces/screen-inhibit-control,network-status: fix dbus path
+ and interface typos
+ - systemd, wrappers: start all snap services in one systemctl
+ call
+ - tests: disable interfaces-location-control on s390x
* Tue Feb 20 2018 Michael Vogt
- New upstream release 2.31.1
- tests: multiple autopkgtest related fixes for 18.04
diff -Nru snapd-2.31.1+17.10/packaging/fedora-27/snapd.spec snapd-2.31.2+17.10/packaging/fedora-27/snapd.spec
--- snapd-2.31.1+17.10/packaging/fedora-27/snapd.spec 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/fedora-27/snapd.spec 2018-03-09 10:11:31.000000000 +0000
@@ -50,7 +50,7 @@
%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
%global import_path %{provider_prefix}
-%global snappy_svcs snapd.service snapd.socket snapd.autoimport.service snapd.refresh.timer snapd.refresh.service
+%global snappy_svcs snapd.service snapd.socket snapd.autoimport.service
# Until we have a way to add more extldflags to gobuild macro...
%if 0%{?fedora} >= 26
@@ -70,7 +70,7 @@
%endif
Name: snapd
-Version: 2.31.1
+Version: 2.31.2
Release: 0%{?dist}
Summary: A transactional software package manager
Group: System Environment/Base
@@ -601,9 +601,6 @@
%{_unitdir}/snapd.socket
%{_unitdir}/snapd.service
%{_unitdir}/snapd.autoimport.service
-%{_unitdir}/snapd.refresh.service
-%{_unitdir}/snapd.refresh.timer
-%{_unitdir}/var-lib-snapd-snap.mount
%{_datadir}/dbus-1/services/io.snapcraft.Launcher.service
%{_datadir}/polkit-1/actions/io.snapcraft.snapd.policy
%config(noreplace) %{_sysconfdir}/sysconfig/snapd
@@ -641,6 +638,7 @@
%{_libexecdir}/snapd/snap-seccomp
%{_libexecdir}/snapd/snap-update-ns
%{_libexecdir}/snapd/system-shutdown
+%{_libexecdir}/snapd/snapd-generator
%{_mandir}/man1/snap-confine.1*
%{_mandir}/man5/snap-discard-ns.5*
%{_prefix}/lib/udev/snappy-app-dev
@@ -676,9 +674,6 @@
if systemctl -q is-enabled snapd.socket > /dev/null 2>&1 ; then
systemctl start snapd.socket > /dev/null 2>&1 || :
fi
- if systemctl -q is-enabled snapd.refresh.timer > /dev/null 2>&1 ; then
- systemctl start snapd.refresh.timer > /dev/null 2>&1 || :
- fi
fi
%preun
@@ -711,6 +706,23 @@
%changelog
+* Fri Mar 09 2018 Michael Vogt
+- New upstream release 2.31.2
+ - many: add the snapd-generator
+ - polkit: ensure error is properly set if dialog is dismissed
+ - xdgopenproxy: integrate xdg-open implementation into snapctl
+ - userd: add an OpenFile method for launching local files with xdg-
+ open
+ - configstate: when disable "ssh" we must disable the "sshd"
+ service
+ - many: remove snapd.refresh.{timer,service}
+ - interfaces/builtin: allow MM to access login1
+ - timeutil: account for 24h wrap when flattening clock spans
+ - interfaces/screen-inhibit-control,network-status: fix dbus path
+ and interface typos
+ - systemd, wrappers: start all snap services in one systemctl
+ call
+ - tests: disable interfaces-location-control on s390x
* Tue Feb 20 2018 Michael Vogt
- New upstream release 2.31.1
- tests: multiple autopkgtest related fixes for 18.04
diff -Nru snapd-2.31.1+17.10/packaging/fedora-rawhide/snapd.spec snapd-2.31.2+17.10/packaging/fedora-rawhide/snapd.spec
--- snapd-2.31.1+17.10/packaging/fedora-rawhide/snapd.spec 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/fedora-rawhide/snapd.spec 2018-03-09 10:11:31.000000000 +0000
@@ -50,7 +50,7 @@
%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
%global import_path %{provider_prefix}
-%global snappy_svcs snapd.service snapd.socket snapd.autoimport.service snapd.refresh.timer snapd.refresh.service
+%global snappy_svcs snapd.service snapd.socket snapd.autoimport.service
# Until we have a way to add more extldflags to gobuild macro...
%if 0%{?fedora} >= 26
@@ -70,7 +70,7 @@
%endif
Name: snapd
-Version: 2.31.1
+Version: 2.31.2
Release: 0%{?dist}
Summary: A transactional software package manager
Group: System Environment/Base
@@ -601,9 +601,6 @@
%{_unitdir}/snapd.socket
%{_unitdir}/snapd.service
%{_unitdir}/snapd.autoimport.service
-%{_unitdir}/snapd.refresh.service
-%{_unitdir}/snapd.refresh.timer
-%{_unitdir}/var-lib-snapd-snap.mount
%{_datadir}/dbus-1/services/io.snapcraft.Launcher.service
%{_datadir}/polkit-1/actions/io.snapcraft.snapd.policy
%config(noreplace) %{_sysconfdir}/sysconfig/snapd
@@ -641,6 +638,7 @@
%{_libexecdir}/snapd/snap-seccomp
%{_libexecdir}/snapd/snap-update-ns
%{_libexecdir}/snapd/system-shutdown
+%{_libexecdir}/snapd/snapd-generator
%{_mandir}/man1/snap-confine.1*
%{_mandir}/man5/snap-discard-ns.5*
%{_prefix}/lib/udev/snappy-app-dev
@@ -676,9 +674,6 @@
if systemctl -q is-enabled snapd.socket > /dev/null 2>&1 ; then
systemctl start snapd.socket > /dev/null 2>&1 || :
fi
- if systemctl -q is-enabled snapd.refresh.timer > /dev/null 2>&1 ; then
- systemctl start snapd.refresh.timer > /dev/null 2>&1 || :
- fi
fi
%preun
@@ -711,6 +706,23 @@
%changelog
+* Fri Mar 09 2018 Michael Vogt
+- New upstream release 2.31.2
+ - many: add the snapd-generator
+ - polkit: ensure error is properly set if dialog is dismissed
+ - xdgopenproxy: integrate xdg-open implementation into snapctl
+ - userd: add an OpenFile method for launching local files with xdg-
+ open
+ - configstate: when disable "ssh" we must disable the "sshd"
+ service
+ - many: remove snapd.refresh.{timer,service}
+ - interfaces/builtin: allow MM to access login1
+ - timeutil: account for 24h wrap when flattening clock spans
+ - interfaces/screen-inhibit-control,network-status: fix dbus path
+ and interface typos
+ - systemd, wrappers: start all snap services in one systemctl
+ call
+ - tests: disable interfaces-location-control on s390x
* Tue Feb 20 2018 Michael Vogt
- New upstream release 2.31.1
- tests: multiple autopkgtest related fixes for 18.04
diff -Nru snapd-2.31.1+17.10/packaging/opensuse-42.1/snapd.spec snapd-2.31.2+17.10/packaging/opensuse-42.1/snapd.spec
--- snapd-2.31.1+17.10/packaging/opensuse-42.1/snapd.spec 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/opensuse-42.1/snapd.spec 2018-03-09 10:11:31.000000000 +0000
@@ -30,9 +30,9 @@
%global with_test_keys 0
%endif
-%define systemd_services_list snapd.refresh.timer snapd.refresh.service snapd.socket snapd.service
+%define systemd_services_list snapd.socket snapd.service
Name: snapd
-Version: 2.31.1
+Version: 2.31.2
Release: 0
Summary: Tools enabling systems to work with .snap files
License: GPL-3.0
@@ -231,6 +231,9 @@
install -m 644 -D data/completion/snap %{buildroot}/usr/share/bash-completion/completions/snap
install -m 644 -D data/completion/complete.sh %{buildroot}%{_libexecdir}/snapd
install -m 644 -D data/completion/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
+# move snapd-generator
+install -m 755 -d %{buildroot}/lib/systemd/system-generators/
+mv %{buildroot}%{_libexecdir}/snapd/snapd-generator %{buildroot}/lib/systemd/system-generators/
%verifyscript
%verify_permissions -e %{_libexecdir}/snapd/snap-confine
@@ -288,11 +291,8 @@
%verify(not user group mode) %attr(06755,root,root) %{_libexecdir}/snapd/snap-confine
%{_mandir}/man1/snap-confine.1.gz
%{_mandir}/man5/snap-discard-ns.5.gz
-%{_unitdir}/snapd.refresh.service
-%{_unitdir}/snapd.refresh.timer
%{_unitdir}/snapd.service
%{_unitdir}/snapd.socket
-%{_unitdir}/snap.mount
/usr/bin/snap
/usr/bin/snapctl
/usr/sbin/rcsnapd
@@ -308,6 +308,7 @@
/usr/share/bash-completion/completions/snap
%{_libexecdir}/snapd/complete.sh
%{_libexecdir}/snapd/etelpmoc.sh
+/lib/systemd/system-generators/snapd-generator
%{_mandir}/man1/snap.1.gz
/usr/share/dbus-1/services/io.snapcraft.Launcher.service
/usr/share/dbus-1/services/io.snapcraft.Settings.service
diff -Nru snapd-2.31.1+17.10/packaging/opensuse-42.2/snapd.spec snapd-2.31.2+17.10/packaging/opensuse-42.2/snapd.spec
--- snapd-2.31.1+17.10/packaging/opensuse-42.2/snapd.spec 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/opensuse-42.2/snapd.spec 2018-03-09 10:11:31.000000000 +0000
@@ -30,9 +30,9 @@
%global with_test_keys 0
%endif
-%define systemd_services_list snapd.refresh.timer snapd.refresh.service snapd.socket snapd.service
+%define systemd_services_list snapd.socket snapd.service
Name: snapd
-Version: 2.31.1
+Version: 2.31.2
Release: 0
Summary: Tools enabling systems to work with .snap files
License: GPL-3.0
@@ -231,6 +231,9 @@
install -m 644 -D data/completion/snap %{buildroot}/usr/share/bash-completion/completions/snap
install -m 644 -D data/completion/complete.sh %{buildroot}%{_libexecdir}/snapd
install -m 644 -D data/completion/etelpmoc.sh %{buildroot}%{_libexecdir}/snapd
+# move snapd-generator
+install -m 755 -d %{buildroot}/lib/systemd/system-generators/
+mv %{buildroot}%{_libexecdir}/snapd/snapd-generator %{buildroot}/lib/systemd/system-generators/
%verifyscript
%verify_permissions -e %{_libexecdir}/snapd/snap-confine
@@ -288,11 +291,8 @@
%verify(not user group mode) %attr(06755,root,root) %{_libexecdir}/snapd/snap-confine
%{_mandir}/man1/snap-confine.1.gz
%{_mandir}/man5/snap-discard-ns.5.gz
-%{_unitdir}/snapd.refresh.service
-%{_unitdir}/snapd.refresh.timer
%{_unitdir}/snapd.service
%{_unitdir}/snapd.socket
-%{_unitdir}/snap.mount
/usr/bin/snap
/usr/bin/snapctl
/usr/sbin/rcsnapd
@@ -308,6 +308,7 @@
/usr/share/bash-completion/completions/snap
%{_libexecdir}/snapd/complete.sh
%{_libexecdir}/snapd/etelpmoc.sh
+/lib/systemd/system-generators/snapd-generator
%{_mandir}/man1/snap.1.gz
/usr/share/dbus-1/services/io.snapcraft.Launcher.service
/usr/share/dbus-1/services/io.snapcraft.Settings.service
diff -Nru snapd-2.31.1+17.10/packaging/ubuntu-14.04/changelog snapd-2.31.2+17.10/packaging/ubuntu-14.04/changelog
--- snapd-2.31.1+17.10/packaging/ubuntu-14.04/changelog 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/ubuntu-14.04/changelog 2018-03-09 10:11:31.000000000 +0000
@@ -1,3 +1,24 @@
+snapd (2.31.2~14.04) trusty; urgency=medium
+
+ * New upstream release, LP: #1745217
+ - many: add the snapd-generator
+ - polkit: ensure error is properly set if dialog is dismissed
+ - xdgopenproxy: integrate xdg-open implementation into snapctl
+ - userd: add an OpenFile method for launching local files with xdg-
+ open
+ - configstate: when disable "ssh" we must disable the "sshd"
+ service
+ - many: remove snapd.refresh.{timer,service}
+ - interfaces/builtin: allow MM to access login1
+ - timeutil: account for 24h wrap when flattening clock spans
+ - interfaces/screen-inhibit-control,network-status: fix dbus path
+ and interface typos
+ - systemd, wrappers: start all snap services in one systemctl
+ call
+ - tests: disable interfaces-location-control on s390x
+
+ -- Michael Vogt Fri, 09 Mar 2018 11:11:31 +0100
+
snapd (2.31.1~14.04) trusty; urgency=medium
* New upstream release, LP: #1745217
diff -Nru snapd-2.31.1+17.10/packaging/ubuntu-14.04/files snapd-2.31.2+17.10/packaging/ubuntu-14.04/files
--- snapd-2.31.1+17.10/packaging/ubuntu-14.04/files 2018-02-06 09:02:11.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/ubuntu-14.04/files 1970-01-01 00:00:00.000000000 +0000
@@ -1 +0,0 @@
-snapd_2.31~14.04_source.buildinfo devel optional
diff -Nru snapd-2.31.1+17.10/packaging/ubuntu-14.04/snapd.install snapd-2.31.2+17.10/packaging/ubuntu-14.04/snapd.install
--- snapd-2.31.1+17.10/packaging/ubuntu-14.04/snapd.install 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/ubuntu-14.04/snapd.install 2018-03-09 10:11:31.000000000 +0000
@@ -6,6 +6,7 @@
usr/bin/snap-update-ns /usr/lib/snapd/
usr/bin/snapd /usr/lib/snapd/
usr/bin/snap-seccomp /usr/lib/snapd/
+usr/lib/snapd/snapd-generator /lib/systemd/system-generators/
# bash completion
data/completion/snap /usr/share/bash-completion/completions
diff -Nru snapd-2.31.1+17.10/packaging/ubuntu-14.04/snapd.postinst snapd-2.31.2+17.10/packaging/ubuntu-14.04/snapd.postinst
--- snapd-2.31.1+17.10/packaging/ubuntu-14.04/snapd.postinst 2017-08-08 06:31:43.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/ubuntu-14.04/snapd.postinst 2018-03-09 10:11:31.000000000 +0000
@@ -17,8 +17,8 @@
# snapd.system-shutdown.service is not strictly needed on 14.04. Its functionality
# is limited to core devices, we still include it here for the sake of comppleteness
# in comparison to 16.04 setups.
- systemctl -f enable snapd.refresh.timer snapd.refresh.service snapd.autoimport.service snapd.socket snapd.service snap.mount.service snapd.system-shutdown.service
- systemctl start snapd.refresh.timer snapd.autoimport.service snapd.socket snapd.service snap.mount.service
+ systemctl -f enable snapd.autoimport.service snapd.socket snapd.service snap.mount.service snapd.system-shutdown.service
+ systemctl start snapd.autoimport.service snapd.socket snapd.service snap.mount.service
fi
case ":$PATH:" in
diff -Nru snapd-2.31.1+17.10/packaging/ubuntu-16.04/changelog snapd-2.31.2+17.10/packaging/ubuntu-16.04/changelog
--- snapd-2.31.1+17.10/packaging/ubuntu-16.04/changelog 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/ubuntu-16.04/changelog 2018-03-09 10:11:31.000000000 +0000
@@ -1,4 +1,25 @@
-snapd (2.31.1+17.10) artful; urgency=medium
+snapd (2.31.2+17.10) artful; urgency=medium
+
+ * New upstream release, LP: #1745217
+ - many: add the snapd-generator
+ - polkit: ensure error is properly set if dialog is dismissed
+ - xdgopenproxy: integrate xdg-open implementation into snapctl
+ - userd: add an OpenFile method for launching local files with xdg-
+ open
+ - configstate: when disable "ssh" we must disable the "sshd"
+ service
+ - many: remove snapd.refresh.{timer,service}
+ - interfaces/builtin: allow MM to access login1
+ - timeutil: account for 24h wrap when flattening clock spans
+ - interfaces/screen-inhibit-control,network-status: fix dbus path
+ and interface typos
+ - systemd, wrappers: start all snap services in one systemctl
+ call
+ - tests: disable interfaces-location-control on s390x
+
+ -- Michael Vogt Fri, 09 Mar 2018 11:11:31 +0100
+
+snapd (2.31.1) xenial; urgency=medium
* New upstream release, LP: #1745217
- tests: multiple autopkgtest related fixes for 18.04
diff -Nru snapd-2.31.1+17.10/packaging/ubuntu-16.04/snapd.install snapd-2.31.2+17.10/packaging/ubuntu-16.04/snapd.install
--- snapd-2.31.1+17.10/packaging/ubuntu-16.04/snapd.install 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/ubuntu-16.04/snapd.install 2018-03-09 10:11:31.000000000 +0000
@@ -6,6 +6,7 @@
usr/bin/snap-update-ns /usr/lib/snapd/
usr/bin/snapd /usr/lib/snapd/
usr/bin/snap-seccomp /usr/lib/snapd/
+usr/lib/snapd/snapd-generator /lib/systemd/system-generators/
# bash completion
data/completion/snap /usr/share/bash-completion/completions
diff -Nru snapd-2.31.1+17.10/packaging/ubuntu-16.10/changelog snapd-2.31.2+17.10/packaging/ubuntu-16.10/changelog
--- snapd-2.31.1+17.10/packaging/ubuntu-16.10/changelog 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/ubuntu-16.10/changelog 2018-03-09 10:11:31.000000000 +0000
@@ -1,4 +1,25 @@
-snapd (2.31.1+17.10) artful; urgency=medium
+snapd (2.31.2+17.10) artful; urgency=medium
+
+ * New upstream release, LP: #1745217
+ - many: add the snapd-generator
+ - polkit: ensure error is properly set if dialog is dismissed
+ - xdgopenproxy: integrate xdg-open implementation into snapctl
+ - userd: add an OpenFile method for launching local files with xdg-
+ open
+ - configstate: when disable "ssh" we must disable the "sshd"
+ service
+ - many: remove snapd.refresh.{timer,service}
+ - interfaces/builtin: allow MM to access login1
+ - timeutil: account for 24h wrap when flattening clock spans
+ - interfaces/screen-inhibit-control,network-status: fix dbus path
+ and interface typos
+ - systemd, wrappers: start all snap services in one systemctl
+ call
+ - tests: disable interfaces-location-control on s390x
+
+ -- Michael Vogt Fri, 09 Mar 2018 11:11:31 +0100
+
+snapd (2.31.1) xenial; urgency=medium
* New upstream release, LP: #1745217
- tests: multiple autopkgtest related fixes for 18.04
diff -Nru snapd-2.31.1+17.10/packaging/ubuntu-16.10/snapd.install snapd-2.31.2+17.10/packaging/ubuntu-16.10/snapd.install
--- snapd-2.31.1+17.10/packaging/ubuntu-16.10/snapd.install 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/ubuntu-16.10/snapd.install 2018-03-09 10:11:31.000000000 +0000
@@ -6,6 +6,7 @@
usr/bin/snap-update-ns /usr/lib/snapd/
usr/bin/snapd /usr/lib/snapd/
usr/bin/snap-seccomp /usr/lib/snapd/
+usr/lib/snapd/snapd-generator /lib/systemd/system-generators/
# bash completion
data/completion/snap /usr/share/bash-completion/completions
diff -Nru snapd-2.31.1+17.10/packaging/ubuntu-17.04/changelog snapd-2.31.2+17.10/packaging/ubuntu-17.04/changelog
--- snapd-2.31.1+17.10/packaging/ubuntu-17.04/changelog 2018-02-20 16:27:42.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/ubuntu-17.04/changelog 2018-03-09 10:11:31.000000000 +0000
@@ -1,4 +1,25 @@
-snapd (2.31.1+17.10) artful; urgency=medium
+snapd (2.31.2+17.10) artful; urgency=medium
+
+ * New upstream release, LP: #1745217
+ - many: add the snapd-generator
+ - polkit: ensure error is properly set if dialog is dismissed
+ - xdgopenproxy: integrate xdg-open implementation into snapctl
+ - userd: add an OpenFile method for launching local files with xdg-
+ open
+ - configstate: when disable "ssh" we must disable the "sshd"
+ service
+ - many: remove snapd.refresh.{timer,service}
+ - interfaces/builtin: allow MM to access login1
+ - timeutil: account for 24h wrap when flattening clock spans
+ - interfaces/screen-inhibit-control,network-status: fix dbus path
+ and interface typos
+ - systemd, wrappers: start all snap services in one systemctl
+ call
+ - tests: disable interfaces-location-control on s390x
+
+ -- Michael Vogt Fri, 09 Mar 2018 11:11:31 +0100
+
+snapd (2.31.1) xenial; urgency=medium
* New upstream release, LP: #1745217
- tests: multiple autopkgtest related fixes for 18.04
diff -Nru snapd-2.31.1+17.10/packaging/ubuntu-17.04/snapd.install snapd-2.31.2+17.10/packaging/ubuntu-17.04/snapd.install
--- snapd-2.31.1+17.10/packaging/ubuntu-17.04/snapd.install 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/packaging/ubuntu-17.04/snapd.install 2018-03-09 10:11:31.000000000 +0000
@@ -6,6 +6,7 @@
usr/bin/snap-update-ns /usr/lib/snapd/
usr/bin/snapd /usr/lib/snapd/
usr/bin/snap-seccomp /usr/lib/snapd/
+usr/lib/snapd/snapd-generator /lib/systemd/system-generators/
# bash completion
data/completion/snap /usr/share/bash-completion/completions
diff -Nru snapd-2.31.1+17.10/polkit/authority.go snapd-2.31.2+17.10/polkit/authority.go
--- snapd-2.31.1+17.10/polkit/authority.go 2017-10-23 06:17:24.000000000 +0000
+++ snapd-2.31.2+17.10/polkit/authority.go 2018-03-09 09:35:23.000000000 +0000
@@ -49,7 +49,10 @@
err = authority.Call(
"org.freedesktop.PolicyKit1.Authority.CheckAuthorization", 0,
subject, actionId, details, flags, "").Store(&result)
- if err != nil && !result.IsAuthorized {
+ if err != nil {
+ return false, err
+ }
+ if !result.IsAuthorized {
if result.IsChallenge {
err = ErrInteraction
} else if result.Details["polkit.dismissed"] != "" {
diff -Nru snapd-2.31.1+17.10/systemd/systemd.go snapd-2.31.2+17.10/systemd/systemd.go
--- snapd-2.31.1+17.10/systemd/systemd.go 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/systemd/systemd.go 2018-03-09 10:11:31.000000000 +0000
@@ -103,7 +103,7 @@
DaemonReload() error
Enable(service string) error
Disable(service string) error
- Start(service string) error
+ Start(service ...string) error
Stop(service string, timeout time.Duration) error
Kill(service, signal string) error
Restart(service string, timeout time.Duration) error
@@ -172,9 +172,9 @@
return err
}
-// Start the given service
-func (*systemd) Start(serviceName string) error {
- _, err := systemctlCmd("start", serviceName)
+// Start the given service or services
+func (*systemd) Start(serviceNames ...string) error {
+ _, err := systemctlCmd(append([]string{"start"}, serviceNames...)...)
return err
}
diff -Nru snapd-2.31.1+17.10/systemd/systemd_test.go snapd-2.31.2+17.10/systemd/systemd_test.go
--- snapd-2.31.1+17.10/systemd/systemd_test.go 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/systemd/systemd_test.go 2018-03-09 10:11:31.000000000 +0000
@@ -148,6 +148,12 @@
c.Check(s.argses, DeepEquals, [][]string{{"start", "foo"}})
}
+func (s *SystemdTestSuite) TestStartMany(c *C) {
+ err := New("", s.rep).Start("foo", "bar", "baz")
+ c.Assert(err, IsNil)
+ c.Check(s.argses, DeepEquals, [][]string{{"start", "foo", "bar", "baz"}})
+}
+
func (s *SystemdTestSuite) TestStop(c *C) {
restore := MockStopDelays(time.Millisecond, 25*time.Second)
defer restore()
diff -Nru snapd-2.31.1+17.10/tests/main/interfaces-location-control/task.yaml snapd-2.31.2+17.10/tests/main/interfaces-location-control/task.yaml
--- snapd-2.31.1+17.10/tests/main/interfaces-location-control/task.yaml 2018-01-31 08:47:06.000000000 +0000
+++ snapd-2.31.2+17.10/tests/main/interfaces-location-control/task.yaml 2018-03-05 13:06:18.000000000 +0000
@@ -9,7 +9,8 @@
The snap is also declaring a plug on this interface must be able to ask for its properties.
# dbus-launch not supported in ubuntu-core
-systems: [-ubuntu-core-16-*]
+# s390x does not support locationd
+systems: [-ubuntu-core-16-*, -ubuntu-*-s390x]
prepare: |
. "$TESTSLIB/dbus.sh"
diff -Nru snapd-2.31.1+17.10/tests/main/interfaces-snapd-control-with-manage/task.yaml snapd-2.31.2+17.10/tests/main/interfaces-snapd-control-with-manage/task.yaml
--- snapd-2.31.1+17.10/tests/main/interfaces-snapd-control-with-manage/task.yaml 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/tests/main/interfaces-snapd-control-with-manage/task.yaml 2018-03-09 10:11:31.000000000 +0000
@@ -73,13 +73,6 @@
fi
snap refresh --time | MATCH 'schedule: managed'
- echo "Check that the snapd.refresh.service is disabled as well"
- systemctl start snapd.refresh.service
- if snap changes | MATCH "Refresh all snaps"; then
- echo "snapd.refresh.service did refresh, this should not happen"
- exit 1
- fi
-
# make sure we trigger a refresh for hints at least once
systemctl stop snapd.socket snapd.service
jq ".data[\"last-refresh\"] = \"2007-08-22T09:30:44.449455783+01:00\"" /var/lib/snapd/state.json > /var/lib/snapd/state.json.new
diff -Nru snapd-2.31.1+17.10/tests/main/snap-on-non-shared-root/task.yaml snapd-2.31.2+17.10/tests/main/snap-on-non-shared-root/task.yaml
--- snapd-2.31.1+17.10/tests/main/snap-on-non-shared-root/task.yaml 2018-01-31 08:47:06.000000000 +0000
+++ snapd-2.31.2+17.10/tests/main/snap-on-non-shared-root/task.yaml 1970-01-01 00:00:00.000000000 +0000
@@ -1,36 +0,0 @@
-# NOTE: This test should be altered or removed once snap-confine
-# no longer tries to alter sharing of /snap (it's broken anyway).
-summary: Ensure that snapd works on systems with a non rshared root
-# no need to run on ubuntu-core-16, we always have / shared here
-systems: [-ubuntu-core-*]
-prepare: |
- . $TESTSLIB/dirs.sh
- # simulate a system with a non-shared /
- mount --make-private /
- mount --make-private $(readlink -f $SNAP_MOUNT_DIR/core/current)
-restore: |
- . $TESTSLIB/dirs.sh
- mount --make-rshared /
- mount --make-rshared $(readlink -f $SNAP_MOUNT_DIR/core/current)
-execute: |
- . $TESTSLIB/dirs.sh
-
- echo "Install fresh test-snapd-tools"
- snap install test-snapd-tools
- test-snapd-tools.echo hello
-
- echo "Refresh, subsequent runs after refresh will fail if / is not rshared"
- snap refresh --edge test-snapd-tools
- test-snapd-tools.echo hello
-
- echo "Ensure we have a shared mount of $SNAP_MOUNT_DIR"
- cat /proc/self/mountinfo |MATCH "$SNAP_MOUNT_DIR $SNAP_MOUNT_DIR.*shared:[0-9]"
-
- echo "Run it again for good measure"
- test-snapd-tools.echo hello
- echo "... and ensure we do not mount $SNAP_MOUNT_DIR again"
- n=$(cat /proc/self/mountinfo |grep "$SNAP_MOUNT_DIR $SNAP_MOUNT_DIR.*shared:[0-9]"|wc -l)
- if [ "$n" -ne 1 ]; then
- echo "Incorrect extra $SNAP_MOUNT_DIR bind mounts created"
- exit 1
- fi
diff -Nru snapd-2.31.1+17.10/tests/main/ubuntu-core-services/task.yaml snapd-2.31.2+17.10/tests/main/ubuntu-core-services/task.yaml
--- snapd-2.31.1+17.10/tests/main/ubuntu-core-services/task.yaml 2017-10-23 06:17:27.000000000 +0000
+++ snapd-2.31.2+17.10/tests/main/ubuntu-core-services/task.yaml 2018-03-09 10:11:31.000000000 +0000
@@ -12,6 +12,6 @@
systemctl status snapd.service |MATCH active
echo "Ensure timers are working"
- for timer in snapd.refresh.timer snapd.snap-repair.timer; do
+ for timer in snapd.snap-repair.timer; do
systemctl is-active $timer
done
diff -Nru snapd-2.31.1+17.10/timeutil/export_test.go snapd-2.31.2+17.10/timeutil/export_test.go
--- snapd-2.31.1+17.10/timeutil/export_test.go 2017-08-08 06:31:43.000000000 +0000
+++ snapd-2.31.2+17.10/timeutil/export_test.go 2018-03-05 14:22:58.000000000 +0000
@@ -21,6 +21,10 @@
import "time"
+var (
+ ParseClockSpan = parseClockSpan
+)
+
func MockTimeNow(f func() time.Time) (restorer func()) {
origTimeNow := timeNow
timeNow = f
diff -Nru snapd-2.31.1+17.10/timeutil/schedule.go snapd-2.31.2+17.10/timeutil/schedule.go
--- snapd-2.31.1+17.10/timeutil/schedule.go 2018-02-16 20:27:57.000000000 +0000
+++ snapd-2.31.2+17.10/timeutil/schedule.go 2018-03-09 10:11:31.000000000 +0000
@@ -46,7 +46,11 @@
func (t Clock) Sub(other Clock) time.Duration {
t1 := time.Duration(t.Hour)*time.Hour + time.Duration(t.Minute)*time.Minute
t2 := time.Duration(other.Hour)*time.Hour + time.Duration(other.Minute)*time.Minute
- return t1 - t2
+ dur := t1 - t2
+ if dur < 0 {
+ dur = -(dur + 24*time.Hour)
+ }
+ return dur
}
// Add adds given duration to t and returns a new Clock
@@ -225,6 +229,9 @@
}
span := ts.End.Sub(ts.Start)
+ if span < 0 {
+ span = -span
+ }
step := span / time.Duration(ts.Split)
spans := make([]ClockSpan, ts.Split)
diff -Nru snapd-2.31.1+17.10/timeutil/schedule_test.go snapd-2.31.2+17.10/timeutil/schedule_test.go
--- snapd-2.31.1+17.10/timeutil/schedule_test.go 2018-02-16 20:27:57.000000000 +0000
+++ snapd-2.31.2+17.10/timeutil/schedule_test.go 2018-03-09 10:11:31.000000000 +0000
@@ -44,6 +44,20 @@
td = timeutil.Clock{Hour: 10, Minute: 1}
c.Check(td.Sub(timeutil.Clock{Hour: 10, Minute: 0}), Equals, time.Minute)
+
+ td = timeutil.Clock{Hour: 23, Minute: 0}
+ c.Check(td.Add(time.Hour), Equals, timeutil.Clock{Hour: 0, Minute: 0})
+ c.Check(td.Add(2*time.Hour), Equals, timeutil.Clock{Hour: 1, Minute: 0})
+ c.Check(td.Sub(timeutil.Clock{Hour: 1, Minute: 0}), Equals, 22*time.Hour)
+ c.Check(td.Sub(timeutil.Clock{Hour: 0, Minute: 0}), Equals, 23*time.Hour)
+
+ td = timeutil.Clock{Hour: 1, Minute: 0}
+ c.Check(td.Sub(timeutil.Clock{Hour: 23, Minute: 0}), Equals, -2*time.Hour)
+ c.Check(td.Sub(timeutil.Clock{Hour: 1, Minute: 0}), Equals, time.Duration(0))
+
+ td = timeutil.Clock{Hour: 0, Minute: 0}
+ c.Check(td.Sub(timeutil.Clock{Hour: 23, Minute: 0}), Equals, -1*time.Hour)
+ c.Check(td.Sub(timeutil.Clock{Hour: 1, Minute: 0}), Equals, -23*time.Hour)
}
func (ts *timeutilSuite) TestParseClock(c *C) {
@@ -762,3 +776,33 @@
}
}
}
+
+func (ts *timeutilSuite) TestClockSpans(c *C) {
+ const shortForm = "2006-01-02 15:04:05"
+
+ for _, t := range []struct {
+ clockspan string
+ flattenend []string
+ }{
+ {
+ clockspan: "23:00-01:00/2",
+ flattenend: []string{"23:00-00:00", "00:00-01:00"},
+ }, {
+ clockspan: "23:00-01:00/4",
+ flattenend: []string{"23:00-23:30", "23:30-00:00", "00:00-00:30", "00:30-01:00"},
+ },
+ } {
+ c.Logf("trying %+v", t)
+ spans, err := timeutil.ParseClockSpan(t.clockspan)
+ c.Assert(err, IsNil)
+
+ spanStrings := make([]string, len(t.flattenend))
+ flattened := spans.ClockSpans()
+ c.Assert(flattened, HasLen, len(t.flattenend))
+ for i := range flattened {
+ spanStrings[i] = flattened[i].String()
+ }
+
+ c.Assert(spanStrings, DeepEquals, t.flattenend)
+ }
+}
diff -Nru snapd-2.31.1+17.10/userd/helpers.go snapd-2.31.2+17.10/userd/helpers.go
--- snapd-2.31.1+17.10/userd/helpers.go 2018-01-31 08:47:06.000000000 +0000
+++ snapd-2.31.2+17.10/userd/helpers.go 2018-03-05 13:06:21.000000000 +0000
@@ -42,6 +42,13 @@
if err != nil {
return "", fmt.Errorf("cannot find snap for connection: %v", err)
}
+ // Check that the sender is still connected to the bus: if it
+ // has disconnected between the GetConnectionUnixProcessID
+ // call and when we poked around in /proc, then it is possible
+ // that the process ID was reused.
+ if !nameHasOwner(conn, sender) {
+ return "", fmt.Errorf("sender is no longer connected to the bus")
+ }
return snap, nil
}
@@ -54,6 +61,16 @@
return pid, nil
}
+func nameHasOwner(conn *dbus.Conn, sender dbus.Sender) bool {
+ call := conn.BusObject().Call("org.freedesktop.DBus.NameHasOwner", 0, sender)
+ if call.Err != nil {
+ return false
+ }
+ var hasOwner bool
+ call.Store(&hasOwner)
+ return hasOwner
+}
+
// FIXME: move to osutil?
func snapFromPid(pid int) (string, error) {
f, err := os.Open(fmt.Sprintf("%s/proc/%d/cgroup", dirs.GlobalRootDir, pid))
diff -Nru snapd-2.31.1+17.10/userd/launcher.go snapd-2.31.2+17.10/userd/launcher.go
--- snapd-2.31.1+17.10/userd/launcher.go 2018-01-31 08:47:06.000000000 +0000
+++ snapd-2.31.2+17.10/userd/launcher.go 2018-03-05 13:06:21.000000000 +0000
@@ -22,10 +22,16 @@
import (
"fmt"
"net/url"
+ "os"
"os/exec"
+ "syscall"
+ "time"
"github.com/godbus/dbus"
+ "github.com/snapcore/snapd/i18n"
+ "github.com/snapcore/snapd/osutil/sys"
"github.com/snapcore/snapd/strutil"
+ "github.com/snapcore/snapd/userd/ui"
)
const launcherIntrospectionXML = `
@@ -40,6 +46,10 @@
+
+
+
+
`
var (
@@ -91,5 +101,87 @@
return dbus.MakeFailedError(fmt.Errorf("cannot open supplied URL"))
}
+ return nil
+}
+
+// fdToFilename determines the path associated with an open file descriptor.
+//
+// The file descriptor cannot be opened using O_PATH and must refer to
+// a regular file or to a directory. The symlink at /proc/self/fd/
+// is read to determine the filename. The descriptor is also fstat'ed
+// and the resulting device number and inode number are compared to
+// stat on the path determined earlier. The numbers must match.
+func fdToFilename(fd int) (string, error) {
+ flags, err := sys.FcntlGetFl(fd)
+ if err != nil {
+ return "", err
+ }
+ // File descriptors opened with O_PATH do not imply access to
+ // the file in question.
+ if flags&sys.O_PATH != 0 {
+ return "", fmt.Errorf("cannot use file descriptors opened using O_PATH")
+ }
+
+ // Determine the file name associated with the passed file descriptor.
+ filename, err := os.Readlink(fmt.Sprintf("/proc/self/fd/%d", fd))
+ if err != nil {
+ return "", err
+ }
+
+ var fileStat, fdStat syscall.Stat_t
+ if err := syscall.Stat(filename, &fileStat); err != nil {
+ return "", err
+ }
+ if err := syscall.Fstat(fd, &fdStat); err != nil {
+ return "", err
+ }
+
+ // Sanity check to ensure we've got the right file
+ if fdStat.Dev != fileStat.Dev || fdStat.Ino != fileStat.Ino {
+ return "", fmt.Errorf("cannot determine file name")
+ }
+
+ fileType := fileStat.Mode & syscall.S_IFMT
+ if fileType != syscall.S_IFREG && fileType != syscall.S_IFDIR {
+ return "", fmt.Errorf("cannot open anything other than regular files or directories")
+ }
+
+ return filename, nil
+}
+
+func (s *Launcher) OpenFile(parentWindow string, clientFd dbus.UnixFD, sender dbus.Sender) *dbus.Error {
+ // godbus transfers ownership of this file descriptor to us
+ fd := int(clientFd)
+ defer syscall.Close(fd)
+
+ filename, err := fdToFilename(fd)
+ if err != nil {
+ return dbus.MakeFailedError(err)
+ }
+
+ snap, err := snapFromSender(s.conn, sender)
+ if err != nil {
+ return dbus.MakeFailedError(err)
+ }
+ dialog, err := ui.New()
+ if err != nil {
+ return dbus.MakeFailedError(err)
+ }
+ answeredYes := dialog.YesNo(
+ i18n.G("Allow opening file?"),
+ fmt.Sprintf(i18n.G("Allow snap %q to open file %q?"), snap, filename),
+ &ui.DialogOptions{
+ Timeout: 5 * 60 * time.Second,
+ Footer: i18n.G("This dialog will close automatically after 5 minutes of inactivity."),
+ },
+ )
+ if !answeredYes {
+ return dbus.MakeFailedError(fmt.Errorf("permission denied"))
+ }
+
+ if err = exec.Command("xdg-open", filename).Run(); err != nil {
+ return dbus.MakeFailedError(fmt.Errorf("cannot open supplied URL"))
+ }
+
return nil
}
diff -Nru snapd-2.31.1+17.10/userd/launcher_test.go snapd-2.31.2+17.10/userd/launcher_test.go
--- snapd-2.31.1+17.10/userd/launcher_test.go 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/userd/launcher_test.go 2018-03-05 13:06:21.000000000 +0000
@@ -20,12 +20,17 @@
package userd_test
import (
+ "io/ioutil"
+ "os"
+ "path/filepath"
+ "syscall"
"testing"
"github.com/godbus/dbus"
. "gopkg.in/check.v1"
+ "github.com/snapcore/snapd/osutil/sys"
"github.com/snapcore/snapd/testutil"
"github.com/snapcore/snapd/userd"
)
@@ -35,7 +40,8 @@
type launcherSuite struct {
launcher *userd.Launcher
- mockXdgOpen *testutil.MockCmd
+ mockXdgOpen *testutil.MockCmd
+ restoreSnapFromSender func()
}
var _ = Suite(&launcherSuite{})
@@ -43,10 +49,14 @@
func (s *launcherSuite) SetUpTest(c *C) {
s.launcher = &userd.Launcher{}
s.mockXdgOpen = testutil.MockCommand(c, "xdg-open", "")
+ s.restoreSnapFromSender = userd.MockSnapFromSender(func(*dbus.Conn, dbus.Sender) (string, error) {
+ return "some-snap", nil
+ })
}
func (s *launcherSuite) TearDownTest(c *C) {
s.mockXdgOpen.Restore()
+ s.restoreSnapFromSender()
}
func (s *launcherSuite) TestOpenURLWithNotAllowedScheme(c *C) {
@@ -83,3 +93,98 @@
c.Assert(err, NotNil)
c.Assert(err, ErrorMatches, "cannot open supplied URL")
}
+
+func (s *launcherSuite) TestOpenFileUserAccepts(c *C) {
+ mockZenity := testutil.MockCommand(c, "zenity", "true")
+ defer mockZenity.Restore()
+
+ path := filepath.Join(c.MkDir(), "test.txt")
+ c.Assert(ioutil.WriteFile(path, []byte("Hello world"), 0644), IsNil)
+
+ file, err := os.Open(path)
+ c.Assert(err, IsNil)
+ defer file.Close()
+
+ dupFd, err := syscall.Dup(int(file.Fd()))
+ c.Assert(err, IsNil)
+
+ err = s.launcher.OpenFile("", dbus.UnixFD(dupFd), ":some-dbus-sender")
+ c.Assert(err, IsNil)
+ c.Assert(s.mockXdgOpen.Calls(), DeepEquals, [][]string{
+ {"xdg-open", path},
+ })
+}
+
+func (s *launcherSuite) TestOpenFileUserDeclines(c *C) {
+ mockZenity := testutil.MockCommand(c, "zenity", "false")
+ defer mockZenity.Restore()
+
+ path := filepath.Join(c.MkDir(), "test.txt")
+ c.Assert(ioutil.WriteFile(path, []byte("Hello world"), 0644), IsNil)
+
+ file, err := os.Open(path)
+ c.Assert(err, IsNil)
+ defer file.Close()
+
+ dupFd, err := syscall.Dup(int(file.Fd()))
+ c.Assert(err, IsNil)
+
+ err = s.launcher.OpenFile("", dbus.UnixFD(dupFd), ":some-dbus-sender")
+ c.Assert(err, NotNil)
+ c.Assert(err, ErrorMatches, "permission denied")
+ c.Assert(s.mockXdgOpen.Calls(), IsNil)
+}
+
+func (s *launcherSuite) TestOpenFileSucceedsWithDirectory(c *C) {
+ mockZenity := testutil.MockCommand(c, "zenity", "true")
+ defer mockZenity.Restore()
+
+ dir := c.MkDir()
+ fd, err := syscall.Open(dir, syscall.O_RDONLY|syscall.O_DIRECTORY, 0755)
+ c.Assert(err, IsNil)
+ defer syscall.Close(fd)
+
+ dupFd, err := syscall.Dup(fd)
+ c.Assert(err, IsNil)
+
+ err = s.launcher.OpenFile("", dbus.UnixFD(dupFd), ":some-dbus-sender")
+ c.Assert(err, IsNil)
+ c.Assert(s.mockXdgOpen.Calls(), DeepEquals, [][]string{
+ {"xdg-open", dir},
+ })
+}
+
+func (s *launcherSuite) TestOpenFileFailsWithDeviceFile(c *C) {
+ mockZenity := testutil.MockCommand(c, "zenity", "true")
+ defer mockZenity.Restore()
+
+ file, err := os.Open("/dev/null")
+ c.Assert(err, IsNil)
+ defer file.Close()
+
+ dupFd, err := syscall.Dup(int(file.Fd()))
+ c.Assert(err, IsNil)
+
+ err = s.launcher.OpenFile("", dbus.UnixFD(dupFd), ":some-dbus-sender")
+ c.Assert(err, NotNil)
+ c.Assert(err, ErrorMatches, "cannot open anything other than regular files or directories")
+ c.Assert(s.mockXdgOpen.Calls(), IsNil)
+}
+
+func (s *launcherSuite) TestOpenFileFailsWithPathDescriptor(c *C) {
+ mockZenity := testutil.MockCommand(c, "zenity", "true")
+ defer mockZenity.Restore()
+
+ dir := c.MkDir()
+ fd, err := syscall.Open(dir, sys.O_PATH, 0755)
+ c.Assert(err, IsNil)
+ defer syscall.Close(fd)
+
+ dupFd, err := syscall.Dup(fd)
+ c.Assert(err, IsNil)
+
+ err = s.launcher.OpenFile("", dbus.UnixFD(dupFd), ":some-dbus-sender")
+ c.Assert(err, NotNil)
+ c.Assert(err, ErrorMatches, "cannot use file descriptors opened using O_PATH")
+ c.Assert(s.mockXdgOpen.Calls(), IsNil)
+}
diff -Nru snapd-2.31.1+17.10/wrappers/services.go snapd-2.31.2+17.10/wrappers/services.go
--- snapd-2.31.1+17.10/wrappers/services.go 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/wrappers/services.go 2018-03-09 10:11:31.000000000 +0000
@@ -93,6 +93,7 @@
func StartServices(apps []*snap.AppInfo, inter interacter) (err error) {
sysd := systemd.New(dirs.GlobalRootDir, inter)
+ services := make([]string, 0, len(apps))
for _, app := range apps {
// they're *supposed* to be all services, but checking doesn't hurt
if !app.IsService() {
@@ -100,9 +101,7 @@
}
if len(app.Sockets) == 0 {
- if err := sysd.Start(app.ServiceName()); err != nil {
- return err
- }
+ services = append(services, app.ServiceName())
}
for _, socket := range app.Sockets {
@@ -127,6 +126,13 @@
}(app)
}
+ if len(services) > 0 {
+ if err := sysd.Start(services...); err != nil {
+ // cleanup was set up by iterating over apps
+ return err
+ }
+ }
+
return nil
}
diff -Nru snapd-2.31.1+17.10/wrappers/services_test.go snapd-2.31.2+17.10/wrappers/services_test.go
--- snapd-2.31.1+17.10/wrappers/services_test.go 2018-01-24 20:02:44.000000000 +0000
+++ snapd-2.31.2+17.10/wrappers/services_test.go 2018-03-09 10:11:31.000000000 +0000
@@ -434,20 +434,16 @@
var sysdLog [][]string
svc1Name := "snap.hello-snap.svc1.service"
svc2Name := "snap.hello-snap.svc2.service"
- numStarts := 0
r := systemd.MockSystemctl(func(cmd ...string) ([]byte, error) {
sysdLog = append(sysdLog, cmd)
- if len(cmd) >= 2 && cmd[len(cmd)-2] == "start" {
- numStarts++
- if numStarts == 2 {
- name := cmd[len(cmd)-1]
- if name == svc1Name {
- // the services are being iterated in the "wrong" order
- svc1Name, svc2Name = svc2Name, svc1Name
- }
- return nil, fmt.Errorf("failed")
+ if len(cmd) >= 2 && cmd[0] == "start" {
+ name := cmd[len(cmd)-1]
+ if name == svc1Name {
+ // the services are being iterated in the "wrong" order
+ svc1Name, svc2Name = svc2Name, svc1Name
}
+ return nil, fmt.Errorf("failed")
}
return []byte("ActiveState=inactive\n"), nil
})
@@ -462,10 +458,11 @@
err := wrappers.StartServices(info.Services(), nil)
c.Assert(err, ErrorMatches, "failed")
- c.Assert(sysdLog, HasLen, 4)
+ c.Assert(sysdLog, HasLen, 5)
c.Check(sysdLog, DeepEquals, [][]string{
- {"start", svc1Name},
- {"start", svc2Name}, // this one fails
+ {"start", svc1Name, svc2Name}, // one of the services fails
+ {"stop", svc2Name},
+ {"show", "--property=ActiveState", svc2Name},
{"stop", svc1Name},
{"show", "--property=ActiveState", svc1Name},
})
diff -Nru snapd-2.31.1+17.10/xdgopenproxy/export_test.go snapd-2.31.2+17.10/xdgopenproxy/export_test.go
--- snapd-2.31.1+17.10/xdgopenproxy/export_test.go 1970-01-01 00:00:00.000000000 +0000
+++ snapd-2.31.2+17.10/xdgopenproxy/export_test.go 2018-03-08 12:45:30.000000000 +0000
@@ -0,0 +1,22 @@
+// -*- Mode: Go; indent-tabs-mode: t -*-
+
+/*
+ * Copyright (C) 2018 Canonical Ltd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package xdgopenproxy
+
+var Launch = launch
diff -Nru snapd-2.31.1+17.10/xdgopenproxy/xdgopenproxy.go snapd-2.31.2+17.10/xdgopenproxy/xdgopenproxy.go
--- snapd-2.31.1+17.10/xdgopenproxy/xdgopenproxy.go 1970-01-01 00:00:00.000000000 +0000
+++ snapd-2.31.2+17.10/xdgopenproxy/xdgopenproxy.go 2018-03-08 12:45:30.000000000 +0000
@@ -0,0 +1,63 @@
+// -*- Mode: Go; indent-tabs-mode: t -*-
+
+/*
+ * Copyright (C) 2018 Canonical Ltd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+// Package xdgopenproxy provides a client for snap userd's xdg-open D-Bus proxy
+package xdgopenproxy
+
+import (
+ "net/url"
+ "syscall"
+
+ "github.com/godbus/dbus"
+)
+
+func Run(urlOrFile string) error {
+ bus, err := dbus.SessionBus()
+ if err != nil {
+ return err
+ }
+ defer bus.Close()
+ launcher := bus.Object("io.snapcraft.Launcher", "/io/snapcraft/Launcher")
+ return launch(launcher, urlOrFile)
+}
+
+func launch(launcher dbus.BusObject, urlOrFile string) error {
+ if u, err := url.Parse(urlOrFile); err == nil {
+ if u.Scheme == "file" {
+ return openFile(launcher, u.Path)
+ } else if u.Scheme != "" {
+ return openUrl(launcher, urlOrFile)
+ }
+ }
+ return openFile(launcher, urlOrFile)
+}
+
+func openUrl(launcher dbus.BusObject, url string) error {
+ return launcher.Call("io.snapcraft.Launcher.OpenURL", 0, url).Err
+}
+
+func openFile(launcher dbus.BusObject, filename string) error {
+ fd, err := syscall.Open(filename, syscall.O_RDONLY, 0)
+ if err != nil {
+ return err
+ }
+ defer syscall.Close(fd)
+
+ return launcher.Call("io.snapcraft.Launcher.OpenFile", 0, "", dbus.UnixFD(fd)).Err
+}
diff -Nru snapd-2.31.1+17.10/xdgopenproxy/xdgopenproxy_test.go snapd-2.31.2+17.10/xdgopenproxy/xdgopenproxy_test.go
--- snapd-2.31.1+17.10/xdgopenproxy/xdgopenproxy_test.go 1970-01-01 00:00:00.000000000 +0000
+++ snapd-2.31.2+17.10/xdgopenproxy/xdgopenproxy_test.go 2018-03-08 12:45:30.000000000 +0000
@@ -0,0 +1,155 @@
+// -*- Mode: Go; indent-tabs-mode: t -*-
+
+/*
+ * Copyright (C) 2018 Canonical Ltd
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package xdgopenproxy_test
+
+import (
+ "fmt"
+ "io/ioutil"
+ "net/url"
+ "os"
+ "path/filepath"
+ "syscall"
+ "testing"
+
+ "github.com/godbus/dbus"
+
+ . "gopkg.in/check.v1"
+
+ "github.com/snapcore/snapd/xdgopenproxy"
+)
+
+func Test(t *testing.T) { TestingT(t) }
+
+type xdgOpenSuite struct{}
+
+var _ = Suite(&xdgOpenSuite{})
+
+func (s *xdgOpenSuite) TestOpenURL(c *C) {
+ launcher := fakeBusObject(func(method string, args ...interface{}) error {
+ c.Check(method, Equals, "io.snapcraft.Launcher.OpenURL")
+ c.Check(args, DeepEquals, []interface{}{"http://example.org"})
+ return nil
+ })
+ c.Check(xdgopenproxy.Launch(launcher, "http://example.org"), IsNil)
+}
+
+func (s *xdgOpenSuite) TestOpenFile(c *C) {
+ path := filepath.Join(c.MkDir(), "test.txt")
+ c.Assert(ioutil.WriteFile(path, []byte("Hello world"), 0644), IsNil)
+
+ launcher := fakeBusObject(func(method string, args ...interface{}) error {
+ c.Check(method, Equals, "io.snapcraft.Launcher.OpenFile")
+ c.Assert(args, HasLen, 2)
+ c.Check(args[0], Equals, "")
+ c.Check(fdMatchesFile(int(args[1].(dbus.UnixFD)), path), IsNil)
+ return nil
+ })
+ c.Check(xdgopenproxy.Launch(launcher, path), IsNil)
+}
+
+func (s *xdgOpenSuite) TestOpenFileURL(c *C) {
+ path := filepath.Join(c.MkDir(), "test.txt")
+ c.Assert(ioutil.WriteFile(path, []byte("Hello world"), 0644), IsNil)
+
+ launcher := fakeBusObject(func(method string, args ...interface{}) error {
+ c.Check(method, Equals, "io.snapcraft.Launcher.OpenFile")
+ c.Assert(args, HasLen, 2)
+ c.Check(args[0], Equals, "")
+ c.Check(fdMatchesFile(int(args[1].(dbus.UnixFD)), path), IsNil)
+ return nil
+ })
+
+ u := url.URL{Scheme: "file", Path: path}
+ c.Check(xdgopenproxy.Launch(launcher, u.String()), IsNil)
+}
+
+func (s *xdgOpenSuite) TestOpenDir(c *C) {
+ dir := c.MkDir()
+
+ launcher := fakeBusObject(func(method string, args ...interface{}) error {
+ c.Check(method, Equals, "io.snapcraft.Launcher.OpenFile")
+ c.Assert(args, HasLen, 2)
+ c.Check(args[0], Equals, "")
+ c.Check(fdMatchesFile(int(args[1].(dbus.UnixFD)), dir), IsNil)
+ return nil
+ })
+ c.Check(xdgopenproxy.Launch(launcher, dir), IsNil)
+}
+
+func (s *xdgOpenSuite) TestOpenMissingFile(c *C) {
+ path := filepath.Join(c.MkDir(), "no-such-file.txt")
+
+ launcher := fakeBusObject(func(method string, args ...interface{}) error {
+ c.Error("unexpected D-Bus call")
+ return nil
+ })
+ c.Check(xdgopenproxy.Launch(launcher, path), ErrorMatches, "no such file or directory")
+}
+
+func (s *xdgOpenSuite) TestOpenUnreadableFile(c *C) {
+ path := filepath.Join(c.MkDir(), "test.txt")
+ c.Assert(ioutil.WriteFile(path, []byte("Hello world"), 0644), IsNil)
+ c.Assert(os.Chmod(path, 0), IsNil)
+
+ launcher := fakeBusObject(func(method string, args ...interface{}) error {
+ c.Error("unexpected D-Bus call")
+ return nil
+ })
+ c.Check(xdgopenproxy.Launch(launcher, path), ErrorMatches, "permission denied")
+}
+
+func fdMatchesFile(fd int, filename string) error {
+ var fdStat, fileStat syscall.Stat_t
+ if err := syscall.Fstat(fd, &fdStat); err != nil {
+ return err
+ }
+ if err := syscall.Stat(filename, &fileStat); err != nil {
+ return err
+ }
+ if fdStat.Dev != fileStat.Dev || fdStat.Ino != fileStat.Ino {
+ return fmt.Errorf("File descriptor and fd do not match")
+ }
+ return nil
+}
+
+// fakeBusObject is a dbus.BusObject implementation that forwards
+// Call invocations
+type fakeBusObject func(method string, args ...interface{}) error
+
+func (f fakeBusObject) Call(method string, flags dbus.Flags, args ...interface{}) *dbus.Call {
+ err := f(method, args...)
+ return &dbus.Call{Err: err}
+}
+
+func (f fakeBusObject) Go(method string, flags dbus.Flags, ch chan *dbus.Call, args ...interface{}) *dbus.Call {
+ return nil
+}
+
+func (f fakeBusObject) GetProperty(prop string) (dbus.Variant, error) {
+ return dbus.Variant{}, nil
+}
+
+func (f fakeBusObject) Destination() string {
+ return ""
+}
+
+func (f fakeBusObject) Path() dbus.ObjectPath {
+ return ""
+}