)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"cca7616832769b88eb8cbe4910e64069674c5f0e","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Backport stricter check for valid tokens"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This also improves is_auth_token to check for the correct length and"},{"line_number":10,"context_line":"adds a few unit tests."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"OpenVPN 2.5 does not have the logic to keep a session id for the auth"},{"line_number":13,"context_line":"token. So it does not suffer the same problem that 2.6 and 2.7 did"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"4ca12898_8d5a5656","line":10,"updated":"2026-08-13 20:07:36.000000000","message":"I don\u0027t see any actual unit tests in the code.","commit_id":"abf505b43e81379893327db19314920f5271556e"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"8f0cf4cce126594bf8343c97417d62b7d7d5abf7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Backport stricter check for valid tokens"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This also improves is_auth_token to check for the correct length and"},{"line_number":10,"context_line":"adds a few unit tests."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"OpenVPN 2.5 does not have the logic to keep a session id for the auth"},{"line_number":13,"context_line":"token. So it does not suffer the same problem that 2.6 and 2.7 did"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"095f4113_22b89ef2","line":10,"in_reply_to":"4ca12898_8d5a5656","updated":"2026-09-16 12:01:49.000000000","message":"Yeah the backport dropped the tests,  will remark in the commit message","commit_id":"abf505b43e81379893327db19314920f5271556e"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"cca7616832769b88eb8cbe4910e64069674c5f0e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a2643061_49c8d755","updated":"2026-08-13 20:07:36.000000000","message":"Found a few minor doc / comments mishaps.","commit_id":"abf505b43e81379893327db19314920f5271556e"}],"src/openvpn/auth_token.c":[{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"cca7616832769b88eb8cbe4910e64069674c5f0e","unresolved":true,"context_lines":[{"line_number":24,"context_line":"#define AUTH_TOKEN_SESSION_ID_BASE64_LEN (OPENVPN_BASE64_LENGTH(AUTH_TOKEN_SESSION_ID_LEN))"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"/* We want our token to be a multiple of 3 bytes to avoid the base64 padding */"},{"line_number":27,"context_line":"static_assert(AUTH_TOKEN_SESSION_ID_LEN % 3 \u003d\u003d 0, \"AUTH_TOKEN_SESSION_ID_LEN needs to be multiple a 3\");"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"#define AUTH_TOKEN_HMAC_LEN   SHA256_DIGEST_LENGTH"},{"line_number":30,"context_line":"/* Size of the data of the token (not b64 encoded and without prefix) */"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"4c1daf45_5720bb19","line":27,"updated":"2026-08-13 20:07:36.000000000","message":"Typo (\"multiple a 3\").","commit_id":"abf505b43e81379893327db19314920f5271556e"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"ba701b7f44a0e674c738920477f7741ad5743ace","unresolved":false,"context_lines":[{"line_number":24,"context_line":"#define AUTH_TOKEN_SESSION_ID_BASE64_LEN (OPENVPN_BASE64_LENGTH(AUTH_TOKEN_SESSION_ID_LEN))"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"/* We want our token to be a multiple of 3 bytes to avoid the base64 padding */"},{"line_number":27,"context_line":"static_assert(AUTH_TOKEN_SESSION_ID_LEN % 3 \u003d\u003d 0, \"AUTH_TOKEN_SESSION_ID_LEN needs to be multiple a 3\");"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"#define AUTH_TOKEN_HMAC_LEN   SHA256_DIGEST_LENGTH"},{"line_number":30,"context_line":"/* Size of the data of the token (not b64 encoded and without prefix) */"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"07c9d388_fda6610d","line":27,"in_reply_to":"4c1daf45_5720bb19","updated":"2026-09-16 12:03:57.000000000","message":"Done","commit_id":"abf505b43e81379893327db19314920f5271556e"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"cca7616832769b88eb8cbe4910e64069674c5f0e","unresolved":true,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"/* Ensure that TOKEN_DATA_LEN is a multiple of 3 so the we avoid the base64"},{"line_number":38,"context_line":" * padding */"},{"line_number":39,"context_line":"static_assert(TOKEN_DATA_LEN % 3 \u003d\u003d 0, \"TOKEN_DATA_BASE64_LEN is not a multiple of 3\");"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"bool"},{"line_number":42,"context_line":"is_auth_token(const char *password)"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"5e77a2ff_dcc86f93","line":39,"updated":"2026-08-13 20:07:36.000000000","message":"The `static_assert()` tests `TOKEN_DATA_LEN`, but the message says `TOKEN_DATA_BASE64_LEN`.","commit_id":"abf505b43e81379893327db19314920f5271556e"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"8f0cf4cce126594bf8343c97417d62b7d7d5abf7","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"/* Ensure that TOKEN_DATA_LEN is a multiple of 3 so the we avoid the base64"},{"line_number":38,"context_line":" * padding */"},{"line_number":39,"context_line":"static_assert(TOKEN_DATA_LEN % 3 \u003d\u003d 0, \"TOKEN_DATA_BASE64_LEN is not a multiple of 3\");"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"bool"},{"line_number":42,"context_line":"is_auth_token(const char *password)"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"8f42e43e_d1baf5e2","line":39,"in_reply_to":"5e77a2ff_dcc86f93","updated":"2026-09-16 12:01:49.000000000","message":"Done","commit_id":"abf505b43e81379893327db19314920f5271556e"}],"src/openvpn/auth_token.h":[{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"cca7616832769b88eb8cbe4910e64069674c5f0e","unresolved":true,"context_lines":[{"line_number":117,"context_line":"/**"},{"line_number":118,"context_line":" * Return if the password string has the format of a password."},{"line_number":119,"context_line":" *"},{"line_number":120,"context_line":" * This function will always read as many bytes as SESSION_ID_PREFIX is longer"},{"line_number":121,"context_line":" * the caller needs ensure that password memory is at least that long (true for"},{"line_number":122,"context_line":" * calling with struct user_pass)"},{"line_number":123,"context_line":" * @param password"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"152294e2_edfeeab8","line":120,"updated":"2026-08-13 20:07:36.000000000","message":"\"if longer\"?","commit_id":"abf505b43e81379893327db19314920f5271556e"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"8f0cf4cce126594bf8343c97417d62b7d7d5abf7","unresolved":false,"context_lines":[{"line_number":117,"context_line":"/**"},{"line_number":118,"context_line":" * Return if the password string has the format of a password."},{"line_number":119,"context_line":" *"},{"line_number":120,"context_line":" * This function will always read as many bytes as SESSION_ID_PREFIX is longer"},{"line_number":121,"context_line":" * the caller needs ensure that password memory is at least that long (true for"},{"line_number":122,"context_line":" * calling with struct user_pass)"},{"line_number":123,"context_line":" * @param password"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"89bfb120_c1b1c38f","line":120,"in_reply_to":"152294e2_edfeeab8","updated":"2026-09-16 12:01:49.000000000","message":"Acknowledged","commit_id":"abf505b43e81379893327db19314920f5271556e"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"cca7616832769b88eb8cbe4910e64069674c5f0e","unresolved":true,"context_lines":[{"line_number":119,"context_line":" *"},{"line_number":120,"context_line":" * This function will always read as many bytes as SESSION_ID_PREFIX is longer"},{"line_number":121,"context_line":" * the caller needs ensure that password memory is at least that long (true for"},{"line_number":122,"context_line":" * calling with struct user_pass)"},{"line_number":123,"context_line":" * @param password"},{"line_number":124,"context_line":" * @return whether the password string starts with the session token prefix"},{"line_number":125,"context_line":" */"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"5671ea79_2e7d4fa5","line":122,"updated":"2026-08-13 20:07:36.000000000","message":"I am not sure this comment continues to be accurate after the change introduced by this patch, since the new implementation now does `strlen(password)`.","commit_id":"abf505b43e81379893327db19314920f5271556e"},{"author":{"_account_id":1000003,"name":"Arne Schwabe","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"8f0cf4cce126594bf8343c97417d62b7d7d5abf7","unresolved":false,"context_lines":[{"line_number":119,"context_line":" *"},{"line_number":120,"context_line":" * This function will always read as many bytes as SESSION_ID_PREFIX is longer"},{"line_number":121,"context_line":" * the caller needs ensure that password memory is at least that long (true for"},{"line_number":122,"context_line":" * calling with struct user_pass)"},{"line_number":123,"context_line":" * @param password"},{"line_number":124,"context_line":" * @return whether the password string starts with the session token prefix"},{"line_number":125,"context_line":" */"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"cc0a6b7e_aa60ef57","line":122,"in_reply_to":"5671ea79_2e7d4fa5","updated":"2026-09-16 12:01:49.000000000","message":"Yeah, removed that part.","commit_id":"abf505b43e81379893327db19314920f5271556e"}]}
