[PATCH] chg: add --version-string and optional detailed platform info

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, 2018-09-08 at 14:57 +0200, rschmied at janus.inka.de wrote:
> [ ok, sending plain text without wrapping long lines seems to be harder 
> than it should be. sorry for the additional list submission]
> 
> I've included a patch that provides better compatibility with CSD on
> ASA head ends. E.g. it allows to specify the version string that is
> presented to the ASA. Previous to this patch, OC presents it's own
> version e.g. 0.7.8 but that could cause rejection on the head end if
> it looks for a matching AC version string.
> 
> It also contains a change that allows to even control more of the
> client system data that is passed in the XML during authentication.
> This part is entirely optional but might help to provide better
> compatibility going forward.
> 
> The patch works for me... especially the version-string seems to be
> important in some environments to allow a successful connection, the
> XML changes using the mobile_info struct might be seen as experimental
> / optional.


Hi Ralph, thanks for the patch. Apologies for the delay in responding.

I'm not quite sure about the environment variables... perhaps we should
take these parameters on the command line?

> +# get system information from DMI
> +DMI=$(sudo dmidecode | grep -A8 'System Information')
> +
> +# extract stuff we're interested in
> +MANUFACTURER=$(echo "$DMI" | grep 'Manufacturer' | cut -d: -f2)
> +PRODUCT=$(echo "$DMI" | grep 'Product Name' | cut -d: -f2)
> +SERIAL=$(echo "$DMI" | grep 'Serial Number' | cut -d: -f2)
> +UUID=$(echo "$DMI" | grep 'UUID' | cut -d: -f2)
> +
> +# synthesize / acquire device information
> +OC_DEVICE_TYPE="${MANUFACTURER## } ${PRODUCT## }"
> +OC_PLATFORM_VERSION=$(uname -srvp)
> +OC_UNIQUE_ID=$(echo $UUID$SERIAL | openssl sha256 | sed 's/^.* //' | tr [[:lower:]] [[:upper:]])
> +
> +# get the device that has the default route
> +GW_DEV=$(ip route | sed -nr '/^default/s/.* dev ([[:alnum:]]+) .*$/\1/p')
> +
> +# does it exist and is it different from tun?
> +# (if tunnel is running it potentially has the default route)
> +# if not, set it to all-zeroes
> +if [[ -n ${GW_DEV} && ! "${GW_DEV}" =~ ^tun[0-9]+$ ]]; then
> +	OC_MAC_ADDRESS=$(ip link show dev ${GW_DEV} | \
> +	sed -nr '2s/^.*ether (([0-9a-f]{2}(:?)){6}) .*$/\1/p' | \
> +	tr ':' '-')
> +else
> +	OC_MAC_ADDRESS="00-00-00-00-00-00"
> +fi

Alternatively (or additionally, for the default responses), I wonder if
we could reasonably make OpenConnect gather this for itself? All but
the MAC address should be relatively simple (the DMI information will
be in sysfs).


> @@ -276,11 +277,13 @@ int openconnect_set_reported_os(struct openconnect_info *vpninfo,
>  int openconnect_set_mobile_info(struct openconnect_info *vpninfo,
>  				const char *mobile_platform_version,
>  				const char *mobile_device_type,
> -				const char *mobile_device_uniqueid)
> +				const char *mobile_device_uniqueid,
> +				const char *mobile_mac_address)
>  {
>  	STRDUP(vpninfo->mobile_platform_version, mobile_platform_version);
>  	STRDUP(vpninfo->mobile_device_type, mobile_device_type);
>  	STRDUP(vpninfo->mobile_device_uniqueid, mobile_device_uniqueid);
> +	STRDUP(vpninfo->mobile_mac_address, mobile_mac_address);
>  
>  	return 0;
>  }

This one is a public function; we can't change it without breaking the
soname. We'll need to add an openconnect_set_mobile_info2() function
with the additional argument, or a separate function to set the MAC
address field.

@@ -875,6 +877,8 @@ static void usage(void)
>  	printf("      --useragent=STRING          %s\n", _("HTTP header User-Agent: field"));
>  	printf("      --local-hostname=STRING     %s\n", _("Local hostname to advertise to server"));
>  	printf("      --os=STRING                 %s\n", _("OS type (linux,linux-64,win,...) to report"));
> +    printf("      --version-string=STRING     %s\n", _("reported version string during authentication"));
> +    printf("                                  (%s %s)\n", _("default:"), openconnect_version_str);
>  
>  #ifndef _WIN32
>  	printf("\n%s:\n", _("Trojan binary (CSD) execution"));

Indentation there.

Let's start with a single patch to do the version_string thing, please
(which will also need a public openconnect_set_version_string()
function. Then we can look at the additional mobile-info part next.

Thanks!

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 5213 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/openconnect-devel/attachments/20181014/74065891/attachment.bin>


[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux