First "debugged" version -- saber accepts it
authorBarry Jaspan <bjaspan@mit.edu>
Fri, 19 Jan 1990 16:05:31 +0000 (16:05 +0000)
committerBarry Jaspan <bjaspan@mit.edu>
Fri, 19 Jan 1990 16:05:31 +0000 (16:05 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@142 dc483132-0cff-0310-8789-dd5450dbe970

15 files changed:
src/lib/krb5/ccache/file/fcc.h
src/lib/krb5/ccache/file/fcc_close.c
src/lib/krb5/ccache/file/fcc_defnam.c
src/lib/krb5/ccache/file/fcc_destry.c
src/lib/krb5/ccache/file/fcc_eseq.c
src/lib/krb5/ccache/file/fcc_gennew.c
src/lib/krb5/ccache/file/fcc_getnam.c
src/lib/krb5/ccache/file/fcc_gprin.c
src/lib/krb5/ccache/file/fcc_init.c
src/lib/krb5/ccache/file/fcc_nseq.c
src/lib/krb5/ccache/file/fcc_read.c
src/lib/krb5/ccache/file/fcc_reslv.c
src/lib/krb5/ccache/file/fcc_retrv.c
src/lib/krb5/ccache/file/fcc_sseq.c
src/lib/krb5/ccache/file/fcc_store.c

index f7d91f7df22d692bbceec08d9c122d9b08f3f3d1..1f5cb8b1fcfaa886088917e043823db57be6b199 100644 (file)
 #define __KRB5_FILE_CCACHE__
 
 #include <krb5/krb5.h>
+#include "fcc-os.h"
 
 /* XXX Until I find out the right #define for this.. XXX */
 #define KRB5_OK 0
 #define KRB5_NOMEM 1
+#define KRB5_FCC_MAXLEN 100
 
 #ifndef TKT_ROOT
 #define TKT_ROOT "/tmp/tkt"
index 35342b6fcaeac014b99112258e32d01b05676140..891f550532461d25bc64e6294f5bdea6188d4a5b 100644 (file)
@@ -30,7 +30,7 @@ static char fcc_resolve_c[] = "$Id$";
  * system errors
  * permission errors
  */
-krb5_error
+krb5_error_code
 krb5_fcc_close(id)
    krb5_ccache id;
 {
@@ -38,15 +38,15 @@ krb5_fcc_close(id)
 
 #ifdef OPENCLOSE
 #else
-     close(id->data->fd);
+     close(((krb5_fcc_data *) id->data)->fd);
 #endif
      
-     ret = unlink(id->data->filename);
+     ret = unlink(((krb5_fcc_data *) id->data)->filename);
      if (ret < 0)
          return errno;
 
-     free(id->data->filename);
-     free(id->data);
+     free(((krb5_fcc_data *) id->data)->filename);
+     free(((krb5_fcc_data *) id->data));
      free(id);
 
      return KRB5_OK;
index c03fc3f5e8d814be64890907a8abdb8e02adf623..43a8286e2b5890e60408f6a4d8c16bd0330034f1 100644 (file)
@@ -41,7 +41,7 @@ static char krb5_default_name_string[KRB5_FCC_MAXLEN] = "";
 char *
 krb5_fcc_default_name ()
 {
-     char *krb5ccache;
+     char *krb5ccache, *getenv();
      int len;
 
      /* Is the environment variable defined? */
index 7b8fd1c9603f6f87aa160263164c950f11f5500a..659f689839dded0555a2446ee72b54eec2650eef 100644 (file)
 
 #ifndef        lint
 static char fcc_destry_c[] = "$Id$";
-#endif lint
+#endif /* lint */
 
 #include <krb5/copyright.h>
 
+#include "fcc.h"
+
 /*
  * Effects:
  * Destroys the contents of id.
@@ -23,8 +25,7 @@ static char fcc_destry_c[] = "$Id$";
  * Errors:
  * system errors
  */
-krb5_error
-krb5_fcc_destroy(id)
+krb5_error_code krb5_fcc_destroy(id)
    krb5_ccache id;
 {
      struct stat buf;
@@ -33,14 +34,15 @@ krb5_fcc_destroy(id)
      int ret;
      
 #ifdef OPENCLOSE
-     id->data->fd = open(id->data->filename, O_RDWR, 0);
-     if (id->data->fd < 0)
+     ((krb5_fcc_data *) id->data)->fd = open(((krb5_fcc_data *) id->data)->
+                                            filename, O_RDWR, 0);
+     if (((krb5_fcc_data *) id->data)->fd < 0)
          return errno;
 #else
-     lseek(id->data->fd, 0, L_SET);
+     lseek(((krb5_fcc_data *) id->data)->fd, 0, L_SET);
 #endif
 
-     ret = fstat(id->data->fd, &buf);
+     ret = fstat(((krb5_fcc_data *) id->data)->fd, &buf);
      if (ret < 0)
          return errno;
 
@@ -49,13 +51,13 @@ krb5_fcc_destroy(id)
 
      bzero(zeros, BUFSIZ);
      for (i=0; i < size / BUFSIZ; i++)
-         if (write(id->data->fd, zeros, BUFSIZ) < 0)
+         if (write(((krb5_fcc_data *) id->data)->fd, zeros, BUFSIZ) < 0)
               return errno;
 
-     if (write(id->data->fd, zeros, size % BUFSIZ) < 0)
+     if (write(((krb5_fcc_data *) id->data)->fd, zeros, size % BUFSIZ) < 0)
          return errno;
 
 #ifdef OPENCLOSE
-     close(id->data->fd);
+     close(((krb5_fcc_data *) id->data)->fd);
 #endif
 }
index a2af57ad170161f5c46e5461358e3e5131225fd2..d1cf1a59661acaf19596dff025b53b015e498270 100644 (file)
@@ -12,7 +12,7 @@
 
 #ifndef        lint
 static char fcc_eseq_c[] = "$Id$";
-#endif lint
+#endif /* lint */
 
 #include <krb5/copyright.h>
 #include "fcc.h"
@@ -29,17 +29,18 @@ static char fcc_eseq_c[] = "$Id$";
  * Finishes sequential processing of the file credentials ccache id,
  * and invalidates the cursor (it must never be used after this call).
  */
-krb5_error
+/* ARGSUSED */
+krb5_error_code
 krb5_fcc_end_seq_get(id, cursor)
    krb5_ccache id;
    krb5_cc_cursor *cursor;
 {
 #ifdef OPENCLOSE
 #else
-     close(id->data->fd);
+     close(((krb5_fcc_data *) id->data)->fd);
 #endif
 
-     free((krb5_fcc_cursor) cursor);
+     free((krb5_fcc_cursor *) cursor);
 
      return KRB5_OK;
 }
index 4f69282bc902ef0fd6f84e40ad157c65e1349213..8a64f57ddb8ff7a8cff07042b7e6f16ea4bda4ce 100644 (file)
@@ -18,6 +18,8 @@ static char fcc_resolve_c[] = "$Id$";
 
 #include <krb5/copyright.h>
 
+extern krb5_cc_ops krb5_fcc_ops;
+
 /*
  * Effects:
  * Creates a new file cred cache whose name is guaranteed to be
@@ -31,41 +33,45 @@ static char fcc_resolve_c[] = "$Id$";
  * KRB5_NOMEM - there was insufficient memory to allocate the
  *             krb5_ccache.  id is undefined.
  */
-krb5_err
+krb5_error_code
 krb5_fcc_generate_new (id)
    krb5_ccache id;
+   
 {
+     int ret;
      char scratch[100];  /* XXX Is this large enough */
      
      /* Allocate memory */
-     id = (krb_ccache) malloc(sizeof(struct _krb5_ccache));
+     id = (krb5_ccache) malloc(sizeof(struct _krb5_ccache));
      if (id == NULL)
          return KRB5_NOMEM;
 
      sprintf(scratch, "%sXXXXXX", TKT_ROOT);
      mktemp(scratch);
 
-     id->data = malloc(sizeof(krb5_fcc_data));
-     if (id->data == NULL) {
+     ((krb5_fcc_data *) id->data) = (krb5_fcc_data *)
+         malloc(sizeof(krb5_fcc_data));
+     if (((krb5_fcc_data *) id->data) == NULL) {
          free(id);
          return KRB5_NOMEM;
      }
 
-     id->data->filename = malloc(strlen(scratch) + 1);
-     if (id->data->filename == NULL) {
-         free(id->data);
+     ((krb5_fcc_data *) id->data)->filename = (char *)
+         malloc(strlen(scratch) + 1);
+     if (((krb5_fcc_data *) id->data)->filename == NULL) {
+         free(((krb5_fcc_data *) id->data));
          free(id);
          return KRB5_NOMEM;
      }
 
      /* Set up the filename */
-     strcpy(id->data->filename, scratch);
+     strcpy(((krb5_fcc_data *) id->data)->filename, scratch);
 
      /* Copy the virtual operation pointers into id */
      bcopy((char *) &krb5_fcc_ops, id->ops, sizeof(struct _krb5_ccache));
 
      /* Make sure the file name is reserved */
-     ret = open(id->data->filename, O_CREAT | O_EXCL, 0);
+     ret = open(((krb5_fcc_data *) id->data)->filename, O_CREAT | O_EXCL, 0);
      if (ret == -1 && errno != EEXIST)
          return ret;
      else {
index 6b6fa05ec23b8c39862f26da79f280ac3c145c6d..290665a019c896968f89c263e6e61016f07bee94 100644 (file)
@@ -29,5 +29,5 @@ char *
 krb5_fcc_get_name (id)
    krb5_ccache id;
 {
-     return (char *) id->data->filename;
+     return (char *) ((krb5_fcc_data *) id->data)->filename;
 }
index 54244b3936ce542a77f615e810ccd62eb3518b8e..4f8e7d61ad72bd61557235526c522f90e1b64186 100644 (file)
@@ -15,6 +15,7 @@ static char fcc_gprinc_c[] = "$Id$";
 #endif lint
 
 #include <krb5/copyright.h>
+#include "fcc.h"
 
 /*
  * Modifies:
@@ -29,17 +30,18 @@ static char fcc_gprinc_c[] = "$Id$";
  * system errors
  * KRB5_NOMEM
  */
-krb5_error
+krb5_error_code
 krb5_fcc_get_principal(id, princ)
    krb5_ccache id;
    krb5_principal *princ;
 {
 #ifdef OPENCLOSE
-     id->data->fd = open(id->data->filename, O_RDONLY, 0);
-     if (id->data->fd < 0)
+     ((krb5_fcc_data *) id->data)->fd = open(((krb5_fcc_data *) id->data)->
+                                            filename, O_RDONLY, 0);
+     if (((krb5_fcc_data *) id->data)->fd < 0)
          return errno;
 #else
-     lseek(id->data->fd, 0, L_SET);
+     lseek(((krb5_fcc_data *) id->data)->fd, 0, L_SET);
 #endif
 
      return (krb5_fcc_read_principal(princ));
index 61c840e8a1545504b06122cd9555eef970b69e7a..ba8367793708e0cb1c1e12a6f29a26bd5120bb1b 100644 (file)
@@ -30,26 +30,26 @@ static char fcc_resolve_c[] = "$Id$";
  * system errors
  * permission errors
  */
-krb5_error
+krb5_error_code
 krb5_fcc_initialize(id, princ)
    krb5_ccache id;
    krb5_principal princ;
 {
      int ret;
 
-     ret = open(id->data->filename, O_CREAT | O_TRUNC | O_RDWR, 0);
+     ret = open(((krb5_fcc_data *) id->data)->filename, O_CREAT | O_TRUNC | O_RDWR, 0);
      if (ret < 0)
          return errno;
-     id->data->fd = ret;
+     ((krb5_fcc_data *) id->data)->fd = ret;
 
-     ret = fchmod(id->data->fd, S_IREAD | S_IWRITE);
+     ret = fchmod(((krb5_fcc_data *) id->data)->fd, S_IREAD | S_IWRITE);
      if (ret == -1)
          return ret;
 
      krb5_fcc_write_principal(id, princ);
 
 #ifdef OPENCLOSE
-     close(id->data->fd);
+     close(((krb5_fcc_data *) id->data)->fd);
 #endif
 
      return KRB5_OK;
index e51957016f16abcf87c50e8a7e28aa037f96e0d2..c5bdbf0e472f4935d8f66a2411ca563db6268ab6 100644 (file)
@@ -18,6 +18,8 @@ static char fcc_nseq_c[] = "$Id$";
 
 #include "fcc.h"
 
+/* XXX Deal with kret values */
+
 /*
  * Requires:
  * cursor is a krb5_cc_cursor originally obtained from
@@ -37,26 +39,26 @@ static char fcc_nseq_c[] = "$Id$";
  * Errors:
  * system errors
  */
-krb5_error
+krb5_error_code
 krb5_fcc_next_cred(id, creds, cursor)
    krb5_ccache id;
    krb5_creds *creds;
    krb5_cc_cursor *cursor;
 {
      int ret;
-     krb5_error kret;
+     krb5_error_code kret;
      krb5_fcc_cursor *fcursor;
 
 #ifdef OPENCLOSE
-     ret = open(id->data->filename, O_RDONLY, 0);
+     ret = open(((krb5_fcc_data *) id->data)->filename, O_RDONLY, 0);
      if (ret < 0)
          return errno;
-     id->data->fd = ret;
+     ((krb5_fcc_data *) id->data)->fd = ret;
 #endif
 
      fcursor = (krb5_fcc_cursor *) cursor;
 
-     ret = lseek(id->data->fd, fcursor->pos, L_SET);
+     ret = lseek(((krb5_fcc_data *) id->data)->fd, fcursor->pos, L_SET);
      if (ret < 0)
          return errno;
 
@@ -73,11 +75,11 @@ krb5_fcc_next_cred(id, creds, cursor)
      kret = krb5_fcc_read_data(&creds->ticket);
      kret = krb5_fcc_read_data(&creds->second_ticket);
 
-     fcursor->pos = tell(id->data->fd);
-     cursor = (krb5_cc_cursor) fcursor;
+     fcursor->pos = tell(((krb5_fcc_data *) id->data)->fd);
+     cursor = (krb5_cc_cursor *) fcursor;
 
 #ifdef OPENCLOSE
-     close(id->data->fd);
+     close(((krb5_fcc_data *) id->data)->fd);
 #endif
 
      return KRB5_OK;
index 70a3d31bb47e817d3fe01f53c3fd452e6acf7f9b..86b2cfe65a1bd525b2dee1441cbbe5cd51681d80 100644 (file)
@@ -16,15 +16,20 @@ static char fcc_read_c[] = "$Id$";
 #endif lint
 
 #include <krb5/copyright.h>
+#include "fcc.h"
+
+/* XXX Deal with kret return values */
 
 /* XXX Doesn't deal if < sizeof(o) bytes are written XXX */
-#define krb5_fcc_read(i,b,l) (read(i->data->fd,b,l)==-1 ? errno : KRB5_OK)
+#define krb5_fcc_read(i,b,l) (read(((krb5_fcc_data *)i->data)->fd,b,l) == -1 \
+                             ? errno : KRB5_OK)
 
 /*
  * FOR ALL OF THE FOLLOWING FUNCTIONS:
  *
  * Requires:
- * id->data->fd is open and at the right position in the file.
+ * ((krb5_fcc_data *) id->data)->fd is open and at the right position
+ * in the file.
  *
  * Effects:
  * Allocates memory for and decodes the appropriate type from the
@@ -35,13 +40,14 @@ static char fcc_read_c[] = "$Id$";
  * KRB5_NOMEM
  */
 
-krb5_error
+krb5_error_code
 krb5_fcc_read_principal(id, princ)
    krb5_ccache id;
    krb5_principal princ;
 {
-     krb5_error kret;
+     krb5_error_code kret;
      krb5_int32 length;
+     int i;
 
      /* Read the number of components */
      krb5_fcc_read_int32(id, &length);
@@ -54,17 +60,21 @@ krb5_fcc_read_principal(id, princ)
      /* Read length components */
      for (i=0; i < length; i++) {
          kret = krb5_fcc_read_data(id, princ[i]);
+         if (kret != KRB5_OK) {
+              free(princ);
+              return kret;
+         }
      }
 
      return KRB5_OK;
 }
 
-krb5_error
+krb5_error_code
 krb5_fcc_read_keyblock(id, keyblock)
    krb5_ccache id;
    krb5_keyblock *keyblock;
 {
-     krb5_error kret;
+     krb5_error_code kret;
      int ret;
 
      keyblock = (krb5_keyblock *) malloc(sizeof(krb5_keyblock));
@@ -73,18 +83,18 @@ krb5_fcc_read_keyblock(id, keyblock)
      
      kret = krb5_fcc_read_keytype(id, &keyblock->keytype);
      kret = krb5_fcc_read_int(id, &keyblock->length);
-     ret = read(id->data->fd, keyblock->contents,
+     ret = read(((krb5_fcc_data *) id->data)->fd, keyblock->contents,
                (keyblock->length)*sizeof(krb5_octet));
 
      return KRB5_OK;
 }
 
-krb5_error
+krb5_error_code
 krb5_fcc_read_data(id, data)
    krb5_ccache id;
    krb5_data *data;
 {
-     krb5_error kret;
+     krb5_error_code kret;
      int ret;
 
      data = (krb5_data *) malloc(sizeof(krb5_data));
@@ -99,14 +109,14 @@ krb5_fcc_read_data(id, data)
          return KRB5_NOMEM;
      }
 
-     ret = read(id->data->fd, data->data, data->length);
+     ret = read(((krb5_fcc_data *) id->data)->fd, data->data, data->length);
      if (ret == -1)
          return errno;
 
      return KRB5_OK;
 }
 
-krb5_error
+krb5_error_code
 krb5_fcc_read_int32(id, i)
    krb5_ccache id;
    krb5_int32 *i;
@@ -114,7 +124,7 @@ krb5_fcc_read_int32(id, i)
      return krb5_fcc_read(id, i, sizeof(krb5_int32));
 }
 
-krb5_error
+krb5_error_code
 krb5_fcc_read_keytype(id, k)
    krb5_ccache id;
    krb5_keytype *k;
@@ -122,7 +132,7 @@ krb5_fcc_read_keytype(id, k)
      return krb5_fcc_read(id, k, sizeof(krb5_keytype));
 }
 
-krb5_error
+krb5_error_code
 krb5_fcc_read_int(id, i)
    krb5_ccache id;
    int *i;
@@ -130,7 +140,7 @@ krb5_fcc_read_int(id, i)
      return krb5_fcc_read(id, i, sizeof(int));
 }
 
-krb5_error
+krb5_error_code
 krb5_fcc_read_bool(id, b)
    krb5_ccache id;
    krb5_boolean *b;
@@ -138,7 +148,7 @@ krb5_fcc_read_bool(id, b)
      return krb5_fcc_read(id, b, sizeof(krb5_boolean));
 }
 
-krb5_error
+krb5_error_code
 krb5_fcc_read_times(id, t)
    krb5_ccache id;
    krb5_ticket_times *t;
index 3dda640550a393ad5600d16f6092af33a2df4cfd..aee9d4dedeeb72263ce6ea795559ba0887f304c2 100644 (file)
@@ -18,7 +18,7 @@ static char fcc_resolve_c[] = "$Id$";
 
 #include "fcc.h"
 
-extern struct krb5_cc_ops krb5_fcc_ops;
+extern krb5_cc_ops krb5_fcc_ops;
 
 /*
  * Requires:
@@ -39,7 +39,7 @@ extern struct krb5_cc_ops krb5_fcc_ops;
  *             krb5_ccache.  id is undefined.
  * permission errors
  */
-krb5_error
+krb5_error_code
 krb5_fcc_resolve (id, residual)
    krb5_ccache id;
    char *residual;
@@ -50,15 +50,17 @@ krb5_fcc_resolve (id, residual)
      if (id == NULL)
          return KRB5_NOMEM;
 
-     id->data = (char *) malloc(sizeof(krb5_fcc_data));
-     if (id->data == NULL) {
+     ((krb5_fcc_data *) id->data) = (krb5_fcc_data *)
+         malloc(sizeof(krb5_fcc_data));
+     if (((krb5_fcc_data *) id->data) == NULL) {
          free(id);
          return KRB5_NOMEM;
      }
 
-     id->data->filename = (char *) malloc(strlen(residual) + 1);
-     if (id->data->filename == NULL) {
-         free(id->data);
+     ((krb5_fcc_data *) id->data)->filename = (char *)
+         malloc(strlen(residual) + 1);
+     if (((krb5_fcc_data *) id->data)->filename == NULL) {
+         free(((krb5_fcc_data *) id->data));
          free(id);
          return KRB5_NOMEM;
      }
@@ -67,10 +69,10 @@ krb5_fcc_resolve (id, residual)
      bcopy((char *) &krb5_fcc_ops, id->ops, sizeof(struct _krb5_ccache));
 
      /* Set up the filename */
-     strcpy(id->data->filename, residual);
+     strcpy(((krb5_fcc_data *) id->data)->filename, residual);
 
      /* Make sure the file name is reserved */
-     ret = open(id->data->filename, O_CREAT | O_EXCL, 0);
+     ret = open(((krb5_fcc_data *) id->data)->filename, O_CREAT | O_EXCL, 0);
      if (ret == -1 && errno != EEXIST)
          return ret;
      else {
index 17e9b5a6c0479611283a769211d3f5e3e70b287b..2668fa0086bb6cc72a716e0bf37768b521418f9e 100644 (file)
@@ -29,7 +29,7 @@ static char fcc_retrieve_c[] = "$Id$";
  * permission errors
  * KRB5_NOMEM
  */
-krb5_error
+krb5_error_code
 krb5_fcc_retrieve(id, whichfields, mcreds, creds)
    krb5_ccache id;
    krb5_flags whichfields;
index 33178a2a5cb3ea0e4542ca64cd60541e00969bba..e0b7bda619503e92ff3123592a72c266afe577b8 100644 (file)
@@ -31,32 +31,35 @@ static char fcc_sseq_c[] = "$Id$";
  * KRB5_NOMEM
  * system errors
  */
-krb5_error
+krb5_error_code
 krb5_fcc_start_seq_get(id, cursor)
    krb5_ccache id;
    krb5_cc_cursor *cursor;
 {
      krb5_fcc_cursor *fcursor;
+     int ret;
      
-     fcursor = (krb5_cc_cursor) malloc(sizeof(krb5_fcc_cursor));
+     fcursor = (krb5_fcc_cursor *) malloc(sizeof(krb5_fcc_cursor));
      if (fcursor == NULL)
          return KRB5_NOMEM;
 
      /* Make sure we start reading right after the primary principal */
 #ifdef OPENCLOSE
-     ret = open(id->data->filename, O_RDONLY, 0);
+     ret = open(((krb5_fcc_data *) id->data)->filename, O_RDONLY, 0);
      if (ret < 0)
          return errno;
-     id->data->fd = ret;
+     ((krb5_fcc_data *) id->data)->fd = ret;
 #else
-     lseek(id->data->fd, 0, L_SET);
+     lseek(((krb5_fcc_data *) id->data)->fd, 0, L_SET);
 #endif
 
      krb5_fcc_skip_pprincipal(id);
-     fcursor->pos = tell(id->data->fd);
-     cursor = (krb5_cc_cursor) fcursor;
+     fcursor->pos = tell(((krb5_fcc_data *) id->data)->fd);
+     cursor = (krb5_cc_cursor *) fcursor;
 
 #ifdef OPENCLOSE
-     close(id->data->fd);
+     close(((krb5_fcc_data *) id->data)->fd);
 #endif
+
+     return KRB5_OK;
 }
index 83d949117363ed776946b42c41911d38bab46aa8..e0240fc4d0a69eb741108c58716db889d5fc0307 100644 (file)
@@ -19,7 +19,9 @@ static char fcc_store_c[] = "$Id$";
 #include "fcc.h"
 
 /* XXX Doesn't deal if < sizeof(o) bytes are written XXX */
-#define krb5_fcc_write(i,b,l) (write(i->data->fd,b,l)==-1 ? errno : KRB5_OK)
+#define krb5_fcc_write(i,b,l) (write(((krb5_fcc_data *)i->data)->fd,b,l) == -1\
+                              ? errno : KRB5_OK)
+
 #define krb5_fcc_store_int32(id,i) krb5_fcc_write(id, i, sizeof(krb5_int32))
 #define krb5_fcc_store_keytype(id,k) krb5_fcc_write(id,k,sizeof(krb5_keytype))
 #define krb5_fcc_store_int(id,i) krb5_fcc_write(id,i,sizeof(int))
@@ -39,21 +41,21 @@ static char fcc_store_c[] = "$Id$";
  * system errors
  * storage failure errors
  */
-krb5_error
+krb5_error_code
 krb5_fcc_store(id, creds)
    krb5_ccache id;
    krb5_creds *creds;
 {
 #define TCHECK(ret) if (ret != KRB5_OK) goto lose;
-     krb5_error ret;
+     krb5_error_code ret;
 
      /* Make sure we are writing to the end of the file */
 #ifdef OPENCLOSE
-     id->data->fd = open(id->data->filename, O_APPEND, 0);
-     if (id->data->fd < 0)
+     ((krb5_fcc_data *) id->data)->fd = open(((krb5_fcc_data *) id->data)->filename, O_APPEND, 0);
+     if (((krb5_fcc_data *) id->data)->fd < 0)
          return errno;
 #else
-     ret = lseek(id->data->fd, L_XTND, 0);
+     ret = lseek(((krb5_fcc_data *) id->data)->fd, L_XTND, 0);
      if (ret < 0)
          return errno;
 #endif
@@ -76,7 +78,7 @@ krb5_fcc_store(id, creds)
 lose:
           
 #ifdef OPENCLOSE
-     close(id->data->fd);
+     close(((krb5_fcc_data *) id->data)->fd);
 #endif
 
      return ret;
@@ -87,7 +89,7 @@ lose:
  * FOR ALL OF THE FOLLOWING FUNCTIONS:
  * 
  * Requires:
- * id->data->fd is open and at the right position.
+ * ((krb5_fcc_data *) id->data)->fd is open and at the right position.
  * 
  * Effects:
  * Stores an encoded version of the second argument in the
@@ -97,12 +99,12 @@ lose:
  * system errors
  */
 
-static krb5_error
+static krb5_error_code
 krb5_fcc_store_principal(id, princ)
    krb5_ccache id;
    krb5_principal princ;
 {
-     krb5_error ret;
+     krb5_error_code ret;
      krb5_principal temp;
      krb5_int32 i, length = 0;
 
@@ -121,18 +123,18 @@ krb5_fcc_store_principal(id, princ)
      return KRB5_OK;
 }
 
-static krb5_error
+static krb5_error_code
 krb5_store_keyblock(id, keyblock)
    krb5_ccache id;
    krb5_keyblock *keyblock;
 {
-     krb5_error ret;
+     krb5_error_code ret;
 
      ret = krb5_fcc_store_keytype(id, &keyblock->keytype);
      CHECK(ret);
      ret = krb5_fcc_store_int(id, &keyblock->length);
      CHECK(ret);
-     ret = write(id->data->fd, keyblock->contents,
+     ret = write(((krb5_fcc_data *) id->data)->fd, keyblock->contents,
                 (keyblock->length)*sizeof(krb5_octet));
      CHECK(ret);
      
@@ -140,16 +142,16 @@ krb5_store_keyblock(id, keyblock)
 }
 
 
-static krb5_error
+static krb5_error_code
 krb5_fcc_store_data(id, data)
    krb5_ccache id;
    krb5_data *data;
 {
-     krb5_error ret;
+     krb5_error_code ret;
 
      ret = krb5_fcc_store_int32(id, data->length);
      CHECK(ret);
-     ret = write(id->data->fd, data->data, data->length);
+     ret = write(((krb5_fcc_data *) id->data)->fd, data->data, data->length);
      if (ret == -1)
          return errno;