*** empty log message ***
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@301 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
6
Makefile
6
Makefile
@@ -1,10 +1,10 @@
|
|||||||
CC=cc
|
CC=cc -std1
|
||||||
CFLAGS=-g
|
CFLAGS=-I/usr/athena/include -g
|
||||||
|
|
||||||
|
|
||||||
YFLAGS = -d
|
YFLAGS = -d
|
||||||
|
|
||||||
SOURCES = principal.c principal_p.c data.c context.c misc.c \
|
SOURCES = cache.c principal.c principal_p.c data.c context.c misc.c \
|
||||||
krbhst.c getport.c send_to_kdc.c der.c e.c d.c str2key.c \
|
krbhst.c getport.c send_to_kdc.c der.c e.c d.c str2key.c \
|
||||||
get_in_tkt.c get_in_tkt_pw.c
|
get_in_tkt.c get_in_tkt_pw.c
|
||||||
|
|
||||||
|
86
cache.c
86
cache.c
@@ -6,7 +6,34 @@ krb5_cc_resolve(krb5_context context,
|
|||||||
krb5_ccache *id,
|
krb5_ccache *id,
|
||||||
const char *residual)
|
const char *residual)
|
||||||
{
|
{
|
||||||
|
krb5_ccache p;
|
||||||
|
krb5_fcache *f;
|
||||||
|
|
||||||
|
p = ALLOC(1, krb5_ccache_data);
|
||||||
|
|
||||||
|
if(!p)
|
||||||
|
return ENOMEM;
|
||||||
|
|
||||||
|
f = ALLOC(1, krb5_fcache);
|
||||||
|
|
||||||
|
if(!f){
|
||||||
|
free(p);
|
||||||
|
return ENOMEM;
|
||||||
|
}
|
||||||
|
f->filename = strdup(residual);
|
||||||
|
if(!f->filename){
|
||||||
|
free(f);
|
||||||
|
free(p);
|
||||||
|
return ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
p->data.data = f;
|
||||||
|
p->data.length = sizeof(*f);
|
||||||
|
p->type = 1;
|
||||||
|
|
||||||
|
*id = p;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
@@ -62,9 +89,9 @@ store_principal(int fd,
|
|||||||
int i;
|
int i;
|
||||||
store_int32(fd, p->type);
|
store_int32(fd, p->type);
|
||||||
store_int32(fd, p->ncomp);
|
store_int32(fd, p->ncomp);
|
||||||
store_data(fd, p->realm);
|
store_data(fd, &p->realm);
|
||||||
for(i = 0; i < p->ncomp; i++)
|
for(i = 0; i < p->ncomp; i++)
|
||||||
store_data(fd, p->comp[i]);
|
store_data(fd, &p->comp[i]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,37 +107,56 @@ krb5_cc_initialize(krb5_context context,
|
|||||||
|
|
||||||
krb5_fcache *f;
|
krb5_fcache *f;
|
||||||
|
|
||||||
p = getenv("KRB5CCNAME");
|
f = (krb5_fcache*)id->data.data;
|
||||||
if(p)
|
|
||||||
strcpy(cc, p);
|
|
||||||
else
|
|
||||||
sprintf(cc, "/tmp/krb5cc_%d", getuid());
|
|
||||||
|
|
||||||
|
if(ret = erase_file(f->filename))
|
||||||
ret = unlink(cc);
|
|
||||||
if(ret == -1 && errno != ENOENT)
|
|
||||||
return ret;
|
return ret;
|
||||||
fd = open(cc, O_RDWR, 0600);
|
|
||||||
|
fd = open(f->filename, O_RDWR, 0600);
|
||||||
if(fd == -1)
|
if(fd == -1)
|
||||||
return ret;
|
return errno;
|
||||||
store_int16(fd, 0x503);
|
store_int16(fd, 0x503);
|
||||||
store_principal(fd, primary_principal);
|
store_principal(fd, primary_principal);
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
f = ALLOC(1, krb5_fcache); /* XXX */
|
|
||||||
f->filename = strdup(cc);
|
|
||||||
|
|
||||||
id->data->data = f;
|
|
||||||
id->data->length = sizeof(*f);
|
|
||||||
id->type = 4711/3210;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
krb5_error_code
|
||||||
|
erase_file(const char *filename)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
off_t pos;
|
||||||
|
|
||||||
|
fd = open(filename, O_RDWR);
|
||||||
|
if(fd < 0)
|
||||||
|
if(errno == ENOENT)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return errno;
|
||||||
|
pos = lseek(fd, 0, SEEK_END);
|
||||||
|
lseek(fd, 0, SEEK_SET);
|
||||||
|
for(; pos > 0; pos -= 16)
|
||||||
|
write(fd, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16);
|
||||||
|
close(fd);
|
||||||
|
unlink(filename);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
krb5_cc_destroy(krb5_context context,
|
krb5_cc_destroy(krb5_context context,
|
||||||
krb5_ccache id)
|
krb5_ccache id)
|
||||||
{
|
{
|
||||||
|
krb5_fcache *f;
|
||||||
|
int ret;
|
||||||
|
f = (krb5_fcache*)id->data.data;
|
||||||
|
|
||||||
|
ret = erase_file(f->filename);
|
||||||
|
|
||||||
|
free(f->filename);
|
||||||
|
free(f);
|
||||||
|
free(id);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
@@ -139,7 +185,7 @@ krb5_cc_retrieve(krb5_context context,
|
|||||||
krb5_error_code
|
krb5_error_code
|
||||||
krb5_cc_get_princ(krb5_context context,
|
krb5_cc_get_princ(krb5_context context,
|
||||||
krb5_ccache id,
|
krb5_ccache id,
|
||||||
krb5_pricipal *principal)
|
krb5_principal *principal)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -28,19 +28,19 @@ typedef struct krb5_config_section{
|
|||||||
struct krb5_config_section *next;
|
struct krb5_config_section *next;
|
||||||
}krb5_config_section;
|
}krb5_config_section;
|
||||||
|
|
||||||
typedef struct krb5_config_file{
|
typedef struct k5_cfile{
|
||||||
char *filename;
|
char *filename;
|
||||||
struct krb5_config_section *sections;
|
struct krb5_config_section *sections;
|
||||||
}krb5_config_file;
|
}k5_cfile;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
static char *gettoken(FILE *F);
|
static char *gettoken(FILE *F);
|
||||||
static void
|
static void
|
||||||
free_config_file(krb5_config_file *cf);
|
free_config_file(k5_cfile *cf);
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
new_config_file(krb5_config_file **cf, const char *filename);
|
new_config_file(k5_cfile **cf, const char *filename);
|
||||||
static void
|
static void
|
||||||
free_config_section(krb5_config_section *sec);
|
free_config_section(krb5_config_section *sec);
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
@@ -50,6 +50,6 @@ free_config_relation(krb5_config_relation *rel);
|
|||||||
static void
|
static void
|
||||||
free_config_value(krb5_config_value val);
|
free_config_value(krb5_config_value val);
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
parse_config_file(krb5_config_file **cf, const char *filename);
|
parse_config_file(k5_cfile **cf, const char *filename);
|
||||||
*/
|
*/
|
||||||
#endif /* __CONF_H__ */
|
#endif /* __CONF_H__ */
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
static char section[128];
|
static char section[128];
|
||||||
static FILE *F;
|
static FILE *F;
|
||||||
|
|
||||||
static krb5_config_file *cf;
|
static k5_cfile *cf;
|
||||||
|
|
||||||
static krb5_config_section *csec;
|
static krb5_config_section *csec;
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@ static void yyerror(char *s)
|
|||||||
/*----------------------------------------*/
|
/*----------------------------------------*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
free_config_file(krb5_config_file *cf)
|
free_config_file(k5_cfile *cf)
|
||||||
{
|
{
|
||||||
if(!cf)
|
if(!cf)
|
||||||
return;
|
return;
|
||||||
@@ -197,13 +197,13 @@ free_config_section(krb5_config_section *sec)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
krb5_free_config_file(krb5_config_file *cf)
|
krb5_free_config_file(k5_cfile *cf)
|
||||||
{
|
{
|
||||||
free_config_file(cf);
|
free_config_file(cf);
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
krb5_get_config_tag(krb5_config_file *cf, const char *tag, char **value)
|
krb5_get_config_tag(k5_cfile *cf, const char *tag, char **value)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
char *p;
|
char *p;
|
||||||
@@ -237,7 +237,7 @@ krb5_get_config_tag(krb5_config_file *cf, const char *tag, char **value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
krb5_parse_config_file(krb5_config_file **cfile, const char *filename)
|
krb5_parse_config_file(k5_cfile **cfile, const char *filename)
|
||||||
{
|
{
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
if(!filename)
|
if(!filename)
|
||||||
@@ -245,7 +245,7 @@ krb5_parse_config_file(krb5_config_file **cfile, const char *filename)
|
|||||||
F = fopen(filename, "r");
|
F = fopen(filename, "r");
|
||||||
if(F == NULL)
|
if(F == NULL)
|
||||||
return errno;
|
return errno;
|
||||||
cf = ALLOC(1, krb5_config_file);
|
cf = ALLOC(1, k5_cfile);
|
||||||
if(!cf)
|
if(!cf)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
ret = yyparse();
|
ret = yyparse();
|
||||||
|
60
krb5.h
60
krb5.h
@@ -4,11 +4,11 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
/* types */
|
#include <sys/bitypes.h>
|
||||||
typedef int int32_t;
|
|
||||||
typedef short int16_t;
|
|
||||||
typedef char int8_t;
|
|
||||||
|
|
||||||
|
#include "config_file.h"
|
||||||
|
|
||||||
|
/* types */
|
||||||
typedef int32_t krb5_int32;
|
typedef int32_t krb5_int32;
|
||||||
typedef int16_t krb5_int16;
|
typedef int16_t krb5_int16;
|
||||||
typedef int8_t krb5_int8;
|
typedef int8_t krb5_int8;
|
||||||
@@ -63,7 +63,7 @@ typedef enum krb5_preauthtype {
|
|||||||
|
|
||||||
|
|
||||||
typedef enum krb5_address_type {
|
typedef enum krb5_address_type {
|
||||||
KRB5_ADDRESS_INET = AF_INET,
|
KRB5_ADDRESS_INET = 2,
|
||||||
} krb5_address_type;
|
} krb5_address_type;
|
||||||
|
|
||||||
typedef struct krb5_address{
|
typedef struct krb5_address{
|
||||||
@@ -84,7 +84,7 @@ typedef struct krb5_keyblock{
|
|||||||
typedef struct krb5_context_data{
|
typedef struct krb5_context_data{
|
||||||
krb5_enctype *etypes;
|
krb5_enctype *etypes;
|
||||||
char *default_realm;
|
char *default_realm;
|
||||||
krb5_config_file *cf;
|
k5_cfile *cf;
|
||||||
} krb5_context_data;
|
} krb5_context_data;
|
||||||
|
|
||||||
typedef krb5_context_data *krb5_context;
|
typedef krb5_context_data *krb5_context;
|
||||||
@@ -98,6 +98,26 @@ typedef struct krb5_times{
|
|||||||
krb5_time renew_till;
|
krb5_time renew_till;
|
||||||
} krb5_times;
|
} krb5_times;
|
||||||
|
|
||||||
|
|
||||||
|
enum{
|
||||||
|
KRB5_NT_UNKNOWNN = 0,
|
||||||
|
KRB5_NT_PRINCIPAL = 1,
|
||||||
|
KRB5_NT_SRV_INST = 2,
|
||||||
|
KRB5_NT_SRV_HST = 3,
|
||||||
|
KRB5_NT_SRV_XHST = 4,
|
||||||
|
KRB5_NT_UID = 5
|
||||||
|
};
|
||||||
|
typedef struct krb5_principal_data{
|
||||||
|
int type;
|
||||||
|
krb5_data realm;
|
||||||
|
krb5_data *comp;
|
||||||
|
int ncomp;
|
||||||
|
}krb5_principal_data;
|
||||||
|
|
||||||
|
typedef krb5_principal_data *krb5_principal;
|
||||||
|
typedef const krb5_principal_data *krb5_const_principal;
|
||||||
|
|
||||||
|
|
||||||
typedef struct krb5_ticket{
|
typedef struct krb5_ticket{
|
||||||
int kvno;
|
int kvno;
|
||||||
krb5_principal sprinc;
|
krb5_principal sprinc;
|
||||||
@@ -111,25 +131,6 @@ typedef struct krb5_ticket{
|
|||||||
#define KRB5_PARSE_MALFORMED 17
|
#define KRB5_PARSE_MALFORMED 17
|
||||||
#define KRB5_PROG_ETYPE_NOSUPP 4711
|
#define KRB5_PROG_ETYPE_NOSUPP 4711
|
||||||
|
|
||||||
typedef enum k{
|
|
||||||
KRB_NT_UNKNOWNN = 0,
|
|
||||||
KRB_NT_PRINCIPAL = 1.
|
|
||||||
KRB_NT_SRV_INST = 2,
|
|
||||||
KRB_NT_SRV_HST = 3,
|
|
||||||
KRB_NT_SRV_XHST = 4,
|
|
||||||
KRB_NT_UID = 5
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct krb5_principal_data{
|
|
||||||
int type;
|
|
||||||
krb5_data realm;
|
|
||||||
krb5_data *comp;
|
|
||||||
int ncomp;
|
|
||||||
}krb5_principal_data;
|
|
||||||
|
|
||||||
typedef krb5_principal_data *krb5_principal;
|
|
||||||
typedef const krb5_principal_data *krb5_const_principal;
|
|
||||||
|
|
||||||
typedef struct krb5_creds {
|
typedef struct krb5_creds {
|
||||||
krb5_principal client;
|
krb5_principal client;
|
||||||
krb5_principal server;
|
krb5_principal server;
|
||||||
@@ -153,13 +154,16 @@ typedef struct krb5_rcache{
|
|||||||
int dummy;
|
int dummy;
|
||||||
}krb5_rcache;
|
}krb5_rcache;
|
||||||
|
|
||||||
typedef struct krb5_ccache{
|
typedef struct krb5_ccache_data{
|
||||||
|
int type;
|
||||||
krb5_data data;
|
krb5_data data;
|
||||||
}krb5_ccache;
|
}krb5_ccache_data;
|
||||||
|
|
||||||
|
typedef struct krb5_ccache_data *krb5_ccache;
|
||||||
|
|
||||||
typedef struct krb5_fcache{
|
typedef struct krb5_fcache{
|
||||||
char *filename;
|
char *filename;
|
||||||
};
|
}krb5_fcache;
|
||||||
|
|
||||||
typedef struct krb5_cc_cursor{
|
typedef struct krb5_cc_cursor{
|
||||||
int dummy;
|
int dummy;
|
||||||
|
@@ -7,6 +7,10 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#include <des.h>
|
||||||
|
|
||||||
#include "krb5.h"
|
#include "krb5.h"
|
||||||
|
|
||||||
void krb5_data_free(krb5_data *);
|
void krb5_data_free(krb5_data *);
|
||||||
|
@@ -6,7 +6,34 @@ krb5_cc_resolve(krb5_context context,
|
|||||||
krb5_ccache *id,
|
krb5_ccache *id,
|
||||||
const char *residual)
|
const char *residual)
|
||||||
{
|
{
|
||||||
|
krb5_ccache p;
|
||||||
|
krb5_fcache *f;
|
||||||
|
|
||||||
|
p = ALLOC(1, krb5_ccache_data);
|
||||||
|
|
||||||
|
if(!p)
|
||||||
|
return ENOMEM;
|
||||||
|
|
||||||
|
f = ALLOC(1, krb5_fcache);
|
||||||
|
|
||||||
|
if(!f){
|
||||||
|
free(p);
|
||||||
|
return ENOMEM;
|
||||||
|
}
|
||||||
|
f->filename = strdup(residual);
|
||||||
|
if(!f->filename){
|
||||||
|
free(f);
|
||||||
|
free(p);
|
||||||
|
return ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
p->data.data = f;
|
||||||
|
p->data.length = sizeof(*f);
|
||||||
|
p->type = 1;
|
||||||
|
|
||||||
|
*id = p;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
@@ -62,9 +89,9 @@ store_principal(int fd,
|
|||||||
int i;
|
int i;
|
||||||
store_int32(fd, p->type);
|
store_int32(fd, p->type);
|
||||||
store_int32(fd, p->ncomp);
|
store_int32(fd, p->ncomp);
|
||||||
store_data(fd, p->realm);
|
store_data(fd, &p->realm);
|
||||||
for(i = 0; i < p->ncomp; i++)
|
for(i = 0; i < p->ncomp; i++)
|
||||||
store_data(fd, p->comp[i]);
|
store_data(fd, &p->comp[i]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,37 +107,56 @@ krb5_cc_initialize(krb5_context context,
|
|||||||
|
|
||||||
krb5_fcache *f;
|
krb5_fcache *f;
|
||||||
|
|
||||||
p = getenv("KRB5CCNAME");
|
f = (krb5_fcache*)id->data.data;
|
||||||
if(p)
|
|
||||||
strcpy(cc, p);
|
|
||||||
else
|
|
||||||
sprintf(cc, "/tmp/krb5cc_%d", getuid());
|
|
||||||
|
|
||||||
|
if(ret = erase_file(f->filename))
|
||||||
ret = unlink(cc);
|
|
||||||
if(ret == -1 && errno != ENOENT)
|
|
||||||
return ret;
|
return ret;
|
||||||
fd = open(cc, O_RDWR, 0600);
|
|
||||||
|
fd = open(f->filename, O_RDWR, 0600);
|
||||||
if(fd == -1)
|
if(fd == -1)
|
||||||
return ret;
|
return errno;
|
||||||
store_int16(fd, 0x503);
|
store_int16(fd, 0x503);
|
||||||
store_principal(fd, primary_principal);
|
store_principal(fd, primary_principal);
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
f = ALLOC(1, krb5_fcache); /* XXX */
|
|
||||||
f->filename = strdup(cc);
|
|
||||||
|
|
||||||
id->data->data = f;
|
|
||||||
id->data->length = sizeof(*f);
|
|
||||||
id->type = 4711/3210;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
krb5_error_code
|
||||||
|
erase_file(const char *filename)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
off_t pos;
|
||||||
|
|
||||||
|
fd = open(filename, O_RDWR);
|
||||||
|
if(fd < 0)
|
||||||
|
if(errno == ENOENT)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return errno;
|
||||||
|
pos = lseek(fd, 0, SEEK_END);
|
||||||
|
lseek(fd, 0, SEEK_SET);
|
||||||
|
for(; pos > 0; pos -= 16)
|
||||||
|
write(fd, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16);
|
||||||
|
close(fd);
|
||||||
|
unlink(filename);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
krb5_cc_destroy(krb5_context context,
|
krb5_cc_destroy(krb5_context context,
|
||||||
krb5_ccache id)
|
krb5_ccache id)
|
||||||
{
|
{
|
||||||
|
krb5_fcache *f;
|
||||||
|
int ret;
|
||||||
|
f = (krb5_fcache*)id->data.data;
|
||||||
|
|
||||||
|
ret = erase_file(f->filename);
|
||||||
|
|
||||||
|
free(f->filename);
|
||||||
|
free(f);
|
||||||
|
free(id);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
@@ -139,7 +185,7 @@ krb5_cc_retrieve(krb5_context context,
|
|||||||
krb5_error_code
|
krb5_error_code
|
||||||
krb5_cc_get_princ(krb5_context context,
|
krb5_cc_get_princ(krb5_context context,
|
||||||
krb5_ccache id,
|
krb5_ccache id,
|
||||||
krb5_pricipal *principal)
|
krb5_principal *principal)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -28,19 +28,19 @@ typedef struct krb5_config_section{
|
|||||||
struct krb5_config_section *next;
|
struct krb5_config_section *next;
|
||||||
}krb5_config_section;
|
}krb5_config_section;
|
||||||
|
|
||||||
typedef struct krb5_config_file{
|
typedef struct k5_cfile{
|
||||||
char *filename;
|
char *filename;
|
||||||
struct krb5_config_section *sections;
|
struct krb5_config_section *sections;
|
||||||
}krb5_config_file;
|
}k5_cfile;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
static char *gettoken(FILE *F);
|
static char *gettoken(FILE *F);
|
||||||
static void
|
static void
|
||||||
free_config_file(krb5_config_file *cf);
|
free_config_file(k5_cfile *cf);
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
new_config_file(krb5_config_file **cf, const char *filename);
|
new_config_file(k5_cfile **cf, const char *filename);
|
||||||
static void
|
static void
|
||||||
free_config_section(krb5_config_section *sec);
|
free_config_section(krb5_config_section *sec);
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
@@ -50,6 +50,6 @@ free_config_relation(krb5_config_relation *rel);
|
|||||||
static void
|
static void
|
||||||
free_config_value(krb5_config_value val);
|
free_config_value(krb5_config_value val);
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
parse_config_file(krb5_config_file **cf, const char *filename);
|
parse_config_file(k5_cfile **cf, const char *filename);
|
||||||
*/
|
*/
|
||||||
#endif /* __CONF_H__ */
|
#endif /* __CONF_H__ */
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
static char section[128];
|
static char section[128];
|
||||||
static FILE *F;
|
static FILE *F;
|
||||||
|
|
||||||
static krb5_config_file *cf;
|
static k5_cfile *cf;
|
||||||
|
|
||||||
static krb5_config_section *csec;
|
static krb5_config_section *csec;
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@ static void yyerror(char *s)
|
|||||||
/*----------------------------------------*/
|
/*----------------------------------------*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
free_config_file(krb5_config_file *cf)
|
free_config_file(k5_cfile *cf)
|
||||||
{
|
{
|
||||||
if(!cf)
|
if(!cf)
|
||||||
return;
|
return;
|
||||||
@@ -197,13 +197,13 @@ free_config_section(krb5_config_section *sec)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
krb5_free_config_file(krb5_config_file *cf)
|
krb5_free_config_file(k5_cfile *cf)
|
||||||
{
|
{
|
||||||
free_config_file(cf);
|
free_config_file(cf);
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
krb5_get_config_tag(krb5_config_file *cf, const char *tag, char **value)
|
krb5_get_config_tag(k5_cfile *cf, const char *tag, char **value)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
char *p;
|
char *p;
|
||||||
@@ -237,7 +237,7 @@ krb5_get_config_tag(krb5_config_file *cf, const char *tag, char **value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
krb5_parse_config_file(krb5_config_file **cfile, const char *filename)
|
krb5_parse_config_file(k5_cfile **cfile, const char *filename)
|
||||||
{
|
{
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
if(!filename)
|
if(!filename)
|
||||||
@@ -245,7 +245,7 @@ krb5_parse_config_file(krb5_config_file **cfile, const char *filename)
|
|||||||
F = fopen(filename, "r");
|
F = fopen(filename, "r");
|
||||||
if(F == NULL)
|
if(F == NULL)
|
||||||
return errno;
|
return errno;
|
||||||
cf = ALLOC(1, krb5_config_file);
|
cf = ALLOC(1, k5_cfile);
|
||||||
if(!cf)
|
if(!cf)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
ret = yyparse();
|
ret = yyparse();
|
||||||
|
@@ -4,11 +4,11 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
/* types */
|
#include <sys/bitypes.h>
|
||||||
typedef int int32_t;
|
|
||||||
typedef short int16_t;
|
|
||||||
typedef char int8_t;
|
|
||||||
|
|
||||||
|
#include "config_file.h"
|
||||||
|
|
||||||
|
/* types */
|
||||||
typedef int32_t krb5_int32;
|
typedef int32_t krb5_int32;
|
||||||
typedef int16_t krb5_int16;
|
typedef int16_t krb5_int16;
|
||||||
typedef int8_t krb5_int8;
|
typedef int8_t krb5_int8;
|
||||||
@@ -63,7 +63,7 @@ typedef enum krb5_preauthtype {
|
|||||||
|
|
||||||
|
|
||||||
typedef enum krb5_address_type {
|
typedef enum krb5_address_type {
|
||||||
KRB5_ADDRESS_INET = AF_INET,
|
KRB5_ADDRESS_INET = 2,
|
||||||
} krb5_address_type;
|
} krb5_address_type;
|
||||||
|
|
||||||
typedef struct krb5_address{
|
typedef struct krb5_address{
|
||||||
@@ -84,7 +84,7 @@ typedef struct krb5_keyblock{
|
|||||||
typedef struct krb5_context_data{
|
typedef struct krb5_context_data{
|
||||||
krb5_enctype *etypes;
|
krb5_enctype *etypes;
|
||||||
char *default_realm;
|
char *default_realm;
|
||||||
krb5_config_file *cf;
|
k5_cfile *cf;
|
||||||
} krb5_context_data;
|
} krb5_context_data;
|
||||||
|
|
||||||
typedef krb5_context_data *krb5_context;
|
typedef krb5_context_data *krb5_context;
|
||||||
@@ -98,6 +98,26 @@ typedef struct krb5_times{
|
|||||||
krb5_time renew_till;
|
krb5_time renew_till;
|
||||||
} krb5_times;
|
} krb5_times;
|
||||||
|
|
||||||
|
|
||||||
|
enum{
|
||||||
|
KRB5_NT_UNKNOWNN = 0,
|
||||||
|
KRB5_NT_PRINCIPAL = 1,
|
||||||
|
KRB5_NT_SRV_INST = 2,
|
||||||
|
KRB5_NT_SRV_HST = 3,
|
||||||
|
KRB5_NT_SRV_XHST = 4,
|
||||||
|
KRB5_NT_UID = 5
|
||||||
|
};
|
||||||
|
typedef struct krb5_principal_data{
|
||||||
|
int type;
|
||||||
|
krb5_data realm;
|
||||||
|
krb5_data *comp;
|
||||||
|
int ncomp;
|
||||||
|
}krb5_principal_data;
|
||||||
|
|
||||||
|
typedef krb5_principal_data *krb5_principal;
|
||||||
|
typedef const krb5_principal_data *krb5_const_principal;
|
||||||
|
|
||||||
|
|
||||||
typedef struct krb5_ticket{
|
typedef struct krb5_ticket{
|
||||||
int kvno;
|
int kvno;
|
||||||
krb5_principal sprinc;
|
krb5_principal sprinc;
|
||||||
@@ -111,25 +131,6 @@ typedef struct krb5_ticket{
|
|||||||
#define KRB5_PARSE_MALFORMED 17
|
#define KRB5_PARSE_MALFORMED 17
|
||||||
#define KRB5_PROG_ETYPE_NOSUPP 4711
|
#define KRB5_PROG_ETYPE_NOSUPP 4711
|
||||||
|
|
||||||
typedef enum k{
|
|
||||||
KRB_NT_UNKNOWNN = 0,
|
|
||||||
KRB_NT_PRINCIPAL = 1.
|
|
||||||
KRB_NT_SRV_INST = 2,
|
|
||||||
KRB_NT_SRV_HST = 3,
|
|
||||||
KRB_NT_SRV_XHST = 4,
|
|
||||||
KRB_NT_UID = 5
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct krb5_principal_data{
|
|
||||||
int type;
|
|
||||||
krb5_data realm;
|
|
||||||
krb5_data *comp;
|
|
||||||
int ncomp;
|
|
||||||
}krb5_principal_data;
|
|
||||||
|
|
||||||
typedef krb5_principal_data *krb5_principal;
|
|
||||||
typedef const krb5_principal_data *krb5_const_principal;
|
|
||||||
|
|
||||||
typedef struct krb5_creds {
|
typedef struct krb5_creds {
|
||||||
krb5_principal client;
|
krb5_principal client;
|
||||||
krb5_principal server;
|
krb5_principal server;
|
||||||
@@ -153,13 +154,16 @@ typedef struct krb5_rcache{
|
|||||||
int dummy;
|
int dummy;
|
||||||
}krb5_rcache;
|
}krb5_rcache;
|
||||||
|
|
||||||
typedef struct krb5_ccache{
|
typedef struct krb5_ccache_data{
|
||||||
|
int type;
|
||||||
krb5_data data;
|
krb5_data data;
|
||||||
}krb5_ccache;
|
}krb5_ccache_data;
|
||||||
|
|
||||||
|
typedef struct krb5_ccache_data *krb5_ccache;
|
||||||
|
|
||||||
typedef struct krb5_fcache{
|
typedef struct krb5_fcache{
|
||||||
char *filename;
|
char *filename;
|
||||||
};
|
}krb5_fcache;
|
||||||
|
|
||||||
typedef struct krb5_cc_cursor{
|
typedef struct krb5_cc_cursor{
|
||||||
int dummy;
|
int dummy;
|
||||||
|
@@ -7,6 +7,10 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#include <des.h>
|
||||||
|
|
||||||
#include "krb5.h"
|
#include "krb5.h"
|
||||||
|
|
||||||
void krb5_data_free(krb5_data *);
|
void krb5_data_free(krb5_data *);
|
||||||
|
@@ -41,6 +41,8 @@ mit_des_string_to_key(const krb5_keytype keytype,
|
|||||||
unsigned char *key;
|
unsigned char *key;
|
||||||
unsigned char tmp[8];
|
unsigned char tmp[8];
|
||||||
|
|
||||||
|
des_key_schedule sched;
|
||||||
|
|
||||||
int len;
|
int len;
|
||||||
int i, j;
|
int i, j;
|
||||||
int odd = 0;
|
int odd = 0;
|
||||||
@@ -71,7 +73,7 @@ mit_des_string_to_key(const krb5_keytype keytype,
|
|||||||
}
|
}
|
||||||
|
|
||||||
des_set_odd_parity(key);
|
des_set_odd_parity(key);
|
||||||
des_key_schedule(key, &sched);
|
des_key_sched(key, &sched);
|
||||||
des_cbc_cksum(key, key, 8, &sched, key);
|
des_cbc_cksum(key, key, 8, &sched, key);
|
||||||
des_set_odd_parity(key);
|
des_set_odd_parity(key);
|
||||||
if(des_is_weak_key(key))
|
if(des_is_weak_key(key))
|
||||||
|
2
test.c
2
test.c
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
krb5_config_file *cf;
|
k5_cfile *cf;
|
||||||
char *p;
|
char *p;
|
||||||
krb5_parse_config_file(&cf, "krb5.conf");
|
krb5_parse_config_file(&cf, "krb5.conf");
|
||||||
krb5_get_config_tag(cf, "realms ATHENA.MIT.EDU v4_instance_convert mit", &p);
|
krb5_get_config_tag(cf, "realms ATHENA.MIT.EDU v4_instance_convert mit", &p);
|
||||||
|
Reference in New Issue
Block a user