summaryrefslogtreecommitdiff
path: root/accel-pptpd/auth/auth_chap_md5.c
diff options
context:
space:
mode:
Diffstat (limited to 'accel-pptpd/auth/auth_chap_md5.c')
-rw-r--r--accel-pptpd/auth/auth_chap_md5.c173
1 files changed, 91 insertions, 82 deletions
diff --git a/accel-pptpd/auth/auth_chap_md5.c b/accel-pptpd/auth/auth_chap_md5.c
index e0fe2d4e..4031a9a7 100644
--- a/accel-pptpd/auth/auth_chap_md5.c
+++ b/accel-pptpd/auth/auth_chap_md5.c
@@ -84,49 +84,49 @@ static void chap_recv(struct ppp_handler_t *h);
static void chap_timeout(struct triton_timer_t *t);
static void chap_restart(struct triton_timer_t *t);
-static void print_buf(const uint8_t *buf,int size)
+static void print_buf(const uint8_t *buf, int size)
{
int i;
- for(i=0;i<size;i++)
- log_ppp_debug("%x",buf[i]);
+ for (i=0; i < size; i++)
+ log_ppp_info("%x", buf[i]);
}
-static void print_str(const char *buf,int size)
+static void print_str(const char *buf, int size)
{
int i;
- for(i=0;i<size;i++)
- log_ppp_debug("%c",buf[i]);
+ for (i = 0; i < size; i++)
+ log_ppp_info("%c", buf[i]);
}
static struct auth_data_t* auth_data_init(struct ppp_t *ppp)
{
- struct chap_auth_data_t *d=_malloc(sizeof(*d));
+ struct chap_auth_data_t *d = _malloc(sizeof(*d));
- memset(d,0,sizeof(*d));
- d->auth.proto=PPP_CHAP;
- d->ppp=ppp;
+ memset(d, 0, sizeof(*d));
+ d->auth.proto = PPP_CHAP;
+ d->ppp = ppp;
return &d->auth;
}
-static void auth_data_free(struct ppp_t *ppp,struct auth_data_t *auth)
+static void auth_data_free(struct ppp_t *ppp, struct auth_data_t *auth)
{
- struct chap_auth_data_t *d=container_of(auth,typeof(*d),auth);
+ struct chap_auth_data_t *d = container_of(auth, typeof(*d), auth);
_free(d);
}
static int chap_start(struct ppp_t *ppp, struct auth_data_t *auth)
{
- struct chap_auth_data_t *d=container_of(auth,typeof(*d),auth);
+ struct chap_auth_data_t *d = container_of(auth, typeof(*d), auth);
- d->h.proto=PPP_CHAP;
- d->h.recv=chap_recv;
+ d->h.proto = PPP_CHAP;
+ d->h.recv = chap_recv;
d->timeout.expire = chap_timeout;
d->timeout.period = conf_timeout * 1000;
d->interval.expire = chap_restart;
d->interval.period = conf_interval * 1000;
- ppp_register_chan_handler(ppp,&d->h);
+ ppp_register_chan_handler(ppp, &d->h);
chap_send_challenge(d);
@@ -135,7 +135,7 @@ static int chap_start(struct ppp_t *ppp, struct auth_data_t *auth)
static int chap_finish(struct ppp_t *ppp, struct auth_data_t *auth)
{
- struct chap_auth_data_t *d=container_of(auth,typeof(*d),auth);
+ struct chap_auth_data_t *d = container_of(auth, typeof(*d), auth);
if (d->timeout.tpd)
triton_timer_del(&d->timeout);
@@ -143,7 +143,7 @@ static int chap_finish(struct ppp_t *ppp, struct auth_data_t *auth)
if (d->interval.tpd)
triton_timer_del(&d->interval);
- ppp_unregister_handler(ppp,&d->h);
+ ppp_unregister_handler(ppp, &d->h);
return 0;
}
@@ -152,7 +152,8 @@ static void chap_timeout(struct triton_timer_t *t)
{
struct chap_auth_data_t *d = container_of(t, typeof(*d), timeout);
- log_ppp_warn("chap-md5: timeout\n");
+ if (conf_ppp_verbose)
+ log_ppp_warn("chap-md5: timeout\n");
if (++d->failure == conf_max_failure) {
if (d->started)
@@ -187,55 +188,56 @@ static int lcp_recv_conf_req(struct ppp_t *ppp, struct auth_data_t *d, uint8_t *
static void chap_send_failure(struct chap_auth_data_t *ad)
{
- struct chap_failure_t msg=
- {
- .hdr.proto=htons(PPP_CHAP),
- .hdr.code=CHAP_FAILURE,
- .hdr.id=ad->id,
- .hdr.len=htons(sizeof(msg)-1-2),
- .message=MSG_FAILURE,
+ struct chap_failure_t msg = {
+ .hdr.proto = htons(PPP_CHAP),
+ .hdr.code = CHAP_FAILURE,
+ .hdr.id = ad->id,
+ .hdr.len = htons(sizeof(msg) - 1 - 2),
+ .message = MSG_FAILURE,
};
- log_ppp_debug("send [CHAP Failure id=%x \"%s\"]\n",msg.hdr.id,MSG_FAILURE);
+ if (conf_ppp_verbose)
+ log_ppp_info("send [CHAP Failure id=%x \"%s\"]\n", msg.hdr.id, MSG_FAILURE);
- ppp_chan_send(ad->ppp,&msg,ntohs(msg.hdr.len)+2);
+ ppp_chan_send(ad->ppp, &msg, ntohs(msg.hdr.len) + 2);
}
static void chap_send_success(struct chap_auth_data_t *ad)
{
- struct chap_success_t msg=
- {
- .hdr.proto=htons(PPP_CHAP),
- .hdr.code=CHAP_SUCCESS,
- .hdr.id=ad->id,
- .hdr.len=htons(sizeof(msg)-1-2),
- .message=MSG_SUCCESS,
+ struct chap_success_t msg = {
+ .hdr.proto = htons(PPP_CHAP),
+ .hdr.code = CHAP_SUCCESS,
+ .hdr.id = ad->id,
+ .hdr.len = htons(sizeof(msg)-1-2),
+ .message = MSG_SUCCESS,
};
- log_ppp_debug("send [CHAP Success id=%x \"%s\"]\n",msg.hdr.id,MSG_SUCCESS);
+ if (conf_ppp_verbose)
+ log_ppp_info("send [CHAP Success id=%x \"%s\"]\n", msg.hdr.id, MSG_SUCCESS);
- ppp_chan_send(ad->ppp,&msg,ntohs(msg.hdr.len)+2);
+ ppp_chan_send(ad->ppp, &msg, ntohs(msg.hdr.len) + 2);
}
static void chap_send_challenge(struct chap_auth_data_t *ad)
{
- struct chap_challenge_t msg=
- {
- .hdr.proto=htons(PPP_CHAP),
- .hdr.code=CHAP_CHALLENGE,
- .hdr.id=++ad->id,
- .hdr.len=htons(sizeof(msg)-2),
- .val_size=VALUE_SIZE,
+ struct chap_challenge_t msg = {
+ .hdr.proto = htons(PPP_CHAP),
+ .hdr.code = CHAP_CHALLENGE,
+ .hdr.id = ++ad->id,
+ .hdr.len = htons(sizeof(msg) - 2),
+ .val_size = VALUE_SIZE,
};
- read(urandom_fd,ad->val,VALUE_SIZE);
- memcpy(msg.val,ad->val,VALUE_SIZE);
+ read(urandom_fd, ad->val, VALUE_SIZE);
+ memcpy(msg.val, ad->val, VALUE_SIZE);
- log_ppp_debug("send [CHAP Challenge id=%x <",msg.hdr.id);
- print_buf(msg.val,VALUE_SIZE);
- log_ppp_debug(">]\n");
+ if (conf_ppp_verbose) {
+ log_ppp_info("send [CHAP Challenge id=%x <", msg.hdr.id);
+ print_buf(msg.val, VALUE_SIZE);
+ log_ppp_info(">]\n");
+ }
- ppp_chan_send(ad->ppp,&msg,ntohs(msg.hdr.len)+2);
+ ppp_chan_send(ad->ppp, &msg, ntohs(msg.hdr.len) + 2);
if (conf_timeout && !ad->timeout.tpd)
triton_timer_add(ad->ppp->ctrl->ctx, &ad->timeout, 0);
@@ -248,32 +250,33 @@ static void chap_recv_response(struct chap_auth_data_t *ad, struct chap_hdr_t *h
char *passwd;
char *name;
int r;
- struct chap_challenge_t *msg=(struct chap_challenge_t*)hdr;
+ struct chap_challenge_t *msg = (struct chap_challenge_t*)hdr;
if (ad->timeout.tpd)
triton_timer_del(&ad->timeout);
- log_ppp_debug("recv [CHAP Response id=%x <", msg->hdr.id);
- print_buf(msg->val,msg->val_size);
- log_ppp_debug(">, name=\"");
- print_str(msg->name,ntohs(msg->hdr.len)-sizeof(*msg)+2);
- log_ppp_debug("\"]\n");
+ if (conf_ppp_verbose) {
+ log_ppp_info("recv [CHAP Response id=%x <", msg->hdr.id);
+ print_buf(msg->val, msg->val_size);
+ log_ppp_info(">, name=\"");
+ print_str(msg->name, ntohs(msg->hdr.len) - sizeof(*msg) + 2);
+ log_ppp_info("\"]\n");
+ }
- if (msg->hdr.id!=ad->id)
- {
- log_ppp_error("chap-md5: id mismatch\n");
+ if (msg->hdr.id != ad->id) {
+ if (conf_ppp_verbose)
+ log_ppp_error("chap-md5: id mismatch\n");
chap_send_failure(ad);
ppp_terminate(ad->ppp, 0);
}
- if (msg->val_size!=VALUE_SIZE)
- {
- log_ppp_error("chap-md5: value-size should be %i, expected %i\n",VALUE_SIZE,msg->val_size);
+ if (msg->val_size != VALUE_SIZE) {
+ log_ppp_error("chap-md5: incorrect value-size (%i)\n", msg->val_size);
chap_send_failure(ad);
ppp_terminate(ad->ppp, 0);
}
- name = _strndup(msg->name,ntohs(msg->hdr.len)-sizeof(*msg)+2);
+ name = _strndup(msg->name,ntohs(msg->hdr.len) - sizeof(*msg) + 2);
r = pwdb_check(ad->ppp, name, PPP_CHAP, CHAP_MD5, ad->id, ad->val, VALUE_SIZE, msg->val);
@@ -282,7 +285,8 @@ static void chap_recv_response(struct chap_auth_data_t *ad, struct chap_hdr_t *h
if (!passwd)
{
_free(name);
- log_ppp_debug("chap-md5: user not found\n");
+ if (conf_ppp_verbose)
+ log_ppp_warn("chap-md5: user not found\n");
chap_send_failure(ad);
return;
}
@@ -295,7 +299,8 @@ static void chap_recv_response(struct chap_auth_data_t *ad, struct chap_hdr_t *h
if (memcmp(md5,msg->val,sizeof(md5)))
{
- log_ppp_debug("chap-md5: challenge response mismatch\n");
+ if (conf_ppp_verbose)
+ log_ppp_warn("chap-md5: challenge response mismatch\n");
chap_send_failure(ad);
if (ad->started)
ppp_terminate(ad->ppp, 0);
@@ -331,33 +336,37 @@ static void chap_recv_response(struct chap_auth_data_t *ad, struct chap_hdr_t *h
}
}
+static int chap_check(uint8_t *ptr)
+{
+ return *ptr == CHAP_MD5;
+}
+
static struct ppp_auth_handler_t chap=
{
- .name="CHAP-md5",
- .init=auth_data_init,
- .free=auth_data_free,
- .send_conf_req=lcp_send_conf_req,
- .recv_conf_req=lcp_recv_conf_req,
- .start=chap_start,
- .finish=chap_finish,
+ .name = "CHAP-md5",
+ .init = auth_data_init,
+ .free = auth_data_free,
+ .send_conf_req = lcp_send_conf_req,
+ .recv_conf_req = lcp_recv_conf_req,
+ .start = chap_start,
+ .finish = chap_finish,
+ .check = chap_check,
};
static void chap_recv(struct ppp_handler_t *h)
{
- struct chap_auth_data_t *d=container_of(h,typeof(*d),h);
- struct chap_hdr_t *hdr=(struct chap_hdr_t *)d->ppp->chan_buf;
+ struct chap_auth_data_t *d = container_of(h, typeof(*d), h);
+ struct chap_hdr_t *hdr = (struct chap_hdr_t *)d->ppp->chan_buf;
- if (d->ppp->chan_buf_size<sizeof(*hdr) || ntohs(hdr->len)<HDR_LEN || ntohs(hdr->len)<d->ppp->chan_buf_size-2)
- {
- log_ppp_warn("CHAP: short packet received\n");
+ if (d->ppp->chan_buf_size < sizeof(*hdr) || ntohs(hdr->len) < HDR_LEN || ntohs(hdr->len) < d->ppp->chan_buf_size - 2) {
+ log_ppp_warn("chap-md5: short packet received\n");
return;
}
- if (hdr->code==CHAP_RESPONSE) chap_recv_response(d,hdr);
+ if (hdr->code == CHAP_RESPONSE)
+ chap_recv_response(d, hdr);
else
- {
- log_ppp_warn("CHAP: unknown code received %x\n",hdr->code);
- }
+ log_ppp_warn("chap-md5: unknown code received %x\n", hdr->code);
}
static void __init auth_chap_md5_init()
@@ -384,6 +393,6 @@ static void __init auth_chap_md5_init()
}
if (ppp_auth_register_handler(&chap))
- log_error("chap-md5: failed to register handler\n");
+ log_emerg("chap-md5: failed to register handler\n");
}