static void socket_disconnect (DBusServer *server) { DBusServerSocket *socket_server = (DBusServerSocket*) server; int i; HAVE_LOCK_CHECK (server); for (i = 0 ; i < socket_server->n_fds ; i++) { if (socket_server->watch[i]) { _dbus_server_remove_watch (server, socket_server->watch[i]); _dbus_watch_unref (socket_server->watch[i]); socket_server->watch[i] = NULL; } _dbus_close_socket (socket_server->fds[i], NULL); socket_server->fds[i] = -1; } if (socket_server->socket_name != NULL) { DBusString tmp; _dbus_string_init_const (&tmp, socket_server->socket_name); _dbus_delete_file (&tmp, NULL); } if (server->published_address) _dbus_daemon_unpublish_session_bus_address(); HAVE_LOCK_CHECK (server); }
/** * deletes the noncefile and frees the DBusNonceFile object. * * @param noncefile the nonce file to delete. Contents will be freed. * @param error error details if the nonce file could not be deleted * @return TRUE */ dbus_bool_t _dbus_noncefile_delete (DBusNonceFile *noncefile, DBusError *error) { _DBUS_ASSERT_ERROR_IS_CLEAR (error); _dbus_delete_file (&noncefile->path, error); _dbus_string_free (&noncefile->dir); _dbus_string_free (&noncefile->path); return TRUE; }
static void _dbus_keyring_unlock (DBusKeyring *keyring) { DBusError error; dbus_error_init (&error); if (!_dbus_delete_file (&keyring->filename_lock, &error)) { _dbus_warn ("Failed to delete lock file: %s\n", error.message); dbus_error_free (&error); } }
static dbus_bool_t _dbus_keyring_lock (DBusKeyring *keyring) { int n_timeouts; n_timeouts = 0; while (n_timeouts < MAX_LOCK_TIMEOUTS) { DBusError error; dbus_error_init (&error); if (_dbus_create_file_exclusively (&keyring->filename_lock, &error)) break; _dbus_verbose ("Did not get lock file, sleeping %d milliseconds (%s)\n", LOCK_TIMEOUT_MILLISECONDS, error.message); dbus_error_free (&error); _dbus_sleep_milliseconds (LOCK_TIMEOUT_MILLISECONDS); ++n_timeouts; } if (n_timeouts == MAX_LOCK_TIMEOUTS) { DBusError error; _dbus_verbose ("Lock file timed out %d times, assuming stale\n", n_timeouts); dbus_error_init (&error); if (!_dbus_delete_file (&keyring->filename_lock, &error)) { _dbus_verbose ("Couldn't delete old lock file: %s\n", error.message); dbus_error_free (&error); return FALSE; } if (!_dbus_create_file_exclusively (&keyring->filename_lock, &error)) { _dbus_verbose ("Couldn't create lock file after deleting stale one: %s\n", error.message); dbus_error_free (&error); return FALSE; } } return TRUE; }
/** * deletes the noncefile and frees the DBusNonceFile object. * * If noncefile_location points to #NULL, nothing is freed or deleted, * similar to dbus_error_free(). * * @param noncefile_location the nonce file to delete. Contents will be freed and cleared to #NULL. * @param error error details if the nonce file could not be deleted * @return TRUE */ dbus_bool_t _dbus_noncefile_delete (DBusNonceFile **noncefile_location, DBusError *error) { DBusNonceFile *noncefile; _DBUS_ASSERT_ERROR_IS_CLEAR (error); _dbus_assert (noncefile_location != NULL); noncefile = *noncefile_location; *noncefile_location = NULL; if (noncefile == NULL) { /* Nothing to do */ return TRUE; } _dbus_delete_file (&noncefile->path, error); _dbus_string_free (&noncefile->dir); _dbus_string_free (&noncefile->path); dbus_free (noncefile); return TRUE; }
/* This code only gets executed the first time the * config files are parsed. It is not executed * when config files are reloaded. */ static dbus_bool_t process_config_first_time_only (BusContext *context, BusConfigParser *parser, const DBusString *address, BusContextFlags flags, DBusError *error) { DBusString log_prefix; DBusList *link; DBusList **addresses; const char *user, *pidfile; char **auth_mechanisms; DBusList **auth_mechanisms_list; int len; dbus_bool_t retval; _DBUS_ASSERT_ERROR_IS_CLEAR (error); retval = FALSE; auth_mechanisms = NULL; pidfile = NULL; _dbus_init_system_log (TRUE); if (flags & BUS_CONTEXT_FLAG_SYSTEMD_ACTIVATION) context->systemd_activation = TRUE; else context->systemd_activation = FALSE; /* Check for an existing pid file. Of course this is a race; * we'd have to use fcntl() locks on the pid file to * avoid that. But we want to check for the pid file * before overwriting any existing sockets, etc. */ if (flags & BUS_CONTEXT_FLAG_WRITE_PID_FILE) pidfile = bus_config_parser_get_pidfile (parser); if (pidfile != NULL) { DBusString u; DBusStat stbuf; _dbus_string_init_const (&u, pidfile); if (_dbus_stat (&u, &stbuf, NULL)) { #ifdef DBUS_CYGWIN DBusString p; long /* int */ pid; _dbus_string_init (&p); _dbus_file_get_contents(&p, &u, NULL); _dbus_string_parse_int(&p, 0, &pid, NULL); _dbus_string_free(&p); if ((kill((int)pid, 0))) { dbus_set_error(NULL, DBUS_ERROR_FILE_EXISTS, "pid %ld not running, removing stale pid file\n", pid); _dbus_delete_file(&u, NULL); } else { #endif dbus_set_error (error, DBUS_ERROR_FAILED, "The pid file \"%s\" exists, if the message bus is not running, remove this file", pidfile); goto failed; #ifdef DBUS_CYGWIN } #endif } } /* keep around the pid filename so we can delete it later */ context->pidfile = _dbus_strdup (pidfile); /* note that type may be NULL */ context->type = _dbus_strdup (bus_config_parser_get_type (parser)); if (bus_config_parser_get_type (parser) != NULL && context->type == NULL) goto oom; user = bus_config_parser_get_user (parser); if (user != NULL) { context->user = _dbus_strdup (user); if (context->user == NULL) goto oom; } /* Set up the prefix for syslog messages */ if (!_dbus_string_init (&log_prefix)) goto oom; if (context->type && !strcmp (context->type, "system")) { if (!_dbus_string_append (&log_prefix, "[system] ")) goto oom; } else if (context->type && !strcmp (context->type, "session")) { DBusCredentials *credentials; credentials = _dbus_credentials_new_from_current_process (); if (!credentials) goto oom; if (!_dbus_string_append (&log_prefix, "[session ")) { _dbus_credentials_unref (credentials); goto oom; } if (!_dbus_credentials_to_string_append (credentials, &log_prefix)) { _dbus_credentials_unref (credentials); goto oom; } if (!_dbus_string_append (&log_prefix, "] ")) { _dbus_credentials_unref (credentials); goto oom; } _dbus_credentials_unref (credentials); } if (!_dbus_string_steal_data (&log_prefix, &context->log_prefix)) goto oom; _dbus_string_free (&log_prefix); /* Build an array of auth mechanisms */ auth_mechanisms_list = bus_config_parser_get_mechanisms (parser); len = _dbus_list_get_length (auth_mechanisms_list); if (len > 0) { int i; auth_mechanisms = dbus_new0 (char*, len + 1); if (auth_mechanisms == NULL) goto oom; i = 0; link = _dbus_list_get_first_link (auth_mechanisms_list); while (link != NULL) { auth_mechanisms[i] = _dbus_strdup (link->data); if (auth_mechanisms[i] == NULL) goto oom; link = _dbus_list_get_next_link (auth_mechanisms_list, link); i += 1; } }