better error codes & error checking
authorJohn Kohl <jtkohl@mit.edu>
Tue, 3 Jul 1990 15:43:18 +0000 (15:43 +0000)
committerJohn Kohl <jtkohl@mit.edu>
Tue, 3 Jul 1990 15:43:18 +0000 (15:43 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@1037 dc483132-0cff-0310-8789-dd5450dbe970

13 files changed:
src/lib/krb5/ccache/file/fcc_close.c
src/lib/krb5/ccache/file/fcc_destry.c
src/lib/krb5/ccache/file/fcc_gennew.c
src/lib/krb5/ccache/file/fcc_gprin.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_sflags.c
src/lib/krb5/ccache/file/fcc_sseq.c
src/lib/krb5/ccache/file/fcc_store.c
src/lib/krb5/ccache/file/fcc_test.c
src/lib/krb5/ccache/file/fcc_write.c

index 3f71b8777e7ee9f3ebc036866ad05a50a5087247..ce2fdb79123c1cae9efd714bf72fc2dc5f0e8de1 100644 (file)
@@ -30,13 +30,20 @@ krb5_error_code
 krb5_fcc_close(id)
    krb5_ccache id;
 {
+     register int closeval = KRB5_OK;
+
      if (OPENCLOSE(id)) {
-        close(((krb5_fcc_data *) id->data)->fd);
+        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;
+                
      }
      xfree(((krb5_fcc_data *) id->data)->filename);
      xfree(((krb5_fcc_data *) id->data));
      xfree(id);
 
-     return KRB5_OK;
+     return closeval;
 }
index 3c2d3b9a36c450d92fde435f2f2ac7d4ccfca04e..2df010919cb04d2962b3bf973811baedd6e61296 100644 (file)
@@ -31,38 +31,65 @@ krb5_error_code krb5_fcc_destroy(id)
      struct stat buf;
      unsigned long size;
      char zeros[BUFSIZ];
-     int ret, i;
+     register int ret, i;
      
      if (OPENCLOSE(id)) {
          ret = open(((krb5_fcc_data *) id->data)->filename, O_RDWR, 0);
          if (ret < 0)
-              return errno;
+              return krb5_fcc_interpret(errno);
          ((krb5_fcc_data *) id->data)->fd = ret;
      }
      else
          lseek(((krb5_fcc_data *) id->data)->fd, 0, L_SET);
 
      ret = unlink(((krb5_fcc_data *) id->data)->filename);
-     if (ret < 0)
-        return errno;
+     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;
+        }
+        return ret;
+     }
      
      ret = fstat(((krb5_fcc_data *) id->data)->fd, &buf);
-     if (ret < 0)
-         return errno;
+     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;
+        }
+        return ret;
+     }
 
      /* XXX This may not be legal XXX */
      size = (unsigned long) buf.st_size;
 
      bzero(zeros, BUFSIZ);
      for (i=0; i < size / BUFSIZ; i++)
-         if (write(((krb5_fcc_data *) id->data)->fd, zeros, BUFSIZ) < 0)
-              return errno;
+         if (write(((krb5_fcc_data *) id->data)->fd, zeros, BUFSIZ) < 0) {
+             ret = krb5_fcc_interpret(errno);
+             if (OPENCLOSE(id)) {
+                 (void) close(((krb5_fcc_data *)id->data)->fd);
+                 ((krb5_fcc_data *) id->data)->fd = -1;
+             }
+             return ret;
+         }
 
-     if (write(((krb5_fcc_data *) id->data)->fd, zeros, size % BUFSIZ) < 0)
-         return errno;
+     if (write(((krb5_fcc_data *) id->data)->fd, zeros, size % BUFSIZ) < 0) {
+        ret = krb5_fcc_interpret(errno);
+        if (OPENCLOSE(id)) {
+            (void) close(((krb5_fcc_data *)id->data)->fd);
+            ((krb5_fcc_data *) id->data)->fd = -1;
+        }
+        return ret;
+     }
 
