summaryrefslogtreecommitdiff
path: root/accel-pppd/ctrl/l2tp/l2tp.c
diff options
context:
space:
mode:
authorGuillaume Nault <g.nault@alphalink.fr>2013-04-09 21:43:04 +0200
committerDmitry Kozlov <xeb@mail.ru>2013-04-17 09:06:35 +0400
commitb041db6c60fb80846ad6b6770adc3971e41b2194 (patch)
treed1d2b3b8b5dbae57360357bf8b0ad4064abc01a3 /accel-pppd/ctrl/l2tp/l2tp.c
parent76f30e4e2d664d3c10f988b8d9660b478718c777 (diff)
downloadaccel-ppp-b041db6c60fb80846ad6b6770adc3971e41b2194.tar.gz
accel-ppp-b041db6c60fb80846ad6b6770adc3971e41b2194.zip
utils: Add random buffer generation function
Define and export the u_randbuf() function that fills a buffer with random data. Convert L2TP's challenge generation code for using it. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
Diffstat (limited to 'accel-pppd/ctrl/l2tp/l2tp.c')
-rw-r--r--accel-pppd/ctrl/l2tp/l2tp.c27
1 files changed, 9 insertions, 18 deletions
diff --git a/accel-pppd/ctrl/l2tp/l2tp.c b/accel-pppd/ctrl/l2tp/l2tp.c
index 267a47f8..c6ba82ff 100644
--- a/accel-pppd/ctrl/l2tp/l2tp.c
+++ b/accel-pppd/ctrl/l2tp/l2tp.c
@@ -223,8 +223,7 @@ static int l2tp_tunnel_genchall(uint16_t chall_len,
struct l2tp_packet_t *pack)
{
void *ptr = NULL;
- size_t urandlen;
- ssize_t rdlen;
+ int err;
if (chall_len == 0
|| conf_secret == NULL || conf_secret_len == 0) {
@@ -248,26 +247,18 @@ static int l2tp_tunnel_genchall(uint16_t chall_len,
conn->challenge_len = chall_len;
}
- for (urandlen = 0; urandlen < chall_len; urandlen += rdlen) {
- rdlen = read(urandom_fd, conn->challenge + urandlen,
- chall_len - urandlen);
- if (rdlen < 0) {
- if (errno == EINTR)
- rdlen = 0;
- else {
- log_tunnel(log_error, conn,
- "impossible to generate Challenge:"
- " reading from urandom failed: %s\n",
- strerror(errno));
- goto err;
- }
- } else if (rdlen == 0) {
+ if (u_randbuf(conn->challenge, chall_len, &err) < 0) {
+ if (err)
+ log_tunnel(log_error, conn,
+ "impossible to generate Challenge:"
+ " reading from urandom failed: %s\n",
+ strerror(err));
+ else
log_tunnel(log_error, conn,
"impossible to generate Challenge:"
" end of file reached while reading"
" from urandom\n");
- goto err;
- }
+ goto err;
}
if (l2tp_packet_add_octets(pack, Challenge, conn->challenge,