From: Tobias Brunner Date: Wed, 28 Nov 2012 15:07:42 +0000 (+0100) Subject: Patch EAP-SIM module in FreeRADIUS X-Git-Tag: 5.0.2rc1~1^2~98 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=633bee03fcd05908eeff138a77a8970505579032;p=thirdparty%2Fstrongswan.git Patch EAP-SIM module in FreeRADIUS --- diff --git a/testing/scripts/build-umlrootfs b/testing/scripts/build-umlrootfs index 2633f1b28e..d3395c8723 100755 --- a/testing/scripts/build-umlrootfs +++ b/testing/scripts/build-umlrootfs @@ -80,6 +80,7 @@ mount -o bind $ROOTFSCOMPILEDIR $LOOPDIR/root/compile >> $LOGFILE 2>&1 cecho " * Installing software from source.." RECPDIR=$UMLTESTDIR/testing/scripts/recipes RECIPES=`ls $RECPDIR/*.mk | xargs -n1 basename` +cp -r $RECPDIR/patches $LOOPDIR/root/compile for r in $RECIPES do cecho-n " - $r.." diff --git a/testing/scripts/recipes/freeradius.mk b/testing/scripts/recipes/freeradius.mk index 89e25c0909..7797f1ad7d 100644 --- a/testing/scripts/recipes/freeradius.mk +++ b/testing/scripts/recipes/freeradius.mk @@ -14,19 +14,29 @@ CONFIG_OPTS = \ --enable-developer \ --with-experimental-modules +PATCHES = \ + freeradius-eap-sim-identity + all: install $(TAR): wget $(SRC) -$(PKG): $(TAR) +.$(PKG)-unpacked: $(TAR) tar xfj $(TAR) + @touch $@ + +.$(PKG)-patches-applied: .$(PKG)-unpacked + cd $(PKG) && cat $(addprefix ../patches/, $(PATCHES)) | patch -p1 + @touch $@ -configure: $(PKG) +.$(PKG)-configured: .$(PKG)-patches-applied cd $(PKG) && ./configure $(CONFIG_OPTS) + @touch $@ -build: configure +.$(PKG)-built: .$(PKG)-configured cd $(PKG) && make -j $(NUM_CPUS) + @touch $@ -install: build +install: .$(PKG)-built cd $(PKG) && make install diff --git a/testing/scripts/recipes/patches/freeradius-eap-sim-identity b/testing/scripts/recipes/patches/freeradius-eap-sim-identity new file mode 100644 index 0000000000..1ab95ecc64 --- /dev/null +++ b/testing/scripts/recipes/patches/freeradius-eap-sim-identity @@ -0,0 +1,30 @@ +--- a/src/modules/rlm_eap/types/rlm_eap_sim/rlm_eap_sim.c 2012-11-28 11:03:05.081225276 +0100 ++++ b/src/modules/rlm_eap/types/rlm_eap_sim/rlm_eap_sim.c 2012-11-28 11:46:59.746289881 +0100 +@@ -246,14 +246,21 @@ + newvp->vp_integer = ess->sim_id++; + pairreplace(outvps, newvp); + ++ ess->keys.identitylen = strlen(handler->identity); ++ memcpy(ess->keys.identity, handler->identity, ess->keys.identitylen); ++ + /* make a copy of the identity */ + newvp = pairfind(*invps, ATTRIBUTE_EAP_SIM_BASE + PW_EAP_SIM_IDENTITY); +- if (newvp) { +- ess->keys.identitylen = newvp->length; +- memcpy(ess->keys.identity, newvp->vp_octets, newvp->length); +- } else { +- ess->keys.identitylen = strlen(handler->identity); +- memcpy(ess->keys.identity, handler->identity, ess->keys.identitylen); ++ if (newvp && newvp->length > 2) { ++ uint16_t len; ++ ++ memcpy(&len, newvp->vp_octets, sizeof(uint16_t)); ++ len = ntohs(len); ++ if (len <= newvp->length - 2 && len <= MAX_STRING_LEN) { ++ ess->keys.identitylen = len; ++ memcpy(ess->keys.identity, newvp->vp_octets + 2, ++ ess->keys.identitylen); ++ } + } + + /* all set, calculate keys! */