Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'remove_protocol_specific_values_from_global_state_objec…
…t' into 'master'

CSD XML tag and nostub are entirely protocol-specific and used in only one place

See merge request openconnect/openconnect!159
  • Loading branch information
dlenski committed Feb 11, 2021
2 parents c89062c + 0c53ca9 commit a73b653
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 16 deletions.
27 changes: 25 additions & 2 deletions auth.c
Expand Up @@ -386,6 +386,29 @@ static int xmlnode_get_text(xmlNode *xml_node, const char *name, char **var)
* 2) The new <form> 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)
{
Expand Down Expand Up @@ -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);
Expand Down
12 changes: 0 additions & 12 deletions library.c
Expand Up @@ -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;
}
Expand Down
2 changes: 0 additions & 2 deletions openconnect-internal.h
Expand Up @@ -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;
Expand Down

0 comments on commit a73b653

Please sign in to comment.