return ret;
}
+/**
+ * virDBusIsServiceRegistered
+ * @name: service name
+ *
+ * Retruns 0 if service is registered, -1 on fatal error, or -2 if service is not registered
+ */
+int virDBusIsServiceRegistered(const char *name)
+{
+ int ret = virDBusIsServiceInList("ListNames", name);
+
+ VIR_DEBUG("Service %s is %s", name, ret ? "not registered" : "registered");
+
+ return ret;
+}
+
#else /* ! WITH_DBUS */
void virDBusSetSharedBus(bool shared ATTRIBUTE_UNUSED)
{
return -2;
}
+int virDBusIsServiceRegistered(const char *name ATTRIBUTE_UNUSED)
+{
+ VIR_DEBUG("DBus support not compiled into this binary");
+ return -2;
+}
+
#endif /* ! WITH_DBUS */
const char *types, ...);
int virDBusIsServiceEnabled(const char *name);
+int virDBusIsServiceRegistered(const char *name);
#endif /* __VIR_DBUS_H__ */
if (ret < 0)
return ret;
+ if ((ret = virDBusIsServiceRegistered("org.freedesktop.systemd1")) < 0)
+ return ret;
+
if (!(conn = virDBusGetSystemBus()))
return -1;
if (ret < 0)
return ret;
+ if ((ret = virDBusIsServiceRegistered("org.freedesktop.systemd1")) < 0)
+ return ret;
+
if (!(conn = virDBusGetSystemBus()))
return -1;
{
DBusMessage *reply = NULL;
const char *service = dbus_message_get_destination(message);
+ const char *member = dbus_message_get_member(message);
if (STREQ(service, "org.freedesktop.machine1")) {
if (getenv("FAIL_BAD_SERVICE")) {
} else {
reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
}
- } else if (STREQ(service, "org.freedesktop.DBus")) {
+ } else if (STREQ(service, "org.freedesktop.DBus") &&
+ STREQ(member, "ListActivatableNames")) {
const char *svc1 = "org.foo.bar.wizz";
const char *svc2 = "org.freedesktop.machine1";
DBusMessageIter iter, sub;
&svc2))
goto error;
dbus_message_iter_close_container(&iter, &sub);
+ } else if (STREQ(service, "org.freedesktop.DBus") &&
+ STREQ(member, "ListNames")) {
+ const char *svc1 = "org.foo.bar.wizz";
+ const char *svc2 = "org.freedesktop.systemd1";
+ DBusMessageIter iter, sub;
+ reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
+ dbus_message_iter_init_append(reply, &iter);
+ dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
+ "s", &sub);
+
+ if (!dbus_message_iter_append_basic(&sub,
+ DBUS_TYPE_STRING,
+ &svc1))
+ goto error;
+ if ((!getenv("FAIL_NO_SERVICE") && !getenv("FAIL_NOT_REGISTERED")) &&
+ !dbus_message_iter_append_basic(&sub,
+ DBUS_TYPE_STRING,
+ &svc2))
+ goto error;
+ dbus_message_iter_close_container(&iter, &sub);
} else {
reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
}
return 0;
}
+static int testCreateSystemdNotRunning(const void *opaque ATTRIBUTE_UNUSED)
+{
+ unsigned char uuid[VIR_UUID_BUFLEN] = {
+ 1, 1, 1, 1,
+ 2, 2, 2, 2,
+ 3, 3, 3, 3,
+ 4, 4, 4, 4
+ };
+ int rv;
+
+ setenv("FAIL_NOT_REGISTERED", "1", 1);
+
+ if ((rv = virSystemdCreateMachine("demo",
+ "qemu",
+ true,
+ uuid,
+ NULL,
+ 123,
+ false,
+ NULL)) == 0) {
+ unsetenv("FAIL_NOT_REGISTERED");
+ fprintf(stderr, "%s", "Unexpected create machine success\n");
+ return -1;
+ }
+ unsetenv("FAIL_NOT_REGISTERED");
+
+ if (rv != -2) {
+ fprintf(stderr, "%s", "Unexpected create machine error\n");
+ return -1;
+ }
+
+ return 0;
+}
+
static int testCreateBadSystemd(const void *opaque ATTRIBUTE_UNUSED)
{
unsigned char uuid[VIR_UUID_BUFLEN] = {
ret = -1;
if (virtTestRun("Test create no systemd ", testCreateNoSystemd, NULL) < 0)
ret = -1;
+ if (virtTestRun("Test create systemd not running ",
+ testCreateSystemdNotRunning, NULL) < 0)
+ ret = -1;
if (virtTestRun("Test create bad systemd ", testCreateBadSystemd, NULL) < 0)
ret = -1;