* scc.h : Add another KRB5_SCC_FVNO but don't up the default.
authorChris Provenzano <proven@mit.edu>
Wed, 6 Sep 1995 03:44:03 +0000 (03:44 +0000)
committerChris Provenzano <proven@mit.edu>
Wed, 6 Sep 1995 03:44:03 +0000 (03:44 +0000)
        * scc_gennew.c, scc_maybe.c : New version saves a length after
                version for whatever we want to put into the ccache before
                the first credential (like a time skew)
        * scc_read.c, scc_write.c : Remove krb5_enctype references, and
                replace with krb5_keytype where appropriate

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@6684 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/ccache/stdio/ChangeLog
src/lib/krb5/ccache/stdio/scc.h
src/lib/krb5/ccache/stdio/scc_gennew.c
src/lib/krb5/ccache/stdio/scc_maybe.c
src/lib/krb5/ccache/stdio/scc_read.c
src/lib/krb5/ccache/stdio/scc_write.c

index e49515ffc1c796ea2bfcd4b25ec48379c8c633ff..9f797ce475307727b52186decd52ca223c1f94dc 100644 (file)
@@ -1,4 +1,13 @@
 
+Tue Sep 05 22:58:52 1995
+
+        * scc.h : Add another KRB5_SCC_FVNO but don't up the default.
+        * scc_gennew.c, scc_maybe.c : New version saves a length after
+                version for whatever we want to put into the ccache before
+                the first credential (like a time skew)
+        * scc_read.c, scc_write.c : Remove krb5_enctype references, and
+                replace with krb5_keytype where appropriate
+
 Tue Aug 29 13:36:39 EDT 1995   Paul Park       (pjpark@mit.edu)
        * scc_reslv.c - Set magic number in successfully resolved ccache.
 
index 6af8be93a006bdf4e14b7b5fe8d51e688540712f..6212adc14fcee37395cb9b5e92484ca8a920613d 100644 (file)
  * some overriding compatibility reasons not to do so.
  */
 
-#define KRB5_SCC_FVNO_1 0x0501         /* krb v5, scc v1 */
+#define KRB5_SCC_FVNO_1   0x0501       /* krb v5, scc v1 */
 #define KRB5_SCC_FVNO_2   0x0502       /* krb v5, scc v2 */
-#define KRB5_SCC_FVNO_3   0x0503       /* krb v5, scc v2 */
+#define KRB5_SCC_FVNO_3   0x0503       /* krb v5, scc v3 */
+#define KRB5_SCC_FVNO_4   0x0504       /* krb v5, scc v4 */
 
 #define KRB5_SCC_DEFAULT_FVNO KRB5_SCC_FVNO_3
 
index 7e4e8dba7461e4804f912f5c06e15ae0adc15314..1baf36155a11d8cf11d582eb57565e9b5e732274 100644 (file)
@@ -106,6 +106,16 @@ krb5_scc_generate_new (context, id)
             (void) remove(((krb5_scc_data *) lid->data)->filename);
             goto err_out;
         }
+        /* For version 4 we save a length for the rest of the header */
+          if (KRB5_SCC_DEFAULT_FVNO == KRB5_SCC_FVNO_4) {
+            unsigned char scc_flen[2] = { 0, 0 };
+            if (!fwrite((char *)scc_flen, sizeof(scc_flen), 1, f)) {
+               retcode = krb5_scc_interpret(context, errno);
+               (void) fclose(f);
+               (void) remove(((krb5_scc_data *) lid->data)->filename);
+                goto err_out;
+            }
+        }
         if (fclose(f) == EOF) {
             retcode = krb5_scc_interpret(context, errno);
             (void) remove(((krb5_scc_data *) lid->data)->filename);
index f6e008ddd7a857505333819c3e484586007c4042..706b10bf95f7ce79e1e3d05ac3e91c531134638f 100644 (file)
@@ -164,12 +164,30 @@ krb5_scc_open_file (context, id, mode)
         data->version = (fvno_bytes[0] << 8) + fvno_bytes[1];
         if ((data->version != KRB5_SCC_FVNO_1) &&
             (data->version != KRB5_SCC_FVNO_2) &&
-            (data->version != KRB5_SCC_FVNO_3)) {
+            (data->version != KRB5_SCC_FVNO_3) &&
+            (data->version != KRB5_SCC_FVNO_4)) {
             (void) krb5_unlock_file(context, fileno(f));
             (void) fclose(f);
             return KRB5_CCACHE_BADVNO;
         }
-     }
-     data->file = f;
-     return 0;
+       if (data->version == KRB5_SCC_FVNO_4) {
+           char buf[1024];
+           int len;
+
+           if (!fread((char *)fvno_bytes, sizeof(fvno_bytes), 1, f)) {
+               (void) krb5_unlock_file(context, fileno(f));
+               (void) fclose(f);
+               return KRB5_CCACHE_BADVNO;
+           }
+           if (len = (fvno_bytes[0] << 8) + fvno_bytes[1]) {
+               if (!fread(buf, len, 1, f)) {
+                   (void) krb5_unlock_file(context, fileno(f));
+                   (void) fclose(f);
+                   return KRB5_CCACHE_BADVNO;
+               }
+           }
+       }
+    }
+    data->file = f;
+    return 0;
 }
index 88bf6201171f5a97698b1dfa3097c0c915417f43..633e9e1dfae3ea6cd4653fb007d9104758171ef5 100644 (file)
@@ -199,12 +199,10 @@ krb5_scc_read_keyblock(context, id, keyblock)
      kret = krb5_scc_read_ui_2(context, id, &ui2);
      keyblock->keytype = ui2;
      CHECK(kret);
-     if ((data->version == KRB5_SCC_FVNO_1) ||
-        (data->version == KRB5_SCC_FVNO_2))
-            keyblock->etype = ETYPE_UNKNOWN;
-     else {
+     if (data->version == KRB5_SCC_FVNO_3) {
+               /* This works because the old etype is the same as the new keytype. */
             kret = krb5_scc_read_ui_2(context, id, &ui2);
-            keyblock->etype = ui2;
+            keyblock->keytype = ui2;
             CHECK(kret);
      }
 
index 9226bb1f6e545c982377b3117a8b7250d23bf325..4347b5e2347ac62fb3d5b7af273246d726e785f6 100644 (file)
@@ -150,9 +150,8 @@ krb5_scc_store_keyblock(context, id, keyblock)
 
      ret = krb5_scc_store_ui_2(context, id, keyblock->keytype);
      CHECK(ret);
-     if ((data->version != KRB5_SCC_FVNO_1) &&
-        (data->version != KRB5_SCC_FVNO_2)) {
-        ret = krb5_scc_store_ui_2(context, id, keyblock->etype);
+     if (data->version == KRB5_SCC_FVNO_3) {
+        ret = krb5_scc_store_ui_2(context, id, keyblock->keytype);
         CHECK(ret);
      }
      ret = krb5_scc_store_int32(context, id, keyblock->length);