Make libradius(3) buildable.

This commit is contained in:
Jung-uk Kim 2018-09-19 07:06:20 +00:00
parent 07f5430d5c
commit 328bbc11c9
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/projects/openssl111/; revision=338781

View File

@ -156,22 +156,21 @@ insert_message_authenticator(struct rad_handle *h, int resp)
u_char md[EVP_MAX_MD_SIZE]; u_char md[EVP_MAX_MD_SIZE];
u_int md_len; u_int md_len;
const struct rad_server *srvp; const struct rad_server *srvp;
HMAC_CTX ctx; HMAC_CTX *ctx;
srvp = &h->servers[h->srv]; srvp = &h->servers[h->srv];
if (h->authentic_pos != 0) { if (h->authentic_pos != 0) {
HMAC_CTX_init(&ctx); ctx = HMAC_CTX_new();
HMAC_Init(&ctx, srvp->secret, strlen(srvp->secret), EVP_md5()); HMAC_Init_ex(ctx, srvp->secret, strlen(srvp->secret), EVP_md5(), NULL);
HMAC_Update(&ctx, &h->out[POS_CODE], POS_AUTH - POS_CODE); HMAC_Update(ctx, &h->out[POS_CODE], POS_AUTH - POS_CODE);
if (resp) if (resp)
HMAC_Update(&ctx, &h->in[POS_AUTH], LEN_AUTH); HMAC_Update(ctx, &h->in[POS_AUTH], LEN_AUTH);
else else
HMAC_Update(&ctx, &h->out[POS_AUTH], LEN_AUTH); HMAC_Update(ctx, &h->out[POS_AUTH], LEN_AUTH);
HMAC_Update(&ctx, &h->out[POS_ATTRS], HMAC_Update(ctx, &h->out[POS_ATTRS],
h->out_len - POS_ATTRS); h->out_len - POS_ATTRS);
HMAC_Final(&ctx, md, &md_len); HMAC_Final(ctx, md, &md_len);
HMAC_CTX_cleanup(&ctx); HMAC_CTX_free(ctx);
HMAC_cleanup(&ctx);
memcpy(&h->out[h->authentic_pos + 2], md, md_len); memcpy(&h->out[h->authentic_pos + 2], md, md_len);
} }
#endif #endif
@ -190,7 +189,7 @@ is_valid_response(struct rad_handle *h, int srv,
const struct rad_server *srvp; const struct rad_server *srvp;
int len; int len;
#ifdef WITH_SSL #ifdef WITH_SSL
HMAC_CTX hctx; HMAC_CTX *hctx;
u_char resp[MSGSIZE], md[EVP_MAX_MD_SIZE]; u_char resp[MSGSIZE], md[EVP_MAX_MD_SIZE];
u_int md_len; u_int md_len;
int pos; int pos;
@ -232,31 +231,33 @@ is_valid_response(struct rad_handle *h, int srv,
pos = POS_ATTRS; pos = POS_ATTRS;
/* Search and verify the Message-Authenticator */ /* Search and verify the Message-Authenticator */
hctx = HMAC_CTX_new();
while (pos < len - 2) { while (pos < len - 2) {
if (h->in[pos] == RAD_MESSAGE_AUTHENTIC) { if (h->in[pos] == RAD_MESSAGE_AUTHENTIC) {
/* zero fill the Message-Authenticator */ /* zero fill the Message-Authenticator */
memset(&resp[pos + 2], 0, MD5_DIGEST_LENGTH); memset(&resp[pos + 2], 0, MD5_DIGEST_LENGTH);
HMAC_CTX_init(&hctx); HMAC_Init_ex(hctx, srvp->secret,
HMAC_Init(&hctx, srvp->secret, strlen(srvp->secret), EVP_md5(), NULL);
strlen(srvp->secret), EVP_md5()); HMAC_Update(hctx, &h->in[POS_CODE],
HMAC_Update(&hctx, &h->in[POS_CODE],
POS_AUTH - POS_CODE); POS_AUTH - POS_CODE);
HMAC_Update(&hctx, &h->out[POS_AUTH], HMAC_Update(hctx, &h->out[POS_AUTH],
LEN_AUTH); LEN_AUTH);
HMAC_Update(&hctx, &resp[POS_ATTRS], HMAC_Update(hctx, &resp[POS_ATTRS],
h->in_len - POS_ATTRS); h->in_len - POS_ATTRS);
HMAC_Final(&hctx, md, &md_len); HMAC_Final(hctx, md, &md_len);
HMAC_CTX_cleanup(&hctx); HMAC_CTX_reset(hctx);
HMAC_cleanup(&hctx);
if (memcmp(md, &h->in[pos + 2], if (memcmp(md, &h->in[pos + 2],
MD5_DIGEST_LENGTH) != 0) MD5_DIGEST_LENGTH) != 0) {
HMAC_CTX_free(hctx);
return 0; return 0;
}
break; break;
} }
pos += h->in[pos + 1]; pos += h->in[pos + 1];
} }
HMAC_CTX_free(hctx);
} }
#endif #endif
return 1; return 1;
@ -273,7 +274,7 @@ is_valid_request(struct rad_handle *h)
const struct rad_server *srvp; const struct rad_server *srvp;
int len; int len;
#ifdef WITH_SSL #ifdef WITH_SSL
HMAC_CTX hctx; HMAC_CTX *hctx;
u_char resp[MSGSIZE], md[EVP_MAX_MD_SIZE]; u_char resp[MSGSIZE], md[EVP_MAX_MD_SIZE];
u_int md_len; u_int md_len;
int pos; int pos;
@ -304,6 +305,7 @@ is_valid_request(struct rad_handle *h)
#ifdef WITH_SSL #ifdef WITH_SSL
/* Search and verify the Message-Authenticator */ /* Search and verify the Message-Authenticator */
pos = POS_ATTRS; pos = POS_ATTRS;
hctx = HMAC_CTX_new();
while (pos < len - 2) { while (pos < len - 2) {
if (h->in[pos] == RAD_MESSAGE_AUTHENTIC) { if (h->in[pos] == RAD_MESSAGE_AUTHENTIC) {
memcpy(resp, h->in, MSGSIZE); memcpy(resp, h->in, MSGSIZE);
@ -313,20 +315,21 @@ is_valid_request(struct rad_handle *h)
/* zero fill the Message-Authenticator */ /* zero fill the Message-Authenticator */
memset(&resp[pos + 2], 0, MD5_DIGEST_LENGTH); memset(&resp[pos + 2], 0, MD5_DIGEST_LENGTH);
HMAC_CTX_init(&hctx); HMAC_Init_ex(hctx, srvp->secret,
HMAC_Init(&hctx, srvp->secret, strlen(srvp->secret), EVP_md5(), NULL);
strlen(srvp->secret), EVP_md5()); HMAC_Update(hctx, resp, h->in_len);
HMAC_Update(&hctx, resp, h->in_len); HMAC_Final(hctx, md, &md_len);
HMAC_Final(&hctx, md, &md_len); HMAC_CTX_reset(hctx);
HMAC_CTX_cleanup(&hctx);
HMAC_cleanup(&hctx);
if (memcmp(md, &h->in[pos + 2], if (memcmp(md, &h->in[pos + 2],
MD5_DIGEST_LENGTH) != 0) MD5_DIGEST_LENGTH) != 0) {
HMAC_CTX_free(hctx);
return (0); return (0);
}
break; break;
} }
pos += h->in[pos + 1]; pos += h->in[pos + 1];
} }
HMAC_CTX_free(hctx);
#endif #endif
return (1); return (1);
} }