MAYBE_OPEN/MAYBE_CLOSE changes
authorJohn Kohl <jtkohl@mit.edu>
Tue, 12 Feb 1991 14:11:26 +0000 (14:11 +0000)
committerJohn Kohl <jtkohl@mit.edu>
Tue, 12 Feb 1991 14:11:26 +0000 (14:11 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@1674 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/ccache/file/fcc_close.c
src/lib/krb5/ccache/file/fcc_eseq.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_sflags.c
src/lib/krb5/ccache/file/fcc_store.c

index eadab4ad3dcb408bbe14a8d6ba8c2836f7344773..dd3bc1c8252db9207fc38710ec90819ec00138b8 100644 (file)
@@ -2,7 +2,7 @@
  * $Source$
  * $Author$
  *
- * Copyright 1990 by the Massachusetts Institute of Technology.
+ * Copyright 1990,1991 by the Massachusetts Institute of Technology.
  *
  * For copying and distribution information, please see the file
  * <krb5/copyright.h>.
@@ -32,15 +32,8 @@ krb5_fcc_close(id)
 {
      register int closeval = KRB5_OK;
 
-     if (OPENCLOSE(id)) {
-        closeval = close(((krb5_fcc_data *) id->data)->fd);
-        ((krb5_fcc_data *) id->data)->fd = -1;
-        if (closeval == -1) {
-            closeval = krb5_fcc_interpret(errno);
-        } else
-            closeval = KRB5_OK;
-                
-     }
+     MAYBE_CLOSE(id, closeval);
+
      xfree(((krb5_fcc_data *) id->data)->filename);
      xfree(((krb5_fcc_data *) id->data));
      xfree(id);
index b65ed25ffc9e8f0ddb88f88764dada29f4bcbfaa..700d21d72355e36648fe0c2aa20a974fe49abf60 100644 (file)
@@ -2,7 +2,7 @@
  * $Source$
  * $Author$
  *
- * Copyright 1990 by the Massachusetts Institute of Technology.
+ * Copyright 1990,1991 by the Massachusetts Institute of Technology.
  *
  * For copying and distribution information, please see the file
  * <krb5/copyright.h>.
@@ -35,14 +35,15 @@ krb5_fcc_end_seq_get(id, cursor)
    krb5_ccache id;
    krb5_cc_cursor *cursor;
 {
-     if (OPENCLOSE(id)) {
-         close(((krb5_fcc_data *) id->data)->fd);
-         ((krb5_fcc_data *) id->data)->fd = -1;
-     }
-
+     int kret = KRB5_OK;
+     
+     /* don't close; it may be left open by the caller,
+       and if not, fcc_start_seq_get and/or fcc_next_cred will do the
+       MAYBE_CLOSE.
+     MAYBE_CLOSE(id, kret); */
      xfree((krb5_fcc_cursor *) *cursor);
 
-     return KRB5_OK;
+     return kret;
 }
 
 
index 209dad1576234d6f024cd845c27cede60319b0d4..5d0334cee0e1af1a66cf0c011f647c7e1207712c 100644 (file)
@@ -2,7 +2,7 @@
  * $Source$
  * $Author$
  *
- * Copyright 1990 by the Massachusetts Institute of Technology.
+ * Copyright 1990,1991 by the Massachusetts Institute of Technology.
  *
  * For copying and distribution information, please see the file
  * <krb5/copyright.h>.
@@ -35,23 +35,15 @@ krb5_fcc_get_principal(id, princ)
    krb5_ccache id;
    krb5_principal *princ;
 {
-     krb5_error_code kret;
+     krb5_error_code kret = KRB5_OK;
 
-     if (OPENCLOSE(id)) {
-         kret = open(((krb5_fcc_data *) id->data)->filename, O_RDONLY, 0);
-         if (kret < 0)
-              return krb5_fcc_interpret(errno);
-         ((krb5_fcc_data *) id->data)->fd = kret;
-     }
-     else
-         lseek(((krb5_fcc_data *) id->data)->fd, 0, L_SET);
+     MAYBE_OPEN(id, FCC_OPEN_RDONLY);
+     /* make sure we're beyond the vno */
+     lseek(((krb5_fcc_data *) id->data)->fd, sizeof(krb5_int16), L_SET);
 
      kret = krb5_fcc_read_principal(id, princ);
 
-     if (OPENCLOSE(id)) {
-         close(((krb5_fcc_data *) id->data)->fd);
-         ((krb5_fcc_data *) id->data)->fd = -1;
-     }
+     MAYBE_CLOSE(id, kret);
      return kret;
 }
 
index 6fd6e07f1c2208c90947eeab1c6cf00f0c8e0aae..640165e97fe536f80a481ec92e08e73d7b0ff7bd 100644 (file)
@@ -2,7 +2,7 @@
  * $Source$
  * $Author$
  *
- * Copyright 1990 by the Massachusetts Institute of Technology.
+ * Copyright 1990,1991 by the Massachusetts Institute of Technology.
  *
  * For copying and distribution information, please see the file
  * <krb5/copyright.h>.
@@ -35,30 +35,20 @@ krb5_fcc_initialize(id, princ)
    krb5_ccache id;
    krb5_principal princ;
 {
-     int ret;
+     int ret = KRB5_OK;
 
-     ret = open(((krb5_fcc_data *) id->data)->filename, O_CREAT | O_TRUNC |
-               O_RDWR, 0);
-     if (ret < 0)
-         return krb5_fcc_interpret(errno);
-     ((krb5_fcc_data *) id->data)->fd = ret;
+     MAYBE_OPEN(id, FCC_OPEN_AND_ERASE);
 
      ret = fchmod(((krb5_fcc_data *) id->data)->fd, S_IREAD | S_IWRITE);
      if (ret == -1) {
         ret = krb5_fcc_interpret(errno);
-        if (OPENCLOSE(id)) {
-            close(((krb5_fcc_data *)id->data)->fd);
-            ((krb5_fcc_data *) id->data)->fd = -1;
-        }
+        MAYBE_CLOSE(id, ret);
         return ret;
      }
      krb5_fcc_store_principal(id, princ);
 
-     if (OPENCLOSE(id)) {
-         close(((krb5_fcc_data *) id->data)->fd);
-         ((krb5_fcc_data *) id->data)->fd = -1;
-     }
-     return KRB5_OK;
+     MAYBE_CLOSE(id, ret);
+     return ret;
 }
 
 
index 9208701190ef9e2573d69fc0e3992d91096cee1d..d743961c805ce2e464c024fffba02162b703b21a 100644 (file)
@@ -2,7 +2,7 @@
  * $Source$
  * $Author$
  *
- * Copyright 1990 by the Massachusetts Institute of Technology.
+ * Copyright 1990,1991 by the Massachusetts Institute of Technology.
  *
  * For copying and distribution information, please see the file
  * <krb5/copyright.h>.
@@ -53,22 +53,14 @@ krb5_fcc_next_cred(id, cursor, creds)
 
      memset((char *)creds, 0, sizeof(*creds));
 
-     if (OPENCLOSE(id)) {
-         ret = open(((krb5_fcc_data *) id->data)->filename, O_RDONLY, 0);
-         if (ret < 0)
-              return krb5_fcc_interpret(errno);
-         ((krb5_fcc_data *) id->data)->fd = ret;
-     }
+     MAYBE_OPEN(id, FCC_OPEN_RDONLY);
 
      fcursor = (krb5_fcc_cursor *) *cursor;
 
      ret = lseek(((krb5_fcc_data *) id->data)->fd, fcursor->pos, L_SET);
      if (ret < 0) {
         ret = krb5_fcc_interpret(errno);
-        if (OPENCLOSE(id)) {
-            (void) close(((krb5_fcc_data *)id->data)->fd);
-            ((krb5_fcc_data *)id->data)->fd = -1;
-        }
+        MAYBE_CLOSE(id, ret);
         return ret;
      }
 
@@ -97,10 +89,8 @@ krb5_fcc_next_cred(id, cursor, creds)
      cursor = (krb5_cc_cursor *) fcursor;
 
 lose:
-     if (OPENCLOSE(id)) {
-         close(((krb5_fcc_data *) id->data)->fd);
-         ((krb5_fcc_data *) id->data)->fd = -1;
-     }
+     MAYBE_CLOSE(id, kret);            /* won't overwrite kret
+                                          if already set */
      if (kret != KRB5_OK) {
         if (creds->client)
             krb5_free_principal(creds->client);
index 2b04eaddfa9ca250b1c563fd81cbc9a829cb8ab6..20b594a96164a02b9d176a6c24f8daac8cb4b505 100644 (file)
@@ -2,7 +2,7 @@
  * $Source$
  * $Author$
  *
- * Copyright 1990 by the Massachusetts Institute of Technology.
+ * Copyright 1990,1991 by the Massachusetts Institute of Technology.
  *
  * For copying and distribution information, please see the file
  * <krb5/copyright.h>.
@@ -34,24 +34,16 @@ krb5_fcc_set_flags(id, flags)
    krb5_ccache id;
    krb5_flags flags;
 {
-    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;
+           (void) krb5_fcc_close_file (id);
        }
     } 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 krb5_fcc_interpret(errno);
-           ((krb5_fcc_data *) id->data)->fd = ret;
-       }
+       MAYBE_OPEN(id, FCC_OPEN_RDONLY);
     }
 
     ((krb5_fcc_data *) id->data)->flags = flags;