-     close(((krb5_fcc_data *) id->data)->fd);
+     ret = close(((krb5_fcc_data *) id->data)->fd);
      ((krb5_fcc_data *) id->data)->fd = -1;
 
-     return KRB5_OK;
+     if (ret)
+        ret = krb5_fcc_interpret(errno);
+
+     return ret;
 }
index 8db6419f88e3c994582ff1e4bd72b23ed85d0974..0da4ef63ef3fa1ed7bcca53b671bac43d2b254eb 100644 (file)
@@ -30,7 +30,7 @@ extern krb5_cc_ops krb5_fcc_ops;
  * The filled in krb5_ccache id.
  *
  * Errors:
- * KRB5_NOMEM - there was insufficient memory to allocate the
+ * KRB5_CC_NOMEM - there was insufficient memory to allocate the
  *             krb5_ccache.  id is undefined.
  * system errors (from open)
  */
@@ -45,7 +45,7 @@ krb5_fcc_generate_new (id)
      /* Allocate memory */
      lid = (krb5_ccache) malloc(sizeof(struct _krb5_ccache));
      if (lid == NULL)
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
 
      lid->ops = &krb5_fcc_ops;
 
@@ -55,7 +55,7 @@ krb5_fcc_generate_new (id)
      lid->data = (krb5_pointer) malloc(sizeof(krb5_fcc_data));
      if (lid->data == NULL) {
          xfree(lid);
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
      }
 
      ((krb5_fcc_data *) lid->data)->filename = (char *)
@@ -63,7 +63,7 @@ krb5_fcc_generate_new (id)
      if (((krb5_fcc_data *) lid->data)->filename == NULL) {
          xfree(((krb5_fcc_data *) lid->data));
          xfree(lid);
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
      }
 
      ((krb5_fcc_data *) lid->data)->flags = 0;
@@ -74,7 +74,7 @@ krb5_fcc_generate_new (id)
      /* Make sure the file name is reserved */
      ret = open(((krb5_fcc_data *) lid->data)->filename, O_CREAT | O_EXCL, 0);
      if (ret == -1)
-         return errno;
+         return krb5_fcc_interpret(errno);
      else {
          /* Ignore user's umask, set mode = 0600 */
          fchmod(ret, S_IREAD | S_IWRITE);
index a95409b52da1c867637c1330d88641bdc0ff137f..869bf69f777dd10f4e4c085829b885b8e94317a7 100644 (file)
@@ -28,7 +28,7 @@ static char fcc_gprinc_c[] = "$Id$";
  *
  * Errors:
  * system errors
- * KRB5_NOMEM
+ * KRB5_CC_NOMEM
  */
 krb5_error_code
 krb5_fcc_get_principal(id, princ)
index 4c5fba3500662a93504f65c9ee3d7db49e69f3ab..0303a04609c35c4d4267db7aec27fad13c15f3c3 100644 (file)
@@ -56,15 +56,21 @@ krb5_fcc_next_cred(id, cursor, creds)
      if (OPENCLOSE(id)) {
          ret = open(((krb5_fcc_data *) id->data)->filename, O_RDONLY, 0);
          if (ret < 0)
-              return errno;
+              return krb5_fcc_interpret(errno);
          ((krb5_fcc_data *) id->data)->fd = ret;
      }
 
      fcursor = (krb5_fcc_cursor *) *cursor;
 
      ret = lseek(((krb5_fcc_data *) id->data)->fd, fcursor->pos, L_SET);
-     if (ret < 0)
-         return errno;
+     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;
+        }
+        return ret;
+     }
 
      kret = krb5_fcc_read_principal(id, &creds->client);
      TCHECK(kret);
@@ -88,11 +94,11 @@ krb5_fcc_next_cred(id, cursor, creds)
      fcursor->pos = tell(((krb5_fcc_data *) id->data)->fd);
      cursor = (krb5_cc_cursor *) fcursor;
 
