summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Park <pjpark@mit.edu>1995-08-29 18:32:58 +0000
committerPaul Park <pjpark@mit.edu>1995-08-29 18:32:58 +0000
commitd8a63f6d7d6a6b583edf8eaaf9fa8c133206a94b (patch)
treede745feb8305b69e8ab1fa664c6a3988389487c2 /src
parent170442d370167d7feeb3fd80209f3cf6e98de115 (diff)
downloadkrb5-d8a63f6d7d6a6b583edf8eaaf9fa8c133206a94b.tar.gz
krb5-d8a63f6d7d6a6b583edf8eaaf9fa8c133206a94b.tar.xz
krb5-d8a63f6d7d6a6b583edf8eaaf9fa8c133206a94b.zip
Add ccache serialization support
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@6614 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r--src/lib/krb5/ccache/.Sanitize1
-rw-r--r--src/lib/krb5/ccache/ChangeLog5
-rw-r--r--src/lib/krb5/ccache/Makefile.in6
-rw-r--r--src/lib/krb5/ccache/file/ChangeLog4
-rw-r--r--src/lib/krb5/ccache/file/fcc_reslv.c2
-rw-r--r--src/lib/krb5/ccache/ser_cc.c211
-rw-r--r--src/lib/krb5/ccache/stdio/ChangeLog4
-rw-r--r--src/lib/krb5/ccache/stdio/scc_reslv.c2
8 files changed, 233 insertions, 2 deletions
diff --git a/src/lib/krb5/ccache/.Sanitize b/src/lib/krb5/ccache/.Sanitize
index a1481d1e72..2b570fba02 100644
--- a/src/lib/krb5/ccache/.Sanitize
+++ b/src/lib/krb5/ccache/.Sanitize
@@ -32,6 +32,7 @@ ccdefops.c
configure
configure.in
file
+ser_cc.c
stdio
Things-to-lose:
diff --git a/src/lib/krb5/ccache/ChangeLog b/src/lib/krb5/ccache/ChangeLog
index d8ac12f6ce..62b1faf971 100644
--- a/src/lib/krb5/ccache/ChangeLog
+++ b/src/lib/krb5/ccache/ChangeLog
@@ -1,3 +1,8 @@
+
+Tue Aug 29 13:35:23 EDT 1995 Paul Park (pjpark@mit.edu)
+ * Makefile.in, .Sanitize, ser_cc.c - Add new ccache handle serialization
+ routines.
+
Fri Jun 9 19:31:13 1995 <tytso@rsx-11.mit.edu>
* configure.in: Remove standardized set of autoconf macros, which
diff --git a/src/lib/krb5/ccache/Makefile.in b/src/lib/krb5/ccache/Makefile.in
index 4ac77d5662..296be983eb 100644
--- a/src/lib/krb5/ccache/Makefile.in
+++ b/src/lib/krb5/ccache/Makefile.in
@@ -10,11 +10,13 @@ CFLAGS = $(CCOPTS) $(DEFS) -I$(srcdir)$(S)file -I$(srcdir)$(S)stdio
OBJS= ccbase.$(OBJEXT) \
ccdefault.$(OBJEXT) \
- ccdefops.$(OBJEXT)
+ ccdefops.$(OBJEXT) \
+ ser_cc.$(OBJEXT)
SRCS= $(srcdir)/ccbase.c \
$(srcdir)/ccdefault.c \
- $(srcdir)/ccdefops.c
+ $(srcdir)/ccdefops.c \
+ $(srcdir)/ser_cc.c
all:: all-$(WHAT)
diff --git a/src/lib/krb5/ccache/file/ChangeLog b/src/lib/krb5/ccache/file/ChangeLog
index a49e4b4500..4ec1d6eaba 100644
--- a/src/lib/krb5/ccache/file/ChangeLog
+++ b/src/lib/krb5/ccache/file/ChangeLog
@@ -1,3 +1,7 @@
+
+Tue Aug 29 13:36:00 EDT 1995 Paul Park (pjpark@mit.edu)
+ * fcc_reslv.c - Set magic number in successfully resolved ccache.
+
Tue Jul 11 19:26:47 1995 Ezra Peisach <epeisach@kangaroo.mit.edu>
* fcc-proto.h: Add prototype for krb5_fcc_read. Indicate that
diff --git a/src/lib/krb5/ccache/file/fcc_reslv.c b/src/lib/krb5/ccache/file/fcc_reslv.c
index c352c0c0bb..4b6d381c9a 100644
--- a/src/lib/krb5/ccache/file/fcc_reslv.c
+++ b/src/lib/krb5/ccache/file/fcc_reslv.c
@@ -85,6 +85,8 @@ krb5_fcc_resolve (context, id, residual)
/* Set up the filename */
strcpy(((krb5_fcc_data *) lid->data)->filename, residual);
+ lid->magic = KV5M_CCACHE;
+
/* other routines will get errors on open, and callers must expect them,
if cache is non-existent/unusable */
*id = lid;
diff --git a/src/lib/krb5/ccache/ser_cc.c b/src/lib/krb5/ccache/ser_cc.c
new file mode 100644
index 0000000000..384e8ebb23
--- /dev/null
+++ b/src/lib/krb5/ccache/ser_cc.c
@@ -0,0 +1,211 @@
+/*
+ * lib/krb5/ccache/ser_rc.c
+ *
+ * Copyright 1995 by the Massachusetts Institute of Technology.
+ * All Rights Reserved.
+ *
+ * Export of this software from the United States of America may
+ * require a specific license from the United States Government.
+ * It is the responsibility of any person or organization contemplating
+ * export to obtain such a license before exporting.
+ *
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ * distribute this software and its documentation for any purpose and
+ * without fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright notice and
+ * this permission notice appear in supporting documentation, and that
+ * the name of M.I.T. not be used in advertising or publicity pertaining
+ * to distribution of the software without specific, written prior
+ * permission. M.I.T. makes no representations about the suitability of
+ * this software for any purpose. It is provided "as is" without express
+ * or implied warranty.
+ *
+ */
+
+/*
+ * ser_rcdfl.c - Serialize replay cache context.
+ */
+#include "k5-int.h"
+
+/*
+ * Routines to deal with externalizing krb5_ccache.
+ * krb5_ccache_size();
+ * krb5_ccache_externalize();
+ * krb5_ccache_internalize();
+ */
+static krb5_error_code krb5_ccache_size
+ KRB5_PROTOTYPE((krb5_context, krb5_pointer, size_t *));
+static krb5_error_code krb5_ccache_externalize
+ KRB5_PROTOTYPE((krb5_context, krb5_pointer, krb5_octet **, size_t *));
+static krb5_error_code krb5_ccache_internalize
+ KRB5_PROTOTYPE((krb5_context,krb5_pointer *, krb5_octet **, size_t *));
+
+/*
+ * Serialization entry for this type.
+ */
+static const krb5_ser_entry krb5_ccache_ser_entry = {
+ KV5M_CCACHE, /* Type */
+ krb5_ccache_size, /* Sizer routine */
+ krb5_ccache_externalize, /* Externalize routine */
+ krb5_ccache_internalize /* Internalize routine */
+};
+
+/*
+ * krb5_ccache_size() - Determine the size required to externalize
+ * this krb5_ccache variant.
+ */
+static krb5_error_code
+krb5_ccache_size(kcontext, arg, sizep)
+ krb5_context kcontext;
+ krb5_pointer arg;
+ size_t *sizep;
+{
+ krb5_error_code kret;
+ krb5_ccache ccache;
+ size_t required;
+
+ kret = EINVAL;
+ if ((ccache = (krb5_ccache) arg)) {
+ /*
+ * Saving FILE: variants of krb5_ccache requires at minimum:
+ * krb5_int32 for KV5M_CCACHE
+ * krb5_int32 for length of ccache name.
+ * krb5_int32 for KV5M_CCACHE
+ */
+ required = sizeof(krb5_int32) * 3;
+ if (ccache->ops && ccache->ops->prefix)
+ required += (strlen(ccache->ops->prefix)+1);
+
+ /*
+ * The ccache name is formed as follows:
+ * <prefix>:<name>
+ */
+ required += strlen(krb5_rc_get_name(kcontext, ccache));
+
+ kret = 0;
+ *sizep += required;
+ }
+ return(kret);
+}
+
+/*
+ * krb5_ccache_externalize() - Externalize the krb5_ccache.
+ */
+static krb5_error_code
+krb5_ccache_externalize(kcontext, arg, buffer, lenremain)
+ krb5_context kcontext;
+ krb5_pointer arg;
+ krb5_octet **buffer;
+ size_t *lenremain;
+{
+ krb5_error_code kret;
+ krb5_ccache ccache;
+ size_t required;
+ krb5_octet *bp;
+ size_t remain;
+ char *ccname;
+ size_t namelen;
+ char *fnamep;
+
+ required = 0;
+ bp = *buffer;
+ remain = *lenremain;
+ kret = EINVAL;
+ if ((ccache = (krb5_ccache) arg)) {
+ kret = ENOMEM;
+ if (!krb5_ccache_size(kcontext, arg, &required) &&
+ (required <= remain)) {
+ /* Our identifier */
+ (void) krb5_ser_pack_int32(KV5M_CCACHE, &bp, &remain);
+
+ /* Calculate the length of the name */
+ namelen = (ccache->ops && ccache->ops->prefix) ?
+ strlen(ccache->ops->prefix)+1 : 0;
+ fnamep = krb5_rc_get_name(kcontext, ccache);
+ namelen += (strlen(fnamep)+1);
+
+ if ((ccname = (char *) malloc(namelen))) {
+ /* Format the ccache name. */
+ if (ccache->ops && ccache->ops->prefix)
+ sprintf(ccname, "%s:%s", ccache->ops->prefix, fnamep);
+ else
+ strcpy(ccname, fnamep);
+
+ /* Put the length of the file name */
+ (void) krb5_ser_pack_int32((krb5_int32) strlen(ccname),
+ &bp, &remain);
+
+ /* Put the name */
+ (void) krb5_ser_pack_bytes((krb5_octet *) ccname,
+ strlen(ccname),
+ &bp, &remain);
+
+ /* Put the trailer */
+ (void) krb5_ser_pack_int32(KV5M_CCACHE, &bp, &remain);
+ kret = 0;
+ *buffer = bp;
+ *lenremain = remain;
+ free(ccname);
+ }
+ }
+ }
+ return(kret);
+}
+
+/*
+ * krb5_ccache_internalize() - Internalize the krb5_ccache.
+ */
+static krb5_error_code
+krb5_ccache_internalize(kcontext, argp, buffer, lenremain)
+ krb5_context kcontext;
+ krb5_pointer *argp;
+ krb5_octet **buffer;
+ size_t *lenremain;
+{
+ krb5_error_code kret;
+ krb5_ccache ccache;
+ krb5_int32 ibuf;
+ krb5_octet *bp;
+ size_t remain;
+ char *ccname;
+
+ bp = *buffer;
+ remain = *lenremain;
+ kret = EINVAL;
+ /* Read our magic number */
+ if (krb5_ser_unpack_int32(&ibuf, &bp, &remain))
+ ibuf = 0;
+ if (ibuf == KV5M_CCACHE) {
+ kret = ENOMEM;
+
+ /* Get the length of the ccache name */
+ kret = krb5_ser_unpack_int32(&ibuf, &bp, &remain);
+
+ if (!kret &&
+ (ccname = (char *) malloc((size_t) (ibuf+1))) &&
+ !(kret = krb5_ser_unpack_bytes((krb5_octet *) ccname,
+ (size_t) ibuf,
+ &bp, &remain))) {
+ ccname[ibuf] = '\0';
+ if (!(kret = krb5_cc_resolve(kcontext, ccname, &ccache)) &&
+ !(kret = krb5_ser_unpack_int32(&ibuf, &bp, &remain)) &&
+ (ibuf == KV5M_CCACHE)) {
+ *buffer = bp;
+ *lenremain = remain;
+ *argp = (krb5_pointer) ccache;
+ }
+ free(ccname);
+ }
+ }
+ return(kret);
+}
+
+/*
+ * Register the ccache serializer.
+ */
+krb5_error_code
+krb5_ser_ccache_init(kcontext)
+ krb5_context kcontext;
+{
+ return(krb5_register_serializer(kcontext, &krb5_ccache_ser_entry));
+}
diff --git a/src/lib/krb5/ccache/stdio/ChangeLog b/src/lib/krb5/ccache/stdio/ChangeLog
index 64544d2b6a..e49515ffc1 100644
--- a/src/lib/krb5/ccache/stdio/ChangeLog
+++ b/src/lib/krb5/ccache/stdio/ChangeLog
@@ -1,3 +1,7 @@
+
+Tue Aug 29 13:36:39 EDT 1995 Paul Park (pjpark@mit.edu)
+ * scc_reslv.c - Set magic number in successfully resolved ccache.
+
Wed Aug 16 02:45:19 1995 Chris Provenzano <proven@mit.edu>
* scc_maybe.c: Pass fds to krb5_lock_file() and krb5_unlock_file()
diff --git a/src/lib/krb5/ccache/stdio/scc_reslv.c b/src/lib/krb5/ccache/stdio/scc_reslv.c
index 1add343e63..e26354fd63 100644
--- a/src/lib/krb5/ccache/stdio/scc_reslv.c
+++ b/src/lib/krb5/ccache/stdio/scc_reslv.c
@@ -85,6 +85,8 @@ krb5_scc_resolve (context, id, residual)
/* Set up the filename */
strcpy(((krb5_scc_data *) lid->data)->filename, residual);
+ lid->magic = KV5M_CCACHE;
+
/* other routines will get errors on open, and callers must expect them,
if cache is non-existent/unusable */
*id = lid;