vpninfo->useragent = orig_ua;
}
+/* Translate platform names (derived from AnyConnect) into the values
+ * known to be emitted by GlobalProtect clients.
+ */
+const char *gpst_os_name(struct openconnect_info *vpninfo)
+{
+ if (!strcmp(vpninfo->platname, "mac-intel") || !strcmp(vpninfo->platname, "apple-ios"))
+ return "Mac";
+ else if (!strcmp(vpninfo->platname, "linux-64") || !strcmp(vpninfo->platname, "linux") || !strcmp(vpninfo->platname, "android"))
+ return "Linux";
+ else
+ return "Windows";
+}
+
+
/* Parse pre-login response ({POST,GET} /{global-protect,ssl-vpn}/pre-login.esp)
*
* Extracts the relevant arguments from the XML (username-label, password-label)
/* Ask the user to fill in the auth form; repeat as necessary */
for (;;) {
- const char *clientos;
- if (!strcmp(vpninfo->platname, "mac-intel") || !strcmp(vpninfo->platname, "apple-ios"))
- clientos = "Mac";
- else if (!strcmp(vpninfo->platname, "linux-64") || !strcmp(vpninfo->platname, "android"))
- clientos = "Linux";
- else
- clientos = "Windows";
-
/* submit prelogin request to get form */
orig_path = vpninfo->urlpath;
if (asprintf(&vpninfo->urlpath, "%s/prelogin.esp?tmp=tmp&clientVer=4100&clientos=%s",
- portal ? "global-protect" : "ssl-vpn", clientos) < 0) {
+ portal ? "global-protect" : "ssl-vpn", gpst_os_name(vpninfo)) < 0) {
result = -ENOMEM;
goto out;
}
buf_truncate(request_body);
buf_append(request_body, "jnlpReady=jnlpReady&ok=Login&direct=yes&clientVer=4100&prot=https:");
append_opt(request_body, "ipv6-support", vpninfo->disable_ipv6 ? "no" : "yes");
- if (!strcmp(vpninfo->platname, "mac-intel") || !strcmp(vpninfo->platname, "apple-ios"))
- append_opt(request_body, "clientos", "Mac");
- else if (!strcmp(vpninfo->platname, "linux-64") || !strcmp(vpninfo->platname, "android"))
- append_opt(request_body, "clientos", "Linux");
- else
- append_opt(request_body, "clientos", "Windows");
+ append_opt(request_body, "clientos", gpst_os_name(vpninfo));
append_opt(request_body, "os-version", vpninfo->platname);
append_opt(request_body, "server", vpninfo->hostname);
append_opt(request_body, "computer", vpninfo->localname);
/* submit getconfig request */
buf_append(request_body, "client-type=1&protocol-version=p1&app-version=4.0.5-8");
- if (!strcmp(vpninfo->platname, "mac-intel") || !strcmp(vpninfo->platname, "apple-ios"))
- append_opt(request_body, "clientos", "Mac");
- else if (!strcmp(vpninfo->platname, "linux-64") || !strcmp(vpninfo->platname, "android"))
- append_opt(request_body, "clientos", "Linux");
- else
- append_opt(request_body, "clientos", "Windows");
+ append_opt(request_body, "clientos", gpst_os_name(vpninfo));
append_opt(request_body, "os-version", vpninfo->platname);
append_opt(request_body, "hmac-algo", "sha1,md5");
append_opt(request_body, "enc-algo", "aes-128-cbc,aes-256-cbc");