Changeset 33011


Ignore:
Timestamp:
Aug 4, 2017, 12:06:33 AM (3 weeks ago)
Author:
brainslayer
Message:

update freeradius

Location:
src/router/freeradius3
Files:
37 edited

Legend:

Unmodified
Added
Removed
  • src/router/freeradius3/Make.inc.in

    r32331 r33011  
    22# Make.inc.in
    33#
    4 # Version:      $Id: 7a77625ff7a902385dcfb4723991d06a0a74f0f0 $
     4# Version:      $Id: a69292e333a3fdbadb0636d1d5a536d79e0e266b $
    55#
    66
     
    109109LIBREADLINE     = @LIBREADLINE@
    110110
     111WITH_DHCP       = @WITH_DHCP@
     112
    111113#
    112114#  Version to use for packaging and other Make related things
  • src/router/freeradius3/VERSION

    r32331 r33011  
    1 3.0.14
     13.0.15
  • src/router/freeradius3/configure

    r32331 r33011  
    11#! /bin/sh
    22# Guess values for system-dependent variables and create Makefiles.
    3 # Generated by GNU Autoconf 2.69 for freeradius $Id: 05860f885c116bb6c75c98c7bd8dc29688cf6ca3 $.
     3# Generated by GNU Autoconf 2.69 for freeradius $Id: 4fa37f79c3d82a63558d7cd1d31f8934d7522b35 $.
    44#
    55# Report bugs to <http://bugs.freeradius.org>.
     
    581581PACKAGE_NAME='freeradius'
    582582PACKAGE_TARNAME='freeradius'
    583 PACKAGE_VERSION='$Id: 05860f885c116bb6c75c98c7bd8dc29688cf6ca3 $'
    584 PACKAGE_STRING='freeradius $Id: 05860f885c116bb6c75c98c7bd8dc29688cf6ca3 $'
     583PACKAGE_VERSION='$Id: 4fa37f79c3d82a63558d7cd1d31f8934d7522b35 $'
     584PACKAGE_STRING='freeradius $Id: 4fa37f79c3d82a63558d7cd1d31f8934d7522b35 $'
    585585PACKAGE_BUGREPORT='http://bugs.freeradius.org'
    586586PACKAGE_URL='http://www.freeradius.org'
     
    655655PERL
    656656openssl_version_check_config
     657WITH_DHCP
    657658modconfdir
    658659dictdir
     
    13251326  # This message is too long to be a string in the A/UX 3.1 sh.
    13261327  cat <<_ACEOF
    1327 \`configure' configures freeradius $Id: 05860f885c116bb6c75c98c7bd8dc29688cf6ca3 $ to adapt to many kinds of systems.
     1328\`configure' configures freeradius $Id: 4fa37f79c3d82a63558d7cd1d31f8934d7522b35 $ to adapt to many kinds of systems.
    13281329
    13291330Usage: $0 [OPTION]... [VAR=VALUE]...
     
    13911392if test -n "$ac_init_help"; then
    13921393  case $ac_init_help in
    1393      short | recursive ) echo "Configuration of freeradius $Id: 05860f885c116bb6c75c98c7bd8dc29688cf6ca3 $:";;
     1394     short | recursive ) echo "Configuration of freeradius $Id: 4fa37f79c3d82a63558d7cd1d31f8934d7522b35 $:";;
    13941395   esac
    13951396  cat <<\_ACEOF
     
    15471548if $ac_init_version; then
    15481549  cat <<\_ACEOF
    1549 freeradius configure $Id: 05860f885c116bb6c75c98c7bd8dc29688cf6ca3 $
     1550freeradius configure $Id: 4fa37f79c3d82a63558d7cd1d31f8934d7522b35 $
    15501551generated by GNU Autoconf 2.69
    15511552
     
    20542055running configure, to aid debugging if configure makes a mistake.
    20552056
    2056 It was created by freeradius $as_me $Id: 05860f885c116bb6c75c98c7bd8dc29688cf6ca3 $, which was
     2057It was created by freeradius $as_me $Id: 4fa37f79c3d82a63558d7cd1d31f8934d7522b35 $, which was
    20572058generated by GNU Autoconf 2.69.  Invocation command line was
    20582059
     
    53055306fi
    53065307
     5308
    53075309STATIC_MODULES=
    53085310
     
    1318913191# values after options handling.
    1319013192ac_log="
    13191 This file was extended by freeradius $as_me $Id: 05860f885c116bb6c75c98c7bd8dc29688cf6ca3 $, which was
     13193This file was extended by freeradius $as_me $Id: 4fa37f79c3d82a63558d7cd1d31f8934d7522b35 $, which was
    1319213194generated by GNU Autoconf 2.69.  Invocation command line was
    1319313195
     
    1325613258ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
    1325713259ac_cs_version="\\
    13258 freeradius config.status $Id: 05860f885c116bb6c75c98c7bd8dc29688cf6ca3 $
     13260freeradius config.status $Id: 4fa37f79c3d82a63558d7cd1d31f8934d7522b35 $
    1325913261configured by $0, generated by GNU Autoconf 2.69,
    1326013262  with options \\"\$ac_cs_config\\"
  • src/router/freeradius3/configure.ac

    r32344 r33011  
    431431  AC_DEFINE(WITH_DHCP, [1], [define if you want DHCP support])
    432432fi
     433AC_SUBST(WITH_DHCP)
    433434
    434435dnl #
  • src/router/freeradius3/debian/changelog

    r32331 r33011  
     1freeradius (3.0.15+git) unstable; urgency=medium
     2
     3  * New upstream version.
     4
     5 -- Alan DeKok <aland@freeradius.org>  Mon, 29 May 2017 12:00:00 -0400
     6
    17freeradius (3.0.14+git) unstable; urgency=medium
    28
  • src/router/freeradius3/doc/ChangeLog

    r32331 r33011  
    1 FreeRADIUS 3.0.14 Mon 06 Mar 2017 13:00:00 EDT urgency=medium
     1FreeRADIUS 3.0.15 Mon 17 Jul 2017 09:00:00 EDT urgency=high
     2        Feature improvements
     3        * Provide HOSTNAME in default systemd files.
     4        * Incorporate RedHat specific files
     5        * Update dictionary.starent, dictionary.ruckus
     6        * Allow builds without TCP or DHCP
     7
     8        Bug fixes
     9        * Fix multiple issues.  See this web page for details:
     10          http://freeradius.org/security/fuzzer-2017.html
     11        * Pass correct statement length into sqlite3_prepare[_v2]
     12        * Bind the lifetime of program name and python path to the module
     13        * Check input / output length in make_secret().
     14          FR-GV-201
     15        * Fix read overflow when decoding DHCP option 63
     16          FR-GV-206
     17        * Fix write overflow in data2vp_wimax()
     18          FR-GV-301
     19        * Fix infinite loop and memory exhaustion with 'concat' attributes
     20          FR-GV-302
     21        * Fix infinite read in dhcp_attr2vp()
     22          FR-GV-303
     23        * Fix buffer over-read in fr_dhcp_decode_suboptions()
     24          FR-GV-304
     25        * Decode 'signed' attributes correctly.
     26          FR-GV-305
     27        * use strncmp() instead of memcmp() for bounded data
     28          FR-AD-001
     29        * print messages when we see deprecated configuration
     30          items
     31        * show reasons why we couldn't parse a certificate
     32          expiry time
     33        * be more accepting about truncated ASN1 times.
     34        * Fix OpenSSL API issue which could leak small amounts
     35          of memory.  Issue reported by Guido Vranken.
     36        * For Access-Reject, call rad_authlog() after running
     37          the post-auth section, just like for Access-Accept.
     38        * don't crash when reading corrupted data from session
     39          resumption cache.  Fixes #1999.
     40        * Parse port in dhcpclient.  Fixes #2000.
     41        * Don't leak memory for OpenSSL.
     42          Patch from Guido Vranken.
     43        * Portability fixes taken from OpenBSD port collection.
     44        * run rad_authlog after post-auth for Access-Reject.
     45        * Don't process VMPS packets twice.
     46        * Fix attribute truncation in rlm_perl
     47        * Fix bug when processing huntgroups.
     48
     49FreeRADIUS 3.0.14 Fri 26 May 2017 13:00:00 EDT urgency=medium
    250        Feature improvements
    351        * Enforce TLS client certificate expiration on
  • src/router/freeradius3/raddb/certs/bootstrap

    r32339 r33011  
    3434        echo "Nothing todo";
    3535else
    36         openssl dhparam -out dh -2 -rand /dev/urandom 1024 || exit 1;
     36        openssl dhparam -out dh -2 -rand /dev/urandom 2048 || exit 1;
    3737fi
    3838if [ -e /dev/urandom ] ; then
  • src/router/freeradius3/raddb/mods-available/eap

    r32348 r33011  
    33##  eap.conf -- Configuration for EAP types (PEAP, TTLS, etc.)
    44##
    5 ##      $Id: 04698ceb7e28d026fc1d1780350b5d1721d37fe0 $
     5##      $Id: 2621e183c3d9eafacb03bbea57a4a1fb71bf0383 $
    66
    77#######################################################################
     
    422422                        #  across server restarts.
    423423                        #
     424                        #  The default directory is ${logdir}, for historical
     425                        #  reasons.  You should ${db_dir} instead.  And check
     426                        #  the value of db_dir in the main radiusd.conf file.
     427                        #  It should not point to ${raddb}
     428                        #
    424429                        #  The server will need write perms, and the directory
    425430                        #  should be secured from anyone else. You might want
  • src/router/freeradius3/raddb/radiusd.conf.in

    r32340 r33011  
    44##
    55##      http://www.freeradius.org/
    6 ##      $Id: c62f4ffed53a073a885f243b728129f5c482fad7 $
     6##      $Id: a83c1f6874e69df8692ebce57174bf0dd52fd502 $
    77##
    88
     
    286286
    287287        #
    288         #  If this configuration parameter is set, then log messages for
    289         #  a *request* go to this file, rather than to radius.log.
    290         #
    291         #  i.e. This is a log file per request, once the server has accepted
    292         #  the request as being from a valid client.  Messages that are
    293         #  not associated with a request still go to radius.log.
    294         #
    295         #  Not all log messages in the server core have been updated to use
    296         #  this new internal API.  As a result, some messages will still
    297         #  go to radius.log.  Please submit patches to fix this behavior.
    298         #
    299         #  The file name is expanded dynamically.  You should ONLY user
    300         #  server-side attributes for the filename (e.g. things you control).
    301         #  Using this feature MAY also slow down the server substantially,
    302         #  especially if you do thinks like SQL calls as part of the
    303         #  expansion of the filename.
    304         #
    305         #  The name of the log file should use attributes that don't change
    306         #  over the lifetime of a request, such as User-Name,
    307         #  Virtual-Server or Packet-Src-IP-Address.  Otherwise, the log
    308         #  messages will be distributed over multiple files.
    309         #
    310         #  Logging can be enabled for an individual request by a special
    311         #  dynamic expansion macro:  %{debug: 1}, where the debug level
    312         #  for this request is set to '1' (or 2, 3, etc.).  e.g.
    313         #
    314         #       ...
    315         #       update control {
    316         #              Tmp-String-0 = "%{debug:1}"
    317         #       }
    318         #       ...
    319         #
    320         #  The attribute that the value is assigned to is unimportant,
    321         #  and should be a "throw-away" attribute with no side effects.
    322         #
    323         #requests = ${logdir}/radiusd-%{%{Virtual-Server}:-DEFAULT}-%Y%m%d.log
    324 
    325         #
    326288        #  Which syslog facility to use, if ${destination} == "syslog"
    327289        #
  • src/router/freeradius3/redhat/freeradius.spec

    r32331 r33011  
    2727Summary: High-performance and highly configurable free RADIUS server
    2828Name: freeradius
    29 Version: 3.0.14
     29Version: 3.0.15
    3030Release: 2%{?dist}
    3131License: GPLv2+ and LGPLv2+
     
    3434
    3535Source0: ftp://ftp.freeradius.org/pub/radius/freeradius-server-%{version}.tar.bz2
     36%if %{?_unitdir:1}%{!?_unitdir:0}
     37Source100: radiusd.service
     38%else
    3639Source100: freeradius-radiusd-init
     40%define initddir %{?_initddir:%{_initddir}}%{!?_initddir:%{_initrddir}}
     41%endif
     42
    3743Source102: freeradius-logrotate
    3844Source103: freeradius-pam-conf
    39 Source104: radiusd.service
    4045
    4146Obsoletes: freeradius-devel
     
    5156BuildRequires: libtool
    5257BuildRequires: libtool-ltdl-devel
    53 BuildRequires: openssl-devel
     58BuildRequires: openssl, openssl-devel
    5459BuildRequires: pam-devel
    5560BuildRequires: zlib-devel
     
    383388# For systemd based systems, that define _unitdir, install the radiusd unit
    384389%if %{?_unitdir:1}%{!?_unitdir:0}
    385 install -D -m 755 %{SOURCE104} $RPM_BUILD_ROOT/%{_unitdir}/radiusd.service
     390install -D -m 755 redhat/radiusd.service $RPM_BUILD_ROOT/%{_unitdir}/radiusd.service
    386391# For SystemV install the init script
    387392%else
    388 install -D -m 755 %{SOURCE100} $RPM_BUILD_ROOT/%{initddir}/radiusd
    389 %endif
    390 
    391 install -D -m 644 %{SOURCE102} $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/radiusd
    392 install -D -m 644 %{SOURCE103} $RPM_BUILD_ROOT/%{_sysconfdir}/pam.d/radiusd
     393install -D -m 755 redhat/freeradius-radiusd-init $RPM_BUILD_ROOT/%{initddir}/radiusd
     394%endif
     395
     396install -D -m 644 redhat/freeradius-logrotate $RPM_BUILD_ROOT/%{_sysconfdir}/logrotate.d/radiusd
     397install -D -m 644 redhat/freeradius-pam-conf $RPM_BUILD_ROOT/%{_sysconfdir}/pam.d/radiusd
    393398
    394399# remove unneeded stuff
     
    474479%preun
    475480if [ $1 = 0 ]; then
    476   /sbin/service radiusd stop > /dev/null 2>&1
     481%if %{?_unitdir:1}%{!?_unitdir:0}
     482  /bin/systemctl disable radiusd
     483%else
    477484  /sbin/chkconfig --del radiusd
     485%endif
    478486fi
    479 
    480487
    481488%postun
  • src/router/freeradius3/redhat/radiusd.service

    r32331 r33011  
    88PIDFile=/var/run/radiusd/radiusd.pid
    99EnvironmentFile=-/etc/sysconfig/radiusd
     10
     11# FreeRADIUS can do static evaluation of policy language rules based
     12# on environmental variables which is very useful for doing per-host
     13# customization.
     14# Unfortunately systemd does not allow variable substitutions such
     15# as %H or $(hostname) in the EnvironmentFile.
     16# We provide HOSTNAME here for convenience.
     17Environment=HOSTNAME=%H
     18
     19RuntimeDirectory=/var/run/radiusd
     20RuntimeDirectoryMode=0775
    1021ExecStartPre=/usr/sbin/radiusd $FREERADIUS_OPTIONS -Cxm -lstdout
     22ExecStartPre=/usr/bin/chown radiusd:radiusd /var/run/radiusd
    1123ExecStart=/usr/sbin/radiusd $FREERADIUS_OPTIONS -m
    1224Restart=on-failure
  • src/router/freeradius3/scripts/jlibtool.c

    r32331 r33011  
    8080#endif
    8181
    82 #if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || (defined(__sun) && defined(__GNUC__))
     82#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || (defined(__sun) && defined(__GNUC__))
    8383#  define SHELL_CMD                     "/bin/sh"
    8484#  define DYNAMIC_LIB_EXT               "so"
  • src/router/freeradius3/share/dictionary.cisco.vpn3000

    r32331 r33011  
    99# http://www.cisco.com/en/US/docs/security/asa/asa80/configuration/guide/extsvr.html#wp1661512
    1010#
    11 #       $Id: 1d9dfbf0dcbe08d7eedf07ff3663b86343f2f4a2 $
     11#       $Id: e2dae38c900647cd5afc19deb2e65c8fceae4f14 $
    1212#
    1313VENDOR          Cisco-VPN3000                   3076
     
    104104ATTRIBUTE       Cisco-VPN3000-WebVPN-Port-Forwarding-Enable 97  integer
    105105ATTRIBUTE       Cisco-VPN3000-WebVPN-Outlook-Exchange-Proxy-Enable 98   integer
    106 ATTRIBUTE       Cisco-VPN3000-WebVPN-Outlook-Exchange-Proxy-Enable 99   integer
     106ATTRIBUTE       Cisco-VPN3000-WebVPN-HTTP-Proxy-Enable 99       integer
    107107ATTRIBUTE       Cisco-VPN3000-WebVPN-Auto-Applet-Download-Enable 100    integer
    108108ATTRIBUTE       Cisco-VPN3000-WebVPN-Citrix-MetaFrame-Enable 101        integer
  • src/router/freeradius3/share/dictionary.ruckus

    r32331 r33011  
    6464ATTRIBUTE       Ruckus-Wlan-Name                   135    string
    6565
     66ATTRIBUTE       Ruckus-Read-Preference             137    octets
     67ATTRIBUTE       Ruckus-Client-Host-Name            138    string
     68ATTRIBUTE       Ruckus-Client-Os-Type              139    string
     69ATTRIBUTE       Ruckus-Client-Os-Class             140    string
     70ATTRIBUTE       Ruckus-Vlan-Pool                   141    string
     71
    6672#
    6773#  Integer Translations
  • src/router/freeradius3/share/dictionary.starent

    r32331 r33011  
    289289ATTRIBUTE       SN-DHCP-Options                         309     octets
    290290ATTRIBUTE       SN-Handoff-Indicator                    310     integer
     291ATTRIBUTE       SN-User-Privilege                       313     integer
     292ATTRIBUTE       SN-IPv6-Alloc-Method                    314     integer
     293ATTRIBUTE       SN-Congestion-Mgmt-Policy               315     string
     294ATTRIBUTE       SN-WSG-MIP-Required                     316     integer
     295ATTRIBUTE       SN-WSG-MIP-Release-TIA                  317     integer
     296ATTRIBUTE       SN-WSG-MIP-Simple-IP-Fallback           318     integer
     297ATTRIBUTE       SN-WLAN-AP-Identifier                   319     octets
     298ATTRIBUTE       SN-WLAN-UE-Identifier                   320     octets
     299
    291300
    292301ATTRIBUTE       SNA-PPP-Ctrl-Input-Octets               1001    integer
     
    13521361VALUE   SN-WiMAX-Auth-Only              Enabled                 1
    13531362
     1363VALUE   SN-User-Privilege               Administrative          6
     1364VALUE   SN-User-Privilege               NAS_Prompt              7
     1365VALUE   SN-User-Privilege               Inspector               19650516
     1366VALUE   SN-User-Privilege               Security_Admin          19660618
     1367
     1368VALUE   SN-IPv6-Alloc-Method            Alloc_Local_Pool        0
     1369VALUE   SN-IPv6-Alloc-Method            Alloc_Dhcp_Client       1
     1370VALUE   SN-IPv6-Alloc-Method            Alloc_No_Alloc          2
     1371VALUE   SN-IPv6-Alloc-Method            Alloc_Static_Alloc      3
     1372
     1373VALUE   SN-WSG-MIP-Required             No                      0
     1374VALUE   SN-WSG-MIP-Required             Yes                     1
     1375
     1376VALUE   SN-WSG-MIP-Release-TIA          No                      0
     1377VALUE   SN-WSG-MIP-Release-TIA          Yes                     1
     1378
     1379VALUE   SN-WSG-MIP-Simple-IP-Fallback   No                      0
     1380VALUE   SN-WSG-MIP-Simple-IP-Fallback   Yes                     1
     1381
    13541382END-VENDOR      Starent
  • src/router/freeradius3/src/lib/net.c

    r32331 r33011  
    1515
    1616/**
    17  * $Id: 2981bc1f073a7940d7e175fb10eb707c040a956c $
     17 * $Id: e84072b24c32447b0caf674e0167502565b13b0f $
    1818 * @file net.c
    1919 * @brief Functions to parse raw packets.
     
    3737        case DLT_NULL:
    3838        case DLT_LOOP:
     39#ifdef DLT_LINUX_SLL
    3940        case DLT_LINUX_SLL:
     41#endif
    4042        case DLT_PFLOG:
    4143                return true;
     
    120122        }
    121123
     124#ifdef DLT_LINUX_SLL
    122125        case DLT_LINUX_SLL:
    123126                p += 16;
     
    126129                }
    127130                break;
     131#endif
    128132
    129133        case DLT_PFLOG:
  • src/router/freeradius3/src/lib/radius.c

    r32331 r33011  
    1616
    1717/**
    18  * $Id: 245b86c7161be460497fb383c2cd8cd6b5d750ed $
     18 * $Id: 2ecaabf65da94ba87799069f1afe6b9f80a801e9 $
    1919 *
    2020 * @file radius.c
     
    2424 */
    2525
    26 RCSID("$Id: 245b86c7161be460497fb383c2cd8cd6b5d750ed $")
     26RCSID("$Id: 2ecaabf65da94ba87799069f1afe6b9f80a801e9 $")
    2727
    2828#include        <freeradius-devel/libradius.h>
     
    543543 */
    544544static void make_secret(uint8_t *digest, uint8_t const *vector,
    545                         char const *secret, uint8_t const *value)
     545                        char const *secret, uint8_t const *value, size_t length)
    546546{
    547547        FR_MD5_CTX context;
    548         int          i;
     548        size_t       i;
    549549
    550550        fr_md5_init(&context);
     
    553553        fr_md5_final(digest, &context);
    554554
    555         for ( i = 0; i < AUTH_VECTOR_LEN; i++ ) {
     555        for ( i = 0; i < length; i++ ) {
    556556                digest[i] ^= value[i];
    557557        }
     
    10111011                 */
    10121012        case FLAG_ENCRYPT_ASCEND_SECRET:
    1013                 if (len != 16) return 0;
    1014                 make_secret(ptr, packet->vector, secret, data);
     1013                if (len > AUTH_VECTOR_LEN) len = AUTH_VECTOR_LEN;
     1014                make_secret(ptr, packet->vector, secret, data, len);
    10151015                len = AUTH_VECTOR_LEN;
    10161016                break;
     
    29532953         */
    29542954        while (ptr < end) {
     2955                if (ptr[1] < 2) return -1;
     2956                if ((ptr + ptr[1]) > end) return -1;
     2957
    29552958                total += ptr[1] - 2;
    29562959
    29572960                ptr += ptr[1];
    29582961
     2962                if (ptr == end) break;
     2963
    29592964                /*
    29602965                 *      Attributes MUST be consecutive.
     
    29622967                if (ptr[0] != attr) break;
    29632968        }
     2969
     2970        end = ptr;
    29642971
    29652972        vp = fr_pair_afrom_da(ctx, da);
     
    29752982        total = 0;
    29762983        ptr = start;
    2977         while (total < vp->vp_length) {
     2984        while (ptr < end) {
    29782985                memcpy(p, ptr + 2, ptr[1] - 2);
    29792986                p += ptr[1] - 2;
     
    29832990
    29842991        *pvp = vp;
     2992
    29852993        return ptr - start;
    29862994}
     
    31543162{
    31553163        ssize_t rcode;
    3156         size_t fraglen;
     3164        size_t ext_len;
     3165        bool more;
    31573166        uint8_t *head, *tail;
    3158         uint8_t const *frag, *end;
    3159         uint8_t const *attr;
    3160         int fragments;
    3161         bool last_frag;
    3162 
    3163         if (attrlen < 3) return -1;
     3167        uint8_t const *attr, *end;
     3168        DICT_ATTR const *child;
     3169
     3170        /*
     3171         *      data = Ext-Attr Flag ...
     3172         */
     3173
     3174        /*
     3175         *      Not enough room for Ext-Attr + Flag + data, it's a bad
     3176         *      attribute.
     3177         */
     3178        if (attrlen < 3) {
     3179        raw:
     3180                /*
     3181                 *      It's not an Extended attribute, it's unknown...
     3182                 */
     3183                child = dict_unknown_afrom_fields(ctx, (da->vendor/ FR_MAX_VENDOR) & 0xff, 0);
     3184                if (!child) {
     3185                        fr_strerror_printf("Internal sanity check %d", __LINE__);
     3186                        return -1;
     3187                }
     3188
     3189                rcode = data2vp(ctx, packet, original, secret, child,
     3190                                data, attrlen, attrlen, pvp);
     3191                if (rcode < 0) return rcode;
     3192                return attrlen;
     3193        }
     3194
     3195        /*
     3196         *      No continued data, just decode the attribute in place.
     3197         */
     3198        if ((data[1] & 0x80) == 0) {
     3199                rcode = data2vp(ctx, packet, original, secret, da,
     3200                                data + 2, attrlen - 2, attrlen - 2,
     3201                                pvp);
     3202
     3203                if ((rcode < 0) || (((size_t) rcode + 2) != attrlen)) goto raw; /* didn't decode all of the data */
     3204                return attrlen;
     3205        }
     3206
     3207        /*
     3208         *      It's continued, but there are no subsequent fragments,
     3209         *      it's bad.
     3210         */
     3211        if (attrlen >= packetlen) goto raw;
    31643212
    31653213        /*
    31663214         *      Calculate the length of all of the fragments.  For
    31673215         *      now, they MUST be contiguous in the packet, and they
    3168          *      MUST be all of the same TYPE and EXTENDED-TYPE
    3169          */
    3170         attr = data - 2;
    3171         fraglen = attrlen - 2;
    3172         frag = data + attrlen;
     3216         *      MUST be all of the same Type and Ext-Type
     3217         *
     3218         *      We skip the first fragment, which doesn't have a
     3219         *      RADIUS attribute header.
     3220         */
     3221        ext_len = attrlen - 2;
     3222        attr = data + attrlen;
    31733223        end = data + packetlen;
    3174         fragments = 1;
    3175         last_frag = false;
    3176 
    3177         while (frag < end) {
    3178                 if (last_frag ||
    3179                     (frag[0] != attr[0]) ||
    3180                     (frag[1] < 4) ||                   /* too short for long-extended */
    3181                     (frag[2] != attr[2]) ||
    3182                     ((frag + frag[1]) > end)) {         /* overflow */
    3183                         end = frag;
    3184                         break;
    3185                 }
    3186 
    3187                 last_frag = ((frag[3] & 0x80) == 0);
    3188 
    3189                 fraglen += frag[1] - 4;
    3190                 frag += frag[1];
    3191                 fragments++;
    3192         }
    3193 
    3194         head = tail = malloc(fraglen);
    3195         if (!head) return -1;
    3196 
    3197         VP_TRACE("Fragments %d, total length %d\n", fragments, (int) fraglen);
    3198 
    3199         /*
    3200          *      And again, but faster and looser.
    3201          *
    3202          *      We copy the first fragment, followed by the rest of
    3203          *      the fragments.
    3204          */
    3205         frag = attr;
    3206 
    3207         while (fragments >  0) {
    3208                 memcpy(tail, frag + 4, frag[1] - 4);
    3209                 tail += frag[1] - 4;
    3210                 frag += frag[1];
    3211                 fragments--;
    3212         }
    3213 
    3214         VP_HEXDUMP("long-extended fragments", head, fraglen);
     3224
     3225        while (attr < end) {
     3226                /*
     3227                 *      Not enough room for Attr + length + Ext-Attr
     3228                 *      continuation, it's bad.
     3229                 */
     3230                if ((end - attr) < 4) goto raw;
     3231
     3232                if (attr[1] < 4) goto raw;
     3233
     3234                /*
     3235                 *      If the attribute overflows the packet, it's
     3236                 *      bad.
     3237                 */
     3238                if ((attr + attr[1]) > end) goto raw;
     3239
     3240                if (attr[0] != ((da->vendor / FR_MAX_VENDOR) & 0xff)) goto raw; /* not the same Extended-Attribute-X */
     3241
     3242                if (attr[2] != data[0]) goto raw; /* Not the same Ext-Attr */
     3243
     3244                /*
     3245                 *      Check the continuation flag.
     3246                 */
     3247                more = ((attr[2] & 0x80) != 0);
     3248
     3249                /*
     3250                 *      Or, there's no more data, in which case we
     3251                 *      shorten "end" to finish at this attribute.
     3252                 */
     3253                if (!more) end = attr + attr[1];
     3254
     3255                /*
     3256                 *      There's more data, but we're at the end of the
     3257                 *      packet.  The attribute is malformed!
     3258                 */
     3259                if (more && ((attr + attr[1]) == end)) goto raw;
     3260
     3261                /*
     3262                 *      Add in the length of the data we need to
     3263                 *      concatenate together.
     3264                 */
     3265                ext_len += attr[1] - 4;
     3266
     3267                /*
     3268                 *      Go to the next attribute, and stop if there's
     3269                 *      no more.
     3270                 */
     3271                attr += attr[1];
     3272                if (!more) break;
     3273        }
     3274
     3275        if (!ext_len) goto raw;
     3276
     3277        head = tail = malloc(ext_len);
     3278        if (!head) goto raw;
     3279
     3280        /*
     3281         *      Copy the data over, this time trusting the attribute
     3282         *      contents.
     3283         */
     3284        attr = data;
     3285        memcpy(tail, attr + 2, attrlen - 2);
     3286        tail += attrlen - 2;
     3287        attr += attrlen;
     3288
     3289        while (attr < end) {
     3290                memcpy(tail, attr + 4, attr[1] - 4);
     3291                tail += attr[1] - 4;
     3292                attr += attr[1]; /* skip VID+WiMax header */
     3293        }
     3294
     3295        VP_HEXDUMP("long-extended fragments", head, ext_len);
    32153296
    32163297        rcode = data2vp(ctx, packet, original, secret, da,
    3217                         head, fraglen, fraglen, pvp);
     3298                        head, ext_len, ext_len, pvp);
    32183299        free(head);
    3219         if (rcode < 0) return rcode;
     3300        if (rcode < 0) goto raw;
    32203301
    32213302        return end - data;
    32223303}
    32233304
    3224 /** Convert a Vendor-Specific WIMAX to vps
     3305/** Convert a Vendor-Specific WIMAX to VPs
    32253306 *
    32263307 * @note Called ONLY for Vendor-Specific
     
    32343315{
    32353316        ssize_t rcode;
    3236         size_t fraglen;
    3237         bool last_frag;
     3317        size_t wimax_len;
     3318        bool more;
    32383319        uint8_t *head, *tail;
    3239         uint8_t const *frag, *end;
     3320        uint8_t const *attr, *end;
    32403321        DICT_ATTR const *child;
    32413322
    3242         if (attrlen < 8) return -1;
    3243 
    3244         if (((size_t) (data[5] + 4)) != attrlen) return -1;
     3323        /*
     3324         *      data = VID VID VID VID WiMAX-Attr WimAX-Len Continuation ...
     3325         */
     3326
     3327        /*
     3328         *      Not enough room for WiMAX Vendor + Wimax attr + length
     3329         *      + continuation, it's a bad attribute.
     3330         */
     3331        if (attrlen < 8) {
     3332        raw:           
     3333                /*
     3334                 *      It's not a Vendor-Specific, it's unknown...
     3335                 */
     3336                child = dict_unknown_afrom_fields(ctx, PW_VENDOR_SPECIFIC, 0);
     3337                if (!child) {
     3338                        fr_strerror_printf("Internal sanity check %d", __LINE__);
     3339                        return -1;
     3340                }
     3341
     3342                rcode = data2vp(ctx, packet, original, secret, child,
     3343                                data, attrlen, attrlen, pvp);
     3344                if (rcode < 0) return rcode;
     3345                return attrlen;
     3346        }
     3347
     3348        if (data[5] < 3) goto raw;              /* WiMAX-Length is too small */
    32453349
    32463350        child = dict_attrbyvalue(data[4], vendor);
    3247         if (!child) return -1;
    3248 
     3351        if (!child) goto raw;
     3352
     3353        /*
     3354         *      No continued data, just decode the attribute in place.
     3355         */
    32493356        if ((data[6] & 0x80) == 0) {
     3357                if ((data[5] + 4) != attrlen) goto raw; /* WiMAX attribute doesn't fill Vendor-Specific */
     3358
    32503359                rcode = data2vp(ctx, packet, original, secret, child,
    32513360                                data + 7, data[5] - 3, data[5] - 3,
    32523361                                pvp);
    3253                 if (rcode < 0) return -1;
    3254                 return 7 + rcode;
     3362
     3363                if ((rcode < 0) || (((size_t) rcode + 7) != attrlen)) goto raw; /* didn't decode all of the data */
     3364                return attrlen;
    32553365        }
    32563366
     
    32613371         *
    32623372         *      The first fragment doesn't have a RADIUS attribute
    3263          *      header, so it needs to be treated a little special.
    3264          */
    3265         fraglen = data[5] - 3;
    3266         frag = data + attrlen;
     3373         *      header.
     3374         */
     3375        wimax_len = 0;
     3376        attr = data + 4;
    32673377        end = data + packetlen;
    3268         last_frag = false;
    3269 
    3270         while (frag < end) {
    3271                 if (last_frag ||
    3272                     (frag[0] != PW_VENDOR_SPECIFIC) ||
    3273                     (frag[1] < 9) ||                   /* too short for wimax */
    3274                     ((frag + frag[1]) > end) ||         /* overflow */
    3275                     (memcmp(frag + 2, data, 4) != 0) || /* not wimax */
    3276                     (frag[6] != data[4]) || /* not the same wimax attr */
    3277                     ((frag[7] + 6) != frag[1])) { /* doesn't fill the attr */
    3278                         end = frag;
    3279                         break;
    3280                 }
    3281 
    3282                 last_frag = ((frag[8] & 0x80) == 0);
    3283 
    3284                 fraglen += frag[7] - 3;
    3285                 frag += frag[1];
    3286         }
    3287 
    3288         head = tail = malloc(fraglen);
     3378
     3379        while (attr < end) {
     3380                /*
     3381                 *      Not enough room for Attribute + length +
     3382                 *      continuation, it's bad.
     3383                 */
     3384                if ((end - attr) < 3) goto raw;
     3385
     3386                /*
     3387                 *      Must have non-zero data in the attribute.
     3388                 */
     3389                if (attr[1] <= 3) goto raw;
     3390
     3391                /*
     3392                 *      If the WiMAX attribute overflows the packet,
     3393                 *      it's bad.
     3394                 */
     3395                if ((attr + attr[1]) > end) goto raw;
     3396
     3397                /*
     3398                 *      Check the continuation flag.
     3399                 */
     3400                more = ((attr[2] & 0x80) != 0);
     3401
     3402                /*
     3403                 *      Or, there's no more data, in which case we
     3404                 *      shorten "end" to finish at this attribute.
     3405                 */
     3406                if (!more) end = attr + attr[1];
     3407
     3408                /*
     3409                 *      There's more data, but we're at the end of the
     3410                 *      packet.  The attribute is malformed!
     3411                 */
     3412                if (more && ((attr + attr[1]) == end)) goto raw;
     3413
     3414                /*
     3415                 *      Add in the length of the data we need to
     3416                 *      concatenate together.
     3417                 */
     3418                wimax_len += attr[1] - 3;
     3419
     3420                /*
     3421                 *      Go to the next attribute, and stop if there's
     3422                 *      no more.
     3423                 */
     3424                attr += attr[1];
     3425                if (!more) break;
     3426
     3427                /*
     3428                 *      data = VID VID VID VID WiMAX-Attr WimAX-Len Continuation ...
     3429                 *
     3430                 *      attr = Vendor-Specific VSA-Length VID VID VID VID WiMAX-Attr WimAX-Len Continuation ...
     3431                 *
     3432                 */
     3433
     3434                /*
     3435                 *      No room for Vendor-Specific + length +
     3436                 *      Vendor(4) + attr + length + continuation + data
     3437                 */
     3438                if ((end - attr) < 9) goto raw;
     3439
     3440                if (attr[0] != PW_VENDOR_SPECIFIC) goto raw;
     3441                if (attr[1] < 9) goto raw;
     3442                if ((attr + attr[1]) > end) goto raw;
     3443                if (memcmp(data, attr + 2, 4) != 0) goto raw; /* not WiMAX Vendor ID */
     3444
     3445                if (attr[1] != (attr[7] + 6)) goto raw; /* WiMAX attr doesn't exactly fill the VSA */
     3446
     3447                if (data[4] != attr[6]) goto raw; /* different WiMAX attribute */
     3448
     3449                /*
     3450                 *      Skip over the Vendor-Specific header, and
     3451                 *      continue with the WiMAX attributes.
     3452                 */
     3453                attr += 6;
     3454        }
     3455
     3456        /*
     3457         *      No data in the WiMAX attribute, make a "raw" one.
     3458         */
     3459        if (!wimax_len) goto raw;
     3460
     3461        head = tail = malloc(wimax_len);
    32893462        if (!head) return -1;
    32903463
    32913464        /*
    3292          *      And again, but faster and looser.
    3293          *
    3294          *      We copy the first fragment, followed by the rest of
    3295          *      the fragments.
    3296          */
    3297         frag = data;
    3298 
    3299         memcpy(tail, frag + 4 + 3, frag[4 + 1] - 3);
    3300         tail += frag[4 + 1] - 3;
    3301         frag += attrlen;        /* should be frag[1] - 7 */
    3302 
    3303         /*
    3304          *      frag now points to RADIUS attributes
    3305          */
    3306         do {
    3307                 memcpy(tail, frag + 2 + 4 + 3, frag[2 + 4 + 1] - 3);
    3308                 tail += frag[2 + 4 + 1] - 3;
    3309                 frag += frag[1];
    3310         } while (frag < end);
    3311 
    3312         VP_HEXDUMP("wimax fragments", head, fraglen);
     3465         *      Copy the data over, this time trusting the attribute
     3466         *      contents.
     3467         */
     3468        attr = data;
     3469        while (attr < end) {
     3470                memcpy(tail, attr + 4 + 3, attr[4 + 1] - 3);
     3471                tail += attr[4 + 1] - 3;
     3472                attr += 4 + attr[4 + 1]; /* skip VID+WiMax header */
     3473                attr += 2;               /* skip Vendor-Specific header */
     3474        }
     3475
     3476        VP_HEXDUMP("wimax fragments", head, wimax_len);
    33133477
    33143478        rcode = data2vp(ctx, packet, original, secret, child,
    3315                         head, fraglen, fraglen, pvp);
     3479                        head, wimax_len, wimax_len, pvp);
    33163480        free(head);
    3317         if (rcode < 0) return rcode;
     3481        if (rcode < 0) goto raw;
    33183482
    33193483        return end - data;
     
    36063770                        } else {
    36073771                                uint8_t my_digest[AUTH_VECTOR_LEN];
     3772                                size_t secret_len;
     3773
     3774                                secret_len = datalen;
     3775                                if (secret_len > AUTH_VECTOR_LEN) secret_len = AUTH_VECTOR_LEN;
     3776
    36083777                                make_secret(my_digest,
    36093778                                            original->vector,
    3610                                             secret, data);
     3779                                            secret, data, secret_len);
    36113780                                memcpy(buffer, my_digest,
    36123781                                       AUTH_VECTOR_LEN );
     
    37373906
    37383907                /*
    3739                  *      If there no more fragments, then the contents
    3740                  *      have to be a well-known data type.
    3741                  *
    3742                  */
    3743                 if ((data[1] & 0x80) == 0) {
    3744                         rcode = data2vp(ctx, packet, original, secret, child,
    3745                                         data + 2, attrlen - 2, attrlen - 2,
    3746                                         pvp);
    3747                         if (rcode < 0) goto raw;
    3748                         return 2 + rcode;
    3749                 }
    3750 
    3751                 /*
    37523908                 *      This requires a whole lot more work.
    37533909                 */
     
    39314087
    39324088        case PW_TYPE_SIGNED:    /* overloaded with vp_integer */
    3933                 memcpy(&vp->vp_integer, buffer, 4);
     4089                memcpy(&vp->vp_integer, data, 4);
    39344090                vp->vp_integer = ntohl(vp->vp_integer);
    39354091                break;
  • src/router/freeradius3/src/lib/value.c

    r32331 r33011  
    22 * value.c      Functions to handle value_data_t
    33 *
    4  * Version:     $Id: 888ca8a546c8859b532c99f79ffbbaacf7e32ecf $
     4 * Version:     $Id: ca18327af133baf83f5906b35f5272830c84f647 $
    55 *
    66 *   This library is free software; you can redistribute it and/or
     
    2121 */
    2222
    23 RCSID("$Id: 888ca8a546c8859b532c99f79ffbbaacf7e32ecf $")
     23RCSID("$Id: ca18327af133baf83f5906b35f5272830c84f647 $")
    2424
    2525#include <freeradius-devel/libradius.h>
     
    17391739        case PW_TYPE_TLV:
    17401740        {
    1741                 size_t max;
    1742 
    1743                 /* Return the number of bytes we would have written */
    1744                 len = (inlen * 2) + 2;
    1745                 if (freespace <= 1) {
    1746                         return len;
    1747                 }
    1748 
    1749                 *out++ = '0';
    1750                 freespace--;
    1751 
    1752                 if (freespace <= 1) {
    1753                         *out = '\0';
    1754                         return len;
    1755                 }
    1756                 *out++ = 'x';
    1757                 freespace--;
    1758 
    1759                 if (freespace <= 2) {
    1760                         *out = '\0';
    1761                         return len;
    1762                 }
    1763 
    1764                 /* Get maximum number of bytes we can encode given freespace */
    1765                 max = ((freespace % 2) ? freespace - 1 : freespace - 2) / 2;
    1766                 fr_bin2hex(out, data->octets, ((size_t)inlen > max) ? max : (size_t)inlen);
    1767         }
    1768                 return len;
     1741                size_t binlen;
     1742                size_t hexlen;
     1743
     1744                binlen = inlen;
     1745                hexlen = (binlen * 2) + 2; /* NOT accounting for trailing NUL */
     1746
     1747                /*
     1748                 *      If the buffer is too small, put something into
     1749                 *      it, and return how much we should have written
     1750                 *
     1751                 *      0 + x + H + H + NUL = 5
     1752                 */
     1753                if (freespace < 5) {
     1754                        switch (freespace) {
     1755                        case '4':
     1756                        case '3':
     1757                                out[0] = '0';
     1758                                out[1] = 'x';
     1759                                out[2] = '\0';
     1760                                return hexlen;
     1761
     1762                        case 2:
     1763                                *out = '0';
     1764                                out++;
     1765                                /* FALL-THROUGH */
     1766
     1767                        case 1:
     1768                                *out = '\0';
     1769                                break;
     1770
     1771                        case 0:
     1772                                break;
     1773                        }
     1774
     1775                        return hexlen;
     1776                }
     1777
     1778                /*
     1779                 *      The output buffer is at least 5 bytes, we haev
     1780                 *      room for '0xHH' plus a trailing NUL byte.
     1781                 */
     1782                out[0] = '0';
     1783                out[1] = 'x';
     1784
     1785                /*
     1786                 *      Get maximum number of bytes we can encode
     1787                 *      given freespace, ensuring we account for '0',
     1788                 *      'x', and the trailing NUL in the buffer.
     1789                 *
     1790                 *      Note that we can't have "freespace = 0" after
     1791                 *      this, as 'freespace' has to be at least 5.
     1792                 */
     1793                freespace -= 3;
     1794                freespace /= 2;
     1795                if (binlen > freespace) {
     1796                        binlen = freespace;
     1797                }
     1798
     1799                fr_bin2hex(out + 2, data->octets, binlen);
     1800                return hexlen;
     1801        }
    17691802
    17701803        case PW_TYPE_IFID:
  • src/router/freeradius3/src/main/auth.c

    r32331 r33011  
    22 * auth.c       User authentication.
    33 *
    4  * Version:     $Id: 79e639e6c99164d9c86d5d73e3b0d0b2f481a4d0 $
     4 * Version:     $Id: 4776b3a248d17af7f057c4563ebf989dee9cb35b $
    55 *
    66 *   This program is free software; you can redistribute it and/or modify
     
    2222 * Copyright 2000  Jeff Carneal <jeff@apex.net>
    2323 */
    24 RCSID("$Id: 79e639e6c99164d9c86d5d73e3b0d0b2f481a4d0 $")
     24RCSID("$Id: 4776b3a248d17af7f057c4563ebf989dee9cb35b $")
    2525
    2626#include <freeradius-devel/radiusd.h>
     
    375375                }
    376376                request->reply->code = PW_CODE_ACCESS_REJECT;
     377        }
     378
     379        if (request->reply->code == PW_CODE_ACCESS_REJECT) {
     380                if ((vp = fr_pair_find_by_num(request->packet->vps, PW_MODULE_FAILURE_MESSAGE, 0, TAG_ANY)) != NULL) {
     381                        char msg[MAX_STRING_LEN+19];
     382
     383                        snprintf(msg, sizeof(msg), "Login incorrect (%s)",
     384                                 vp->vp_strvalue);
     385                        rad_authlog(msg, request, 0);
     386                } else {
     387                        rad_authlog("Login incorrect", request, 0);
     388                }
    377389        }
    378390
     
    587599                request->reply->code = PW_CODE_ACCESS_REJECT;
    588600
    589                 if ((module_msg = fr_pair_find_by_num(request->packet->vps, PW_MODULE_FAILURE_MESSAGE, 0, TAG_ANY)) != NULL){
    590                         char msg[MAX_STRING_LEN+19];
    591 
    592                         snprintf(msg, sizeof(msg), "Login incorrect (%s)",
    593                                  module_msg->vp_strvalue);
    594                         rad_authlog(msg, request, 0);
    595                 } else {
    596                         rad_authlog("Login incorrect", request, 0);
    597                 }
    598 
    599601                if (request->password) {
    600602                        VERIFY_VP(request->password);
  • src/router/freeradius3/src/main/conffile.c

    r32331 r33011  
    66 *              miquels@cistron.nl
    77 *
    8  * Version:     $Id: 5f4c7226984d1ecfeff294ccbedde4de47d55db4 $
     8 * Version:     $Id: fb2c48bad43883a436e662090e1c39c7cc47aef0 $
    99 *
    1010 *   This program is free software; you can redistribute it and/or modify
     
    2727 */
    2828
    29 RCSID("$Id: 5f4c7226984d1ecfeff294ccbedde4de47d55db4 $")
     29RCSID("$Id: fb2c48bad43883a436e662090e1c39c7cc47aef0 $")
    3030
    3131#include <freeradius-devel/radiusd.h>
     
    12001200                                return NULL;
    12011201                        }
    1202                 } else if (memcmp(ptr, "$ENV{", 5) == 0) {
     1202                } else if (strncmp(ptr, "$ENV{", 5) == 0) {
    12031203                        char *env;
    12041204
     
    19291929                                cf_log_err(&(cs->item), "Replace \"%s\" with \"%s\"", variables[i].name,
    19301930                                           variables[i + 1].name);
     1931                        } else {
     1932                                cf_log_err(&(cs->item), "Cannot use deprecated configuration item \"%s\"", variables[i].name);
    19311933                        }
    19321934                        goto finish;
  • src/router/freeradius3/src/main/process.c

    r32331 r33011  
    1616
    1717/**
    18  * $Id: e3e32f424b00f12f82e2d3b140f254e336a49514 $
     18 * $Id: 016f8baf98842b066b50a8415844711089c1e03d $
    1919 *
    2020 * @file process.c
     
    2525 */
    2626
    27 RCSID("$Id: e3e32f424b00f12f82e2d3b140f254e336a49514 $")
     27RCSID("$Id: 016f8baf98842b066b50a8415844711089c1e03d $")
    2828
    2929#include <freeradius-devel/radiusd.h>
     
    53225322        if (!main_config.proxy_requests) return;
    53235323        if (!head) return;
     5324#ifdef WITH_TCP
    53245325        if (!home_servers_udp) return;
     5326#endif
    53255327
    53265328        /*
  • src/router/freeradius3/src/main/realms.c

    r32331 r33011  
    22 * realms.c     Realm handling code
    33 *
    4  * Version:     $Id: d1fafcf43f262e4930b588a3f0b625dc81a6667c $
     4 * Version:     $Id: 4f3c6b80e27d2690405e66619194b8543d681a83 $
    55 *
    66 *   This program is free software; you can redistribute it and/or modify
     
    2222 */
    2323
    24 RCSID("$Id: d1fafcf43f262e4930b588a3f0b625dc81a6667c $")
     24RCSID("$Id: 4f3c6b80e27d2690405e66619194b8543d681a83 $")
    2525
    2626#include <freeradius-devel/radiusd.h>
     
    434434
    435435        FR_TIMEVAL_BOUND_CHECK("response_window", &home->response_window, >=, 0, 1000);
    436         FR_TIMEVAL_BOUND_CHECK("response_window", &home->response_window, <=, 60, 0);
    437436        FR_TIMEVAL_BOUND_CHECK("response_window", &home->response_window, <=,
    438437                               main_config.max_request_time, 0);
     438        FR_TIMEVAL_BOUND_CHECK("response_window", &home->response_window, <=, 60, 0);
    439439
    440440        FR_INTEGER_BOUND_CHECK("response_timeouts", home->max_response_timeouts, >=, 1);
     
    768768                switch (proto) {
    769769                case IPPROTO_UDP:
     770#ifdef WITH_TCP
    770771                        home_servers_udp = true;
     772#endif
    771773                        break;
    772774
  • src/router/freeradius3/src/main/tls.c

    r32331 r33011  
    22 * tls.c
    33 *
    4  * Version:     $Id: ce7799ed3e9f153b1aad11321ed758a6ae0ee1ca $
     4 * Version:     $Id: 3d8b1b552f4ec8feb6bdd881a451e64ae4daa441 $
    55 *
    66 *   This program is free software; you can redistribute it and/or modify
     
    2323 */
    2424
    25 RCSID("$Id: ce7799ed3e9f153b1aad11321ed758a6ae0ee1ca $")
     25RCSID("$Id: 3d8b1b552f4ec8feb6bdd881a451e64ae4daa441 $")
    2626USES_APPLE_DEPRECATED_API       /* OpenSSL API has been deprecated by Apple */
    2727
     
    14551455        memset(&t, 0, sizeof(t));
    14561456
    1457         if ((end - p) <= 12) {
     1457        if ((end - p) <= 13) {
    14581458                if ((end - p) < 2) {
    14591459                        fr_strerror_printf("ASN1 date string too short, expected 2 additional bytes, got %zu bytes",
     
    14731473        }
    14741474
    1475         if ((end - p) < 10) {
     1475        if ((end - p) < 4) {
    14761476                fr_strerror_printf("ASN1 string too short, expected 10 additional bytes, got %zu bytes",
    14771477                                   end - p);
     
    14831483        t.tm_mday = (*(p++) - '0') * 10;
    14841484        t.tm_mday += (*(p++) - '0');
     1485
     1486        if ((end - p) < 2) goto done;
    14851487        t.tm_hour = (*(p++) - '0') * 10;
    14861488        t.tm_hour += (*(p++) - '0');
     1489
     1490        if ((end - p) < 2) goto done;
    14871491        t.tm_min = (*(p++) - '0') * 10;
    14881492        t.tm_min += (*(p++) - '0');
     1493
     1494        if ((end - p) < 2) goto done;
    14891495        t.tm_sec = (*(p++) - '0') * 10;
    14901496        t.tm_sec += (*(p++) - '0');
    14911497
    14921498        /* Apparently OpenSSL converts all timestamps to UTC? Maybe? */
     1499done:
    14931500        *out = timegm(&t);
    14941501        return 0;
     
    16061613                        RWDEBUG("Failed loading persisted VPs for session %s", buffer);
    16071614                        SSL_SESSION_free(sess);
     1615                        sess = NULL;
    16081616                        goto error;
    16091617                }
     
    16171625
    16181626                        if (ocsp_asn1time_to_epoch(&expires, vp->vp_strvalue) < 0) {
    1619                                 RDEBUG2("Failed getting certificate expiration, removing cache entry for session %s", buffer);
     1627                                RDEBUG2("Failed getting certificate expiration, removing cache entry for session %s - %s", buffer, fr_strerror());
    16201628                                SSL_SESSION_free(sess);
     1629                                sess = NULL;
    16211630                                goto error;
    16221631                        }
     
    16251634                                RDEBUG2("Certificate has expired, removing cache entry for session %s", buffer);
    16261635                                SSL_SESSION_free(sess);
     1636                                sess = NULL;
    16271637                                goto error;
    16281638                        }
     
    20322042        char            buf[64];
    20332043        X509            *client_cert;
    2034 #if OPENSSL_VERSION_NUMBER >= 0x10100000L
     2044#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
    20352045        const STACK_OF(X509_EXTENSION) *ext_list;
    20362046#else
     
    22132223                }
    22142224                if (names != NULL)
    2215                         sk_GENERAL_NAME_free(names);
     2225                        GENERAL_NAMES_free(names);
    22162226        }
    22172227
     
    30393049        }
    30403050
     3051#ifndef LIBRESSL_VERSION_NUMBER
    30413052        /* Load randomness */
    30423053        if (conf->random_file) {
     
    30463057                }
    30473058        }
     3059#endif
    30483060
    30493061        /*
     
    31673179         *      PSK query.
    31683180         */
     3181#ifdef PSK_MAX_IDENTITY_LEN
    31693182        if (conf->psk_identity) {
    31703183                if (conf->private_key_file) {
     
    31763189                }
    31773190
    3178         } else {
     3191        } else
     3192#endif
     3193        {
    31793194                if (!conf->private_key_file) {
    31803195                        ERROR(LOG_PREFIX ": TLS Server requires a private key file");
  • src/router/freeradius3/src/modules/proto_dhcp/all.mk

    r32331 r33011  
     1ifneq "$(WITH_DHCP)" "no"
    12SUBMAKEFILES := libfreeradius-dhcp.mk proto_dhcp.mk rlm_dhcp.mk dhcpclient.mk
     3endif
  • src/router/freeradius3/src/modules/proto_dhcp/dhcp.c

    r32331 r33011  
    33 * dhcp.c       Functions to send/receive dhcp packets.
    44 *
    5  * Version:     $Id: 98d87509d65034728523aa3105044159a1a88305 $
     5 * Version:     $Id: 5fd922d037c1186fd1e6a001ef21ac38a5113f28 $
    66 *
    77 *   This library is free software; you can redistribute it and/or
     
    2323 */
    2424
    25 RCSID("$Id: 98d87509d65034728523aa3105044159a1a88305 $")
     25RCSID("$Id: 5fd922d037c1186fd1e6a001ef21ac38a5113f28 $")
    2626
    2727#include <freeradius-devel/libradius.h>
     
    630630
    631631                /*
     632                 *      Not enough room for the option header, it's a
     633                 *      bad packet.
     634                 */
     635                if ((p + 2) > (data + len)) {
     636                        fr_pair_list_free(&head);
     637                        return -1;
     638                }
     639
     640                /*
     641                 *      Not enough room for the option header + data,
     642                 *      it's a bad packet.
     643                 */
     644                if ((p + 2 + p[1]) > (data + len)) {
     645                        fr_pair_list_free(&head);
     646                        return -1;
     647                }
     648
     649                /*
    632650                 *      The initial OID string looks like:
    633651                 *      <iana>.0
     
    775793                 */
    776794                fr_cursor_init(&cursor, vp_p);
    777                 for (;;) {
    778                         q = memchr(p, '\0', q - p);
     795                while (p < end) {
     796                        q = memchr(p, '\0', end - p);
    779797                        /* Malformed but recoverable */
    780798                        if (!q) q = end;
     
    783801                        p = q + 1;
    784802
     803                        if (p >= end) break;
     804
    785805                        /* Need another VP for the next round */
    786                         if (p < end) {
    787                                 vp = fr_pair_afrom_da(ctx, vp->da);
    788                                 if (!vp) {
    789                                         fr_pair_list_free(vp_p);
    790                                         return -1;
    791                                 }
    792                                 fr_cursor_insert(&cursor, vp);
    793                                 continue;
     806                        vp = fr_pair_afrom_da(ctx, vp->da);
     807                        if (!vp) {
     808                                fr_pair_list_free(vp_p);
     809                                return -1;
    794810                        }
    795                         break;
     811                        fr_cursor_insert(&cursor, vp);
    796812                }
    797813        }
     
    10981114                         *      Vendor is "MSFT 98"
    10991115                         */
    1100                         vp = fr_pair_find_by_num(head, 63, DHCP_MAGIC_VENDOR, TAG_ANY);
    1101                         if (vp && (strcmp(vp->vp_strvalue, "MSFT 98") == 0)) {
     1116                        vp = fr_pair_find_by_num(head, 60, DHCP_MAGIC_VENDOR, TAG_ANY);
     1117                        if (vp && (vp->vp_length >= 7) && (memcmp(vp->vp_octets, "MSFT 98", 7) == 0)) {
    11021118                                vp = fr_pair_find_by_num(head, 262, DHCP_MAGIC_VENDOR, TAG_ANY);
    11031119
  • src/router/freeradius3/src/modules/proto_dhcp/dhcpclient.c

    r32331 r33011  
    22 * dhcpclient.c General radius packet debug tool.
    33 *
    4  * Version:     $Id: 5c923f136d3c9f4162334bb90b29296d30813a6a $
     4 * Version:     $Id: adbcb8c9d05f905e9e66ab2bb489d490e7fcb1f4 $
    55 *
    66 *   This program is free software; you can redistribute it and/or modify
     
    2323 */
    2424
    25 RCSID("$Id: 5c923f136d3c9f4162334bb90b29296d30813a6a $")
     25RCSID("$Id: adbcb8c9d05f905e9e66ab2bb489d490e7fcb1f4 $")
    2626
    2727#include <freeradius-devel/libradius.h>
     
    414414        server_ipaddr.af = AF_INET;
    415415        if (strcmp(argv[1], "-") != 0) {
    416                 if (ip_hton(&server_ipaddr, AF_INET, argv[1], false) < 0) {
    417                         fr_perror("dhcpclient");
    418                         fr_exit_now(1);
    419                 }
     416                if (fr_pton_port(&server_ipaddr, &server_port, argv[1], -1, AF_INET, true) < 0) {
     417                        fprintf(stderr, "dhcpclient: Failed parsing IP:port - %s", fr_strerror());
     418                        exit(1);
     419                }
     420
    420421                client_ipaddr.af = server_ipaddr.af;
    421422        }
  • src/router/freeradius3/src/modules/proto_vmps/vmps.c

    r32331 r33011  
    22 * vmps.c       Handle VMPS traffic.
    33 *
    4  * Version:     $Id: f1df12885f0e45928afeccccfc5ee222832228b5 $
     4 * Version:     $Id: 1fc0a1970b1461276c024adbeafec2adad41abe1 $
    55 *
    66 *   This program is free software; you can redistribute it and/or modify
     
    2222 */
    2323
    24 RCSID("$Id: f1df12885f0e45928afeccccfc5ee222832228b5 $")
     24RCSID("$Id: 1fc0a1970b1461276c024adbeafec2adad41abe1 $")
    2525
    2626#include <freeradius-devel/radiusd.h>
     
    3838        DEBUG2("Done VMPS");
    3939
     40        request->packet->code = 0; /* hack for VMPS */
    4041        request->reply->code = PW_CODE_ACCESS_ACCEPT;
    4142
  • src/router/freeradius3/src/modules/rlm_eap/libeap/eap_chbind.c

    r32331 r33011  
    22 * eap_chbind.c
    33 *
    4  * Version:     $Id: a8ecb51de96f513fb9d0db9034efed1fd4939967 $
     4 * Version:     $Id: e4d7ed81c2a3763f8b63a1d871213ef7013e74d3 $
    55 *
    66 *   This program is free software; you can redistribute it and/or modify
     
    2323
    2424
    25 RCSID("$Id: a8ecb51de96f513fb9d0db9034efed1fd4939967 $")
     25RCSID("$Id: e4d7ed81c2a3763f8b63a1d871213ef7013e74d3 $")
    2626
    2727#include "eap_chbind.h"
     
    120120
    121121        ptr = (uint8_t const *) packet;
    122         end = ptr + talloc_array_length(packet);
     122        end = ptr + talloc_array_length((uint8_t const *) packet);
    123123
    124124        ptr++;                  /* skip the code at the start of the packet */
     
    183183        data_len = chbind_get_data(chbind->request, CHBIND_NSID_RADIUS, &attr_data);
    184184        if (data_len) {
    185                 rad_assert(data_len <= talloc_array_length(chbind->request));
     185                rad_assert(data_len <= talloc_array_length((uint8_t const *) chbind->request));
    186186
    187187                while (data_len > 0) {
  • src/router/freeradius3/src/modules/rlm_perl/rlm_perl.c

    r32331 r33011  
    1616
    1717/**
    18  * $Id: b1191abfea312dd7d8f89ff43c3e34672adbbf95 $
     18 * $Id: 80db218b633254ccb339004c529255ef53fb3534 $
    1919 * @file rlm_perl.c
    2020 * @brief Translates requests between the server an a perl interpreter.
     
    2323 * @copyright 2002  Boian Jordanov <bjordanov@orbitel.bg>
    2424 */
    25 RCSID("$Id: b1191abfea312dd7d8f89ff43c3e34672adbbf95 $")
     25RCSID("$Id: 80db218b633254ccb339004c529255ef53fb3534 $")
    2626
    2727#include <freeradius-devel/radiusd.h>
     
    655655{
    656656        VALUE_PAIR *vp;
     657        char *tbuff;
     658        size_t tbufflen = 1024;
    657659
    658660        hv_undef(rad_hv);
    659661
    660662        vp_cursor_t cursor;
     663
     664        /*
     665         *      Find out how much room to allocate.
     666         */
     667        for (vp = fr_cursor_init(&cursor, vps);
     668             vp;
     669             vp = fr_cursor_next(&cursor)) {
     670                if (((vp->length * 2) + 3) > tbufflen) {
     671                        tbufflen = (vp->vp_length * 2) + 3;
     672                }
     673        }
     674        tbuff = talloc_array(request, char, tbufflen);
    661675
    662676        RINDENT();
     
    666680             vp = fr_cursor_next(&cursor)) {
    667681                VALUE_PAIR *next;
    668 
    669682                char const *name;
     683                size_t len;
    670684                char namebuf[256];
    671                 char buffer[1024];
    672 
    673                 size_t len;
    674685
    675686                /*
     
    716727
    717728                default:
    718                         len = vp_prints_value(buffer, sizeof(buffer), vp, 0);
     729                        len = vp_prints_value(tbuff, tbufflen, vp, 0);
    719730                        RDEBUG("$%s{'%s'} = &%s:%s -> '%s'", hash_name, vp->da->name,
    720                                list_name, vp->da->name, buffer);
     731                               list_name, vp->da->name, tbuff);
    721732                        (void)hv_store(rad_hv, name, strlen(name),
    722                                        newSVpvn(buffer, truncate_len(len, sizeof(buffer))), 0);
     733                                       newSVpvn(tbuff, truncate_len(len, tbufflen)), 0);
    723734                        break;
    724735                }
    725736        }
    726737        REXDENT();
     738
     739        talloc_free(tbuff);
    727740}
    728741
  • src/router/freeradius3/src/modules/rlm_preprocess/rlm_preprocess.c

    r32331 r33011  
    1616
    1717/**
    18  * $Id: ce75ac849434a3e38f506cb4eedebe7ef53dae69 $
     18 * $Id: b6d3a5dc19b713108a1a9ce6a6ccc7c75cb5b66f $
    1919 * @file rlm_preprocess.c
    2020 * @brief Fixes up requests, and processes huntgroups/hints files.
     
    2323 * @copyright 2000  Alan DeKok <aland@ox.org>
    2424 */
    25 RCSID("$Id: ce75ac849434a3e38f506cb4eedebe7ef53dae69 $")
     25RCSID("$Id: b6d3a5dc19b713108a1a9ce6a6ccc7c75cb5b66f $")
    2626
    2727#include        <freeradius-devel/radiusd.h>
     
    358358                tmp = fr_pair_copy(request, check_item);
    359359                tmp->op = check_item->op;
    360                 result = paircompare(req, request, check_item, NULL);
     360                result = paircompare(req, request, tmp, NULL);
    361361                fr_pair_list_free(&tmp);
    362362        }
  • src/router/freeradius3/src/modules/rlm_soh/rlm_soh.c

    r32331 r33011  
    1616
    1717/**
    18  * $Id: b0e0dfb68d193e309733409520633dd760cf97c7 $
     18 * $Id: 11ab67b9ef4bcb7f7a5917564553881831704ea8 $
    1919 * @file rlm_soh.c
    2020 * @brief Decodes Microsoft's Statement of Health sub-protocol.
     
    2222 * @copyright 2010 Phil Mayers <p.mayers@imperial.ac.uk>
    2323 */
    24 RCSID("$Id: b0e0dfb68d193e309733409520633dd760cf97c7 $")
     24RCSID("$Id: 11ab67b9ef4bcb7f7a5917564553881831704ea8 $")
    2525
    2626#include        <freeradius-devel/radiusd.h>
     
    121121}
    122122
     123#ifdef WITH_DHCP
    123124static rlm_rcode_t CC_HINT(nonnull) mod_post_auth(void *instance, REQUEST *request)
    124125{
    125 #ifdef WITH_DHCP
    126126        int rcode;
    127127        VALUE_PAIR *vp;
     
    184184                return RLM_MODULE_OK;
    185185        }
     186        return RLM_MODULE_NOOP;
     187}
    186188#endif
    187         return RLM_MODULE_NOOP;
    188 }
    189189
    190190static rlm_rcode_t CC_HINT(nonnull) mod_authorize(UNUSED void * instance, REQUEST *request)
     
    220220        .methods = {
    221221                [MOD_AUTHORIZE]         = mod_authorize,
     222#ifdef WITH_DHCP
    222223                [MOD_POST_AUTH]         = mod_post_auth
     224#endif
    223225        },
    224226};
  • src/router/freeradius3/src/tests/dictionary.test

    r32331 r33011  
    88ATTRIBUTE       Test-Number             2 integer
    99ATTRIBUTE       Test-Server-Port        3 integer
     10ATTRIBUTE       Test-Signed             4 signed
    1011END-VENDOR TEST
  • src/router/freeradius3/src/tests/runtests.sh

    r32331 r33011  
    1 #!/bin/bash
     1#!/bin/sh
    22
    33: ${BIN_PATH=./}
  • src/router/freeradius3/src/tests/unit/extended.txt

    r32331 r33011  
    8181# again, but the second one attr is not an extended attr
    8282decode f5 ff 1a 80 00 00 00 01 06 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ab bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb 01 05 62 6f 62
    83 data Attr-245.26.1.6 = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, User-Name = "bob"
     83data Attr-245 = 0x1a800000000106aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, User-Name = "bob"
    8484
    8585# No data means that the attribute is an "invalid attribute"
  • src/router/freeradius3/src/tests/unit/rfc.txt

    r32331 r33011  
    179179data Failed to parse IPv4 address string "bob/8"
    180180
     181#
     182#  A "concat" attribute, with no data
     183#
     184decode 89 02
     185data PKM-SS-Cert = 0x
     186
     187#
     188#  Or with weirdly formatted data
     189#
     190decode 89 03 ff 89 02 89 03 fe
     191data PKM-SS-Cert = 0xfffe
     192
    181193$INCLUDE tunnel.txt
    182194$INCLUDE errors.txt
  • src/router/freeradius3/src/tests/unit/wimax.txt

    r32331 r33011  
    77decode -
    88data WiMAX-Release = "1.0"
     9
     10decode 1a 08 00 00 60 b5 01 02
     11data Attr-26 = 0x000060b50102
     12
     13decode 1a 0a 00 00 60 b5 01 04 00 01
     14data Attr-26.24757.1 = 0x01
    915
    1016encode WiMAX-Accounting-Capabilities = 1
     
    144150decode -
    145151data WiMAX-Release = "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", WiMAX-Idle-Mode-Notification-Cap = Supported
     152
     153#
     154#  Continuation is set, but there's no continued data.
     155decode 1a 0b 00 00 60 b5 31 05 80 00 00
     156data Attr-26 = 0x000060b53105800000
     157
     158encode WiMAX-GMT-Timezone-offset = -1
     159data 1a 0d 00 00 60 b5 03 07 00 ff ff ff ff
     160
     161decode -
     162data WiMAX-GMT-Timezone-offset = -1
     163
  • src/router/freeradius3/suse/freeradius.spec

    r32331 r33011  
    11Name:         freeradius-server
    2 Version: 3.0.14
     2Version: 3.0.15
    33Release:      0
    44License:      GPLv2 ; LGPLv2.1
Note: See TracChangeset for help on using the changeset viewer.