Fix some krb5_storage_write() usages
This commit is contained in:

committed by
Viktor Dukhovni

parent
2c542ce8b1
commit
122cdc578e
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Kungliga Tekniska Högskolan
|
||||
* Copyright (c) 2017 Kungliga Tekniska Högskolan
|
||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||
* All rights reserved.
|
||||
*
|
||||
@@ -51,6 +51,7 @@ gss_export_cred(OM_uint32 * minor_status,
|
||||
struct _gss_mechanism_cred *mc;
|
||||
gss_buffer_desc buffer;
|
||||
krb5_error_code ret;
|
||||
krb5_ssize_t bytes;
|
||||
krb5_storage *sp;
|
||||
OM_uint32 major;
|
||||
krb5_data data;
|
||||
@@ -84,8 +85,8 @@ gss_export_cred(OM_uint32 * minor_status,
|
||||
return major;
|
||||
}
|
||||
|
||||
ret = krb5_storage_write(sp, buffer.value, buffer.length);
|
||||
if (ret < 0 || (size_t)ret != buffer.length) {
|
||||
bytes = krb5_storage_write(sp, buffer.value, buffer.length);
|
||||
if (bytes < 0 || (size_t)bytes != buffer.length) {
|
||||
gss_release_buffer(minor_status, &buffer);
|
||||
krb5_storage_free(sp);
|
||||
*minor_status = EINVAL;
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997 - 2001 Kungliga Tekniska Högskolan
|
||||
* Copyright (c) 1997 - 2017 Kungliga Tekniska Högskolan
|
||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||
* All rights reserved.
|
||||
*
|
||||
@@ -951,7 +951,7 @@ mdb_store(krb5_context context, HDB *db, unsigned flags, hdb_entry_ex *entry)
|
||||
krb5_data kdb_ent = { 0, 0 };
|
||||
krb5_data key = { 0, 0 };
|
||||
krb5_data value = { 0, 0 };
|
||||
ssize_t sz;
|
||||
krb5_ssize_t sz;
|
||||
|
||||
if ((flags & HDB_F_PRECHECK) && (flags & HDB_F_REPLACE))
|
||||
return 0;
|
||||
@@ -977,7 +977,7 @@ mdb_store(krb5_context context, HDB *db, unsigned flags, hdb_entry_ex *entry)
|
||||
if (ret) goto out;
|
||||
sz = krb5_storage_write(sp, "\n", 2); /* NUL-terminate */
|
||||
ret = ENOMEM;
|
||||
if (sz == -1) goto out;
|
||||
if (sz != 2) goto out;
|
||||
ret = krb5_storage_to_data(sp, &line);
|
||||
if (ret) goto out;
|
||||
|
||||
@@ -1278,7 +1278,7 @@ _hdb_mit_dump2mitdb_entry(krb5_context context, char *line, krb5_storage *sp)
|
||||
krb5_error_code ret = EINVAL;
|
||||
char *p = line, *q;
|
||||
char *princ;
|
||||
ssize_t sz;
|
||||
krb5_ssize_t sz;
|
||||
size_t i;
|
||||
size_t princ_len;
|
||||
unsigned int num_tl_data;
|
||||
@@ -1374,7 +1374,7 @@ _hdb_mit_dump2mitdb_entry(krb5_context context, char *line, krb5_storage *sp)
|
||||
ret = krb5_store_uint16(sp, princ_len);
|
||||
if (ret) return ret;
|
||||
sz = krb5_storage_write(sp, princ, princ_len);
|
||||
if (sz == -1) return ENOMEM;
|
||||
if (sz != princ_len) return ENOMEM;
|
||||
|
||||
/* scan and write TL data */
|
||||
for (i = 0; i < num_tl_data; i++) {
|
||||
@@ -1407,7 +1407,7 @@ _hdb_mit_dump2mitdb_entry(krb5_context context, char *line, krb5_storage *sp)
|
||||
return EINVAL;
|
||||
sz = krb5_storage_write(sp, buf, tl_length);
|
||||
free(buf);
|
||||
if (sz == -1) return ENOMEM;
|
||||
if (sz != tl_length) return ENOMEM;
|
||||
} else {
|
||||
if (strcmp(nexttoken(&p, 0, "'-1' field"), "-1") != 0) return EINVAL;
|
||||
}
|
||||
@@ -1450,7 +1450,7 @@ _hdb_mit_dump2mitdb_entry(krb5_context context, char *line, krb5_storage *sp)
|
||||
return EINVAL;
|
||||
sz = krb5_storage_write(sp, buf, keylen);
|
||||
free(buf);
|
||||
if (sz == -1) return ENOMEM;
|
||||
if (sz != keylen) return ENOMEM;
|
||||
} else {
|
||||
if (strcmp(nexttoken(&p, 0,
|
||||
"'-1' zero-length key/salt field"),
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997 - 2007 Kungliga Tekniska Högskolan
|
||||
* Copyright (c) 1997 - 2017 Kungliga Tekniska Högskolan
|
||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||
* All rights reserved.
|
||||
*
|
||||
@@ -911,9 +911,11 @@ kadm5_log_flush(kadm5_server_context *context, krb5_storage *sp)
|
||||
len = data.length;
|
||||
bytes = krb5_storage_write(sp, data.data, len);
|
||||
krb5_data_free(&data);
|
||||
if (bytes < 0) {
|
||||
if (bytes != len) {
|
||||
krb5_storage_free(sp);
|
||||
return errno;
|
||||
ret = bytes == -1 ? errno : KADM5_LOG_CORRUPT;
|
||||
krb5_warn(context->context, ret, "short write to iprop log file");
|
||||
return ret;
|
||||
}
|
||||
if (bytes != (krb5_ssize_t)len) {
|
||||
krb5_storage_free(sp);
|
||||
@@ -938,6 +940,7 @@ kadm5_ret_t
|
||||
kadm5_log_create(kadm5_server_context *context, hdb_entry *entry)
|
||||
{
|
||||
krb5_storage *sp;
|
||||
krb5_ssize_t bytes;
|
||||
kadm5_ret_t ret;
|
||||
krb5_data value;
|
||||
hdb_entry_ex ent;
|
||||
@@ -975,9 +978,9 @@ kadm5_log_create(kadm5_server_context *context, hdb_entry *entry)
|
||||
if (ret == 0)
|
||||
ret = krb5_store_uint32(sp, value.length);
|
||||
if (ret == 0) {
|
||||
if (krb5_storage_write(sp, value.data, value.length) !=
|
||||
(krb5_ssize_t)value.length)
|
||||
ret = errno;
|
||||
bytes = krb5_storage_write(sp, value.data, value.length);
|
||||
if (bytes != (krb5_ssize_t)value.length)
|
||||
ret = bytes == -1 ? errno : ENOMEM;
|
||||
}
|
||||
if (ret == 0)
|
||||
ret = krb5_store_uint32(sp, value.length);
|
||||
@@ -1140,6 +1143,7 @@ kadm5_log_rename(kadm5_server_context *context,
|
||||
hdb_entry *entry)
|
||||
{
|
||||
krb5_storage *sp;
|
||||
krb5_ssize_t bytes;
|
||||
kadm5_ret_t ret;
|
||||
uint32_t len = 0; /* So dumb compilers don't warn */
|
||||
off_t end_off = 0; /* Ditto; this allows de-indentation by two levels */
|
||||
@@ -1206,9 +1210,9 @@ kadm5_log_rename(kadm5_server_context *context,
|
||||
ret = krb5_store_principal(sp, source);
|
||||
if (ret == 0) {
|
||||
errno = 0;
|
||||
if (krb5_storage_write(sp, value.data, value.length) !=
|
||||
(krb5_ssize_t)value.length)
|
||||
ret = errno ? errno : EIO;
|
||||
bytes = krb5_storage_write(sp, value.data, value.length);
|
||||
if (bytes != (krb5_ssize_t)value.length)
|
||||
ret = bytes == -1 ? errno : ENOMEM;
|
||||
}
|
||||
if (ret == 0) {
|
||||
end_off = krb5_storage_seek(sp, 0, SEEK_CUR);
|
||||
@@ -1307,6 +1311,7 @@ kadm5_log_modify(kadm5_server_context *context,
|
||||
uint32_t mask)
|
||||
{
|
||||
krb5_storage *sp;
|
||||
krb5_ssize_t bytes;
|
||||
kadm5_ret_t ret;
|
||||
krb5_data value;
|
||||
uint32_t len;
|
||||
@@ -1350,9 +1355,9 @@ kadm5_log_modify(kadm5_server_context *context,
|
||||
if (ret == 0)
|
||||
ret = krb5_store_uint32(sp, mask);
|
||||
if (ret == 0) {
|
||||
if (krb5_storage_write(sp, value.data, value.length) !=
|
||||
(krb5_ssize_t)value.length)
|
||||
ret = errno;
|
||||
bytes = krb5_storage_write(sp, value.data, value.length);
|
||||
if (bytes != (krb5_ssize_t)value.length)
|
||||
ret = bytes == -1 ? errno : ENOMEM;
|
||||
}
|
||||
if (ret == 0)
|
||||
ret = krb5_store_uint32(sp, len);
|
||||
@@ -2523,8 +2528,8 @@ kadm5_log_truncate(kadm5_server_context *context, size_t keep, size_t maxbytes)
|
||||
ret = krb5_store_uint32(sp, 0); /* end of trailer */
|
||||
if (ret == 0) {
|
||||
bytes = krb5_storage_write(sp, entries.data, entries.length);
|
||||
if (bytes == -1)
|
||||
ret = errno;
|
||||
if (bytes != entries.length)
|
||||
ret = bytes == -1 ? errno : EIO;
|
||||
}
|
||||
if (ret == 0)
|
||||
ret = krb5_storage_fsync(sp);
|
||||
|
@@ -546,24 +546,34 @@ fcc_initialize(krb5_context context,
|
||||
f->version = context->fcache_vno;
|
||||
else
|
||||
f->version = KRB5_FCC_FVNO_4;
|
||||
ret |= krb5_store_int8(sp, 5);
|
||||
ret |= krb5_store_int8(sp, f->version);
|
||||
if (ret == 0)
|
||||
ret = krb5_store_int8(sp, 5);
|
||||
if (ret == 0)
|
||||
ret = krb5_store_int8(sp, f->version);
|
||||
storage_set_flags(context, sp, f->version);
|
||||
if(f->version == KRB5_FCC_FVNO_4 && ret == 0) {
|
||||
/* V4 stuff */
|
||||
if (context->kdc_sec_offset) {
|
||||
ret |= krb5_store_int16 (sp, 12); /* length */
|
||||
ret |= krb5_store_int16 (sp, FCC_TAG_DELTATIME); /* Tag */
|
||||
ret |= krb5_store_int16 (sp, 8); /* length of data */
|
||||
ret |= krb5_store_int32 (sp, context->kdc_sec_offset);
|
||||
ret |= krb5_store_int32 (sp, context->kdc_usec_offset);
|
||||
if (ret == 0)
|
||||
ret = krb5_store_int16 (sp, 12); /* length */
|
||||
if (ret == 0)
|
||||
ret = krb5_store_int16 (sp, FCC_TAG_DELTATIME); /* Tag */
|
||||
if (ret == 0)
|
||||
ret = krb5_store_int16 (sp, 8); /* length of data */
|
||||
if (ret == 0)
|
||||
ret = krb5_store_int32 (sp, context->kdc_sec_offset);
|
||||
if (ret == 0)
|
||||
ret = krb5_store_int32 (sp, context->kdc_usec_offset);
|
||||
} else {
|
||||
ret |= krb5_store_int16 (sp, 0);
|
||||
if (ret == 0)
|
||||
ret = krb5_store_int16 (sp, 0);
|
||||
}
|
||||
}
|
||||
ret |= krb5_store_principal(sp, primary_principal);
|
||||
if (ret == 0)
|
||||
ret = krb5_store_principal(sp, primary_principal);
|
||||
|
||||
ret |= write_storage(context, sp, fd);
|
||||
if (ret == 0)
|
||||
ret = write_storage(context, sp, fd);
|
||||
|
||||
krb5_storage_free(sp);
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2006 - 2007 Kungliga Tekniska Högskolan
|
||||
* Copyright (c) 2006 - 2017 Kungliga Tekniska Högskolan
|
||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||
* All rights reserved.
|
||||
*
|
||||
@@ -925,7 +925,7 @@ fill_zeros(krb5_context context, krb5_storage *sp, size_t len)
|
||||
if (l > sizeof(zeros))
|
||||
l = sizeof(zeros);
|
||||
sret = krb5_storage_write(sp, zeros, l);
|
||||
if (sret <= 0)
|
||||
if (sret != l)
|
||||
return krb5_enomem(context);
|
||||
|
||||
len -= sret;
|
||||
|
Reference in New Issue
Block a user