Attention is currently required from: flichtenheld, plaisthos.
Hello plaisthos, flichtenheld,
I'd like you to do a code review.
Please visit
http://gerrit.openvpn.net/c/openvpn/+/1022?usp=email
to review the following change.
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 <[email protected]>
---
M src/openvpn/dco_linux.c
1 file changed, 69 insertions(+), 1 deletion(-)
git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/22/1022/1
diff --git a/src/openvpn/dco_linux.c b/src/openvpn/dco_linux.c
index c950e3d..7ee0613 100644
--- a/src/openvpn/dco_linux.c
+++ b/src/openvpn/dco_linux.c
@@ -1117,10 +1117,78 @@
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)
+{
+ struct buffer buf = alloc_buf_gc(256, gc);
+ char *str = BSTR(&buf);
+
+ if (!fgets(str, BCAP(&buf), fp))
+ {
+ return "ERR";
+ }
+
+ /* remove potential newline at the end of the string */
+ char *nl = strchr(str, '\n');
+ if (nl)
+ {
+ *nl = '\0';
+ }
+
+ return BSTR(&buf);
+}
+
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: 1
Gerrit-Owner: ralf_lici <[email protected]>
Gerrit-Reviewer: flichtenheld <[email protected]>
Gerrit-Reviewer: plaisthos <[email protected]>
Gerrit-CC: openvpn-devel <[email protected]>
Gerrit-Attention: plaisthos <[email protected]>
Gerrit-Attention: flichtenheld <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel