diff --git a/auth.c b/auth.c index 9756018b..643cfc61 100644 --- a/auth.c +++ b/auth.c @@ -386,6 +386,29 @@ static int xmlnode_get_text(xmlNode *xml_node, const char *name, char **var) * 2) The new
tag tends to omit the method/action properties. */ +/* Translate platform names (derived from AnyConnect) into the relevant + * CSD tag names + */ +static inline const char *csd_tag_name(struct openconnect_info *vpninfo) +{ + if (!strcmp(vpninfo->platname, "mac-intel")) + return "csdMac"; + else if (!strcmp(vpninfo->platname, "win")) + return "csd"; + else + /* linux, linux-64, android, apple-ios */ + return "csdLinux"; +} + +/* Ignore stubs on mobile platforms */ +static inline int csd_use_stub(struct openconnect_info *vpninfo) +{ + if (!strcmp(vpninfo->platname, "android") || !strcmp(vpninfo->platname, "apple-ios")) + return 0; + else + return 1; +} + static int parse_auth_node(struct openconnect_info *vpninfo, xmlNode *xml_node, struct oc_auth_form *form) { @@ -434,9 +457,9 @@ static int parse_auth_node(struct openconnect_info *vpninfo, xmlNode *xml_node, nodes; one with token/ticket and one with the URLs. Process them both the same and rely on the fact that xmlnode_get_prop() will not *clear* the variable if no such property is found. */ - if (!vpninfo->csd_scriptname && xmlnode_is_named(xml_node, vpninfo->csd_xmltag)) { + if (!vpninfo->csd_scriptname && xmlnode_is_named(xml_node, csd_tag_name(vpninfo))) { /* ignore the CSD trojan binary on mobile platforms */ - if (!vpninfo->csd_nostub) + if (csd_use_stub(vpninfo)) xmlnode_get_prop(xml_node, "stuburl", &vpninfo->csd_stuburl); xmlnode_get_prop(xml_node, "starturl", &vpninfo->csd_starturl); xmlnode_get_prop(xml_node, "waiturl", &vpninfo->csd_waiturl); diff --git a/library.c b/library.c index 1f8a2221..9ab19817 100644 --- a/library.c +++ b/library.c @@ -305,18 +305,6 @@ int openconnect_set_reported_os(struct openconnect_info *vpninfo, #endif } - if (!strcmp(os, "mac-intel")) - vpninfo->csd_xmltag = "csdMac"; - else if (!strcmp(os, "linux") || !strcmp(os, "linux-64")) - vpninfo->csd_xmltag = "csdLinux"; - else if (!strcmp(os, "android") || !strcmp(os, "apple-ios")) { - vpninfo->csd_xmltag = "csdLinux"; - vpninfo->csd_nostub = 1; - } else if (!strcmp(os, "win")) - vpninfo->csd_xmltag = "csd"; - else - return -EINVAL; - STRDUP(vpninfo->platname, os); return 0; } diff --git a/openconnect-internal.h b/openconnect-internal.h index 429aa6f8..6fac309f 100644 --- a/openconnect-internal.h +++ b/openconnect-internal.h @@ -402,8 +402,6 @@ struct openconnect_info { uint32_t esp_magic; /* GlobalProtect magic ping address (network-endian) */ int tncc_fd; /* For Juniper TNCC */ - const char *csd_xmltag; - int csd_nostub; char *platname; char *mobile_platform_version; char *mobile_device_type;