connman-api: added "none" auth_method
PATCH 1/6 connman-api: added "none" auth_method
--- doc/connman-api.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
doc/connman-api.txt +2 -1
@@ -192,7 +192,8 @@ Properties boolean Active [readwrite] string AuthenticationMethod [readwrite] Holds the PPP authentication method to use. Valid - values are "pap" and "chap". Defaults to "chap". + values are "pap", "chap" and "none". + Defaults to "chap". string Username [readwrite]
Signature · 1 line
2.17.1
PATCH 2/6 gprs-context: added OFONO_GPRS_AUTH_METHOD_NONE
This method makes explicit the lack of authentication.
When selected, the username and password are ignored, but they are not changed in the user-defined properties for the context.
This treatment is necessary to allow setting independently auth_method, username and password.
This method is also selected implicitly when username is set to an empty string. Also this selection is done without changing the user-defined auth_method for the context, so that the behavior is consistent.
--- include/gprs-context.h | 1 + 1 file changed, 1 insertion(+)
include/gprs-context.h +1 -0
@@ -57,6 +57,7 @@ enum ofono_gprs_context_type {enum ofono_gprs_auth_method {OFONO_GPRS_AUTH_METHOD_CHAP =0 ,OFONO_GPRS_AUTH_METHOD_PAP , +OFONO_GPRS_AUTH_METHOD_NONE , };struct ofono_gprs_primary_context {
Signature · 1 line
2.17.1
PATCH 3/6 src/gprs: support for NONE auth
In reply to Giacinto Cifelli--- src/gprs.c | 7 +++++++ 1 file changed, 7 insertions(+)
src/gprs.c +7 -0
@@ -261,6 +261,10 @@ static const char *gprs_auth_method_to_string(enum ofono_gprs_auth_method auth)return "chap" ;case OFONO_GPRS_AUTH_METHOD_PAP :return "pap" ; +case OFONO_GPRS_AUTH_METHOD_NONE : +return "none" ; +default : +return NULL ; };return NULL ;
@@ -275,6 +279,9 @@ static gboolean gprs_auth_method_from_string(const char *str, }else if (g_str_equal (str,"pap" )) { *auth =OFONO_GPRS_AUTH_METHOD_PAP ;return TRUE; + }else if (g_str_equal (str,"none" )) { + *auth =OFONO_GPRS_AUTH_METHOD_NONE ; +return TRUE; }return FALSE;
Signature · 1 line
2.17.1
PATCH 4/6 plugins/file-provisioning.c: support for auth NONE
In reply to Giacinto Cifelli--- plugins/file-provision.c | 3 +++ 1 file changed, 3 insertions(+)
plugins/file-provision.c +3 -0
@@ -104,6 +104,9 @@ static int config_file_provision_get_settings(const char *mcc,else if (g_strcmp0 (value,"pap" ) ==0 ) (*settings)[0 ].auth_method =OFONO_GPRS_AUTH_METHOD_PAP ; +else if (g_strcmp0 (value,"none" ) ==0 ) + (*settings)[0 ].auth_method = +OFONO_GPRS_AUTH_METHOD_NONE ;else DBG ("Unknown auth method: %s" , value);
Signature · 1 line
2.17.1
PATCH 5/6 gatchat: support for auth NONE
In reply to Giacinto CifelliAdded authentication method G_AT_PPP_AUTH_METHOD_NONE and its handling.
This method is already used in the code, and
the patch is just allowing its explicit use, on top of the implicit selection done when username is empty.
--- gatchat/gatppp.c | 3 ++- gatchat/gatppp.h | 1 + gatchat/ppp_lcp.c | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-)
gatchat/gatppp.c +2 -1
@@ -615,7 +615,8 @@ const char *g_at_ppp_get_password(GAtPPP *ppp)gboolean g_at_ppp_set_auth_method (GAtPPP *ppp,GAtPPPAuthMethod method) {if (method !=G_AT_PPP_AUTH_METHOD_CHAP && - method !=G_AT_PPP_AUTH_METHOD_PAP ) + method !=G_AT_PPP_AUTH_METHOD_PAP && + method !=G_AT_PPP_AUTH_METHOD_NONE )return FALSE; ppp->auth_method = method;
gatchat/gatppp.h +1 -0
@@ -46,6 +46,7 @@ typedef enum _GAtPPPDisconnectReason {typedef enum _GAtPPPAuthMethod {G_AT_PPP_AUTH_METHOD_CHAP ,G_AT_PPP_AUTH_METHOD_PAP , +G_AT_PPP_AUTH_METHOD_NONE , }GAtPPPAuthMethod ; typedef void (*GAtPPPConnectFunc)(const char *iface, const char *local,
gatchat/ppp_lcp.c +3 -0
@@ -279,6 +279,9 @@ static enum rcr_result lcp_rcr(struct pppcp_data *pppcp, *new_len =4 ;return RCR_NAK ; + +case G_AT_PPP_AUTH_METHOD_NONE : +return RCR_ACCEPT ; }break ; }
Signature · 1 line
2.17.1
Re: [PATCH 5/6] gatchat: support for auth NONE
Hi Giacinto,
Quoted 3 lines · Giacinto Cifelli
Added authentication method
G_AT_PPP_AUTH_METHOD_NONEand its handling.This method is already used in the code, and
Hmm, I don't think so?
Quoted 2 lines
the patch is just allowing its explicit use, on top of the implicit selection done when username is empty.
I do not see how this is true? Even if username / password is empty, the CHAP/PAP authentication method applies. We just hash the empty password for CHAP / send it plaintext for PAP.
There is of course the possibility that the PPP server can simply not ask us for the AUTH_PROTO option, in which case we would find that acceptable and the auth protocol would not be used.
Quoted 6 lines
--- gatchat/gatppp.c | 3 ++- gatchat/gatppp.h | 1 + gatchat/ppp_lcp.c | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-)
<snip>
gatchat/ppp_lcp.c static enum rcr_result lcp_rcr(struct pppcp_data *pppcp, · line 284
Quoted 11 lines
gatchat/ppp_lcp.c +3
-0@@ -279,6 +279,9 @@ static enum rcr_result lcp_rcr(struct pppcp_data *pppcp, *new_len =4 ;return RCR_NAK ; + +case G_AT_PPP_AUTH_METHOD_NONE : +return RCR_ACCEPT ;
Should this not be RCR_REJECT ? Otherwise we're accepting a server proposed auth protocol when we're explicitly configured not to use one.
gatchat/ppp_lcp.c static enum rcr_result lcp_rcr(struct pppcp_data *pppcp, · line 287
Quoted 4 lines
gatchat/ppp_lcp.c +0
-0}break ; }
Regards,
-Denis
PATCH 6/6 drivers: support for auth NONE
In reply to Giacinto CifelliAdded the explicit support for auth NONE.
It is added in all drivers/*/gprs-context.c atoms that support authentication.
The support for no-authentication case is already present in all drivers. This patch allows to use it explicitly.
Note that the swmodem driver does not have any authentication
concept: no changes.
Additionally, the behavior is left unchanged in case of inconsistent
parameters: if username is empty, then fallback to auth NONE.
--- drivers/atmodem/gprs-context.c | 20 ++++++++++++++++---- drivers/ifxmodem/gprs-context.c | 6 ++++++ drivers/isimodem/gprs-context.c | 5 +++++ 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, 81 insertions(+), 29 deletions(-)
drivers/atmodem/gprs-context.c +16 -4
@@ -158,7 +158,12 @@ 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); +else +g_at_ppp_set_credentials (gcd->ppp,NULL ,NULL );/* set connect and disconnect callbacks */ g_at_ppp_set_connect_function (gcd->ppp, ppp_connect, gc);
@@ -247,7 +252,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 +260,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 +312,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 :
drivers/ifxmodem/gprs-context.c +6 -0
@@ -466,9 +466,15 @@ 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 ) { + gcd->username[0 ] =0 ; + gcd->password[0 ] =0 ; + } + gcd->state =STATE_ENABLING ; gcd->proto = ctx->proto;
drivers/isimodem/gprs-context.c +5 -0
@@ -544,6 +544,11 @@ static void isi_gprs_activate_primary(struct ofono_gprs_context *gc,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 ) { + cd->username[0 ] =0 ; + cd->password[0 ] =0 ; + } + cd->pep =g_isi_pep_create (cd->idx,NULL ,NULL );if (cd->pep ==NULL ) goto error;
drivers/mbimmodem/gprs-context.c +13 -3
@@ -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),
drivers/mbmmodem/gprs-context.c +6 -5
@@ -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 ;
drivers/qmimodem/gprs-context.c +9 -4
@@ -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);
drivers/rilmodem/gprs-context.c +9 -4
@@ -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
drivers/stemodem/gprs-context.c +5 -4
@@ -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 ;
drivers/telitmodem/gprs-context-ncm.c +8 -2
@@ -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; }
drivers/ubloxmodem/gprs-context.c +4 -3
@@ -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\"",
Signature · 1 line
2.17.1
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Giacinto,
Quoted 29 lines · Giacinto Cifelli
Added the explicit support for auth NONE.
It is added in alldrivers/*/gprs-context.catoms that support authentication.The support for no-authentication case is already present in all drivers. This patch allows to use it explicitly.
Note that the swmodem driver does not have any authentication
concept: no changes.Additionally, the behavior is left unchanged in case of inconsistent
parameters: if username is empty, then fallback to auth NONE.--- drivers/atmodem/gprs-context.c | 20 ++++++++++++++++---- drivers/ifxmodem/gprs-context.c | 6 ++++++ drivers/isimodem/gprs-context.c | 5 +++++ 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, 81 insertions(+), 29 deletions(-)drivers/atmodem/gprs-context.c +0
-0
drivers/atmodem/gprs-context.c static gboolean setup_ppp(struct ofono_gprs_context *gc) · line 166
Quoted 10 lines
drivers/atmodem/gprs-context.c +6
-1@@ -158,7 +158,12 @@ 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); +else +g_at_ppp_set_credentials (gcd->ppp,NULL ,NULL );
This else part seems unneeded
Quoted 44 lines
drivers/atmodem/gprs-context.c +10
-3/* set connect and disconnect callbacks */ g_at_ppp_set_connect_function (gcd->ppp, ppp_connect, gc);@@ -247,7 +252,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 +260,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 +312,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 :drivers/ifxmodem/gprs-context.c +0
-0@@ -466,9 +466,15 @@ static void ifx_gprs_activate_primary(struct ofono_gprs_context *gc, gcd->active_context = ctx->cid; gcd->cb = cb;
drivers/ifxmodem/gprs-context.c static void ifx_gprs_activate_primary(struct ofono_gprs_context *gc, · line 477
Quoted 10 lines
drivers/ifxmodem/gprs-context.c +6
-0gcd->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 ) { + gcd->username[0 ] =0 ; + gcd->password[0 ] =0 ; + } +
Ugh, I'd really prefer something like:
if (method == NONE) {
memset(gcd->username, 0, sizeof(gcd->username));
...
} else {
memcpy(...);
}Quoted 96 lines
drivers/ifxmodem/gprs-context.c +0
-0gcd->state =STATE_ENABLING ; gcd->proto = ctx->proto;drivers/isimodem/gprs-context.c +5
-0@@ -544,6 +544,11 @@ static void isi_gprs_activate_primary(struct ofono_gprs_context *gc,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 ) { + cd->username[0 ] =0 ; + cd->password[0 ] =0 ; + } + cd->pep =g_isi_pep_create (cd->idx,NULL ,NULL );if (cd->pep ==NULL ) goto error;drivers/mbimmodem/gprs-context.c +13
-3@@ -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),drivers/mbmmodem/gprs-context.c +6
-5@@ -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 ;drivers/qmimodem/gprs-context.c +0
-0
drivers/qmimodem/gprs-context.c static void qmi_activate_primary(struct ofono_gprs_context *gc, · line 246
Quoted 10 lines
drivers/qmimodem/gprs-context.c +6
-1@@ -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 ;
Ugh. I really hate GCC people sometimes. While the warning is strictly correct, it is useless for 99% of the code and forces us to jump through hoops. Anyway, I would propose we use the following pattern:
int auth_method_to_qmi(enum ofono_auth_method method, uint8_t *out_auth)
{
switch (method)
case CHAP:
*out_auth = ...
return 0;
case:
...
}
return -ERANGE;
}Quoted 122 lines
drivers/qmimodem/gprs-context.c +3
-3DBG ("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);drivers/rilmodem/gprs-context.c +9
-4@@ -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 drivers/stemodem/gprs-context.c +5
-4@@ -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 ;drivers/telitmodem/gprs-context-ncm.c +8
-2@@ -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; }drivers/ubloxmodem/gprs-context.c +0
-0@@ -315,9 +315,10 @@ static void ublox_send_uauthreq(struct ofono_gprs_context *gc,case OFONO_GPRS_AUTH_METHOD_CHAP : auth =2 ;break ;
drivers/ubloxmodem/gprs-context.c static void ublox_send_uauthreq(struct ofono_gprs_context *gc, · line 324
Quoted 10 lines
drivers/ubloxmodem/gprs-context.c +4
-3-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\"",
Anyway, these look fine to me otherwise. But I still wouldn't mind some explanation of how we're addressing the questions I raised in my E-mail on Sep 27.
Also, what are we doing with plugins/mbpi.c? That database only supports pap/chap but potentially with missing username/password attributes. Should we be converting these to type 'none'? Or leaving things as is and having the drivers deal with converting type chap, empty username/password to type none. I thought the whole idea of introducing type 'None' was that you hated that drivers were doing this?
I believe you referred to this as a 'hack' or similar terminology? :)
Regards,
-Denis
Re: [PATCH 6/6] drivers: support for auth NONE
hi Denis,
thank you for your comments on the code.
I will change and re-submit.
Quoted 364 lines · Denis Kenzior
Hi Giacinto,
Quoted 29 lines · Giacinto Cifelli
Added the explicit support for auth NONE.
It is added in alldrivers/*/gprs-context.catoms that support authentication.The support for no-authentication case is already present in all drivers. This patch allows to use it explicitly.
Note that the swmodem driver does not have any authentication
concept: no changes.Additionally, the behavior is left unchanged in case of inconsistent
parameters: if username is empty, then fallback to auth NONE.--- drivers/atmodem/gprs-context.c | 20 ++++++++++++++++---- drivers/ifxmodem/gprs-context.c | 6 ++++++ drivers/isimodem/gprs-context.c | 5 +++++ 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, 81 insertions(+), 29 deletions(-)drivers/atmodem/gprs-context.c +0
-0drivers/atmodem/gprs-context.c static gboolean setup_ppp(struct ofono_gprs_context *gc) · line 166
Quoted 10 lines
drivers/atmodem/gprs-context.c +6
-1@@ -158,7 +158,12 @@ 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); +else +g_at_ppp_set_credentials (gcd->ppp,NULL ,NULL );This else part seems unneeded
Quoted 44 lines
drivers/atmodem/gprs-context.c +10
-3/* set connect and disconnect callbacks */ g_at_ppp_set_connect_function (gcd->ppp, ppp_connect, gc);@@ -247,7 +252,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 +260,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 +312,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 :drivers/ifxmodem/gprs-context.c +0
-0@@ -466,9 +466,15 @@ static void ifx_gprs_activate_primary(struct ofono_gprs_context *gc, gcd->active_context = ctx->cid; gcd->cb = cb;drivers/ifxmodem/gprs-context.c static void ifx_gprs_activate_primary(struct ofono_gprs_context *gc, · line 477
Quoted 10 lines
drivers/ifxmodem/gprs-context.c +6
-0gcd->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 ) { + gcd->username[0 ] =0 ; + gcd->password[0 ] =0 ; + } +Ugh, I'd really prefer something like:
if (method == NONE) { memset(gcd->username, 0, sizeof(gcd->username)); ... } else { memcpy(...); }Quoted 96 lines
drivers/ifxmodem/gprs-context.c +0
-0gcd->state =STATE_ENABLING ; gcd->proto = ctx->proto;drivers/isimodem/gprs-context.c +5
-0@@ -544,6 +544,11 @@ static void isi_gprs_activate_primary(struct ofono_gprs_context *gc,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 ) { + cd->username[0 ] =0 ; + cd->password[0 ] =0 ; + } + cd->pep =g_isi_pep_create (cd->idx,NULL ,NULL );if (cd->pep ==NULL ) goto error;drivers/mbimmodem/gprs-context.c +13
-3@@ -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),drivers/mbmmodem/gprs-context.c +6
-5@@ -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 ;drivers/qmimodem/gprs-context.c +0
-0drivers/qmimodem/gprs-context.c static void qmi_activate_primary(struct ofono_gprs_context *gc, · line 246
Quoted 10 lines
drivers/qmimodem/gprs-context.c +6
-1@@ -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 ;Ugh. I really hate GCC people sometimes. While the warning is strictly correct, it is useless for 99% of the code and forces us to jump through hoops. Anyway, I would propose we use the following pattern:
int
auth_method_to_qmi(enum ofono_auth_method method, uint8_t *out_auth){ switch (method) case CHAP: *out_auth = ... return 0; case: ... } return -ERANGE; }Quoted 130 lines
drivers/qmimodem/gprs-context.c +3
-3DBG ("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);drivers/rilmodem/gprs-context.c +9
-4@@ -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 drivers/stemodem/gprs-context.c +5
-4@@ -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 ;drivers/telitmodem/gprs-context-ncm.c +8
-2@@ -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; }drivers/ubloxmodem/gprs-context.c +4
-3@@ -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 ; }
Quoted 7 lines
drivers/ubloxmodem/gprs-context.c static void ublox_send_uauthreq(struct ofono_gprs_context *gc, · line 324
Quoted 2 lines
drivers/ubloxmodem/gprs-context.c +0
-0snprintf(buf, sizeof(buf), "AT+UAUTHREQ=%u,%u,\"%s\",\"%s\"",Anyway, these look fine to me otherwise. But I still wouldn't mind some explanation of how we're addressing the questions I raised in my E-mail on Sep 27.
I suppose your comments on [PATCH 2/4]. I have addressed them on the [PATCH 2/6].
Basically, as you can also see from the code, the user-set value are stored, but the driver changes them internally if suited:
- if no username it changes to AUTH_NONE, this is already in place for some
- if AUTH_NONE, username and password are cleared internally
This permissive approach allows also to deal with the next question (see below).
Quoted 6 lines
Also, what are we doing with
plugins/mbpi.c? That database only supports pap/chap but potentially with missing username/password attributes. Should we be converting these to type 'none'? Or leaving things as is and having the drivers deal with converting type chap, empty username/password to type none. I thought the whole idea of introducing type 'None' was that you hated that drivers were doing this?
I had added the 'none' also there, then removed it. It looks to me this database is for CDMA (but I am not sure).
In the database itself I have on my machine, there is a single 'pap', no 'chap', and in all other cases the fields are missing.
If it is for CDMA, I am not sure how much should this database be maintained. I know that several users have a private branch of ofono for CDMA, and do not intend to change or submit,
because the technology is felt EOL.
Maybe this could be removed in a 2.x branch that you mentioned apropos AT+CGATT=0 when roaming.
In the meanwhile, I have chosen to ignore it. It is not difficult to add it in the code if necessary,
and I can also considered it separately from this series of patches.
Quoted 1 line
I believe you referred to this as a 'hack' or similar terminology? :)
undocumented hack, yes :)
it is the undocumented part that I don't like. For this db, for example, one may assume that
without user/pwd it is no-auth. Which is true for all drivers except PPP, that would
default to chap and attempt to generate a password, as you described 2 days ago.
My concern is for the use of the auth_method for the default LTE bearer. In that case I would prefer to have such a method clearly identified, because the combined attach could
fail for various reasons, the network answer is in general inconsistent (I have counted already
half a dozen failure codes when APN/auth are incorrect), and - mainly
- there is no immediate feedback
to the application: the registration is attempted a few times, then there is a back-off timer of 12 minutes (T3346),
when the module could attach to a legacy technology. In all this, the user might just believe that it is out of LTE
coverage at first, and will take a long time to associate the symptoms with the actual issue.
Another issue for the default context is that the parameters are in general non-volatile, so if the SIM is changed,
and with it perhaps only the APN, it would still refer to the previous auth_method and parameters until changed explicitly.
And in the future, it seems the SIM will be changed quite often And it seems to be particularly important for VoLTE, because no operator supports it in roaming. The standard exists,
but seems unattractive.
With the sunset of 2G/3G, the only way to have voice will be using a local SIM profile.
This SIM exchange is technical achieved with the eUICC.
BTW, the SIM hot swap seems to be another point to improve, but for now I am not going into this.
Quoted 3 lines
Regards,
-Denis
Regards,
Giacinto
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Giacinto,
Quoted 7 lines
I suppose your comments on [PATCH 2/4]. I have addressed them on the [PATCH 2/6].
Basically, as you can also see from the code, the user-set value are stored, but the driver changes them internally if suited:
- if no username it changes toAUTH_NONE, this is already in place for some
- ifAUTH_NONE, username and password are cleared internally
This permissive approach allows also to deal with the next question (see below).
All right. But do you also want to mention this behavior in the D-Bus documentation? E.g. something to the effect of if AuthenticationMethod is set to None, then username / password values are ignored?
Quoted 8 lines
Quoted 7 lines
Also, what are we doing with
plugins/mbpi.c? That database only supports pap/chap but potentially with missing username/password attributes. Should we be converting these to type 'none'? Or leaving things as is and having the drivers deal with converting type chap, empty username/password to type none. I thought the whole idea of introducing type 'None' was that you hated that drivers were doing this?
Quoted 4 lines
I had added the 'none' also there, then removed it. It looks to me this database is for CDMA (but I am not sure).
In the database itself I have on my machine, there is a single 'pap', no 'chap', and in all other cases the fields are missing.
This database is for both CDMA and GSM. Essentially CHAP is assumed if PAP is not explicitly specified.
Quoted 5 lines
If it is for CDMA, I am not sure how much should this database be maintained. I know that several users have a private branch of ofono for CDMA, and do not intend to change or submit,
because the technology is felt EOL.
Mobile Broadband Provider Info is still maintained. See
https://github.com/GNOME/mobile-broadband-provider-info. The database itself was never really that good, but it was at least something. I think the Ubuntu guys had a plugin that used the Android provisioning db, but it was never contributed upstream.
Quoted 8 lines
Maybe this could be removed in a 2.x branch that you mentioned apropos AT+CGATT=0 when roaming.
In the meanwhile, I have chosen to ignore it. It is not difficult to add it in the code if necessary,
and I can also considered it separately from this series of patches.
Given how closely related it is, it probably should be considered in the same series. This is one of those situations where we're messing with the existing API and so all changes go in or none at all... But given that the drivers are expected to handle empty username/passwords already, I'm okay leaving mbpi as is... but it might be a good idea to fix it anyway...
Quoted 8 lines
Quoted 1 line
I believe you referred to this as a 'hack' or similar terminology? :)
undocumented hack, yes :)
it is the undocumented part that I don't like. For this db, for example, one may assume that
without user/pwd it is no-auth. Which is true for all drivers except PPP, that would
default to chap and attempt to generate a password, as you described 2 days ago.
That actually depends on what the modem PPP stack does. If it doesn't request authentication, then none will be attempted.
Quoted 4 lines
My concern is for the use of the
auth_methodfor the default LTE bearer. In that case I would prefer to have such a method clearly identified, because the combined attach could
So isn't this a good reason to make sure provisioning sets these properly? Default attach parameters are not currently provisioned, but perhaps they need to be.
Quoted 11 lines
fail for various reasons, the network answer is in general inconsistent (I have counted already
half a dozen failure codes when APN/auth are incorrect), and - mainly
- there is no immediate feedback
to the application: the registration is attempted a few times, then there is a back-off timer of 12 minutes (T3346),
when the module could attach to a legacy technology. In all this, the user might just believe that it is out of LTE
coverage at first, and will take a long time to associate the symptoms with the actual issue.
Quoted 4 lines
Another issue for the default context is that the parameters are in general non-volatile, so if the SIM is changed,
and with it perhaps only the APN, it would still refer to the previousauth_methodand parameters until changed explicitly.
Another reason to provision the default attach parameters. If you change the SIM and no settings are read from storage (which is stored per IMSI), then oFono should attempt to provision the default attach parameters.
Quoted 11 lines
And in the future, it seems the SIM will be changed quite often And it seems to be particularly important for VoLTE, because no operator supports it in roaming. The standard exists,
but seems unattractive.
With the sunset of 2G/3G, the only way to have voice will be using a local SIM profile.
This SIM exchange is technical achieved with the eUICC.BTW, the SIM hot swap seems to be another point to improve, but for now I am not going into this.
Out of curiosity, what do you have in mind?
Regards,
-Denis
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Denis,
Quoted 11 lines · Denis Kenzior
Hi Giacinto,
Quoted 7 lines
I suppose your comments on [PATCH 2/4]. I have addressed them on the [PATCH 2/6].
Basically, as you can also see from the code, the user-set value are stored, but the driver changes them internally if suited:
- if no username it changes toAUTH_NONE, this is already in place for some
- ifAUTH_NONE, username and password are cleared internally
This permissive approach allows also to deal with the next question (see below).
Quoted 3 lines
All right. But do you also want to mention this behavior in the D-Bus documentation? E.g. something to the effect of if AuthenticationMethod is set to None, then username / password values are ignored?
gladly, but I didn't find a document for this.
We are going to add it in the lte-api, but the only place I have found for the rest is in the
connman-api.
Is there some other documents?
Quoted 9 lines
Quoted 9 lines
Quoted 8 lines
Also, what are we doing with
plugins/mbpi.c? That database only supports pap/chap but potentially with missing username/password attributes. Should we be converting these to type 'none'? Or leaving things as is and having the drivers deal with converting type chap, empty username/password to type none. I thought the whole idea of introducing type 'None' was that you hated that drivers were doing this?
Quoted 7 lines
Quoted 4 lines
I had added the 'none' also there, then removed it. It looks to me this database is for CDMA (but I am not sure).
In the database itself I have on my machine, there is a single 'pap', no 'chap', and in all other cases the fields are missing.This database is for both CDMA and GSM. Essentially CHAP is assumed if PAP is not explicitly specified.
ok, then it is to be kept.
Quoted 7 lines
Quoted 6 lines
If it is for CDMA, I am not sure how much should this database be maintained. I know that several users have a private branch of ofono for CDMA, and do not intend to change or submit,
because the technology is felt EOL.
Quoted 6 lines
Mobile Broadband Provider Info is still maintained. See
https://github.com/GNOME/mobile-broadband-provider-info. The database itself was never really that good, but it was at least something. I think the Ubuntu guys had a plugin that used the Android provisioning db, but it was never contributed upstream.
that's a pity.
Quoted 9 lines
Quoted 8 lines
Maybe this could be removed in a 2.x branch that you mentioned apropos AT+CGATT=0 when roaming.
In the meanwhile, I have chosen to ignore it. It is not difficult to add it in the code if necessary,
and I can also considered it separately from this series of patches.
Quoted 6 lines
Given how closely related it is, it probably should be considered in the same series. This is one of those situations where we're messing with the existing API and so all changes go in or none at all... But given that the drivers are expected to handle empty username/passwords already, I'm okay leaving mbpi as is... but it might be a good idea to fix it anyway...
I can fix it, but need to decide on a default then.
It looks to me that 'none' would be a better default than 'chap'. The problem is that 'chap' is assumed so far and therefore it would be regressive.
Quoted 38 lines
Quoted 9 lines
Quoted 2 lines
I believe you referred to this as a 'hack' or similar terminology? :)
undocumented hack, yes :)
it is the undocumented part that I don't like. For this db, for example, one may assume that
without user/pwd it is no-auth. Which is true for all drivers except PPP, that would
default to chap and attempt to generate a password, as you described 2 days ago.That actually depends on what the modem PPP stack does. If it doesn't request authentication, then none will be attempted.
Quoted 4 lines
My concern is for the use of the
auth_methodfor the default LTE bearer. In that case I would prefer to have such a method clearly identified, because the combined attach couldSo isn't this a good reason to make sure provisioning sets these properly? Default attach parameters are not currently provisioned, but perhaps they need to be.
Quoted 11 lines
fail for various reasons, the network answer is in general inconsistent (I have counted already
half a dozen failure codes when APN/auth are incorrect), and - mainly
- there is no immediate feedback
to the application: the registration is attempted a few times, then there is a back-off timer of 12 minutes (T3346),
when the module could attach to a legacy technology. In all this, the user might just believe that it is out of LTE
coverage at first, and will take a long time to associate the symptoms with the actual issue.Quoted 4 lines
Another issue for the default context is that the parameters are in general non-volatile, so if the SIM is changed,
and with it perhaps only the APN, it would still refer to the previousauth_methodand parameters until changed explicitly.
Quoted 5 lines
Another reason to provision the default attach parameters. If you change the SIM and no settings are read from storage (which is stored per IMSI), then oFono should attempt to provision the default attach parameters.
ok for all the points above. So I change the default for 'none', is this ok?
Quoted 8 lines
Quoted 8 lines
And in the future, it seems the SIM will be changed quite often And it seems to be particularly important for VoLTE, because no operator supports it in roaming. The standard exists,
but seems unattractive.
With the sunset of 2G/3G, the only way to have voice will be using a local SIM profile.
This SIM exchange is technical achieved with the eUICC.
Quoted 5 lines
Quoted 3 lines
BTW, the SIM hot swap seems to be another point to improve, but for now I am not going into this.
Out of curiosity, what do you have in mind?
I haven't looked into it yet. I just have complaints that removing and re-inserting
the SIM doesn't work.
We will work on this in November or December.
Quoted 3 lines
Regards,
-Denis
Regards,
Giacinto
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Giacinto,
Quoted 10 lines
Quoted 3 lines
All right. But do you also want to mention this behavior in the D-Bus documentation? E.g. something to the effect of if AuthenticationMethod is set to None, then username / password values are ignored?
gladly, but I didn't find a document for this.
We are going to add it in the lte-api, but the only place I have found for the rest is in the
connman-api.
Is there some other documents?
I don't believe so.
Quoted 7 lines
Quoted 6 lines
Given how closely related it is, it probably should be considered in the same series. This is one of those situations where we're messing with the existing API and so all changes go in or none at all... But given that the drivers are expected to handle empty username/passwords already, I'm okay leaving mbpi as is... but it might be a good idea to fix it anyway...
Quoted 5 lines
I can fix it, but need to decide on a default then.
It looks to me that 'none' would be a better default than 'chap'. The problem is that 'chap' is assumed so far and therefore it would be regressive.
That's what I would do. Use none if no password/username/auth method are provided.
Regards,
-Denis
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Denis,
Quoted 7 lines · Denis Kenzior
Hi Giacinto,
Quoted 4 lines
Quoted 3 lines
All right. But do you also want to mention this behavior in the D-Bus documentation? E.g. something to the effect of if AuthenticationMethod is set to None, then username / password values are ignored?
Quoted 8 lines
Quoted 6 lines
gladly, but I didn't find a document for this.
We are going to add it in the lte-api, but the only place I have found for the rest is in the
connman-api.
Is there some other documents?I don't believe so.
Shall I prepare a new document gprs-context?
Quoted 8 lines
Quoted 8 lines
Quoted 7 lines
Given how closely related it is, it probably should be considered in the same series. This is one of those situations where we're messing with the existing API and so all changes go in or none at all... But given that the drivers are expected to handle empty username/passwords already, I'm okay leaving mbpi as is... but it might be a good idea to fix it anyway...
Quoted 8 lines
Quoted 5 lines
I can fix it, but need to decide on a default then.
It looks to me that 'none' would be a better default than 'chap'. The problem is that 'chap' is assumed so far and therefore it would be regressive.That's what I would do. Use none if no password/username/auth method are provided.
OK. Please look at what I have submitted.
Quoted 3 lines
Regards,
-Denis
Regards,
Giacinto
Re: [PATCH 6/6] drivers: support for auth NONE
In reply to Denis KenziorHi Denis,
second answer, specifically on the code.
Quoted 35 lines · Denis Kenzior
Hi Giacinto,
Quoted 31 lines · Giacinto Cifelli
Added the explicit support for auth NONE.
It is added in alldrivers/*/gprs-context.catoms that support authentication.The support for no-authentication case is already present in all drivers. This patch allows to use it explicitly.
Note that the swmodem driver does not have any authentication
concept: no changes.Additionally, the behavior is left unchanged in case of inconsistent
parameters: if username is empty, then fallback to auth NONE.--- drivers/atmodem/gprs-context.c | 20 ++++++++++++++++---- drivers/ifxmodem/gprs-context.c | 6 ++++++ drivers/isimodem/gprs-context.c | 5 +++++ 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, 81 insertions(+), 29 deletions(-)drivers/atmodem/gprs-context.c +0
-0@@ -158,7 +158,12 @@ static gboolean setup_ppp(struct ofono_gprs_context *gc)g_at_ppp_set_debug (gcd->ppp, ppp_debug,"PPP" );
Quoted 10 lines
drivers/atmodem/gprs-context.c static gboolean setup_ppp(struct ofono_gprs_context *gc) · line 166
Quoted 8 lines
drivers/atmodem/gprs-context.c +6
-1g_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); +else +g_at_ppp_set_credentials (gcd->ppp,NULL ,NULL );This else part seems unneeded
ok
Quoted 58 lines
Quoted 45 lines
drivers/atmodem/gprs-context.c +10
-3/* set connect and disconnect callbacks */ g_at_ppp_set_connect_function (gcd->ppp, ppp_connect, gc);@@ -247,7 +252,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 +260,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 +312,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 :drivers/ifxmodem/gprs-context.c +0
-0@@ -466,9 +466,15 @@ static void ifx_gprs_activate_primary(struct ofono_gprs_context *gc, gcd->active_context = ctx->cid; gcd->cb = cb;drivers/ifxmodem/gprs-context.c static void ifx_gprs_activate_primary(struct ofono_gprs_context *gc, · line 477
Quoted 10 lines
drivers/ifxmodem/gprs-context.c +6
-0gcd->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 ) { + gcd->username[0 ] =0 ; + gcd->password[0 ] =0 ; + } +Ugh, I'd really prefer something like:
Quoted 7 lines
if (method == NONE) {
memset(gcd->username, 0, sizeof(gcd->username));
...
} else {
memcpy(...);
}ok, even if the code is comparing for username[0]. It looked sensible to change the switching variable,
Quoted 112 lines
Quoted 96 lines
drivers/ifxmodem/gprs-context.c +0
-0gcd->state =STATE_ENABLING ; gcd->proto = ctx->proto;drivers/isimodem/gprs-context.c +5
-0@@ -544,6 +544,11 @@ static void isi_gprs_activate_primary(struct ofono_gprs_context *gc,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 ) { + cd->username[0 ] =0 ; + cd->password[0 ] =0 ; + } + cd->pep =g_isi_pep_create (cd->idx,NULL ,NULL );if (cd->pep ==NULL ) goto error;drivers/mbimmodem/gprs-context.c +13
-3@@ -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),drivers/mbmmodem/gprs-context.c +6
-5@@ -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 ;drivers/qmimodem/gprs-context.c +0
-0drivers/qmimodem/gprs-context.c static void qmi_activate_primary(struct ofono_gprs_context *gc, · line 246
Quoted 10 lines
drivers/qmimodem/gprs-context.c +6
-1@@ -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 ;Ugh. I really hate GCC people sometimes. While the warning is strictly correct, it is useless for 99% of the code and forces us to jump through hoops. Anyway, I would propose we use the following pattern:
int
auth_method_to_qmi(enum ofono_auth_method method, uint8_t *out_auth)
Quoted 12 lines
{
switch (method)
case CHAP:
*out_auth = ...
return 0;
case:
...
}
return -ERANGE;
}I tried but it is worst. Now gcc complains about potentially uninitialized variable.
Here is the code
static int auth_method_to_qmi(enum ofono_gprs_auth_method method, uint8_t *out_auth)
{
switch (method) {
case OFONO_GPRS_AUTH_METHOD_CHAP:
*out_auth = QMI_WDS_AUTHENTICATION_CHAP;
return 0;
case OFONO_GPRS_AUTH_METHOD_PAP:
*out_auth = QMI_WDS_AUTHENTICATION_PAP;
return 0;
case OFONO_GPRS_AUTH_METHOD_NONE:
*out_auth = QMI_WDS_AUTHENTICATION_NONE;
return 0; }
return -1;
}
static void qmi_activate_primary(struct ofono_gprs_context *gc, [...]
uint8_t auth;
[...]
auth_method_to_qmi(ctx->auth_method, &auth);
and here the compiler answer:
drivers/qmimodem/gprs-context.c:288:2: error: ‘auth’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
qmi_param_append_uint8(param, QMI_WDS_PARAM_AUTHENTICATION_PREFERENCE, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
auth);
~~~~~It doesn't look like we have a clean way out of this. I can pre-initialize the variable, add a default to the switch, return the value for uint8 out_auth,
but none of these will give you a clean solution.
I prefer therefore to keep it as it is, with a comment about why it is done so.
Quoted 145 lines
Quoted 122 lines
drivers/qmimodem/gprs-context.c +3
-3DBG ("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);drivers/rilmodem/gprs-context.c +9
-4@@ -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 drivers/stemodem/gprs-context.c +5
-4@@ -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 ;drivers/telitmodem/gprs-context-ncm.c +8
-2@@ -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; }drivers/ubloxmodem/gprs-context.c +0
-0@@ -315,9 +315,10 @@ static void ublox_send_uauthreq(struct ofono_gprs_context *gc,case OFONO_GPRS_AUTH_METHOD_CHAP : auth =2 ;break ;drivers/ubloxmodem/gprs-context.c static void ublox_send_uauthreq(struct ofono_gprs_context *gc, · line 324
Quoted 10 lines
drivers/ubloxmodem/gprs-context.c +4
-3-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\"",Anyway, these look fine to me otherwise. But I still wouldn't mind some explanation of how we're addressing the questions I raised in my E-mail on Sep 27.
Also, what are we doing with
plugins/mbpi.c? That database only supports pap/chap but potentially with missing username/password attributes. Should we be converting these to type 'none'? Or leaving things as is and having the drivers deal with converting type chap, empty username/password to type none. I thought the whole idea of introducing type 'None' was that you hated that drivers were doing this?
I believe you referred to this as a 'hack' or similar terminology? :)
Quoted 2 lines
Regards,
-Denis
Regards,
Giacinto
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Giacinto,
Quoted 39 lines
Quoted 5 lines
Ugh. I really hate GCC people sometimes. While the warning is strictly correct, it is useless for 99% of the code and forces us to jump through hoops. Anyway, I would propose we use the following pattern:
int
auth_method_to_qmi(enum ofono_auth_method method, uint8_t *out_auth)Quoted 12 lines
{ switch (method) case CHAP: *out_auth = ... return 0; case: ... } return -ERANGE; }I tried but it is worst. Now gcc complains about potentially uninitialized variable.
Here is the code
static intauth_method_to_qmi(enum ofono_gprs_auth_method method, uint8_t *out_auth){ switch (method) { case OFONO_GPRS_AUTH_METHOD_CHAP: *out_auth = QMI_WDS_AUTHENTICATION_CHAP; return 0; case OFONO_GPRS_AUTH_METHOD_PAP: *out_auth = QMI_WDS_AUTHENTICATION_PAP; return 0; case OFONO_GPRS_AUTH_METHOD_NONE: *out_auth = QMI_WDS_AUTHENTICATION_NONE; return 0; } return -1; }
Quoted 5 lines
static void qmi_activate_primary(struct
ofono_gprs_context*gc, [...]
uint8_tauth;
[...]
auth_method_to_qmi(ctx->auth_method, &auth);
Well you might want to check for an error return here. e.g.
if (auth_method_to_qmi() < 0) {
CALLBACK_WITH_FAILURE();
return;
}Quoted 7 lines
and here the compiler answer:
drivers/qmimodem/gprs-context.c:288:2: error: ‘auth’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
qmi_param_append_uint8(param,QMI_WDS_PARAM_AUTHENTICATION_PREFERENCE, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Quoted 7 lines
auth); ~~~~~It doesn't look like we have a clean way out of this. I can pre-initialize the variable, add a default to the switch, return the value for uint8
out_auth,
but none of these will give you a clean solution.
No, we should not initialize variables unnecessarily. This is even
documented: doc/coding-style.txt, item M7
Quoted 3 lines
I prefer therefore to keep it as it is, with a comment about why it is done so.
I prefer we set a good example :)
Regards,
-Denis
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Denis,
Quoted 65 lines · Denis Kenzior
Hi Giacinto,
Quoted 39 lines
Quoted 5 lines
Ugh. I really hate GCC people sometimes. While the warning is strictly correct, it is useless for 99% of the code and forces us to jump through hoops. Anyway, I would propose we use the following pattern:
int
auth_method_to_qmi(enum ofono_auth_method method, uint8_t *out_auth)Quoted 12 lines
{ switch (method) case CHAP: *out_auth = ... return 0; case: ... } return -ERANGE; }I tried but it is worst. Now gcc complains about potentially uninitialized variable.
Here is the code
static intauth_method_to_qmi(enum ofono_gprs_auth_method method, uint8_t *out_auth){ switch (method) { case OFONO_GPRS_AUTH_METHOD_CHAP: *out_auth = QMI_WDS_AUTHENTICATION_CHAP; return 0; case OFONO_GPRS_AUTH_METHOD_PAP: *out_auth = QMI_WDS_AUTHENTICATION_PAP; return 0; case OFONO_GPRS_AUTH_METHOD_NONE: *out_auth = QMI_WDS_AUTHENTICATION_NONE; return 0; } return -1; }Quoted 5 lines
static void qmi_activate_primary(struct
ofono_gprs_context*gc, [...]
uint8_tauth;
[...]
auth_method_to_qmi(ctx->auth_method, &auth);Well you might want to check for an error return here. e.g.
if (auth_method_to_qmi() < 0) { CALLBACK_WITH_FAILURE(); return; }Quoted 10 lines
and here the compiler answer:
drivers/qmimodem/gprs-context.c:288:2: error: ‘auth’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
qmi_param_append_uint8(param,QMI_WDS_PARAM_AUTHENTICATION_PREFERENCE, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~auth); ~~~~~
Quoted 7 lines
Quoted 4 lines
It doesn't look like we have a clean way out of this. I can pre-initialize the variable, add a default to the switch, return the value for uint8
out_auth,
but none of these will give you a clean solution.No, we should not initialize variables unnecessarily. This is even
documented:doc/coding-style.txt, item M7
I know this, that's why there are 3 lines of comment on it.
Quoted 6 lines
Quoted 4 lines
I prefer therefore to keep it as it is, with a comment about why it is done so.
I prefer we set a good example :)
Then the cleanest way is to set a default in the switch, without any function. Ok?
Quoted 3 lines
Regards,
-Denis
Regards,
Giacinto
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Giacinto,
Quoted 6 lines
Quoted 2 lines
I prefer we set a good example :)
Then the cleanest way is to set a default in the switch, without any function. Ok?
That is not really great either. We want to make sure that the compiler warns us if we add a new enumeration and don't take care of it in the code. In fact we have a coding-style.txt entry for this as well, see item M12. If there's code that uses default labels for enums, it is likely not compliant and should probably be fixed.
Regards,
-Denis
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Denis,
Quoted 10 lines · Denis Kenzior
Hi Giacinto,
Quoted 6 lines
Quoted 2 lines
I prefer we set a good example :)
Then the cleanest way is to set a default in the switch, without any function. Ok?
Quoted 6 lines
That is not really great either. We want to make sure that the compiler warns us if we add a new enumeration and don't take care of it in the code. In fact we have a coding-style.txt entry for this as well, see item M12. If there's code that uses default labels for enums, it is likely not compliant and should probably be fixed.
You are not giving any choice here, other than rewriting gcc. The function I have tried, and the compiler still complains. I need a way out: please decide for the lesser evil, and I'll do it.
Quoted 2 lines
Regards,
-Denis
Regards,
Giacinto
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Giacinto,
Quoted 4 lines
You are not giving any choice here, other than rewriting gcc. The function I have tried, and the compiler still complains. I need a way out: please decide for the lesser evil, and I'll do it.
I already gave you two way out actually. So tell me why either of the below wouldn't work:
So for example, the way gprs-context.c for mbim does this is just fine.
switch (method) {
case CHAP:
return ..
case PAP:
return ..
}
return something, anything;
Since the core guarantees that method will always be a valid enumeration, the above approach is just fine and satisfies both items M7 and M12.
If you want to be more paranoid, then:
int auth_method_to_foo(enum ofono_gprs_auth_method method, uint32_t *out)
{
switch (method) {
case PAP:
*out = ..
return 0;
case CHAP:
*out = ..
return 0;
}
return -ERANGE;
}uint32_t auth;
if (auth_method_to_foo(method, &auth) < 0)
goto error;
Regards,
-Denis
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Denis,
maybe it is only a misunderstanding, but...
Quoted 13 lines · Denis Kenzior
Hi Giacinto,
Quoted 4 lines
You are not giving any choice here, other than rewriting gcc. The function I have tried, and the compiler still complains. I need a way out: please decide for the lesser evil, and I'll do it.
I already gave you two way out actually. So tell me why either of the below wouldn't work:
So for example, the way
gprs-context.cfor mbim does this is just fine.
Quoted 8 lines
switch (method) {
case CHAP:
return ..
case PAP:
return ..
}return something, anything;
this is in a function that assigns the variable for sure:
static uint32_t auth_method_to_auth_protocol(enum ofono_gprs_auth_method method) {
switch (method) {
case OFONO_GPRS_AUTH_METHOD_CHAP:
return 2; /* MBIMAuthProtocolChap */
case OFONO_GPRS_AUTH_METHOD_PAP:
return 1; /* MBIMAuthProtocolPap */
}
return 0; // < see here?
}
that's why the compiler doesnt complain.
Quoted 21 lines
Since the core guarantees that method will always be a valid enumeration, the above approach is just fine and satisfies both items M7 and M12.
If you want to be more paranoid, then:
int
auth_method_to_foo(enum ofono_gprs_auth_method method, uint32_t *out){ switch (method) { case PAP: *out = .. return 0; case CHAP: *out = .. return 0; } return -ERANGE; }
Quoted 5 lines
uint32_tauth;if (
auth_method_to_foo(method, &auth)< 0)goto error;
this doesnt work, because it could leave the variable auth unassigned, according to the compiler.
Please note that the current code for qmimodem has a default already, and it is the only way the compiler doesn't complain:
switch (ctx->auth_method) {
case OFONO_GPRS_AUTH_METHOD_CHAP:
auth = QMI_WDS_AUTHENTICATION_CHAP;
break;
case OFONO_GPRS_AUTH_METHOD_PAP:
auth = QMI_WDS_AUTHENTICATION_PAP;
break;
default: // < see here?
auth = QMI_WDS_AUTHENTICATION_NONE;
break;
}
I will go for the mbim method.
Quoted 2 lines
Regards,
-Denis
Regards,
Giacinto
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Giacinto,
Quoted 11 lines
this is in a function that assigns the variable for sure:
static
uint32_tauth_method_to_auth_protocol(enum ofono_gprs_auth_method method){
switch (method) {
caseOFONO_GPRS_AUTH_METHOD_CHAP:
return 2; /* MBIMAuthProtocolChap */
caseOFONO_GPRS_AUTH_METHOD_PAP:
return 1; /* MBIMAuthProtocolPap */
}
Quoted 5 lines
return 0; // < see here?
}that's why the compiler doesnt complain.
Sure, but you also know the core will never send you a value that is not PAP/CHAP. So you know that in reality we never get to the 'return 0' part, even though the compiler might think that we could.
And if we ever add a new enumeration and forget to update this code, the compiler will complain. This is what we want. If we add a default:
here, compiler will not warn us, that leads to bugs.
Quoted 8 lines
Quoted 5 lines
uint32_tauth;if (
auth_method_to_foo(method, &auth)< 0)goto error;this doesnt work, because it could leave the variable auth unassigned, according to the compiler.
Not according to any compiler I tried. I literally tested this before sending the above email on both GCC 7.3 and GCC 8.2. So what compiler are you using?
Quoted 3 lines
Please note that the current code for qmimodem has a default already, and it is the only way the compiler doesn't complain:
And that is wrong and should be fixed.
Regards,
-Denis
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Denis,
Quoted 4 lines
And if we ever add a new enumeration and forget to update this code, the compiler will complain. This is what we want. If we add a default:
here, compiler will not warn us, that leads to bugs.
in this construct yes, I perfectly agree.
Quoted 4 lines
Not according to any compiler I tried. I literally tested this before sending the above email on both GCC 7.3 and GCC 8.2. So what compiler are you using?
default ubuntu 18.04 compiler:
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
Quoted 6 lines
Quoted 4 lines
Please note that the current code for qmimodem has a default already, and it is the only way the compiler doesn't complain:
And that is wrong and should be fixed.
I will do it, in the mbim way.
Even if technically this should be a different patch, in this episode I am saving the world from the implicit lack of authentication, not from the bad coding style.
But the two this time go together.
I will submit a new patch later today.
Would you please comment on the [PATCH 4/6] too, about the plugins, so I will take care of both together?
Quoted 3 lines
Regards,
-Denis
Regards,
Giacinto
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Giacinto,
Quoted 6 lines
Quoted 3 lines
Not according to any compiler I tried. I literally tested this before sending the above email on both GCC 7.3 and GCC 8.2. So what compiler are you using?
default ubuntu 18.04 compiler:
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
This was the same on my box. I bet you were just missing the
if (auth_to_foo() < 0) part
Quoted 4 lines
I will submit a new patch later today.
Would you please comment on the [PATCH 4/6] too, about the plugins, so I will take care of both together?
Done. And please re-submit the entire series. Otherwise I get lost what version goes with what.
Regards,
-Denis
Re: [PATCH 6/6] drivers: support for auth NONE
Hi Denis,
Quoted 7 lines · Denis Kenzior
Hi Giacinto,
Quoted 4 lines
Quoted 3 lines
Not according to any compiler I tried. I literally tested this before sending the above email on both GCC 7.3 and GCC 8.2. So what compiler are you using?
Quoted 6 lines
Quoted 2 lines
default ubuntu 18.04 compiler:
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0This was the same on my box. I bet you were just missing the
if (
auth_to_foo()< 0) part
maybe. I will go for the mbim way, in any case.
Quoted 8 lines
Quoted 5 lines
I will submit a new patch later today.
Would you please comment on the [PATCH 4/6] too, about the plugins, so I will take care of both together?Done. And please re-submit the entire series. Otherwise I get lost what version goes with what.
Ok. The series now has 5 parts, because you have taken the 5/6 for gatchat.
Quoted 3 lines
Regards,
-Denis
Regards,
Giacinto