Esempio n. 1
0
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);

}
Esempio n. 2
0
File: ifpsrv.c Progetto: 3van/sssd
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);
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
int monitor_common_pong(struct sbus_request *dbus_req, void *data)
{
    return sbus_request_return_and_finish(dbus_req, DBUS_TYPE_INVALID);
}
Esempio n. 7
0
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);
}