 diff -uNr dbus-1.6.0/dbus/dbus-server-unix.c dbus-1.6.0-2/dbus/dbus-server-unix.c
 --- dbus-1.6.0/dbus/dbus-server-unix.c	2012-03-28 19:43:32.000000000 +0200
-+++ dbus-1.6.0-2/dbus/dbus-server-unix.c	2012-06-12 15:00:27.100431004 +0200
++++ dbus-1.6.0-2/dbus/dbus-server-unix.c	2012-08-09 03:14:32.660650274 +0200
 @@ -149,7 +149,7 @@
      }
    else if (strcmp (method, "systemd") == 0)

         }
 
-      _dbus_string_init_const (&address, "systemd:");
+      if(!_dbus_string_init(&address))
+          goto oom;
 
-      *server_p = _dbus_server_new_for_socket (fds, n, &address, NULL);
-      if (*server_p == NULL)

-          int i;
-
-          for (i = 0; i < n; i++)
+          if (i > 0)
             {
-              _dbus_close_socket (fds[i], NULL);
+              if (!_dbus_string_append (&address, ";"))
+                goto systemd_oom;
             }
-          dbus_free (fds);
-
-          dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-          return DBUS_SERVER_LISTEN_DID_NOT_CONNECT;
+          if (!_dbus_append_address_from_socket (fds[i], &address, error))
+            goto systemd_err;
         }
 
+      *server_p = _dbus_server_new_for_socket (fds, n, &address, NULL);
+      if (*server_p == NULL)
+        goto systemd_oom;
+
       dbus_free (fds);
 
       return DBUS_SERVER_LISTEN_OK;
-	}
+  systemd_oom:
+      _DBUS_SET_OOM (error);
+  systemd_err:
+      for (i = 0; i < n; i++)
+        {
+          _dbus_close_socket (fds[i], NULL);
