hostapd and radius server

Mark Glines mark-hostap at glines.org
Thu May 27 12:13:01 EDT 2004


On do, mei 27, 2004 at 10:14:39 +0200, Ulf Jakobsson wrote:
> Hi,
> 
> I've noticed something strange with the hostapd regading radius servers.
> 
> I've got a radius server on an ethernet interface and a WLAN client 
> connecting to a WIFI interface and every time (during boot for example) 
>  the WIFI interface initiates before the ethernet interface, hostapd 
> seems to not send any requests to the radius server.
> (The client I'm using runs xsupplicant)
> 
> 
> I've tested this with both the 0.2.1 and the 0.1.3 versions.
> 
> It's not a problem if I for instance restart the hostapd or if the WIFI 
> interface is initiated after the ethernet interface.
> 
> Any ideas?

Hmm.  I sent a patch to the list in October 2003 which makes hostapd recover
from ethernet status changes.  I didn't get any response.  My original message
is: http://sisyphus.iocaine.com/pipermail/hostap/2003-October/004463.html

I think there's a good chance the same patch will fix your issue.  I've
attached it; can you please test it?

Mark
-------------- next part --------------
Index: hostapd/radius_client.c
===================================================================
RCS file: /cvs/hostap/hostapd/radius_client.c,v
retrieving revision 1.4
diff -u -r1.4 radius_client.c
--- hostapd/radius_client.c	9 May 2003 21:45:55 -0000	1.4
+++ hostapd/radius_client.c	16 Oct 2003 22:32:51 -0000
@@ -18,6 +18,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
+#include <errno.h>
 
 #include "hostapd.h"
 #include "radius.h"
@@ -87,6 +88,9 @@
 }
 
 
+static int radius_client_init_acct(hostapd *hapd);
+static int radius_client_init_auth(hostapd *hapd);
+
 static int radius_client_retransmit(hostapd *hapd,
 				    struct radius_msg_list *entry, time_t now)
 {
@@ -102,8 +106,16 @@
 	HOSTAPD_DEBUG(HOSTAPD_DEBUG_MINIMAL, "Resending RADIUS message (id=%d)"
 		      "\n", entry->msg->hdr->identifier);
 
-	if (send(s, entry->msg->buf, entry->msg->buf_used, 0) < 0)
+	if (send(s, entry->msg->buf, entry->msg->buf_used, 0) < 0) {
 		perror("send[RADIUS]");
+		if(errno == ENOTCONN) {
+			close(s);
+			if (entry->msg_type == RADIUS_ACCT)
+				radius_client_init_acct(hapd);
+			else
+				radius_client_init_auth(hapd);
+		}
+	}
 
 	entry->next_try = now + entry->next_wait;
 	entry->next_wait *= 2;
@@ -291,8 +303,16 @@
 		radius_msg_dump(msg);
 
 	res = send(s, msg->buf, msg->buf_used, 0);
-	if (res < 0)
+	if (res < 0) {
 		perror("send[RADIUS]");
+		if(errno == ENOTCONN) {
+			close(s);
+			if (msg_type == RADIUS_ACCT)
+				radius_client_init_acct(hapd);
+			else
+				radius_client_init_auth(hapd);
+		}
+	}
 
 	radius_client_list_add(hapd, msg, msg_type, shared_secret,
 			       shared_secret_len);


More information about the HostAP mailing list