Open Source Telephony
 help / color / mirror / Atom feed
From: Giacinto Cifelli <gciofono@gmail.com>
To: ofono@ofono.org
Subject: [PATCH 6/6] drivers: support for auth NONE
Date: Thu, 04 Oct 2018 07:05:23 +0200	[thread overview]
Message-ID: <20181004050523.9772-2-gciofono@gmail.com> (raw)
In-Reply-To: <20181004050523.9772-1-gciofono@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 13140 bytes --]

Added the explicit support for auth NONE.
It needs to be added in all drivers/*/gprs-context.c atoms.

This method is already supported by all atoms that support
authentication (ie, all but Sierra' swmodem driver).

The behavior is left unchanged in case of inconsistent parameters:
if username is empty, then fallback to auth NONE.
---
 drivers/atmodem/gprs-context.c        | 18 ++++++++++++++----
 drivers/ifxmodem/gprs-context.c       | 10 ++++++++--
 drivers/isimodem/gprs-context.c       | 14 +++++++++-----
 drivers/mbimmodem/gprs-context.c      | 16 +++++++++++++---
 drivers/mbmmodem/gprs-context.c       | 11 ++++++-----
 drivers/qmimodem/gprs-context.c       | 13 +++++++++----
 drivers/rilmodem/gprs-context.c       | 13 +++++++++----
 drivers/stemodem/gprs-context.c       |  9 +++++----
 drivers/telitmodem/gprs-context-ncm.c | 10 ++++++++--
 drivers/ubloxmodem/gprs-context.c     |  7 ++++---
 10 files changed, 85 insertions(+), 36 deletions(-)

diff --git a/drivers/atmodem/gprs-context.c b/drivers/atmodem/gprs-context.c
index 79ac4c8e..93dd3379 100644
--- a/drivers/atmodem/gprs-context.c
+++ b/drivers/atmodem/gprs-context.c
@@ -158,7 +158,10 @@ static gboolean setup_ppp(struct ofono_gprs_context *gc)
 		g_at_ppp_set_debug(gcd->ppp, ppp_debug, "PPP");
 
 	g_at_ppp_set_auth_method(gcd->ppp, gcd->auth_method);
-	g_at_ppp_set_credentials(gcd->ppp, gcd->username, gcd->password);
+
+	if (gcd->auth_method != G_AT_PPP_AUTH_METHOD_NONE)
+		g_at_ppp_set_credentials(gcd->ppp, gcd->username,
+								gcd->password);
 
 	/* set connect and disconnect callbacks */
 	g_at_ppp_set_connect_function(gcd->ppp, ppp_connect, gc);
