fix openclose stuff
authorJohn Kohl <jtkohl@mit.edu>
Tue, 1 May 1990 17:07:11 +0000 (17:07 +0000)
committerJohn Kohl <jtkohl@mit.edu>
Tue, 1 May 1990 17:07:11 +0000 (17:07 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@650 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/ccache/file/fcc_init.c
src/lib/krb5/ccache/file/fcc_nseq.c
src/lib/krb5/ccache/file/fcc_sflags.c
src/lib/krb5/ccache/file/fcc_sseq.c
src/lib/krb5/ccache/file/fcc_store.c

index a135378d501533800657b505ebeff3194c797459..71ee8cea2ddd7c8f6d4e3d45f9d8692cbc94c901 100644 (file)
@@ -11,7 +11,7 @@
  */
 
 #if !defined(lint) && !defined(SABER)
-static char fcc_resolve_c[] = "$Id$";
+static char fcc_init_c[] = "$Id$";
 #endif /* !lint && !SABER */
 
 #include <krb5/copyright.h>
@@ -49,9 +49,10 @@ krb5_fcc_initialize(id, princ)
 
      krb5_fcc_store_principal(id, princ);
 
-     if (OPENCLOSE(id))
+     if (OPENCLOSE(id)) {
          close(((krb5_fcc_data *) id->data)->fd);
-
+         ((krb5_fcc_data *) id->data)->fd = -1;
+     }
      return KRB5_OK;
 }
 
index 4ed792d4dcfcfb28db0779f7fc1f942d975253b5..a6dc1b7f4623325b538e4052860eda709f7d0f4c 100644 (file)
@@ -84,9 +84,10 @@ krb5_fcc_next_cred(id, cursor, creds)
      fcursor->pos = tell(((krb5_fcc_data *) id->data)->fd);
      cursor = (krb5_cc_cursor *) fcursor;
 
-     if (OPENCLOSE(id))
+     if (OPENCLOSE(id)) {
          close(((krb5_fcc_data *) id->data)->fd);
-
+         ((krb5_fcc_data *) id->data)->fd = -1;
+     }
 lose:
      
      return kret;
index 3fea711c99316d20d0a558fb686415748b9bb22a..f27d7b9a5a857fee95ead87a69f052d14e75c1e1 100644 (file)
@@ -34,8 +34,27 @@ krb5_fcc_set_flags(id, flags)
    krb5_ccache id;
    krb5_flags flags;
 {
-     /* XXX This should check for illegal combinations, if any.. */
-     ((krb5_fcc_data *) id->data)->flags = flags;
-     return KRB5_OK;
+    krb5_error_code ret;
+
+    /* XXX This should check for illegal combinations, if any.. */
+    if (flags & KRB5_TC_OPENCLOSE) {
+       /* asking to turn on OPENCLOSE mode */
+       if (!OPENCLOSE(id)) {
+           (void) close(((krb5_fcc_data *) id->data)->fd);
+           ((krb5_fcc_data *) id->data)->fd = -1;
+       }
+    } else {
+       /* asking to turn off OPENCLOSE mode, meaning it must be
+          left open.  We open if it's not yet open */
+       if (OPENCLOSE(id)) {
+           ret = open(((krb5_fcc_data *) id->data)->filename, O_RDONLY, 0);
+           if (ret < 0)
+               return errno;
+           ((krb5_fcc_data *) id->data)->fd = ret;
+       }
+    }
+
+    ((krb5_fcc_data *) id->data)->flags = flags;
+    return KRB5_OK;
 }
 
index 1fd1d04983e430174996548d105eaad66fd2b136..e0850596cab4f00da885e1b6335ac3d7c7eb8782 100644 (file)
@@ -57,8 +57,9 @@ krb5_fcc_start_seq_get(id, cursor)
      fcursor->pos = tell(((krb5_fcc_data *) id->data)->fd);
      *cursor = (krb5_cc_cursor) fcursor;
 
-     if (OPENCLOSE(id))
+     if (OPENCLOSE(id)) {
          close(((krb5_fcc_data *) id->data)->fd);
-
+         ((krb5_fcc_data *) id->data)->fd = -1;
+     }
      return KRB5_OK;
 }
index a98a3f9ed6a2fe00d29026374e6a88592ea2b245..6562b543b2784c6db0948c9d15afa6fc7098db65 100644 (file)
@@ -41,11 +41,11 @@ krb5_fcc_store(id, creds)
 
      /* Make sure we are writing to the end of the file */
      if (OPENCLOSE(id)) {
-         ((krb5_fcc_data *) id->data)->fd = open(((krb5_fcc_data *) id->data)
-                                                 ->filename,
-                                                 O_RDWR | O_APPEND, 0);
+         ret = open(((krb5_fcc_data *) id->data)->filename,
+                    O_RDWR | O_APPEND, 0);
          if (((krb5_fcc_data *) id->data)->fd < 0)
               return errno;
+         ((krb5_fcc_data *) id->data)->fd = ret;
      }
 
      ret = lseek(((krb5_fcc_data *) id->data)->fd, 0, L_XTND);
@@ -71,9 +71,10 @@ krb5_fcc_store(id, creds)
 
 lose:
           
-     if (OPENCLOSE(id))
+     if (OPENCLOSE(id)) {
          close(((krb5_fcc_data *) id->data)->fd);
-
+         ((krb5_fcc_data *) id->data)->fd = -1;
+     }
      return ret;
 #undef TCHECK
 }