cron2 has uploaded a new patch set (#3) to the change originally created by ralf_lici. ( http://gerrit.openvpn.net/c/openvpn/+/1022?usp=email )
The following approvals got outdated and were removed: Code-Review+2 by cron2 Change subject: Implement ovpn version detection ...................................................................... Implement ovpn version detection Add detection of the ovpn kernel module type: if a backported (out-of-tree) version is loaded, the MODULE_VERSION string is read from sysfs; otherwise, for the in-tree module, the function reports the kernel release and version. Change-Id: I7fc033a7ffee73045316763356a95d75ef23f5ad Signed-off-by: Ralf Lici <r...@mandelbit.com> Acked-by: Gert Doering <g...@greenie.muc.de> Message-Id: <20250515150038.30097-1-g...@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg31652.html Signed-off-by: Gert Doering <g...@greenie.muc.de> --- M src/openvpn/dco_linux.c 1 file changed, 68 insertions(+), 1 deletion(-) git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/22/1022/3 diff --git a/src/openvpn/dco_linux.c b/src/openvpn/dco_linux.c index c950e3d..a5f9e06 100644 --- a/src/openvpn/dco_linux.c +++ b/src/openvpn/dco_linux.c @@ -1117,10 +1117,77 @@ return true; } +/** + * There's no version indicator in the ovpn in-tree module, so we return a + * string containing info about the kernel version and release. + */ +static const char * +dco_version_string_in_tree(struct gc_arena *gc) +{ + struct buffer buf = alloc_buf_gc(256, gc); + struct utsname system; + + if (uname(&system)) + { + return "ERR"; + } + + buf_puts(&buf, system.release); + buf_puts(&buf, " "); + buf_puts(&buf, system.version); + return BSTR(&buf); +} + +/** + * When the module is loaded, the backports version of ovpn has a version file + * in sysfs. Read it and return the string. + * + * The caller is responsible for closing the file pointer. + */ +static const char * +dco_version_string_backports(FILE *fp, struct gc_arena *gc) +{ + char *str = gc_malloc(PATH_MAX, false, gc); + + if (!fgets(str, PATH_MAX, fp)) + { + return "ERR"; + } + + /* remove potential newline at the end of the string */ + char *nl = strchr(str, '\n'); + if (nl) + { + *nl = '\0'; + } + + return str; +} + const char * dco_version_string(struct gc_arena *gc) { - return "Unknown"; + const char *version; + struct stat sb; + FILE *fp; + + if (stat("/sys/module/ovpn", &sb) != 0 || !S_ISDIR(sb.st_mode)) + { + return "N/A"; + } + + /* now that we know for sure that the module is loaded, if there's no + * version file it means we're dealing with the in-tree version, otherwise + * it's backports */ + fp = fopen("/sys/module/ovpn/version", "r"); + if (!fp) + { + return dco_version_string_in_tree(gc); + } + version = dco_version_string_backports(fp, gc); + + fclose(fp); + return version; } void -- To view, visit http://gerrit.openvpn.net/c/openvpn/+/1022?usp=email To unsubscribe, or for help writing mail filters, visit http://gerrit.openvpn.net/settings Gerrit-Project: openvpn Gerrit-Branch: master Gerrit-Change-Id: I7fc033a7ffee73045316763356a95d75ef23f5ad Gerrit-Change-Number: 1022 Gerrit-PatchSet: 3 Gerrit-Owner: ralf_lici <r...@mandelbit.com> Gerrit-Reviewer: cron2 <g...@greenie.muc.de> Gerrit-Reviewer: flichtenheld <fr...@lichtenheld.com> Gerrit-Reviewer: ordex <anto...@mandelbit.com> Gerrit-Reviewer: plaisthos <arne-open...@rfc2549.org> Gerrit-CC: openvpn-devel <openvpn-devel@lists.sourceforge.net> Gerrit-MessageType: newpatchset
_______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel