Patch EAP-SIM module in FreeRADIUS
authorTobias Brunner <tobias@strongswan.org>
Wed, 28 Nov 2012 15:07:42 +0000 (16:07 +0100)
committerTobias Brunner <tobias@strongswan.org>
Thu, 17 Jan 2013 14:22:08 +0000 (15:22 +0100)
testing/scripts/build-umlrootfs
testing/scripts/recipes/freeradius.mk
testing/scripts/recipes/patches/freeradius-eap-sim-identity [new file with mode: 0644]

index 2633f1b..d3395c8 100755 (executable)
@@ -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.."
index 89e25c0..7797f1a 100644 (file)
@@ -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 (file)
index 0000000..1ab95ec
--- /dev/null
@@ -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! */