+lose:
      if (OPENCLOSE(id)) {
          close(((krb5_fcc_data *) id->data)->fd);
          ((krb5_fcc_data *) id->data)->fd = -1;
      }
-lose:
      if (kret != KRB5_OK) {
         if (creds->client)
             krb5_free_principal(creds->client);
index 6947ae680bc989a8e1013a8daa335198fc6b8f24..f69a368386199b5dfde7e3c7dec546e8cdbc6d68 100644 (file)
@@ -25,7 +25,7 @@ static char fcc_read_c[] = "$Id$";
  * Reads len bytes from the cache id, storing them in buf.
  *
  * Errors:
- * KRB5_EOF - there were not len bytes available
+ * KRB5_CC_END - there were not len bytes available
  * system errors (read)
  */
 krb5_error_code
@@ -38,9 +38,9 @@ krb5_fcc_read(id, buf, len)
 
      ret = read(((krb5_fcc_data *) id->data)->fd, (char *) buf, len);
      if (ret == -1)
-         return errno;
+         return krb5_fcc_interpret(errno);
      else if (ret != len)
-         return KRB5_EOF;
+         return KRB5_CC_END;
      else
          return KRB5_OK;
 }
@@ -59,7 +59,7 @@ krb5_fcc_read(id, buf, len)
  *
  * Errors:
  * system errors (read errors)
- * KRB5_NOMEM
+ * KRB5_CC_NOMEM
  */
 
 krb5_error_code
