make this actually work

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@8289 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
2000-05-23 15:00:27 +00:00
parent 570f2a4f13
commit be412389eb

View File

@@ -221,7 +221,7 @@ akf_next_entry(krb5_context context,
goto out; goto out;
} }
entry->vno = (int8_t) kvno; entry->vno = kvno;
entry->keyblock.keytype = ETYPE_DES_CBC_MD5; entry->keyblock.keytype = ETYPE_DES_CBC_MD5;
entry->keyblock.keyvalue.length = 8; entry->keyblock.keyvalue.length = 8;
@@ -235,6 +235,8 @@ akf_next_entry(krb5_context context,
ret = cursor->sp->fetch(cursor->sp, entry->keyblock.keyvalue.data, 8); ret = cursor->sp->fetch(cursor->sp, entry->keyblock.keyvalue.data, 8);
if(ret != 8) if(ret != 8)
ret = (ret < 0) ? errno : KRB5_KT_END; ret = (ret < 0) ? errno : KRB5_KT_END;
else
ret = 0;
entry->timestamp = time(NULL); entry->timestamp = time(NULL);
@@ -261,6 +263,7 @@ akf_add_entry(krb5_context context,
struct akf_data *d = id->data; struct akf_data *d = id->data;
int fd, created = 0; int fd, created = 0;
int32_t kvno; int32_t kvno;
krb5_error_code ret;
fd = open (d->filename, O_RDWR | O_BINARY); fd = open (d->filename, O_RDWR | O_BINARY);
if (fd < 0) { if (fd < 0) {
@@ -274,29 +277,68 @@ akf_add_entry(krb5_context context,
if (entry->keyblock.keyvalue.length == 8 if (entry->keyblock.keyvalue.length == 8
&& entry->keyblock.keytype == ETYPE_DES_CBC_MD5) { && entry->keyblock.keytype == ETYPE_DES_CBC_MD5) {
int32_t len = 0; int32_t len;
krb5_storage *sp;
if (!created) { sp = krb5_storage_from_fd(fd);
if (lseek (fd, 0, SEEK_SET)) if(sp == NULL) {
return errno; close(fd);
return ENOMEM;
if (read (fd, &len, sizeof(len)) != sizeof(len))
return errno;
} }
len += 1; if (created)
len = 0;
if (lseek (fd, 0, SEEK_SET)) else {
if((*sp->seek)(sp, 0, SEEK_SET) < 0) {
krb5_storage_free(sp);
close(fd);
return errno;
}
ret = krb5_ret_int32(sp, &len);
if(ret) {
krb5_storage_free(sp);
close(fd);
return ret;
}
}
len++;
if((*sp->seek)(sp, 0, SEEK_SET) < 0) {
krb5_storage_free(sp);
close(fd);
return errno; return errno;
}
ret = krb5_store_int32(sp, len);
if(ret) {
krb5_storage_free(sp);
close(fd);
return ret;
}
if (write (fd, &len, sizeof(len)) != sizeof(len)) if((*sp->seek)(sp, (len - 1) * (8 + 4), SEEK_CUR) < 0) {
krb5_storage_free(sp);
close(fd);
return errno; return errno;
}
if (lseek (fd, 4 + (len-1) * (8+4), SEEK_SET))
return errno; ret = krb5_store_int32(sp, entry->vno);
if(ret) {
kvno = entry->vno; krb5_storage_free(sp);
write(fd, &kvno, sizeof(kvno)); close(fd);
write(fd, entry->keyblock.keyvalue.data, 8); return ret;
}
ret = sp->store(sp, entry->keyblock.keyvalue.data,
entry->keyblock.keyvalue.length);
if(ret != entry->keyblock.keyvalue.length) {
krb5_storage_free(sp);
close(fd);
if(ret < 0)
return errno;
return ENOTTY;
}
krb5_storage_free(sp);
} }
close (fd); close (fd);
return 0; return 0;