ifpsrv.c revision b81ad4a7c59cade13d52216f805d904392627136
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina Jakub Hrozek <jhrozek@redhat.com>
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina Copyright (C) 2013 Red Hat
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina InfoPipe responder: the responder server
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina This program is free software; you can redistribute it and/or modify
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina it under the terms of the GNU General Public License as published by
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina the Free Software Foundation; either version 3 of the License, or
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina (at your option) any later version.
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina This program is distributed in the hope that it will be useful,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina GNU General Public License for more details.
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina You should have received a copy of the GNU General Public License
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březinastatic struct data_provider_iface ifp_dp_methods = {
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březinastatic void ifp_dp_reconnect_init(struct sbus_connection *conn,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina struct be_conn *be_conn = talloc_get_type(pvt, struct be_conn);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina /* Did we reconnect successfully? */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina DEBUG(SSSDBG_TRACE_FUNC, "Reconnected to the Data Provider.\n");
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina /* Identify ourselves to the data provider */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina /* all fine */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina handle_requests_after_reconnect(be_conn->rctx);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina /* Failed to reconnect */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina DEBUG(SSSDBG_FATAL_FAILURE, "Could not reconnect to %s provider.\n",
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina system_bus = talloc_zero(mem_ctx, struct sysbus_ctx);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina /* Connect to the well-known system bus */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina conn = dbus_bus_get(DBUS_BUS_SYSTEM, &dbus_error);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina ("Failed to connect to D-BUS system bus.\n"));
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina dbus_connection_set_exit_on_disconnect(conn, FALSE);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina /* We want exclusive access */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina if (ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina /* We were unable to register on the system bus */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina ("Unable to request name on the system bus.\n"));
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina DEBUG(SSSDBG_TRACE_FUNC, "Listening on %s\n", dbus_name);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina /* Integrate with tevent loop */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina ret = sbus_init_connection(system_bus, ev, conn,
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina "Could not integrate D-BUS into mainloop.\n");
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina "Could not add the sbus interface\n");
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina ret = sbus_conn_add_interface(system_bus->conn, sif);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina "Could not add the interface\n");
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina "DBus error message: %s\n", dbus_error.message);
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina DEBUG(SSSDBG_FATAL_FAILURE, "sss_process_init() failed\n");
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina DEBUG(SSSDBG_FATAL_FAILURE, "fatal error initializing ifp_ctx\n");
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina "(?P<name>[^@]+)@?(?P<domain>[^@]*$)",
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina DEBUG(SSSDBG_FATAL_FAILURE, "fatal error initializing regex data\n");
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina /* Enable automatic reconnection to the Data Provider */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina "Failed to set up automatic reconnection\n");
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina for (iter = ifp_ctx->rctx->be_conns; iter; iter = iter->next) {
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina /* Connect to the D-BUS system bus and set up methods */
d3dee2a07f1a8ee9ae6f94e149ced754ef76c248Pavel Březina "Failed to connect to the system message bus\n");
goto fail;
return EOK;
fail:
return ret;
int opt;
int ret;
switch(opt) {