@@ -89,13 +89,13 @@ krb5_fcc_read_principal(id, princ)
       */
      *princ = (krb5_principal) calloc(length+1, sizeof(krb5_data *));
      if (*princ == NULL)
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
 
      for (i=0; i < length; i++) {
          (*princ)[i] = (krb5_data *) malloc(sizeof(krb5_data));
          if ((*princ)[i] == NULL) {
              krb5_free_principal(*princ);
-             return KRB5_NOMEM;
+             return KRB5_CC_NOMEM;
           }      
          kret = krb5_fcc_read_data(id, (*princ)[i]);
          CHECK(kret);
@@ -128,13 +128,13 @@ krb5_fcc_read_addrs(id, addrs)
       */
      *addrs = (krb5_address **) calloc(length+1, sizeof(krb5_address *));
      if (*addrs == NULL)
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
 
      for (i=0; i < length; i++) {
          (*addrs)[i] = (krb5_address *) malloc(sizeof(krb5_address));
          if ((*addrs)[i] == NULL) {
              krb5_free_address(*addrs);
-             return KRB5_NOMEM;
+             return KRB5_CC_NOMEM;
          }       
          kret = krb5_fcc_read_addr(id, (*addrs)[i]);
          CHECK(kret);
@@ -164,18 +164,18 @@ krb5_fcc_read_keyblock(id, keyblock)
      keyblock->contents = (unsigned char *) malloc(keyblock->length*
                                                   sizeof(krb5_octet));
      if (keyblock->contents == NULL)
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
      
      ret = read(((krb5_fcc_data *) id->data)->fd, (char *)keyblock->contents,
                (keyblock->length)*sizeof(krb5_octet));
 
      if (ret < 0) {
         xfree(keyblock->contents);
-        return errno;
+        return krb5_fcc_interpret(errno);
      }
      if (ret != (keyblock->length)*sizeof(krb5_octet)) {
         xfree(keyblock->contents);
-        return KRB5_EOF;
+        return KRB5_CC_END;
      }
 
      return KRB5_OK;
@@ -200,17 +200,17 @@ krb5_fcc_read_data(id, data)
 
      data->data = (char *) malloc(data->length);
      if (data->data == NULL)
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
 
      ret = read(((krb5_fcc_data *) id->data)->fd, (char *)data->data,
                data->length);
      if (ret == -1) {
         xfree(data->data);
-        return errno;
+        return krb5_fcc_interpret(errno);
      }
      if (ret != data->length) {
         xfree(data->data);
-        return KRB5_EOF;
+        return KRB5_CC_END;
      }
      return KRB5_OK;
  errout:
@@ -237,17 +237,17 @@ krb5_fcc_read_addr(id, addr)
 
      addr->contents = (krb5_octet *) malloc(addr->length);
      if (addr->contents == NULL)
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
 
      ret = read(((krb5_fcc_data *) id->data)->fd, (char *)addr->contents,
                (addr->length)*sizeof(krb5_octet));
      if (ret == -1) {
          xfree(addr->contents);
-         return errno;
+         return krb5_fcc_interpret(errno);
      }
      if (ret != (addr->length)*sizeof(krb5_octet)) {
          xfree(addr->contents);
-         return KRB5_EOF;
+         return KRB5_CC_END;
      }
      return KRB5_OK;
  errout:
index 620ce609ea27da8dc8363ea9e28b09a1af514447..4dd5a520b0e5e923c044fb6b9bb3bf199fc5c990 100644 (file)
@@ -35,7 +35,7 @@ extern krb5_cc_ops krb5_fcc_ops;
  * A filled in krb5_ccache structure "id".
  *
  * Errors:
- * KRB5_NOMEM - there was insufficient memory to allocate the
+ * KRB5_CC_NOMEM - there was insufficient memory to allocate the
  *             krb5_ccache.  id is undefined.
  * permission errors
  */
@@ -48,14 +48,14 @@ krb5_fcc_resolve (id, residual)
      
      lid = (krb5_ccache) malloc(sizeof(struct _krb5_ccache));
      if (lid == NULL)
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
 
      lid->ops = &krb5_fcc_ops;
      
      lid->data = (krb5_pointer) malloc(sizeof(krb5_fcc_data));
      if (lid->data == NULL) {
          xfree(lid);
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
      }
 
      ((krb5_fcc_data *) lid->data)->filename = (char *)
@@ -64,7 +64,7 @@ krb5_fcc_resolve (id, residual)
      if (((krb5_fcc_data *) lid->data)->filename == NULL) {
          xfree(((krb5_fcc_data *) lid->data));
          xfree(lid);
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
      }
 
      /* default to open/close on every trn */
index 3a9c701d72e2e71101c3fed1dae921260aa668e9..a2773f3e202ee4bcdd1d99ad34dfd9f368a29cc0 100644 (file)
@@ -45,7 +45,7 @@ static krb5_boolean standard_fields_match
  * Errors:
  * system errors
  * permission errors
- * KRB5_NOMEM
+ * KRB5_CC_NOMEM
  */
 krb5_error_code
 krb5_fcc_retrieve(id, whichfields, mcreds, creds)
@@ -94,7 +94,7 @@ krb5_fcc_retrieve(id, whichfields, mcreds, creds)
 
      /* If we get here, a match wasn't found */
      krb5_fcc_end_seq_get(id, &cursor);
-     return KRB5_NOTFOUND;
+     return KRB5_CC_NOTFOUND;
 }
 
 static krb5_boolean
index c0b23e34011089361eadef9494b234314526e2da..24e38175ffd09ec2c1bc29c89b17728966900974 100644 (file)
@@ -49,7 +49,7 @@ krb5_fcc_set_flags(id, flags)
        if (OPENCLOSE(id)) {
            ret = open(((krb5_fcc_data *) id->data)->filename, O_RDONLY, 0);
            if (ret < 0)
-               return errno;
+               return krb5_fcc_interpret(errno);
            ((krb5_fcc_data *) id->data)->fd = ret;
        }
     }
index ce66421c8206617b412fb7f0aa1f3c7eb4941282..0ff5a66ecabdc950f1512d1469e8fa51967b919b 100644 (file)
@@ -28,7 +28,7 @@ static char fcc_sseq_c[] = "$Id$";
  * of the final krb5_fcc_end_seq_get, the results are undefined.
  *
  * Errors:
- * KRB5_NOMEM
+ * KRB5_CC_NOMEM
  * system errors
  */
 krb5_error_code
