[PATCH 11/12] radius/db: Improve error messages related to EAP DB.

greearb at candelatech.com greearb
Thu Mar 26 14:39:57 PDT 2015


From: Ben Greear <greearb at candelatech.com>

Add sqlite error message and DB name to the DB related
errors.  Add enough tracing so that users can know exactly
where users are failing to be found.

Signed-off-by: Ben Greear <greearb at candelatech.com>
---
 src/ap/authsrv.c           | 13 +++++++++----
 src/ap/eap_user_db.c       | 11 ++++++++---
 src/ap/ieee802_1x.c        | 13 +++++++++----
 src/radius/radius_server.c |  3 +++
 4 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/src/ap/authsrv.c b/src/ap/authsrv.c
index bd1778e..fdc7089 100644
--- a/src/ap/authsrv.c
+++ b/src/ap/authsrv.c
@@ -55,10 +55,11 @@ static int hostapd_radius_get_eap_user(void *ctx, const u8 *identity,
 {
 	const struct hostapd_eap_user *eap_user;
 	int i;
+	int rv = -1;
 
 	eap_user = hostapd_get_eap_user(ctx, identity, identity_len, phase2);
 	if (eap_user == NULL)
-		return -1;
+		goto out;
 
 	if (user == NULL)
 		return 0;
@@ -72,7 +73,7 @@ static int hostapd_radius_get_eap_user(void *ctx, const u8 *identity,
 	if (eap_user->password) {
 		user->password = os_malloc(eap_user->password_len);
 		if (user->password == NULL)
-			return -1;
+			goto out;
 		os_memcpy(user->password, eap_user->password,
 			  eap_user->password_len);
 		user->password_len = eap_user->password_len;
@@ -83,8 +84,12 @@ static int hostapd_radius_get_eap_user(void *ctx, const u8 *identity,
 	user->ttls_auth = eap_user->ttls_auth;
 	user->remediation = eap_user->remediation;
 	user->accept_attr = eap_user->accept_attr;
-
-	return 0;
+	rv = 0;
+out:
+	if (rv != 0) {
+		wpa_printf(MSG_DEBUG, "%s: Failed to find user.", __func__);
+	}
+	return rv;
 }
 
 
diff --git a/src/ap/eap_user_db.c b/src/ap/eap_user_db.c
index 559d77f..94491ac 100644
--- a/src/ap/eap_user_db.c
+++ b/src/ap/eap_user_db.c
@@ -138,8 +138,11 @@ eap_user_sqlite_get(struct hostapd_data *hapd, const u8 *identity,
 	char id_str[256], cmd[300];
 	size_t i;
 
-	if (identity_len >= sizeof(id_str))
+	if (identity_len >= sizeof(id_str)) {
+		wpa_printf(MSG_DEBUG, "%s:  id len too big: %d  %d",
+			   __func__, (int)(identity_len), (int)(sizeof(id_str)));
 		return NULL;
+	}
 	os_memcpy(id_str, identity, identity_len);
 	id_str[identity_len] = '\0';
 	for (i = 0; i < identity_len; i++) {
@@ -182,7 +185,8 @@ eap_user_sqlite_get(struct hostapd_data *hapd, const u8 *identity,
 	wpa_printf(MSG_DEBUG, "DB: %s", cmd);
 	if (sqlite3_exec(db, cmd, get_user_cb, &hapd->tmp_eap_user, NULL) !=
 	    SQLITE_OK) {
-		wpa_printf(MSG_DEBUG, "DB: Failed to complete SQL operation");
+		wpa_printf(MSG_DEBUG, "DB: Failed to complete SQL operation: %s  db: %s",
+			   sqlite3_errmsg(db), hapd->conf->eap_user_sqlite);
 	} else if (hapd->tmp_eap_user.next)
 		user = &hapd->tmp_eap_user;
 
@@ -193,7 +197,8 @@ eap_user_sqlite_get(struct hostapd_data *hapd, const u8 *identity,
 		if (sqlite3_exec(db, cmd, get_wildcard_cb, &hapd->tmp_eap_user,
 				 NULL) != SQLITE_OK) {
 			wpa_printf(MSG_DEBUG, "DB: Failed to complete SQL "
-				   "operation");
+				   "operation: %s  db: %s",
+				   sqlite3_errmsg(db), hapd->conf->eap_user_sqlite);
 		} else if (hapd->tmp_eap_user.next) {
 			user = &hapd->tmp_eap_user;
 			os_free(user->identity);
diff --git a/src/ap/ieee802_1x.c b/src/ap/ieee802_1x.c
index 79dc0f9..3da1b90 100644
--- a/src/ap/ieee802_1x.c
+++ b/src/ap/ieee802_1x.c
@@ -1926,10 +1926,11 @@ static int ieee802_1x_get_eap_user(void *ctx, const u8 *identity,
 	struct hostapd_data *hapd = ctx;
 	const struct hostapd_eap_user *eap_user;
 	int i;
+	int rv = -1;
 
 	eap_user = hostapd_get_eap_user(hapd, identity, identity_len, phase2);
 	if (eap_user == NULL)
-		return -1;
+		goto out;
 
 	os_memset(user, 0, sizeof(*user));
 	user->phase2 = phase2;
@@ -1941,7 +1942,7 @@ static int ieee802_1x_get_eap_user(void *ctx, const u8 *identity,
 	if (eap_user->password) {
 		user->password = os_malloc(eap_user->password_len);
 		if (user->password == NULL)
-			return -1;
+			goto out;
 		os_memcpy(user->password, eap_user->password,
 			  eap_user->password_len);
 		user->password_len = eap_user->password_len;
@@ -1951,8 +1952,12 @@ static int ieee802_1x_get_eap_user(void *ctx, const u8 *identity,
 	user->macacl = eap_user->macacl;
 	user->ttls_auth = eap_user->ttls_auth;
 	user->remediation = eap_user->remediation;
-
-	return 0;
+	rv = 0;
+out:
+	if (rv != 0) {
+		wpa_printf(MSG_DEBUG, "%s: Failed to find user.", __func__);
+	}
+	return rv;
 }
 
 
diff --git a/src/radius/radius_server.c b/src/radius/radius_server.c
index 85a485e..3bb296a 100644
--- a/src/radius/radius_server.c
+++ b/src/radius/radius_server.c
@@ -2035,6 +2035,9 @@ static int radius_server_get_eap_user(void *ctx, const u8 *identity,
 		sess->remediation = user->remediation;
 		sess->macacl = user->macacl;
 	}
+	if (ret != 0) {
+		RADIUS_DEBUG("%s: User-Name not found from user database", __func__);
+	}
 	return ret;
 }
 
-- 
1.9.3




More information about the Hostap mailing list