index 7f31a30e65928b2aa0b27a20a94ac944ebebd2c2..336946281b2367fb837b9631a6457e2ce7ff9d48 100644 (file)
@@ -2,7 +2,7 @@
  * $Source$
  * $Author$
  *
- * Copyright 1990 by the Massachusetts Institute of Technology.
+ * Copyright 1990,1991 by the Massachusetts Institute of Technology.
  *
  * For copying and distribution information, please see the file
  * <krb5/copyright.h>.
@@ -39,18 +39,14 @@ krb5_fcc_store(id, creds)
 #define TCHECK(ret) if (ret != KRB5_OK) goto lose;
      krb5_error_code ret;
 
-     /* Make sure we are writing to the end of the file */
-     if (OPENCLOSE(id)) {
-         ret = open(((krb5_fcc_data *) id->data)->filename,
-                    O_RDWR | O_APPEND, 0);
-         if (ret < 0)
-              return krb5_fcc_interpret(errno);
-         ((krb5_fcc_data *) id->data)->fd = ret;
-     }
+     MAYBE_OPEN(id, FCC_OPEN_RDWR);
 
+     /* Make sure we are writing to the end of the file */
      ret = lseek(((krb5_fcc_data *) id->data)->fd, 0, L_XTND);
-     if (ret < 0)
+     if (ret < 0) {
+         MAYBE_CLOSE_IGNORE(id);
          return krb5_fcc_interpret(errno);
+     }
 
      ret = krb5_fcc_store_principal(id, creds->client);
      TCHECK(ret);
@@ -74,11 +70,7 @@ krb5_fcc_store(id, creds)
      TCHECK(ret);
 
 lose:
-          
-     if (OPENCLOSE(id)) {
-         close(((krb5_fcc_data *) id->data)->fd);
-         ((krb5_fcc_data *) id->data)->fd = -1;
-     }
+     MAYBE_CLOSE(id, ret);
      return ret;
 #undef TCHECK
 }