int sbus_introspect(struct sbus_request *dbus_req, void *pvt) { char *xml; DBusError dberr; const struct sbus_interface_meta *iface; struct sbus_introspect_ctx *ictx; ictx = talloc_get_type(pvt, struct sbus_introspect_ctx); if (ictx == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Invalid pointer!\n"); return sbus_request_return_and_finish(dbus_req, DBUS_TYPE_INVALID); } iface = ictx->iface; xml = sbus_introspect_xml(dbus_req, iface); if (xml == NULL) { dbus_error_init(&dberr); dbus_set_error_const(&dberr, DBUS_ERROR_NO_MEMORY, "Failed to generate introspection data\n"); return sbus_request_fail_and_finish(dbus_req, &dberr); } return sbus_request_return_and_finish(dbus_req, DBUS_TYPE_STRING, &xml, DBUS_TYPE_INVALID); }
static int ifp_sysbus_reconnect(struct sbus_request *dbus_req, void *data) { struct resp_ctx *rctx = talloc_get_type(data, struct resp_ctx); struct ifp_ctx *ifp_ctx = (struct ifp_ctx*) rctx->pvt_ctx; errno_t ret; DEBUG(SSSDBG_TRACE_FUNC, "Attempting to reconnect to the system bus\n"); if (ifp_ctx->sysbus) { DEBUG(SSSDBG_TRACE_LIBS, "Already connected to sysbus\n"); goto done; } /* Connect to the D-BUS system bus and set up methods */ ret = sysbus_init(ifp_ctx, ifp_ctx->rctx->ev, IFACE_IFP, ifp_ctx, &ifp_ctx->sysbus); if (ret == ERR_NO_SYSBUS) { DEBUG(SSSDBG_MINOR_FAILURE, "The system bus is not available..\n"); goto done; } else if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Failed to connect to the system message bus\n"); return ret; } DEBUG(SSSDBG_TRACE_LIBS, "Reconnected to the system bus!\n"); done: return sbus_request_return_and_finish(dbus_req, DBUS_TYPE_INVALID); }
int monitor_common_res_init(struct sbus_request *dbus_req, void *data) { int ret; ret = res_init(); if(ret != 0) { return EIO; } /* Send an empty reply to acknowledge receipt */ return sbus_request_return_and_finish(dbus_req, DBUS_TYPE_INVALID); }
static int nss_clear_netgroup_hash_table(struct sbus_request *dbus_req, void *data) { errno_t ret; struct resp_ctx *rctx = talloc_get_type(data, struct resp_ctx); struct nss_ctx *nctx = (struct nss_ctx*) rctx->pvt_ctx; ret = nss_orphan_netgroups(nctx); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Could not invalidate netgroups\n"); return ret; } return sbus_request_return_and_finish(dbus_req, DBUS_TYPE_INVALID); }
static int autofs_clean_hash_table(struct sbus_request *dbus_req, void *data) { struct resp_ctx *rctx = talloc_get_type(data, struct resp_ctx); struct autofs_ctx *actx = talloc_get_type(rctx->pvt_ctx, struct autofs_ctx); errno_t ret; ret = autofs_orphan_maps(actx); if (ret != EOK) { DEBUG(SSSDBG_OP_FAILURE, "Could not invalidate maps\n"); return ret; } return sbus_request_return_and_finish(dbus_req, DBUS_TYPE_INVALID); }
int monitor_common_pong(struct sbus_request *dbus_req, void *data) { return sbus_request_return_and_finish(dbus_req, DBUS_TYPE_INVALID); }
static int nss_clear_memcache(struct sbus_request *dbus_req, void *data) { errno_t ret; int memcache_timeout; struct resp_ctx *rctx = talloc_get_type(data, struct resp_ctx); struct nss_ctx *nctx = (struct nss_ctx*) rctx->pvt_ctx; ret = unlink(SSS_NSS_MCACHE_DIR"/"CLEAR_MC_FLAG); if (ret != 0) { ret = errno; if (ret == ENOENT) { DEBUG(SSSDBG_TRACE_FUNC, "CLEAR_MC_FLAG not found. Nothing to do.\n"); goto done; } else { DEBUG(SSSDBG_CRIT_FAILURE, "Failed to unlink file: %s.\n", strerror(ret)); return ret; } } /* CLEAR_MC_FLAG removed successfully. Clearing memory caches. */ ret = confdb_get_int(rctx->cdb, CONFDB_NSS_CONF_ENTRY, CONFDB_MEMCACHE_TIMEOUT, 300, &memcache_timeout); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "Unable to get memory cache entry timeout.\n"); return ret; } /* TODO: read cache sizes from configuration */ DEBUG(SSSDBG_TRACE_FUNC, "Clearing memory caches.\n"); ret = sss_mmap_cache_reinit(nctx, SSS_MC_CACHE_ELEMENTS, (time_t) memcache_timeout, &nctx->pwd_mc_ctx); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "passwd mmap cache invalidation failed\n"); return ret; } ret = sss_mmap_cache_reinit(nctx, SSS_MC_CACHE_ELEMENTS, (time_t) memcache_timeout, &nctx->grp_mc_ctx); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "group mmap cache invalidation failed\n"); return ret; } ret = sss_mmap_cache_reinit(nctx, SSS_MC_CACHE_ELEMENTS, (time_t)memcache_timeout, &nctx->initgr_mc_ctx); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "initgroups mmap cache invalidation failed\n"); return ret; } done: return sbus_request_return_and_finish(dbus_req, DBUS_TYPE_INVALID); }