better error strings for the keytab fetching functions

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22532 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2008-01-27 11:59:18 +00:00
parent 817fb0a221
commit 34faa9fe6e
4 changed files with 25 additions and 14 deletions

View File

@@ -337,8 +337,9 @@ krb5_kt_get_entry(krb5_context context,
ret = krb5_kt_start_seq_get (context, id, &cursor); ret = krb5_kt_start_seq_get (context, id, &cursor);
if (ret) { if (ret) {
krb5_clear_error_string(context); /* This is needed for krb5_verify_init_creds, but keep error
return KRB5_KT_NOTFOUND; /* XXX i.e. file not found */ * string from previous error for the human. */
return KRB5_KT_NOTFOUND;
} }
entry->vno = 0; entry->vno = 0;

View File

@@ -334,8 +334,8 @@ fkt_start_seq_get_int(krb5_context context,
c->fd = open (d->filename, flags); c->fd = open (d->filename, flags);
if (c->fd < 0) { if (c->fd < 0) {
ret = errno; ret = errno;
krb5_set_error_string(context, "%s: %s", d->filename, krb5_set_error_string(context, "keytab %s open failed: %s",
strerror(ret)); d->filename, strerror(ret));
return ret; return ret;
} }
ret = _krb5_xlock(context, c->fd, exclusive, d->filename); ret = _krb5_xlock(context, c->fd, exclusive, d->filename);

View File

@@ -197,8 +197,8 @@ akf_start_seq_get(krb5_context context,
c->fd = open (d->filename, O_RDONLY|O_BINARY, 0600); c->fd = open (d->filename, O_RDONLY|O_BINARY, 0600);
if (c->fd < 0) { if (c->fd < 0) {
ret = errno; ret = errno;
krb5_set_error_string(context, "open(%s): %s", d->filename, krb5_set_error_string(context, "keytab afs keyfil open %s failed: %s",
strerror(ret)); d->filename, strerror(ret));
return ret; return ret;
} }

View File

@@ -134,14 +134,15 @@ krb4_kt_start_seq_get_int (krb5_context context,
if (c->fd < 0) { if (c->fd < 0) {
ret = errno; ret = errno;
free (ed); free (ed);
krb5_set_error_string(context, "open(%s): %s", d->filename, krb5_set_error_string(context, "keytab krb5 open %s failed: %s",
strerror(ret)); d->filename, strerror(ret));
return ret; return ret;
} }
c->sp = krb5_storage_from_fd(c->fd); c->sp = krb5_storage_from_fd(c->fd);
if(c->sp == NULL) { if(c->sp == NULL) {
close(c->fd); close(c->fd);
free(ed); free(ed);
krb5_set_error_string(context, "malloc: out of memory");
return ENOMEM; return ENOMEM;
} }
krb5_storage_set_eof_code(c->sp, KRB5_KT_END); krb5_storage_set_eof_code(c->sp, KRB5_KT_END);
@@ -369,8 +370,11 @@ krb4_kt_remove_entry(krb5_context context,
if(fd < 0) { if(fd < 0) {
memset(data.data, 0, data.length); memset(data.data, 0, data.length);
krb5_data_free(&data); 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 KRB5_KT_NOWRITE;
}
return errno; return errno;
} }
@@ -378,14 +382,16 @@ krb4_kt_remove_entry(krb5_context context,
memset(data.data, 0, data.length); memset(data.data, 0, data.length);
krb5_data_free(&data); krb5_data_free(&data);
close(fd); 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; return errno;
} }
memset(data.data, 0, data.length); memset(data.data, 0, data.length);
if(fstat(fd, &st) < 0) { if(fstat(fd, &st) < 0) {
krb5_data_free(&data); krb5_data_free(&data);
close(fd); 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; return errno;
} }
st.st_size -= data.length; st.st_size -= data.length;
@@ -396,7 +402,8 @@ krb4_kt_remove_entry(krb5_context context,
if(n <= 0) { if(n <= 0) {
krb5_data_free(&data); krb5_data_free(&data);
close(fd); 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; return errno;
} }
@@ -405,17 +412,20 @@ krb4_kt_remove_entry(krb5_context context,
if(ftruncate(fd, data.length) < 0) { if(ftruncate(fd, data.length) < 0) {
krb5_data_free(&data); krb5_data_free(&data);
close(fd); 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; return errno;
} }
krb5_data_free(&data); krb5_data_free(&data);
if(close(fd) < 0) { 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 errno;
} }
return 0; return 0;
} else { } else {
krb5_storage_free(sp); krb5_storage_free(sp);
krb5_set_error_string(context, "Keytab entry not found");
return KRB5_KT_NOTFOUND; return KRB5_KT_NOTFOUND;
} }
} }