krb5_error_code kcm_ccache_resolve_by_uuid(krb5_context context, kcmuuid_t uuid, kcm_ccache *ccache) { kcm_ccache p; krb5_error_code ret; *ccache = NULL; ret = KRB5_FCC_NOFILE; HEIMDAL_MUTEX_lock(&ccache_mutex); for (p = ccache_head; p != NULL; p = p->next) { if ((p->flags & KCM_FLAGS_VALID) == 0) continue; if (memcmp(p->uuid, uuid, sizeof(uuid)) == 0) { ret = 0; break; } } if (ret == 0) { kcm_retain_ccache(context, p); *ccache = p; } HEIMDAL_MUTEX_unlock(&ccache_mutex); return ret; }
krb5_error_code kcm_ccache_resolve(krb5_context context, const char *name, kcm_ccache *ccache) { kcm_ccache p; krb5_error_code ret; *ccache = NULL; ret = KRB5_FCC_NOFILE; HEIMDAL_MUTEX_lock(&ccache_mutex); for (p = ccache_head; p != NULL; p = p->next) { if ((p->flags & KCM_FLAGS_VALID) == 0) continue; if (strcmp(p->name, name) == 0) { ret = 0; break; } } if (ret == 0) { kcm_retain_ccache(context, p); *ccache = p; } HEIMDAL_MUTEX_unlock(&ccache_mutex); return ret; }
krb5_error_code kcm_enqueue_event_internal(krb5_context context, kcm_event *event) { kcm_event **e; if (event->action == KCM_EVENT_NONE) return 0; for (e = &events_head; *e != NULL; e = &(*e)->next) ; *e = (kcm_event *)malloc(sizeof(kcm_event)); if (*e == NULL) { return KRB5_CC_NOMEM; } (*e)->valid = 1; (*e)->fire_time = event->fire_time; (*e)->fire_count = 0; (*e)->expire_time = event->expire_time; (*e)->backoff_time = event->backoff_time; (*e)->action = event->action; kcm_retain_ccache(context, event->ccache); (*e)->ccache = event->ccache; (*e)->next = NULL; log_event(*e, "enqueuing"); return 0; }
krb5_error_code kcm_ccache_new(krb5_context context, const char *name, kcm_ccache *ccache) { krb5_error_code ret; ret = kcm_ccache_alloc(context, name, ccache); if (ret == 0) { /* * one reference is held by the linked list, * one by the caller */ kcm_retain_ccache(context, *ccache); } return ret; }