@@ -247,7 +250,7 @@ static void at_gprs_activate_primary(struct ofono_gprs_context *gc,
 	memcpy(gcd->username, ctx->username, sizeof(ctx->username));
 	memcpy(gcd->password, ctx->password, sizeof(ctx->password));
 
-	/* We only support CHAP and PAP */
+	/* We support CHAP, PAP and NONE */
 	switch (ctx->auth_method) {
 	case OFONO_GPRS_AUTH_METHOD_CHAP:
 		gcd->auth_method = G_AT_PPP_AUTH_METHOD_CHAP;
@@ -255,8 +258,11 @@ static void at_gprs_activate_primary(struct ofono_gprs_context *gc,
 	case OFONO_GPRS_AUTH_METHOD_PAP:
 		gcd->auth_method = G_AT_PPP_AUTH_METHOD_PAP;
 		break;
-	default:
-		goto error;
+	case OFONO_GPRS_AUTH_METHOD_NONE:
+		gcd->auth_method = G_AT_PPP_AUTH_METHOD_NONE;
+		gcd->username[0] = 0;
+		gcd->password[0] = 0;
+		break;
 	}
 
 	gcd->state = STATE_ENABLING;
@@ -304,6 +310,10 @@ static void at_gprs_activate_primary(struct ofono_gprs_context *gc,
 				snprintf(buf + len, sizeof(buf) - len - 3,
 						",\"PAP:%s\"", ctx->apn);
 				break;
+			case OFONO_GPRS_AUTH_METHOD_NONE:
+				snprintf(buf + len, sizeof(buf) - len - 3,
+						",\"%s\"", ctx->apn);
+				break;
 			}
 			break;
 		default:
diff --git a/drivers/ifxmodem/gprs-context.c b/drivers/ifxmodem/gprs-context.c
index 885e41bb..289b4341 100644
--- a/drivers/ifxmodem/gprs-context.c
+++ b/drivers/ifxmodem/gprs-context.c
@@ -466,8 +466,14 @@ static void ifx_gprs_activate_primary(struct ofono_gprs_context *gc,
 	gcd->active_context = ctx->cid;
 	gcd->cb = cb;
 	gcd->cb_data = data;
-	memcpy(gcd->username, ctx->username, sizeof(ctx->username));
-	memcpy(gcd->password, ctx->password, sizeof(ctx->password));
+
+	if (ctx->auth_method == OFONO_GPRS_AUTH_METHOD_NONE) {
+		memset(gcd->username, 0, sizeof(gcd->username));
+		memset(gcd->password, 0, sizeof(gcd->password));
+	} else {
+		memcpy(gcd->username, ctx->username, sizeof(ctx->username));
+		memcpy(gcd->password, ctx->password, sizeof(ctx->password));
+	}
 
 	gcd->state = STATE_ENABLING;
 	gcd->proto = ctx->proto;
diff --git a/drivers/isimodem/gprs-context.c b/drivers/isimodem/gprs-context.c
index ce53d022..4d2e7a12 100644
--- a/drivers/isimodem/gprs-context.c
+++ b/drivers/isimodem/gprs-context.c
@@ -538,11 +538,15 @@ static void isi_gprs_activate_primary(struct ofono_gprs_context *gc,
 	strncpy(cd->apn, ctx->apn, GPDS_MAX_APN_STRING_LENGTH);
 	cd->apn[GPDS_MAX_APN_STRING_LENGTH] = '\0';
 
-	strncpy(cd->username, ctx->username, GPDS_MAX_USERNAME_LENGTH);
-	cd->username[GPDS_MAX_USERNAME_LENGTH] = '\0';
-
-	strncpy(cd->password, ctx->password, GPDS_MAX_PASSWORD_LENGTH);
-	cd->username[GPDS_MAX_PASSWORD_LENGTH] = '\0';
+	if (ctx->auth_method == OFONO_GPRS_AUTH_METHOD_NONE) {
+		memset(cd->username, 0, sizeof(cd->username));
+		memset(cd->password, 0, sizeof(cd->password));
+	} else {
+		strncpy(cd->username, ctx->username, GPDS_MAX_USERNAME_LENGTH);
+		cd->username[GPDS_MAX_USERNAME_LENGTH] = '\0';
+		strncpy(cd->password, ctx->password, GPDS_MAX_PASSWORD_LENGTH);
+		cd->username[GPDS_MAX_PASSWORD_LENGTH] = '\0';
+	}
 
 	cd->pep = g_isi_pep_create(cd->idx, NULL, NULL);
 	if (cd->pep == NULL)
diff --git a/drivers/mbimmodem/gprs-context.c b/drivers/mbimmodem/gprs-context.c
index 79793c92..be256e43 100644
--- a/drivers/mbimmodem/gprs-context.c
+++ b/drivers/mbimmodem/gprs-context.c
@@ -75,9 +75,11 @@ static uint32_t auth_method_to_auth_protocol(enum ofono_gprs_auth_method method)
 		return 2; /* MBIMAuthProtocolChap */
 	case OFONO_GPRS_AUTH_METHOD_PAP:
 		return 1; /* MBIMAuthProtocolPap */
+	case OFONO_GPRS_AUTH_METHOD_NONE:
+		return 0; /* MBIMAUthProtocolNone */
 	}
 
-	return 0;
+	return 0; /* MBIMAUthProtocolNone */
 }
 
 static void mbim_deactivate_cb(struct mbim_message *message, void *user)
@@ -345,6 +347,8 @@ static void mbim_gprs_activate_primary(struct ofono_gprs_context *gc,
 {
 	struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc);
 	struct mbim_message *message;
+	const char username = NULL;
+	const char password = NULL;
 
 	DBG("cid %u", ctx->cid);
 
@@ -354,6 +358,12 @@ static void mbim_gprs_activate_primary(struct ofono_gprs_context *gc,
 	gcd->active_context = ctx->cid;
 	gcd->proto = ctx->proto;
 
+	if (ctx->auth_method != OFONO_GPRS_AUTH_METHOD_NONE && ctx->username[0])
+		username = ctx->username;
+
+	if (ctx->auth_method != OFONO_GPRS_AUTH_METHOD_NONE && ctx->password[0])
+		password = ctx->password;
+
 	message = mbim_message_new(mbim_uuid_basic_connect,
 					MBIM_CID_CONNECT,
 					MBIM_COMMAND_TYPE_SET);
@@ -361,8 +371,8 @@ static void mbim_gprs_activate_primary(struct ofono_gprs_context *gc,
 				ctx->cid,
 				1, /* MBIMActivationCommandActivate */
 				ctx->apn,
-				ctx->username[0] ? ctx->username : NULL,
-				ctx->password[0] ? ctx->password : NULL,
+				username,
+				password,
 				0, /*MBIMCompressionNone */
 				auth_method_to_auth_protocol(ctx->auth_method),
 				proto_to_context_ip_type(ctx->proto),
diff --git a/drivers/mbmmodem/gprs-context.c b/drivers/mbmmodem/gprs-context.c
index e961afa1..fa8b44b6 100644
--- a/drivers/mbmmodem/gprs-context.c
+++ b/drivers/mbmmodem/gprs-context.c
@@ -394,11 +394,12 @@ static void mbm_gprs_activate_primary(struct ofono_gprs_context *gc,
 	 * Set username and password, this should be done after CGDCONT
 	 * or an error can occur.  We don't bother with error checking
 	 * here
-	 * */
-	snprintf(buf, sizeof(buf), "AT*EIAAUW=%d,1,\"%s\",\"%s\"",
-			ctx->cid, ctx->username, ctx->password);
-
-	g_at_chat_send(gcd->chat, buf, none_prefix, NULL, NULL, NULL);
+	 */
+	if (ctx->auth_method != OFONO_GPRS_AUTH_METHOD_NONE) {
+		snprintf(buf, sizeof(buf), "AT*EIAAUW=%d,1,\"%s\",\"%s\"",
+				ctx->cid, ctx->username, ctx->password);
+		g_at_chat_send(gcd->chat, buf, none_prefix, NULL, NULL, NULL);
+	}
 
 	return;
 
diff --git a/drivers/qmimodem/gprs-context.c b/drivers/qmimodem/gprs-context.c
index 9a22b89f..7f31dd0e 100644
--- a/drivers/qmimodem/gprs-context.c
+++ b/drivers/qmimodem/gprs-context.c
@@ -238,7 +238,12 @@ static void qmi_activate_primary(struct ofono_gprs_context *gc,
 	struct cb_data *cbd = cb_data_new(cb, user_data);
 	struct qmi_param *param;
 	uint8_t ip_family;
-	uint8_t auth;
+	/*
+	 * set default authentication to CHAP, even if unneeded,
+	 * otherwise the compiler complains that:
+	 * ‘auth’ may be used uninitialized in this function
+	 */
+	uint8_t auth = QMI_WDS_AUTHENTICATION_CHAP;
 
 	DBG("cid %u", ctx->cid);
 
@@ -273,7 +278,7 @@ static void qmi_activate_primary(struct ofono_gprs_context *gc,
 	case OFONO_GPRS_AUTH_METHOD_PAP:
 		auth = QMI_WDS_AUTHENTICATION_PAP;
 		break;
-	default:
+	case OFONO_GPRS_AUTH_METHOD_NONE:
 		auth = QMI_WDS_AUTHENTICATION_NONE;
 		break;
 	}
@@ -281,11 +286,11 @@ static void qmi_activate_primary(struct ofono_gprs_context *gc,
 	qmi_param_append_uint8(param, QMI_WDS_PARAM_AUTHENTICATION_PREFERENCE,
 					auth);
 
-	if (ctx->username[0] != '\0')
+	if (auth != QMI_WDS_AUTHENTICATION_NONE && ctx->username[0] != '\0')
 		qmi_param_append(param, QMI_WDS_PARAM_USERNAME,
 					strlen(ctx->username), ctx->username);
 
-	if (ctx->password[0] != '\0')
+	if (auth != QMI_WDS_AUTHENTICATION_NONE &&  ctx->password[0] != '\0')
 		qmi_param_append(param, QMI_WDS_PARAM_PASSWORD,
 					strlen(ctx->password), ctx->password);
 
diff --git a/drivers/rilmodem/gprs-context.c b/drivers/rilmodem/gprs-context.c
index 1f476e23..ef62cba9 100644
--- a/drivers/rilmodem/gprs-context.c
+++ b/drivers/rilmodem/gprs-context.c
@@ -598,9 +598,12 @@ static void ril_gprs_context_activate_primary(struct ofono_gprs_context *gc,
 	 * We do the same as in $AOSP/frameworks/opt/telephony/src/java/com/
 	 * android/internal/telephony/dataconnection/DataConnection.java,
 	 * onConnect(), and use authentication or not depending on whether
-	 * the user field is empty or not.
+	 * the user field is empty or not,
+	 * on top of the verification for the authentication method.
 	 */
-	if (ctx->username[0] != '\0')
+
+	if (ctx->auth_method != OFONO_GPRS_AUTH_METHOD_NONE &&
+						ctx->username[0] != '\0')
 		auth_type = RIL_AUTH_BOTH;
 	else
 		auth_type = RIL_AUTH_NONE;
@@ -615,8 +618,10 @@ static void ril_gprs_context_activate_primary(struct ofono_gprs_context *gc,
 		parcel_w_string(&rilp, buf);
 
 		g_ril_append_print_buf(gcd->ril, "(%d,%s,%s,%s,%s,%d,%s,%u)",
-				tech, profile, ctx->apn, ctx->username,
-				ctx->password, auth_type,
+				tech, profile, ctx->apn,
+				auth_type == RIL_AUTH_NONE ? "" : ctx->username,
+				auth_type == RIL_AUTH_NONE ? "" : ctx->password,
+				auth_type,
 				ril_util_gprs_proto_to_ril_string(ctx->proto),
 				ctx->cid);
 	} else
diff --git a/drivers/stemodem/gprs-context.c b/drivers/stemodem/gprs-context.c
index 18b2bfa4..32facd8c 100644
--- a/drivers/stemodem/gprs-context.c
+++ b/drivers/stemodem/gprs-context.c
@@ -307,10 +307,11 @@ static void ste_gprs_activate_primary(struct ofono_gprs_context *gc,
 	 * or an error can occur.  We don't bother with error checking
 	 * here
 	 */
-	snprintf(buf, sizeof(buf), "AT*EIAAUW=%d,1,\"%s\",\"%s\"",
-			ctx->cid, ctx->username, ctx->password);
-
-	g_at_chat_send(gcd->chat, buf, none_prefix, NULL, NULL, NULL);
+	if (ctx->auth_method != OFONO_GPRS_AUTH_METHOD_NONE) {
+		snprintf(buf, sizeof(buf), "AT*EIAAUW=%d,1,\"%s\",\"%s\"",
+				ctx->cid, ctx->username, ctx->password);
+		g_at_chat_send(gcd->chat, buf, none_prefix, NULL, NULL, NULL);
+	}
 
 	return;
 
diff --git a/drivers/telitmodem/gprs-context-ncm.c b/drivers/telitmodem/gprs-context-ncm.c
index 7139740c..9c9b9500 100644
--- a/drivers/telitmodem/gprs-context-ncm.c
+++ b/drivers/telitmodem/gprs-context-ncm.c
@@ -277,7 +277,8 @@ static void setup_cb(gboolean ok, GAtResult *result, gpointer user_data)
 		return;
 	}
 
-	if (gcd->username[0] && gcd->password[0])
+	if (gcd->auth_method != AUTH_METHOD_NONE &&
+					gcd->username[0] && gcd->password[0])
 		sprintf(buf, "AT#PDPAUTH=%u,%u,\"%s\",\"%s\"",
 			gcd->active_context, gcd->auth_method,
 			gcd->username, gcd->password);
@@ -320,7 +321,7 @@ static void telitncm_gprs_activate_primary(struct ofono_gprs_context *gc,
 	gcd->state = STATE_ENABLING;
 	gcd->proto = ctx->proto;
 
-	/* We only support CHAP and PAP */
+	/* We support CHAP, PAP and NONE */
 	switch (ctx->auth_method) {
 	case OFONO_GPRS_AUTH_METHOD_CHAP:
 		gcd->auth_method = AUTH_METHOD_CHAP;
@@ -328,6 +329,11 @@ static void telitncm_gprs_activate_primary(struct ofono_gprs_context *gc,
 	case OFONO_GPRS_AUTH_METHOD_PAP:
 		gcd->auth_method = AUTH_METHOD_PAP;
 		break;
+	case OFONO_GPRS_AUTH_METHOD_NONE:
+		gcd->auth_method = AUTH_METHOD_NONE;
+		gcd->username[0] = 0;
+		gcd->password[0] = 0;
+		break;
 	default:
 		goto error;
 	}
diff --git a/drivers/ubloxmodem/gprs-context.c b/drivers/ubloxmodem/gprs-context.c
index 6fe2719f..7eb18f09 100644
--- a/drivers/ubloxmodem/gprs-context.c
+++ b/drivers/ubloxmodem/gprs-context.c
@@ -315,9 +315,10 @@ static void ublox_send_uauthreq(struct ofono_gprs_context *gc,
 	case OFONO_GPRS_AUTH_METHOD_CHAP:
 		auth = 2;
 		break;
-	default:
-		ofono_error("Unsupported auth type %u", auth_method);
-		return;
+	case OFONO_GPRS_AUTH_METHOD_NONE:
+		auth = 0;
+		username = password = "";
+		break;
 	}
 
 	snprintf(buf, sizeof(buf), "AT+UAUTHREQ=%u,%u,\"%s\",\"%s\"",
-- 
2.17.1


  reply	other threads:[~2018-10-04  5:05 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-04  5:05 [PATCH 4/6] plugins/provisioning and mbpi: support for auth NONE Giacinto Cifelli
2018-10-04  5:05 ` Giacinto Cifelli [this message]
  -- strict thread matches above, loose matches on Subject: below --
2018-10-02  6:26 [PATCH 1/6] connman-api: added "none" auth_method Giacinto Cifelli
2018-10-02  6:26 ` [PATCH 6/6] drivers: support for auth NONE Giacinto Cifelli
2018-10-03 21:29   ` Denis Kenzior
2018-10-04  3:44     ` Giacinto Cifelli
2018-10-04  4:40       ` Denis Kenzior
2018-10-04  4:51         ` Giacinto Cifelli
2018-10-05  2:04           ` Denis Kenzior
2018-10-05  2:07             ` Giacinto Cifelli
2018-10-04  4:43     ` Giacinto Cifelli
2018-10-05  2:20       ` Denis Kenzior
2018-10-05  2:23         ` Giacinto Cifelli
2018-10-05  2:47           ` Denis Kenzior
2018-10-05  2:51             ` Giacinto Cifelli
2018-10-05  3:23               ` Denis Kenzior
2018-10-05  3:30                 ` Giacinto Cifelli
2018-10-05  3:37                   ` Denis Kenzior
2018-10-05  3:54                     ` Giacinto Cifelli
2018-10-05  4:09                       ` Denis Kenzior
2018-10-05  4:13                         ` Giacinto Cifelli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181004050523.9772-2-gciofono@gmail.com \
    --to=gciofono@gmail.com \
    --cc=ofono@ofono.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox