diff options
author | brian <brian@FreeBSD.org> | 1999-01-29 22:44:47 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 1999-01-29 22:44:47 +0000 |
commit | fd44edb284ede72a5a37bfc4b35300bb7fda0cef (patch) | |
tree | 6ebedee5496dd45c1c42b3c1a45721b928ba37aa /lib/libradius | |
parent | acdb5e92a7e57850893db710ba8c13b12d2a30ea (diff) | |
download | FreeBSD-src-fd44edb284ede72a5a37bfc4b35300bb7fda0cef.zip FreeBSD-src-fd44edb284ede72a5a37bfc4b35300bb7fda0cef.tar.gz |
Install -C radlib.h
Don't insist that RAD_USER_PASSWORD is supplied before
calling rad_send_request(). Instead, insist on only one
of RAD_USER_PASSWORD and RAD_CHAP_PASSWORD.
Sponsored by: Internet Business Solutions Ltd., Switzerland
Diffstat (limited to 'lib/libradius')
-rw-r--r-- | lib/libradius/Makefile | 2 | ||||
-rw-r--r-- | lib/libradius/radlib.c | 27 | ||||
-rw-r--r-- | lib/libradius/radlib_private.h | 1 |
3 files changed, 23 insertions, 7 deletions
diff --git a/lib/libradius/Makefile b/lib/libradius/Makefile index acc3fa3..ec8bdf7 100644 --- a/lib/libradius/Makefile +++ b/lib/libradius/Makefile @@ -35,7 +35,7 @@ MAN3+= libradius.3 MAN5+= radius.conf.5 beforeinstall: - ${INSTALL} ${COPY} -o ${BINOWN} -g ${BINGRP} -m 444 \ + ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 \ ${.CURDIR}/radlib.h ${DESTDIR}/usr/include .include <bsd.lib.mk> diff --git a/lib/libradius/radlib.c b/lib/libradius/radlib.c index 2825c3d..4537373 100644 --- a/lib/libradius/radlib.c +++ b/lib/libradius/radlib.c @@ -472,6 +472,7 @@ rad_open(void) memset(h->pass, 0, sizeof h->pass); h->pass_len = 0; h->pass_pos = 0; + h->chap_pass = 0; } return h; } @@ -485,9 +486,17 @@ rad_put_addr(struct rad_handle *h, int type, struct in_addr addr) int rad_put_attr(struct rad_handle *h, int type, const void *value, size_t len) { - return type == RAD_USER_PASSWORD ? - put_password_attr(h, type, value, len) : - put_raw_attr(h, type, value, len); + int result; + + if (type == RAD_USER_PASSWORD) + result = put_password_attr(h, type, value, len); + else { + result = put_raw_attr(h, type, value, len); + if (result == 0 && type == RAD_CHAP_PASSWORD) + h->chap_pass = 1; + } + + return result; } int @@ -540,8 +549,13 @@ rad_send_request(struct rad_handle *h) } /* Make sure the user gave us a password */ - if (h->pass_pos == 0) { - generr(h, "No User-Password attribute given"); + if (h->pass_pos == 0 && !h->chap_pass) { + generr(h, "No User or Chap Password attributes given"); + return -1; + } + + if (h->pass_pos != 0 && h->chap_pass) { + generr(h, "Both User and Chap Password attributes given"); return -1; } @@ -580,7 +594,8 @@ rad_send_request(struct rad_handle *h) srv = 0; /* Insert the scrambled password into the request */ - insert_scrambled_password(h, srv); + if (h->pass_pos != 0) + insert_scrambled_password(h, srv); /* Send the request */ n = sendto(h->fd, h->request, h->req_len, 0, diff --git a/lib/libradius/radlib_private.h b/lib/libradius/radlib_private.h index d3301e3..ec181f6 100644 --- a/lib/libradius/radlib_private.h +++ b/lib/libradius/radlib_private.h @@ -74,6 +74,7 @@ struct rad_handle { char pass[PASSSIZE]; /* Cleartext password */ int pass_len; /* Length of cleartext password */ int pass_pos; /* Position of scrambled password */ + unsigned chap_pass : 1; /* Have we got a CHAP_PASSWORD ? */ unsigned char response[MSGSIZE]; /* Response received */ int resp_len; /* Length of response */ int resp_pos; /* Current position scanning attrs */ |