add support for reading krb4 /.k files
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@9503 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Kungliga Tekniska H<>gskolan
|
* Copyright (c) 2000, 2001 Kungliga Tekniska H<>gskolan
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -213,6 +213,39 @@ read_master_encryptionkey(krb5_context context, const char *filename,
|
|||||||
key.keytype = ETYPE_DES_CFB64_NONE;
|
key.keytype = ETYPE_DES_CFB64_NONE;
|
||||||
|
|
||||||
ret = hdb_process_master_key(context, 0, &key, 0, mkey);
|
ret = hdb_process_master_key(context, 0, &key, 0, mkey);
|
||||||
|
krb5_free_keyblock_contents(context, &key);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* read a krb4 /.k style file */
|
||||||
|
static krb5_error_code
|
||||||
|
read_master_krb4(krb5_context context, const char *filename,
|
||||||
|
hdb_master_key *mkey)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
krb5_keyblock key;
|
||||||
|
krb5_error_code ret;
|
||||||
|
unsigned char buf[256];
|
||||||
|
ssize_t len;
|
||||||
|
|
||||||
|
fd = open(filename, O_RDONLY | O_BINARY);
|
||||||
|
if(fd < 0)
|
||||||
|
return errno;
|
||||||
|
|
||||||
|
len = read(fd, buf, sizeof(buf));
|
||||||
|
close(fd);
|
||||||
|
if(len < 0)
|
||||||
|
return errno;
|
||||||
|
|
||||||
|
memset(&key, 0, sizeof(key));
|
||||||
|
key.keytype = ETYPE_DES_PCBC_NONE;
|
||||||
|
ret = krb5_data_copy(&key.keyvalue, buf, len);
|
||||||
|
memset(buf, 0, sizeof(buf));
|
||||||
|
if(ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = hdb_process_master_key(context, 0, &key, 0, mkey);
|
||||||
|
krb5_free_keyblock_contents(context, &key);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -249,7 +282,9 @@ hdb_read_master_key(krb5_context context, const char *filename,
|
|||||||
if(len < 0)
|
if(len < 0)
|
||||||
return errno;
|
return errno;
|
||||||
|
|
||||||
if(buf[0] == 0x30 && len <= 127 && buf[1] == len - 2) {
|
if(len == 8) {
|
||||||
|
ret = read_master_krb4(context, filename, mkey);
|
||||||
|
} else if(buf[0] == 0x30 && len <= 127 && buf[1] == len - 2) {
|
||||||
ret = read_master_encryptionkey(context, filename, mkey);
|
ret = read_master_encryptionkey(context, filename, mkey);
|
||||||
} else if(buf[0] == 5 && buf[1] >= 1 && buf[1] <= 2) {
|
} else if(buf[0] == 5 && buf[1] >= 1 && buf[1] <= 2) {
|
||||||
ret = read_master_keytab(context, filename, mkey);
|
ret = read_master_keytab(context, filename, mkey);
|
||||||
|
Reference in New Issue
Block a user