based on Gisle's comment, I removed the use of syslog() and fixed the
netdb.h include, then I re-indented some code to use curl-style
This commit is contained in:
parent
bff59dac12
commit
0ab2dff69c
128
lib/krb4.c
128
lib/krb4.c
@ -46,8 +46,9 @@
|
|||||||
#include "security.h"
|
#include "security.h"
|
||||||
#include "base64.h"
|
#include "base64.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#ifdef HAVE_NETDB_H
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <syslog.h>
|
#endif
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <krb.h>
|
#include <krb.h>
|
||||||
#include <des.h>
|
#include <des.h>
|
||||||
@ -74,11 +75,11 @@
|
|||||||
#define hisctladdr REMOTE_ADDR
|
#define hisctladdr REMOTE_ADDR
|
||||||
|
|
||||||
struct krb4_data {
|
struct krb4_data {
|
||||||
des_cblock key;
|
des_cblock key;
|
||||||
des_key_schedule schedule;
|
des_key_schedule schedule;
|
||||||
char name[ANAME_SZ];
|
char name[ANAME_SZ];
|
||||||
char instance[INST_SZ];
|
char instance[INST_SZ];
|
||||||
char realm[REALM_SZ];
|
char realm[REALM_SZ];
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef HAVE_STRLCPY
|
#ifndef HAVE_STRLCPY
|
||||||
@ -86,18 +87,18 @@ struct krb4_data {
|
|||||||
static size_t
|
static size_t
|
||||||
strlcpy (char *dst, const char *src, size_t dst_sz)
|
strlcpy (char *dst, const char *src, size_t dst_sz)
|
||||||
{
|
{
|
||||||
size_t n;
|
size_t n;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
for (p = dst, n = 0;
|
for (p = dst, n = 0;
|
||||||
n + 1 < dst_sz && *src != '\0';
|
n + 1 < dst_sz && *src != '\0';
|
||||||
++p, ++src, ++n)
|
++p, ++src, ++n)
|
||||||
*p = *src;
|
*p = *src;
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
if (*src == '\0')
|
if (*src == '\0')
|
||||||
return n;
|
return n;
|
||||||
else
|
else
|
||||||
return n + strlen (src);
|
return n + strlen (src);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
size_t strlcpy (char *dst, const char *src, size_t dst_sz);
|
size_t strlcpy (char *dst, const char *src, size_t dst_sz);
|
||||||
@ -116,24 +117,25 @@ static int
|
|||||||
krb4_decode(void *app_data, void *buf, int len, int level,
|
krb4_decode(void *app_data, void *buf, int len, int level,
|
||||||
struct connectdata *conn)
|
struct connectdata *conn)
|
||||||
{
|
{
|
||||||
MSG_DAT m;
|
MSG_DAT m;
|
||||||
int e;
|
int e;
|
||||||
struct krb4_data *d = app_data;
|
struct krb4_data *d = app_data;
|
||||||
|
|
||||||
if(level == prot_safe)
|
if(level == prot_safe)
|
||||||
e = krb_rd_safe(buf, len, &d->key,
|
e = krb_rd_safe(buf, len, &d->key,
|
||||||
(struct sockaddr_in *)REMOTE_ADDR,
|
(struct sockaddr_in *)REMOTE_ADDR,
|
||||||
(struct sockaddr_in *)LOCAL_ADDR, &m);
|
(struct sockaddr_in *)LOCAL_ADDR, &m);
|
||||||
else
|
else
|
||||||
e = krb_rd_priv(buf, len, d->schedule, &d->key,
|
e = krb_rd_priv(buf, len, d->schedule, &d->key,
|
||||||
(struct sockaddr_in *)REMOTE_ADDR,
|
(struct sockaddr_in *)REMOTE_ADDR,
|
||||||
(struct sockaddr_in *)LOCAL_ADDR, &m);
|
(struct sockaddr_in *)LOCAL_ADDR, &m);
|
||||||
if(e){
|
if(e) {
|
||||||
syslog(LOG_ERR, "krb4_decode: %s", krb_get_err_text(e));
|
struct SessionHandle *data = conn->data;
|
||||||
return -1;
|
infof(data, "krb4_decode: %s\n", krb_get_err_text(e));
|
||||||
}
|
return -1;
|
||||||
memmove(buf, m.app_data, m.app_length);
|
}
|
||||||
return m.app_length;
|
memmove(buf, m.app_data, m.app_length);
|
||||||
|
return m.app_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -150,42 +152,42 @@ static int
|
|||||||
krb4_encode(void *app_data, void *from, int length, int level, void **to,
|
krb4_encode(void *app_data, void *from, int length, int level, void **to,
|
||||||
struct connectdata *conn)
|
struct connectdata *conn)
|
||||||
{
|
{
|
||||||
struct krb4_data *d = app_data;
|
struct krb4_data *d = app_data;
|
||||||
*to = malloc(length + 31);
|
*to = malloc(length + 31);
|
||||||
if(level == prot_safe)
|
if(level == prot_safe)
|
||||||
return krb_mk_safe(from, *to, length, &d->key,
|
return krb_mk_safe(from, *to, length, &d->key,
|
||||||
(struct sockaddr_in *)LOCAL_ADDR,
|
(struct sockaddr_in *)LOCAL_ADDR,
|
||||||
(struct sockaddr_in *)REMOTE_ADDR);
|
(struct sockaddr_in *)REMOTE_ADDR);
|
||||||
else if(level == prot_private)
|
else if(level == prot_private)
|
||||||
return krb_mk_priv(from, *to, length, d->schedule, &d->key,
|
return krb_mk_priv(from, *to, length, d->schedule, &d->key,
|
||||||
(struct sockaddr_in *)LOCAL_ADDR,
|
(struct sockaddr_in *)LOCAL_ADDR,
|
||||||
(struct sockaddr_in *)REMOTE_ADDR);
|
(struct sockaddr_in *)REMOTE_ADDR);
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mk_auth(struct krb4_data *d, KTEXT adat,
|
mk_auth(struct krb4_data *d, KTEXT adat,
|
||||||
const char *service, char *host, int checksum)
|
const char *service, char *host, int checksum)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
CREDENTIALS cred;
|
CREDENTIALS cred;
|
||||||
char sname[SNAME_SZ], inst[INST_SZ], realm[REALM_SZ];
|
char sname[SNAME_SZ], inst[INST_SZ], realm[REALM_SZ];
|
||||||
|
|
||||||
strlcpy(sname, service, sizeof(sname));
|
strlcpy(sname, service, sizeof(sname));
|
||||||
strlcpy(inst, krb_get_phost(host), sizeof(inst));
|
strlcpy(inst, krb_get_phost(host), sizeof(inst));
|
||||||
strlcpy(realm, krb_realmofhost(host), sizeof(realm));
|
strlcpy(realm, krb_realmofhost(host), sizeof(realm));
|
||||||
ret = krb_mk_req(adat, sname, inst, realm, checksum);
|
ret = krb_mk_req(adat, sname, inst, realm, checksum);
|
||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
|
||||||
strlcpy(sname, service, sizeof(sname));
|
|
||||||
strlcpy(inst, krb_get_phost(host), sizeof(inst));
|
|
||||||
strlcpy(realm, krb_realmofhost(host), sizeof(realm));
|
|
||||||
ret = krb_get_cred(sname, inst, realm, &cred);
|
|
||||||
memmove(&d->key, &cred.session, sizeof(des_cblock));
|
|
||||||
des_key_sched(&d->key, d->schedule);
|
|
||||||
memset(&cred, 0, sizeof(cred));
|
|
||||||
return ret;
|
return ret;
|
||||||
|
strlcpy(sname, service, sizeof(sname));
|
||||||
|
strlcpy(inst, krb_get_phost(host), sizeof(inst));
|
||||||
|
strlcpy(realm, krb_realmofhost(host), sizeof(realm));
|
||||||
|
ret = krb_get_cred(sname, inst, realm, &cred);
|
||||||
|
memmove(&d->key, &cred.session, sizeof(des_cblock));
|
||||||
|
des_key_sched(&d->key, d->schedule);
|
||||||
|
memset(&cred, 0, sizeof(cred));
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_KRB_GET_OUR_IP_FOR_REALM
|
#ifdef HAVE_KRB_GET_OUR_IP_FOR_REALM
|
||||||
|
Loading…
x
Reference in New Issue
Block a user