summaryrefslogtreecommitdiffstats
path: root/gatchat
diff options
context:
space:
mode:
authorCaiwen Zhang <caiwen.zhang@windriver.com>2011-05-11 17:19:27 +0800
committerDenis Kenzior <denkenz@gmail.com>2011-05-11 20:24:35 -0500
commit65d65f4fbeaa525e34dc5f0b09e208cc21caa98a (patch)
treebbd54a328d8f9c5654675763de0f86086f8dde98 /gatchat
parent543b54a34e2c709c2c4d09a29a0d2676b1bb2c1f (diff)
downloadofono-65d65f4fbeaa525e34dc5f0b09e208cc21caa98a.tar.bz2
gatppp: add name field when using chap auth
Some systems require name field, otherwise chap authentication will fail.
Diffstat (limited to 'gatchat')
-rw-r--r--gatchat/ppp_auth.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gatchat/ppp_auth.c b/gatchat/ppp_auth.c
index b73f3204..4ad31a2c 100644
--- a/gatchat/ppp_auth.c
+++ b/gatchat/ppp_auth.c
@@ -60,6 +60,7 @@ static void chap_process_challenge(struct ppp_chap *chap, const guint8 *packet)
struct chap_header *response;
GChecksum *checksum;
const char *secret = g_at_ppp_get_password(chap->ppp);
+ const char *username = g_at_ppp_get_username(chap->ppp);
guint16 response_length;
struct ppp_header *ppp_packet;
gsize digest_len;
@@ -83,6 +84,10 @@ static void chap_process_challenge(struct ppp_chap *chap, const guint8 *packet)
*/
digest_len = g_checksum_type_get_length(chap->method);
response_length = digest_len + sizeof(*header) + 1;
+
+ if (username != NULL)
+ response_length += strlen(username);
+
ppp_packet = ppp_packet_new(response_length, CHAP_PROTOCOL);
if (ppp_packet == NULL)
goto challenge_out;
@@ -98,6 +103,10 @@ static void chap_process_challenge(struct ppp_chap *chap, const guint8 *packet)
/* leave the name empty? */
}
+ if (username != NULL)
+ memcpy(response->data + digest_len + 1, username,
+ strlen(username));
+
/* transmit the packet */
ppp_transmit(chap->ppp, (guint8 *) ppp_packet, response_length);
g_free(ppp_packet);