diff --git a/CVE-2022-41859-pre.patch b/CVE-2022-41859-pre.patch deleted file mode 100644 index bb8f564..0000000 --- a/CVE-2022-41859-pre.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 1df6f266231816171d2662eacf0e528b8ad1d7d8 Mon Sep 17 00:00:00 2001 -From: "Alan T. DeKok" -Date: Sun, 26 Dec 2021 12:02:30 -0500 -Subject: [PATCH] switch to non-deprecated API - ---- - .../rlm_eap/types/rlm_eap_pwd/eap_pwd.c | 18 +++++++++--------- - 1 file changed, 9 insertions(+), 9 deletions(-) - -diff --git a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c -index cf7ab61816cb..d428644539ba 100644 ---- a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c -+++ b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c -@@ -141,7 +141,7 @@ static void do_equation(EC_GROUP *group, BIGNUM *y2, BIGNUM *x, BN_CTX *bnctx) - p = BN_new(); - a = BN_new(); - b = BN_new(); -- EC_GROUP_get_curve_GFp(group, p, a, b, bnctx); -+ EC_GROUP_get_curve(group, p, a, b, bnctx); - - BN_sub(pm1, p, BN_value_one()); - -@@ -308,7 +308,7 @@ int compute_password_element (REQUEST *request, pwd_session_t *session, uint16_t - goto fail; - } - -- if (!EC_GROUP_get_curve_GFp(session->group, session->prime, NULL, NULL, NULL)) { -+ if (!EC_GROUP_get_curve(session->group, session->prime, NULL, NULL, NULL)) { - DEBUG("unable to get prime for GFp curve"); - goto fail; - } -@@ -444,7 +444,7 @@ int compute_password_element (REQUEST *request, pwd_session_t *session, uint16_t - * now we can savely construct PWE - */ - BN_bin2bn(xbuf, primebytelen, x_candidate); -- if (!EC_POINT_set_compressed_coordinates_GFp(session->group, session->pwe, -+ if (!EC_POINT_set_compressed_coordinates(session->group, session->pwe, - x_candidate, save_is_odd, NULL)) { - goto fail; - } -@@ -562,7 +562,7 @@ int process_peer_commit(REQUEST *request, pwd_session_t *session, uint8_t *in, s - goto finish; - } - -- if (!EC_POINT_set_affine_coordinates_GFp(session->group, session->peer_element, x, y, bn_ctx)) { -+ if (!EC_POINT_set_affine_coordinates(session->group, session->peer_element, x, y, bn_ctx)) { - REDEBUG("Unable to get coordinates of peer's element"); - goto finish; - } -@@ -621,7 +621,7 @@ int process_peer_commit(REQUEST *request, pwd_session_t *session, uint8_t *in, s - goto finish; - } - -- if (!EC_POINT_get_affine_coordinates_GFp(session->group, K, session->k, NULL, bn_ctx)) { -+ if (!EC_POINT_get_affine_coordinates(session->group, K, session->k, NULL, bn_ctx)) { - REDEBUG("Unable to get shared secret from K"); - goto finish; - } -@@ -671,7 +671,7 @@ int compute_server_confirm(REQUEST *request, pwd_session_t *session, uint8_t *ou - /* - * next is server element: x, y - */ -- if (!EC_POINT_get_affine_coordinates_GFp(session->group, session->my_element, x, y, bn_ctx)) { -+ if (!EC_POINT_get_affine_coordinates(session->group, session->my_element, x, y, bn_ctx)) { - REDEBUG("Unable to get coordinates of server element"); - goto finish; - } -@@ -696,7 +696,7 @@ int compute_server_confirm(REQUEST *request, pwd_session_t *session, uint8_t *ou - /* - * next is peer element: x, y - */ -- if (!EC_POINT_get_affine_coordinates_GFp(session->group, session->peer_element, x, y, bn_ctx)) { -+ if (!EC_POINT_get_affine_coordinates(session->group, session->peer_element, x, y, bn_ctx)) { - REDEBUG("Unable to get coordinates of peer's element"); - goto finish; - } -@@ -771,7 +771,7 @@ int compute_peer_confirm(REQUEST *request, pwd_session_t *session, uint8_t *out, - /* - * then peer element: x, y - */ -- if (!EC_POINT_get_affine_coordinates_GFp(session->group, session->peer_element, x, y, bn_ctx)) { -+ if (!EC_POINT_get_affine_coordinates(session->group, session->peer_element, x, y, bn_ctx)) { - REDEBUG("Unable to get coordinates of peer's element"); - goto finish; - } -@@ -797,7 +797,7 @@ int compute_peer_confirm(REQUEST *request, pwd_session_t *session, uint8_t *out, - /* - * then server element: x, y - */ -- if (!EC_POINT_get_affine_coordinates_GFp(session->group, session->my_element, x, y, bn_ctx)) { -+ if (!EC_POINT_get_affine_coordinates(session->group, session->my_element, x, y, bn_ctx)) { - REDEBUG("Unable to get coordinates of server element"); - goto finish; - } diff --git a/CVE-2022-41859.patch b/CVE-2022-41859.patch deleted file mode 100644 index 9d5476e..0000000 --- a/CVE-2022-41859.patch +++ /dev/null @@ -1,159 +0,0 @@ -From 9e5e8f2f912ad2da8ac6e176ac3a606333469937 Mon Sep 17 00:00:00 2001 -From: "Alan T. DeKok" -Date: Fri, 4 Feb 2022 09:36:26 -0500 -Subject: [PATCH] port fixes from master - -via the simple expedient of copying the entire function, with -some minor changes to work in v3 ---- - .../rlm_eap/types/rlm_eap_pwd/eap_pwd.c | 90 ++++++++++++++----- - 1 file changed, 66 insertions(+), 24 deletions(-) - -diff --git a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c -index d428644539ba..26260527a536 100644 ---- a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c -+++ b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c -@@ -248,18 +248,16 @@ int compute_password_element (REQUEST *request, pwd_session_t *session, uint16_t - char const *id_peer, int id_peer_len, - uint32_t *token) - { -- BIGNUM *x_candidate = NULL, *rnd = NULL, *y_sqrd = NULL, *qr = NULL, *qnr = NULL; -- HMAC_CTX *ctx = NULL; -- uint8_t pwe_digest[SHA256_DIGEST_LENGTH], *prfbuf = NULL, *xbuf = NULL, *pm1buf = NULL, ctr; -- int nid, is_odd, primebitlen, primebytelen, ret = 0, found = 0, mask; -- int save, i, rbits, qr_or_qnr, save_is_odd = 0, cmp; -- unsigned int skip; -- -- ctx = HMAC_CTX_new(); -- if (ctx == NULL) { -- DEBUG("failed allocating HMAC context"); -- goto fail; -- } -+ BIGNUM *x_candidate = NULL, *rnd = NULL, *y_sqrd = NULL, *qr = NULL, *qnr = NULL, *y1 = NULL, *y2 = NULL, *y = NULL, *exp = NULL; -+ EVP_MD_CTX *hmac_ctx; -+ EVP_PKEY *hmac_pkey; -+ uint8_t pwe_digest[SHA256_DIGEST_LENGTH], *prfbuf = NULL, *xbuf = NULL, *pm1buf = NULL, *y1buf = NULL, *y2buf = NULL, *ybuf = NULL, ctr; -+ int nid, is_odd, primebitlen, primebytelen, ret = 0, found = 0, mask; -+ int save, i, rbits, qr_or_qnr, save_is_odd = 0, cmp; -+ unsigned int skip; -+ -+ MEM(hmac_ctx = EVP_MD_CTX_new()); -+ MEM(hmac_pkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, allzero, sizeof(allzero))); - - switch (grp_num) { /* from IANA registry for IKE D-H groups */ - case 19: -@@ -303,7 +301,11 @@ int compute_password_element (REQUEST *request, pwd_session_t *session, uint16_t - ((qr = consttime_BN()) == NULL) || - ((qnr = consttime_BN()) == NULL) || - ((x_candidate = consttime_BN()) == NULL) || -- ((y_sqrd = consttime_BN()) == NULL)) { -+ ((y_sqrd = consttime_BN()) == NULL) || -+ ((y1 = consttime_BN()) == NULL) || -+ ((y2 = consttime_BN()) == NULL) || -+ ((y = consttime_BN()) == NULL) || -+ ((exp = consttime_BN()) == NULL)) { - DEBUG("unable to create bignums"); - goto fail; - } -@@ -332,6 +334,19 @@ int compute_password_element (REQUEST *request, pwd_session_t *session, uint16_t - DEBUG("unable to alloc space for pm1 buffer"); - goto fail; - } -+ if ((y1buf = talloc_zero_array(request, uint8_t, primebytelen)) == NULL) { -+ DEBUG("unable to alloc space for y1 buffer"); -+ goto fail; -+ } -+ if ((y2buf = talloc_zero_array(request, uint8_t, primebytelen)) == NULL) { -+ DEBUG("unable to alloc space for y2 buffer"); -+ goto fail; -+ } -+ if ((ybuf = talloc_zero_array(request, uint8_t, primebytelen)) == NULL) { -+ DEBUG("unable to alloc space for y buffer"); -+ goto fail; -+ } -+ - - /* - * derive random quadradic residue and quadratic non-residue -@@ -361,13 +376,19 @@ int compute_password_element (REQUEST *request, pwd_session_t *session, uint16_t - * pwd-seed = H(token | peer-id | server-id | password | - * counter) - */ -- HMAC_Init_ex(ctx, allzero, SHA256_DIGEST_LENGTH, EVP_sha256(),NULL); -- HMAC_Update(ctx, (uint8_t *)token, sizeof(*token)); -- HMAC_Update(ctx, (uint8_t const *)id_peer, id_peer_len); -- HMAC_Update(ctx, (uint8_t const *)id_server, id_server_len); -- HMAC_Update(ctx, (uint8_t const *)password, password_len); -- HMAC_Update(ctx, (uint8_t *)&ctr, sizeof(ctr)); -- pwd_hmac_final(ctx, pwe_digest); -+ EVP_DigestSignInit(hmac_ctx, NULL, EVP_sha256(), NULL, hmac_pkey); -+ EVP_DigestSignUpdate(hmac_ctx, (uint8_t *)token, sizeof(*token)); -+ EVP_DigestSignUpdate(hmac_ctx, (uint8_t const *)id_peer, id_peer_len); -+ EVP_DigestSignUpdate(hmac_ctx, (uint8_t const *)id_server, id_server_len); -+ EVP_DigestSignUpdate(hmac_ctx, (uint8_t const *)password, password_len); -+ EVP_DigestSignUpdate(hmac_ctx, (uint8_t *)&ctr, sizeof(ctr)); -+ -+ { -+ size_t mdlen = SHA256_DIGEST_LENGTH; -+ -+ EVP_DigestSignFinal(hmac_ctx, pwe_digest, &mdlen); -+ EVP_MD_CTX_reset(hmac_ctx); -+ } - - BN_bin2bn(pwe_digest, SHA256_DIGEST_LENGTH, rnd); - eap_pwd_kdf(pwe_digest, SHA256_DIGEST_LENGTH, "EAP-pwd Hunting And Pecking", -@@ -401,7 +422,7 @@ int compute_password_element (REQUEST *request, pwd_session_t *session, uint16_t - * need to unambiguously identify the solution, if there is - * one.. - */ -- is_odd = BN_is_odd(rnd) ? 1 : 0; -+ is_odd = BN_is_odd(rnd); - - /* - * check whether x^3 + a*x + b is a quadratic residue -@@ -444,8 +465,21 @@ int compute_password_element (REQUEST *request, pwd_session_t *session, uint16_t - * now we can savely construct PWE - */ - BN_bin2bn(xbuf, primebytelen, x_candidate); -- if (!EC_POINT_set_compressed_coordinates(session->group, session->pwe, -- x_candidate, save_is_odd, NULL)) { -+ do_equation(session->group, y_sqrd, x_candidate, session->bnctx); -+ if ( !BN_add(exp, session->prime, BN_value_one()) || -+ !BN_rshift(exp, exp, 2) || -+ !BN_mod_exp_mont_consttime(y1, y_sqrd, exp, session->prime, session->bnctx, NULL) || -+ !BN_sub(y2, session->prime, y1) || -+ !BN_bn2bin(y1, y1buf) || -+ !BN_bn2bin(y2, y2buf)) { -+ DEBUG("unable to compute y"); -+ goto fail; -+ } -+ mask = const_time_eq(save_is_odd, BN_is_odd(y1)); -+ const_time_select_bin(mask, y1buf, y2buf, primebytelen, ybuf); -+ if (BN_bin2bn(ybuf, primebytelen, y) == NULL || -+ !EC_POINT_set_affine_coordinates(session->group, session->pwe, x_candidate, y, session->bnctx)) { -+ DEBUG("unable to set point coordinate"); - goto fail; - } - -@@ -461,12 +495,20 @@ int compute_password_element (REQUEST *request, pwd_session_t *session, uint16_t - BN_clear_free(qr); - BN_clear_free(qnr); - BN_clear_free(rnd); -+ BN_clear_free(y1); -+ BN_clear_free(y2); -+ BN_clear_free(y); -+ BN_clear_free(exp); - - if (prfbuf) talloc_free(prfbuf); - if (xbuf) talloc_free(xbuf); - if (pm1buf) talloc_free(pm1buf); -+ if (y1buf) talloc_free(y1buf); -+ if (y2buf) talloc_free(y2buf); -+ if (ybuf) talloc_free(ybuf); - -- HMAC_CTX_free(ctx); -+ EVP_MD_CTX_free(hmac_ctx); -+ EVP_PKEY_free(hmac_pkey); - - return ret; - } diff --git a/CVE-2022-41860.patch b/CVE-2022-41860.patch deleted file mode 100644 index 421a0ce..0000000 --- a/CVE-2022-41860.patch +++ /dev/null @@ -1,109 +0,0 @@ -From f1cdbb33ec61c4a64a32e107d4d02f936051c708 Mon Sep 17 00:00:00 2001 -From: "Alan T. DeKok" -Date: Mon, 7 Feb 2022 22:26:05 -0500 -Subject: [PATCH] it's probably wrong to be completely retarded. Let's fix - that. - ---- - src/modules/rlm_eap/libeap/eapsimlib.c | 69 +++++++++++++++++++------- - 1 file changed, 52 insertions(+), 17 deletions(-) - -diff --git a/src/modules/rlm_eap/libeap/eapsimlib.c b/src/modules/rlm_eap/libeap/eapsimlib.c -index cf1e8a7dd924..e438a844eab3 100644 ---- a/src/modules/rlm_eap/libeap/eapsimlib.c -+++ b/src/modules/rlm_eap/libeap/eapsimlib.c -@@ -307,42 +307,77 @@ int unmap_eapsim_basictypes(RADIUS_PACKET *r, - newvp->vp_length = 1; - fr_pair_add(&(r->vps), newvp); - -+ /* -+ * EAP-SIM has a 1 octet of subtype, and 2 octets -+ * reserved. -+ */ - attr += 3; - attrlen -= 3; - -- /* now, loop processing each attribute that we find */ -- while(attrlen > 0) { -+ /* -+ * Loop over each attribute. The format is: -+ * -+ * 1 octet of type -+ * 1 octet of length (value 1..255) -+ * ((4 * length) - 2) octets of data. -+ */ -+ while (attrlen > 0) { - uint8_t *p; - -- if(attrlen < 2) { -+ if (attrlen < 2) { - fr_strerror_printf("EAP-Sim attribute %d too short: %d < 2", es_attribute_count, attrlen); - return 0; - } - -+ if (!attr[1]) { -+ fr_strerror_printf("EAP-Sim attribute %d (no.%d) has no data", eapsim_attribute, -+ es_attribute_count); -+ return 0; -+ } -+ - eapsim_attribute = attr[0]; - eapsim_len = attr[1] * 4; - -+ /* -+ * The length includes the 2-byte header. -+ */ - if (eapsim_len > attrlen) { - fr_strerror_printf("EAP-Sim attribute %d (no.%d) has length longer than data (%d > %d)", - eapsim_attribute, es_attribute_count, eapsim_len, attrlen); - return 0; - } - -- if(eapsim_len > MAX_STRING_LEN) { -- eapsim_len = MAX_STRING_LEN; -- } -- if (eapsim_len < 2) { -- fr_strerror_printf("EAP-Sim attribute %d (no.%d) has length too small", eapsim_attribute, -- es_attribute_count); -- return 0; -- } -+ newvp = fr_pair_afrom_num(r, eapsim_attribute + PW_EAP_SIM_BASE, 0); -+ if (!newvp) { -+ /* -+ * RFC 4186 Section 8.1 says 0..127 are -+ * "non-skippable". If one such -+ * attribute is found and we don't -+ * understand it, the server has to send: -+ * -+ * EAP-Request/SIM/Notification packet with an -+ * (AT_NOTIFICATION code, which implies general failure ("General -+ * failure after authentication" (0), or "General failure" (16384), -+ * depending on the phase of the exchange), which terminates the -+ * authentication exchange. -+ */ -+ if (eapsim_attribute <= 127) { -+ fr_strerror_printf("Unknown mandatory attribute %d, failing", -+ eapsim_attribute); -+ return 0; -+ } - -- newvp = fr_pair_afrom_num(r, eapsim_attribute+PW_EAP_SIM_BASE, 0); -- newvp->vp_length = eapsim_len-2; -- newvp->vp_octets = p = talloc_array(newvp, uint8_t, newvp->vp_length); -- memcpy(p, &attr[2], eapsim_len-2); -- fr_pair_add(&(r->vps), newvp); -- newvp = NULL; -+ } else { -+ /* -+ * It's known, ccount for header, and -+ * copy the value over. -+ */ -+ newvp->vp_length = eapsim_len - 2; -+ -+ newvp->vp_octets = p = talloc_array(newvp, uint8_t, newvp->vp_length); -+ memcpy(p, &attr[2], newvp->vp_length); -+ fr_pair_add(&(r->vps), newvp); -+ } - - /* advance pointers, decrement length */ - attr += eapsim_len; diff --git a/CVE-2022-41861.patch b/CVE-2022-41861.patch deleted file mode 100644 index edecbc3..0000000 --- a/CVE-2022-41861.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 0ec2b39d260e08e4c3464f6b95005821dc559c62 Mon Sep 17 00:00:00 2001 -From: "Alan T. DeKok" -Date: Mon, 28 Feb 2022 10:34:15 -0500 -Subject: [PATCH] manual port of commit 5906bfa1 - ---- - src/lib/filters.c | 12 +++++++++--- - 1 file changed, 9 insertions(+), 3 deletions(-) - -diff --git a/src/lib/filters.c b/src/lib/filters.c -index 4868cd385d9f..3f3b63daeef3 100644 ---- a/src/lib/filters.c -+++ b/src/lib/filters.c -@@ -1205,13 +1205,19 @@ void print_abinary(char *out, size_t outlen, uint8_t const *data, size_t len, in - } - } - } else if (filter->type == RAD_FILTER_GENERIC) { -- int count; -+ size_t count, masklen; -+ -+ masklen = ntohs(filter->u.generic.len); -+ if (masklen >= sizeof(filter->u.generic.mask)) { -+ *p = '\0'; -+ return; -+ } - - i = snprintf(p, outlen, " %u ", (unsigned int) ntohs(filter->u.generic.offset)); - p += i; - - /* show the mask */ -- for (count = 0; count < ntohs(filter->u.generic.len); count++) { -+ for (count = 0; count < masklen; count++) { - i = snprintf(p, outlen, "%02x", filter->u.generic.mask[count]); - p += i; - outlen -= i; -@@ -1222,7 +1228,7 @@ void print_abinary(char *out, size_t outlen, uint8_t const *data, size_t len, in - outlen--; - - /* show the value */ -- for (count = 0; count < ntohs(filter->u.generic.len); count++) { -+ for (count = 0; count < masklen; count++) { - i = snprintf(p, outlen, "%02x", filter->u.generic.value[count]); - p += i; - outlen -= i; diff --git a/freeradius-server-3.0.25.tar.gz b/freeradius-server-3.0.25.tar.gz deleted file mode 100644 index fc55e99..0000000 Binary files a/freeradius-server-3.0.25.tar.gz and /dev/null differ diff --git a/freeradius-server-3.0.26.tar.gz b/freeradius-server-3.0.26.tar.gz new file mode 100644 index 0000000..3c1b3ad Binary files /dev/null and b/freeradius-server-3.0.26.tar.gz differ diff --git a/freeradius.spec b/freeradius.spec index c22ed8f..2b58682 100644 --- a/freeradius.spec +++ b/freeradius.spec @@ -3,8 +3,8 @@ %define perl_version %(eval "`%{__perl} -V:version`"; echo $version) Name: freeradius -Version: 3.0.25 -Release: 2 +Version: 3.0.26 +Release: 1 Summary: Remote Authentication Dial-In User Service License: GPLv2+ and LGPLv2+ @@ -14,10 +14,6 @@ Source1: radiusd.service Source2: freeradius-logrotate Source3: freeradius-pam-conf Source4: freeradius-tmpfiles.conf -patch0000: CVE-2022-41859-pre.patch -patch0001: CVE-2022-41859.patch -patch0002: CVE-2022-41860.patch -patch0003: CVE-2022-41861.patch BuildRequires: autoconf gdbm-devel openssl openssl-devel pam-devel zlib-devel net-snmp-devel BuildRequires: net-snmp-utils readline-devel libpcap-devel systemd-units libtalloc-devel @@ -276,6 +272,7 @@ exit 0 %attr(640,root,radiusd) %config(noreplace) /etc/raddb/sites-available/{robust-proxy-accounting,soh,coa,coa-relay,example} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/sites-available/{inner-tunnel,dhcp,check-eap-tls,status} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/sites-available/{dhcp.relay,virtual.example.com} +%attr(640,root,radiusd) %config(noreplace) /etc/raddb/sites-available/google-ldap-auth %attr(640,root,radiusd) %config(noreplace) /etc/raddb/sites-available/{originate-coa,vmps,default} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/sites-available/{proxy-inner-tunnel,dynamic-clients} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/sites-available/{copy-acct-to-home-server,buffered-sql} @@ -290,13 +287,14 @@ exit 0 # /etc/raddb/mods-available/ dir %dir %attr(750,root,radiusd) /etc/raddb/mods-available /etc/raddb/mods-available/README.rst -%attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/{always,attr_filter,cache} +%attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/{always,attr_filter,cache,cache_auth} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/{cache_eap,chap,counter,cui,date} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/{detail,detail.example.com,detail.log} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/{dhcp,dhcp_sqlippool,digest} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/{dynamic_clients,eap,echo,etc_group} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/{exec,expiration,expr,files,idn} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/{inner-eap,ippool,linelog,logintime} +%attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/ldap_google %attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/{mac2ip,mac2vlan,mschap,ntlm_auth} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/{opendirectory,otp,pam,pap,passwd} %attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/{preprocess,python3,python,radutmp,realm} @@ -493,6 +491,9 @@ exit 0 %attr(640,root,radiusd) %config(noreplace) /etc/raddb/mods-available/ldap %changelog +* Thu Feb 2 2023 liyanan - 3.0.26-1 +- Update to 3.0.26 + * Wed Dec 21 2022 jiangpeng - 3.0.25-2 - Fix CVE-2022-41859 and CVE-2022-41860 and CVE-2022-41861