@@ -41,13 +41,13 @@ krb5_fcc_start_seq_get(id, cursor)
      
      fcursor = (krb5_fcc_cursor *) malloc(sizeof(krb5_fcc_cursor));
      if (fcursor == NULL)
-         return KRB5_NOMEM;
+         return KRB5_CC_NOMEM;
 
      /* Make sure we start reading right after the primary principal */
      if (OPENCLOSE(id)) {
          ret = open(((krb5_fcc_data *) id->data)->filename, O_RDONLY, 0);
          if (ret < 0)
-              return errno;
+              return krb5_fcc_interpret(errno);
          ((krb5_fcc_data *) id->data)->fd = ret;
      }
      else
index 7141f5221f7a5d0875fe05ea39e13a29bb2af5ae..e6cd28305c866ef1993ea6e9c8bc71e044277938 100644 (file)
@@ -44,13 +44,13 @@ krb5_fcc_store(id, creds)
          ret = open(((krb5_fcc_data *) id->data)->filename,
                     O_RDWR | O_APPEND, 0);
          if (ret < 0)
-              return errno;
+              return krb5_fcc_interpret(errno);
          ((krb5_fcc_data *) id->data)->fd = ret;
      }
 
      ret = lseek(((krb5_fcc_data *) id->data)->fd, 0, L_XTND);
      if (ret < 0)
-         return errno;
+         return krb5_fcc_interpret(errno);
 
      ret = krb5_fcc_store_principal(id, creds->client);
      TCHECK(ret);
index a8f7f512037a24532190e4f949c40e9278fbf808..0b866f5de4bba601ce9507ccf08a1e1e7455c66a 100644 (file)
@@ -97,7 +97,7 @@ void fcc_test()
      kret = krb5_fcc_start_seq_get(id, &cursor);
      CHECK(kret, "start_seq_get");
      kret = 0;
-     while (kret != KRB5_EOF) {
+     while (kret != KRB5_CC_END) {
          printf("Calling next_cred\n");
          kret = krb5_fcc_next_cred(id, &cursor, &creds);
          CHECK(kret, "next_cred");
index 7181ae7b669ef6f36bdb91194a6fd861051d70b7..0c7121c429683be829a73216635b5a17d04f285e 100644 (file)
@@ -40,7 +40,7 @@ krb5_fcc_write(id, buf, len)
 
      ret = write(((krb5_fcc_data *)id->data)->fd, (char *) buf, len);
      if (ret < 0)
-         return errno;
+         return krb5_fcc_interpret(errno);
      return KRB5_OK;
 }
 
@@ -120,9 +120,9 @@ krb5_fcc_store_keyblock(id, keyblock)
      ret = write(((krb5_fcc_data *) id->data)->fd, (char *)keyblock->contents,
                 (keyblock->length)*sizeof(krb5_octet));
      if (ret < 0)
-         return errno;
+         return krb5_fcc_interpret(errno);
      if (ret != (keyblock->length)*sizeof(krb5_octet))
-        return KRB5_EOF;
+        return KRB5_CC_END;
      
      return KRB5_OK;
 }
@@ -141,9 +141,9 @@ krb5_fcc_store_addr(id, addr)
      ret = write(((krb5_fcc_data *) id->data)->fd, (char *)addr->contents,
                 (addr->length)*sizeof(krb5_octet));
      if (ret < 0)
-         return errno;
+         return krb5_fcc_interpret(errno);
      if (ret != (addr->length)*sizeof(krb5_octet))
-        return KRB5_EOF;
+        return KRB5_CC_END;
      return KRB5_OK;
 }
 
@@ -159,7 +159,7 @@ krb5_fcc_store_data(id, data)
      CHECK(ret);
      ret = write(((krb5_fcc_data *) id->data)->fd, data->data, data->length);
      if (ret == -1)
-         return errno;
+         return krb5_fcc_interpret(errno);
 
      return KRB5_OK;
 }