From 4c4b5dbc2dc524b8970249ef29d48767585da2fa Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 12 May 2012 16:42:40 -0700 Subject: [PATCH] Export openconnect_version as a pointer rather than an array Otherwise, the binary seems to *know* the length of the string that it expected to be in the library, and when bitching of a mismatch it still truncates the library version to the length that it *expected* the library version string to be. Change the name of it to 'openconnect_version_str' at the same time as we change the datatype, to avoid crashes when linking against an older/newer library. Signed-off-by: David Woodhouse --- http.c | 2 +- library.c | 2 +- main.c | 12 ++++++------ openconnect-internal.h | 2 +- version.sh | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/http.c b/http.c index c228cf84..32283614 100644 --- a/http.c +++ b/http.c @@ -869,7 +869,7 @@ char *openconnect_create_useragent(const char *base) { char *uagent; - if (asprintf(&uagent, "%s %s", base, openconnect_version) < 0) + if (asprintf(&uagent, "%s %s", base, openconnect_version_str) < 0) return NULL; return uagent; diff --git a/library.c b/library.c index 76b5678c..aea0888e 100644 --- a/library.c +++ b/library.c @@ -211,5 +211,5 @@ void openconnect_set_cancel_fd (struct openconnect_info *vpninfo, int fd) const char *openconnect_get_version (void) { - return openconnect_version; + return openconnect_version_str; } diff --git a/main.c b/main.c index 0458d177..2cf19b3e 100644 --- a/main.c +++ b/main.c @@ -62,9 +62,9 @@ static int validate_peer_cert(void *_vpninfo, /* A sanity check that the openconnect executable is running against a library of the same version */ -#define openconnect_version openconnect_binary_version +#define openconnect_version_str openconnect_binary_version #include "version.c" -#undef openconnect_version +#undef openconnect_version_str int verbose = PRG_INFO; int background; @@ -170,7 +170,7 @@ static void helpmessage(void) static void usage(void) { printf(_("Usage: openconnect [options] \n")); - printf(_("Open client for Cisco AnyConnect VPN, version %s\n\n"), openconnect_version); + printf(_("Open client for Cisco AnyConnect VPN, version %s\n\n"), openconnect_version_str); printf(" --config=CONFIGFILE %s\n", _("Read options from config file")); printf(" -b, --background %s\n", _("Continue in background after startup")); printf(" --pid-file=PIDFILE %s\n", _("Write the daemons pid to this file")); @@ -374,10 +374,10 @@ int main(int argc, char **argv) setlocale(LC_ALL, ""); #endif - if (strcmp(openconnect_version, openconnect_binary_version)) { + if (strcmp(openconnect_version_str, openconnect_binary_version)) { fprintf(stderr, _("WARNING: This version of openconnect is %s but\n" " the libopenconnect library is %s\n"), - openconnect_binary_version, openconnect_version); + openconnect_binary_version, openconnect_version_str); } openconnect_init_openssl(); @@ -609,7 +609,7 @@ int main(int argc, char **argv) verbose = PRG_TRACE; break; case 'V': - printf(_("OpenConnect version %s\n"), openconnect_version); + printf(_("OpenConnect version %s\n"), openconnect_version_str); exit(0); case 'x': vpninfo->xmlconfig = keep_config_arg(); diff --git a/openconnect-internal.h b/openconnect-internal.h index e3684f8f..06d62e07 100644 --- a/openconnect-internal.h +++ b/openconnect-internal.h @@ -319,6 +319,6 @@ int generate_securid_tokencodes(struct openconnect_info *vpninfo); int add_securid_pin(char *token, char *pin); /* version.c */ -extern char openconnect_version[]; +extern const char *openconnect_version_str; #endif /* __OPENCONNECT_INTERNAL_H__ */ diff --git a/version.sh b/version.sh index 01da2f72..42f0c42e 100755 --- a/version.sh +++ b/version.sh @@ -15,5 +15,5 @@ else v="$v"-unknown fi -echo "char openconnect_version[] = \"$v\";" > $1 +echo "const char *openconnect_version_str = \"$v\";" > $1 echo "New version: $v"