summaryrefslogtreecommitdiff
path: root/crypto/heimdal/lib/krb5/cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/heimdal/lib/krb5/cache.c')
-rw-r--r--crypto/heimdal/lib/krb5/cache.c422
1 files changed, 0 insertions, 422 deletions
diff --git a/crypto/heimdal/lib/krb5/cache.c b/crypto/heimdal/lib/krb5/cache.c
deleted file mode 100644
index e78d4deb23da..000000000000
--- a/crypto/heimdal/lib/krb5/cache.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Copyright (c) 1997-1999 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include "krb5_locl.h"
-
-RCSID("$Id: cache.c,v 1.44 1999/12/02 17:05:08 joda Exp $");
-
-/*
- * Add a new ccache type with operations `ops', overwriting any
- * existing one if `override'.
- * Return an error code or 0.
- */
-
-krb5_error_code
-krb5_cc_register(krb5_context context,
- const krb5_cc_ops *ops,
- krb5_boolean override)
-{
- int i;
-
- for(i = 0; i < context->num_cc_ops && context->cc_ops[i].prefix; i++) {
- if(strcmp(context->cc_ops[i].prefix, ops->prefix) == 0) {
- if(override)
- free(context->cc_ops[i].prefix);
- else
- return KRB5_CC_TYPE_EXISTS;
- }
- }
- if(i == context->num_cc_ops) {
- krb5_cc_ops *o = realloc(context->cc_ops,
- (context->num_cc_ops + 1) *
- sizeof(*context->cc_ops));
- if(o == NULL)
- return KRB5_CC_NOMEM;
- context->num_cc_ops++;
- context->cc_ops = o;
- memset(context->cc_ops + i, 0,
- (context->num_cc_ops - i) * sizeof(*context->cc_ops));
- }
- memcpy(&context->cc_ops[i], ops, sizeof(context->cc_ops[i]));
- context->cc_ops[i].prefix = strdup(ops->prefix);
- if(context->cc_ops[i].prefix == NULL)
- return KRB5_CC_NOMEM;
-
- return 0;
-}
-
-/*
- * Allocate memory for a new ccache in `id' with operations `ops'
- * and name `residual'.
- * Return 0 or an error code.
- */
-
-static krb5_error_code
-allocate_ccache (krb5_context context,
- const krb5_cc_ops *ops,
- const char *residual,
- krb5_ccache *id)
-{
- krb5_error_code ret;
- krb5_ccache p;
-
- p = malloc(sizeof(*p));
- if(p == NULL)
- return KRB5_CC_NOMEM;
- p->ops = ops;
- *id = p;
- ret = p->ops->resolve(context, id, residual);
- if(ret)
- free(p);
- return ret;
-}
-
-/*
- * Find and allocate a ccache in `id' from the specification in `residual'.
- * If the ccache name doesn't contain any colon, interpret it as a file name.
- * Return 0 or an error code.
- */
-
-krb5_error_code
-krb5_cc_resolve(krb5_context context,
- const char *name,
- krb5_ccache *id)
-{
- int i;
-
- for(i = 0; i < context->num_cc_ops && context->cc_ops[i].prefix; i++) {
- size_t prefix_len = strlen(context->cc_ops[i].prefix);
-
- if(strncmp(context->cc_ops[i].prefix, name, prefix_len) == 0
- && name[prefix_len] == ':') {
- return allocate_ccache (context, &context->cc_ops[i],
- name + prefix_len + 1,
- id);
- }
- }
- if (strchr (name, ':') == NULL)
- return allocate_ccache (context, &krb5_fcc_ops, name, id);
- else
- return KRB5_CC_UNKNOWN_TYPE;
-}
-
-/*
- * Generate a new ccache of type `ops' in `id'.
- * Return 0 or an error code.
- */
-
-krb5_error_code
-krb5_cc_gen_new(krb5_context context,
- const krb5_cc_ops *ops,
- krb5_ccache *id)
-{
- krb5_ccache p;
-
- p = malloc (sizeof(*p));
- if (p == NULL)
- return KRB5_CC_NOMEM;
- p->ops = ops;
- *id = p;
- return p->ops->gen_new(context, id);
-}
-
-/*
- * Return the name of the ccache `id'
- */
-
-const char*
-krb5_cc_get_name(krb5_context context,
- krb5_ccache id)
-{
- return id->ops->get_name(context, id);
-}
-
-/*
- * Return the type of the ccache `id'.
- */
-
-const char*
-krb5_cc_get_type(krb5_context context,
- krb5_ccache id)
-{
- return id->ops->prefix;
-}
-
-/*
- * Return a pointer to a static string containing the default ccache name.
- */
-
-const char*
-krb5_cc_default_name(krb5_context context)
-{
- static char name[1024];
- char *p;
-
- p = getenv("KRB5CCNAME");
- if(p)
- strlcpy (name, p, sizeof(name));
- else
- snprintf(name,
- sizeof(name),
- "FILE:/tmp/krb5cc_%u",
- (unsigned)getuid());
- return name;
-}
-
-/*
- * Open the default ccache in `id'.
- * Return 0 or an error code.
- */
-
-krb5_error_code
-krb5_cc_default(krb5_context context,
- krb5_ccache *id)
-{
- return krb5_cc_resolve(context,
- krb5_cc_default_name(context),
- id);
-}
-
-/*
- * Create a new ccache in `id' for `primary_principal'.
- * Return 0 or an error code.
- */
-
-krb5_error_code
-krb5_cc_initialize(krb5_context context,
- krb5_ccache id,
- krb5_principal primary_principal)
-{
- return id->ops->init(context, id, primary_principal);
-}
-
-
-/*
- * Remove the ccache `id'.
- * Return 0 or an error code.
- */
-
-krb5_error_code
-krb5_cc_destroy(krb5_context context,
- krb5_ccache id)
-{
- krb5_error_code ret;
-
- ret = id->ops->destroy(context, id);
- krb5_cc_close (context, id);
- return ret;
-}
-
-/*
- * Stop using the ccache `id' and free the related resources.
- * Return 0 or an error code.
- */
-
-krb5_error_code
-krb5_cc_close(krb5_context context,
- krb5_ccache id)
-{
- krb5_error_code ret;
- ret = id->ops->close(context, id);
- free(id);
- return ret;
-}
-
-/*
- * Store `creds' in the ccache `id'.
- * Return 0 or an error code.
- */
-
-krb5_error_code
-krb5_cc_store_cred(krb5_context context,
- krb5_ccache id,
- krb5_creds *creds)
-{
- return id->ops->store(context, id, creds);
-}
-
-/*
- * Retrieve the credential identified by `mcreds' (and `whichfields')
- * from `id' in `creds'.
- * Return 0 or an error code.
- */
-
-krb5_error_code
-krb5_cc_retrieve_cred(krb5_context context,
- krb5_ccache id,
- krb5_flags whichfields,
- const krb5_creds *mcreds,
- krb5_creds *creds)
-{
- krb5_error_code ret;
- krb5_cc_cursor cursor;
- krb5_cc_start_seq_get(context, id, &cursor);
- while((ret = krb5_cc_next_cred(context, id, creds, &cursor)) == 0){
- if(krb5_compare_creds(context, whichfields, mcreds, creds)){
- ret = 0;
- break;
- }
- krb5_free_creds_contents (context, creds);
- }
- krb5_cc_end_seq_get(context, id, &cursor);
- return ret;
-}
-
-/*
- * Return the principal of `id' in `principal'.
- * Return 0 or an error code.
- */
-
-krb5_error_code
-krb5_cc_get_principal(krb5_context context,
- krb5_ccache id,
- krb5_principal *principal)
-{
- return id->ops->get_princ(context, id, principal);
-}
-
-/*
- * Start iterating over `id', `cursor' is initialized to the
- * beginning.
- * Return 0 or an error code.
- */
-
-krb5_error_code
-krb5_cc_start_seq_get (krb5_context context,
- const krb5_ccache id,
- krb5_cc_cursor *cursor)
-{
- return id->ops->get_first(context, id, cursor);
-}
-
-/*
- * Retrieve the next cred pointed to by (`id', `cursor') in `creds'
- * and advance `cursor'.
- * Return 0 or an error code.
- */
-
-krb5_error_code
-krb5_cc_next_cred (krb5_context context,
- const krb5_ccache id,
- krb5_creds *creds,
- krb5_cc_cursor *cursor)
-{
- return id->ops->get_next(context, id, cursor, creds);
-}
-
-/*
- * Destroy the cursor `cursor'.
- */
-
-krb5_error_code
-krb5_cc_end_seq_get (krb5_context context,
- const krb5_ccache id,
- krb5_cc_cursor *cursor)
-{
- return id->ops->end_get(context, id, cursor);
-}
-
-/*
- * Remove the credential identified by `cred', `which' from `id'.
- */
-
-krb5_error_code
-krb5_cc_remove_cred(krb5_context context,
- krb5_ccache id,
- krb5_flags which,
- krb5_creds *cred)
-{
- return id->ops->remove_cred(context, id, which, cred);
-}
-
-/*
- * Set the flags of `id' to `flags'.
- */
-
-krb5_error_code
-krb5_cc_set_flags(krb5_context context,
- krb5_ccache id,
- krb5_flags flags)
-{
- return id->ops->set_flags(context, id, flags);
-}
-
-/*
- * Copy the contents of `from' to `to'.
- */
-
-krb5_error_code
-krb5_cc_copy_cache(krb5_context context,
- const krb5_ccache from,
- krb5_ccache to)
-{
- krb5_error_code ret;
- krb5_cc_cursor cursor;
- krb5_creds cred;
- krb5_principal princ;
-
- ret = krb5_cc_get_principal(context, from, &princ);
- if(ret)
- return ret;
- ret = krb5_cc_initialize(context, to, princ);
- if(ret){
- krb5_free_principal(context, princ);
- return ret;
- }
- ret = krb5_cc_start_seq_get(context, from, &cursor);
- if(ret){
- krb5_free_principal(context, princ);
- return ret;
- }
- while(ret == 0 && krb5_cc_next_cred(context, from, &cred, &cursor) == 0){
- ret = krb5_cc_store_cred(context, to, &cred);
- krb5_free_creds_contents (context, &cred);
- }
- krb5_cc_end_seq_get(context, from, &cursor);
- krb5_free_principal(context, princ);
- return ret;
-}
-
-/*
- * Return the version of `id'.
- */
-
-krb5_error_code
-krb5_cc_get_version(krb5_context context,
- const krb5_ccache id)
-{
- if(id->ops->get_version)
- return id->ops->get_version(context, id);
- else
- return 0;
-}