cleanup authprotocol handling
[project/umbim.git] / cli.c
diff --git a/cli.c b/cli.c
index 1f043d5..17809c2 100644 (file)
--- a/cli.c
+++ b/cli.c
@@ -24,6 +24,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <ctype.h>
 
 #include <libubox/utils.h>
 #include <libubox/uloop.h>
@@ -315,7 +316,19 @@ mbim_connect_request(void)
        memcpy(c->contexttype, uuid_context_type_internet, 16);
        if (_argc > 0)
                mbim_encode_string(&c->accessstring, *_argv);
-
+       if (_argc > 3) {
+               if (!strcmp(_argv[1], "pap"))
+                       c->authprotocol = htole32(MBIM_AUTH_PROTOCOL_PAP);
+               else if (!strcmp(_argv[1], "chap"))
+                       c->authprotocol = htole32(MBIM_AUTH_PROTOCOL_CHAP);
+               else if (!strcmp(_argv[1], "mschapv2"))
+                       c->authprotocol = htole32(MBIM_AUTH_PROTOCOL_MSCHAPV2);
+
+               if (c->authprotocol) {
+                       mbim_encode_string(&c->username, _argv[2]);
+                       mbim_encode_string(&c->password, _argv[3]);
+               }
+       }
        return mbim_send_command_msg();
 }
 
@@ -335,6 +348,24 @@ mbim_disconnect_request(void)
        return mbim_send_command_msg();
 }
 
+static char*
+mbim_pin_sanitize(char *pin)
+{
+       char *p;
+
+       while (*pin && !isdigit(*pin))
+               pin++;
+       p = pin;
+       if (!*p)
+               return NULL;
+       while (*pin && isdigit(*pin))
+               pin++;
+       if (*pin)
+               *pin = '\0';
+
+       return p;
+}
+
 static int
 mbim_pin_unlock_request(void)
 {
@@ -342,6 +373,12 @@ mbim_pin_unlock_request(void)
                (struct mbim_basic_connect_pin_s *) mbim_setup_command_msg(basic_connect,
                        MBIM_MESSAGE_COMMAND_TYPE_SET, MBIM_CMD_BASIC_CONNECT_PIN,
                        sizeof(struct mbim_basic_connect_pin_s));
+       char *pin = mbim_pin_sanitize(_argv[0]);
+
+       if (!pin || !strlen(pin)) {
+               fprintf(stderr, "failed to sanitize the pincode\n");
+               return -1;
+       }
 
        p->pintype = htole32(MBIM_PIN_TYPE_PIN1);
        p->pinoperation = htole32(MBIM_PIN_OPERATION_ENTER);