Merge "Optional autogen.sh flag --enable-kdbus-transport added allowing to compile...
[platform/upstream/dbus.git] / dbus / dbus-server-socket.c
index 92064ef..ae4b602 100644 (file)
  *
  */
 
+#include <config.h>
 #include "dbus-internals.h"
 #include "dbus-server-socket.h"
 #include "dbus-transport-socket.h"
 #include "dbus-connection-internal.h"
+#include "dbus-memory.h"
 #include "dbus-nonce.h"
 #include "dbus-string.h"
 
@@ -73,7 +75,8 @@ socket_finalize (DBusServer *server)
   dbus_free (socket_server->fds);
   dbus_free (socket_server->watch);
   dbus_free (socket_server->socket_name);
-  _dbus_noncefile_delete (socket_server->noncefile, NULL);
+  if (socket_server->noncefile)
+       _dbus_noncefile_delete (socket_server->noncefile, NULL);
   dbus_free (socket_server->noncefile);
   dbus_free (server);
 }
@@ -86,10 +89,8 @@ handle_new_client_fd_and_unlock (DBusServer *server,
   DBusConnection *connection;
   DBusTransport *transport;
   DBusNewConnectionFunction new_connection_function;
-  DBusServerSocket* socket_server;
   void *new_connection_data;
 
-  socket_server = (DBusServerSocket*)server;
   _dbus_verbose ("Creating new client connection with fd %d\n", client_fd);
 
   HAVE_LOCK_CHECK (server);
@@ -186,7 +187,10 @@ socket_handle_watch (DBusWatch    *watch,
 
       listen_fd = dbus_watch_get_socket (watch);
 
-      client_fd = _dbus_accept_with_noncefile (listen_fd, socket_server->noncefile);
+      if (socket_server->noncefile)
+          client_fd = _dbus_accept_with_noncefile (listen_fd, socket_server->noncefile);
+      else 
+          client_fd = _dbus_accept (listen_fd);
 
       if (client_fd < 0)
         {
@@ -230,6 +234,7 @@ socket_disconnect (DBusServer *server)
         {
           _dbus_server_remove_watch (server,
                                      socket_server->watch[i]);
+          _dbus_watch_invalidate (socket_server->watch[i]);
           _dbus_watch_unref (socket_server->watch[i]);
           socket_server->watch[i] = NULL;
         }
@@ -245,6 +250,9 @@ socket_disconnect (DBusServer *server)
       _dbus_delete_file (&tmp, NULL);
     }
 
+  if (server->published_address)
+      _dbus_daemon_unpublish_session_bus_address();
+
   HAVE_LOCK_CHECK (server);
 }
 
@@ -264,7 +272,7 @@ static const DBusServerVTable socket_vtable = {
  * @param fds list of file descriptors.
  * @param n_fds number of file descriptors
  * @param address the server's address
- * @param use_nonce whether to create and use a nonce for authentication
+ * @param noncefile to be used for authentication (NULL if not needed)
  * @returns the new server, or #NULL if no memory.
  *
  */
@@ -335,11 +343,9 @@ _dbus_server_new_for_socket (int              *fds,
 
   SERVER_UNLOCK (server);
 
+  _dbus_server_trace_ref (&socket_server->base, 0, 1, "new_for_socket");
   return (DBusServer*) socket_server;
 
- failed_3:
-  _dbus_noncefile_delete (socket_server->noncefile, NULL);
-  _dbus_free (socket_server->noncefile );
  failed_2:
   for (i = 0 ; i < n_fds ; i++)
     {
@@ -452,16 +458,18 @@ _dbus_server_new_for_tcp_socket (const char     *host,
       noncefile = dbus_new0 (DBusNonceFile, 1);
       if (noncefile == NULL)
         {
+          dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
           goto failed_2;
         }
 
-      if (!_dbus_noncefile_create (noncefile, NULL))
-          goto failed_2;
+      if (!_dbus_noncefile_create (noncefile, error))
+          goto failed_3;
 
       if (!_dbus_string_append (&address, ",noncefile=") ||
           !_dbus_address_append_escaped (&address, _dbus_noncefile_get_path (noncefile)))
         {
-          goto failed_2;
+          dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
+          goto failed_4;
         }
 
     }
@@ -470,7 +478,7 @@ _dbus_server_new_for_tcp_socket (const char     *host,
   if (server == NULL)
     {
       dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-      goto failed_2;
+      goto failed_4;
     }
 
   _dbus_string_free (&port_str);
@@ -479,6 +487,12 @@ _dbus_server_new_for_tcp_socket (const char     *host,
 
   return server;
 
+ failed_4:
+  _dbus_noncefile_delete (noncefile, NULL);
+
+ failed_3:
+  dbus_free (noncefile);
+
  failed_2:
   for (i = 0 ; i < nlisten_fds ; i++)
     _dbus_close_socket (listen_fds[i], NULL);