heimdal_build: split heimdal/lib/asn1 file lists
[metze/samba/wip.git] / source / heimdal / lib / krb5 / keytab_krb4.c
index 1a83faca57c9a559a8fba1254438486cfc366234..32bb00141ab960a754e3d2f781bb112808f9820c 100644 (file)
@@ -33,7 +33,7 @@
 
 #include "krb5_locl.h"
 
-RCSID("$Id: keytab_krb4.c,v 1.13 2005/05/19 04:13:18 lha Exp $");
+RCSID("$Id: keytab_krb4.c 22532 2008-01-27 11:59:18Z lha $");
 
 struct krb4_kt_data {
     char *filename;
@@ -134,11 +134,17 @@ krb4_kt_start_seq_get_int (krb5_context context,
     if (c->fd < 0) {
        ret = errno;
        free (ed);
-       krb5_set_error_string(context, "open(%s): %s", d->filename,
-                             strerror(ret));
+       krb5_set_error_string(context, "keytab krb5 open %s failed: %s", 
+                             d->filename, strerror(ret));
        return ret;
     }
     c->sp = krb5_storage_from_fd(c->fd);
+    if(c->sp == NULL) {
+       close(c->fd);
+       free(ed);
+       krb5_set_error_string(context, "malloc: out of memory");
+       return ENOMEM;
+    }
     krb5_storage_set_eof_code(c->sp, KRB5_KT_END);
     return 0;
 }
@@ -302,11 +308,11 @@ krb4_kt_add_entry (krb5_context context,
        }
     }
     sp = krb5_storage_from_fd(fd);
-    krb5_storage_set_eof_code(sp, KRB5_KT_END);
     if(sp == NULL) {
        close(fd);
        return ENOMEM;
     }
+    krb5_storage_set_eof_code(sp, KRB5_KT_END);
     ret = krb4_store_keytab_entry(context, entry, sp);
     krb5_storage_free(sp);
     if(close (fd) < 0)
@@ -316,8 +322,8 @@ krb4_kt_add_entry (krb5_context context,
 
 static krb5_error_code
 krb4_kt_remove_entry(krb5_context context,
-                krb5_keytab id,
-                krb5_keytab_entry *entry)
+                    krb5_keytab id,
+                    krb5_keytab_entry *entry)
 {
     struct krb4_kt_data *d = id->data;
     krb5_error_code ret;
@@ -364,8 +370,11 @@ krb4_kt_remove_entry(krb5_context context,
        if(fd < 0) {
            memset(data.data, 0, data.length);
            krb5_data_free(&data);
-           if(errno == EACCES || errno == EROFS) 
+           if(errno == EACCES || errno == EROFS) {
+               krb5_set_error_string(context, "failed to open %s for writing",
+                                     d->filename);
                return KRB5_KT_NOWRITE;
+           }
            return errno;
        }
 
@@ -373,14 +382,16 @@ krb4_kt_remove_entry(krb5_context context,
            memset(data.data, 0, data.length);
            krb5_data_free(&data);
            close(fd);
-           krb5_set_error_string(context, "failed writing to \"%s\"", d->filename);
+           krb5_set_error_string(context, "failed writing to file %s", 
+                                 d->filename);
            return errno;
        }
        memset(data.data, 0, data.length);
        if(fstat(fd, &st) < 0) {
            krb5_data_free(&data);
            close(fd);
-           krb5_set_error_string(context, "failed getting size of \"%s\"", d->filename);
+           krb5_set_error_string(context, "failed getting size of file %s", 
+                                 d->filename);
            return errno;
        }
        st.st_size -= data.length;
@@ -391,7 +402,8 @@ krb4_kt_remove_entry(krb5_context context,
            if(n <= 0) {
                krb5_data_free(&data);
                close(fd);
-               krb5_set_error_string(context, "failed writing to \"%s\"", d->filename);
+               krb5_set_error_string(context, "failed writing to file %s",
+                                     d->filename);
                return errno;
                
            }
@@ -400,17 +412,20 @@ krb4_kt_remove_entry(krb5_context context,
        if(ftruncate(fd, data.length) < 0) {
            krb5_data_free(&data);
            close(fd);
-           krb5_set_error_string(context, "failed truncating \"%s\"", d->filename);
+           krb5_set_error_string(context, "failed truncating file %s",
+                                 d->filename);
            return errno;
        }
        krb5_data_free(&data);
        if(close(fd) < 0) {
-           krb5_set_error_string(context, "error closing \"%s\"", d->filename);
+           krb5_set_error_string(context, "error closing %s",
+                                 d->filename);
            return errno;
        }
        return 0;
     } else {
        krb5_storage_free(sp);
+       krb5_set_error_string(context, "Keytab entry not found");
        return KRB5_KT_NOTFOUND;
     }
 }