)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000008,"name":"stipa","display_name":"Lev Stipakov","email":"lstipakov@gmail.com","username":"stipa"},"change_message_id":"cd2f1553d8f16bc057b1b5578dd98000962452e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"6182b82d_33d63c99","updated":"2024-12-04 10:41:19.000000000","message":"Now I got this one:\n\n2024-12-04 11:39:16 us\u003d531000 PUSH: Received control message: \u0027PUSH_UPDATE,ifconfig 10.8.0.4 255.255.255.0\u0027\n2024-12-04 11:39:18 us\u003d328000 OPTIONS IMPORT: --ifconfig/up options modified\n2024-12-04 11:39:18 us\u003d328000 OPTIONS ERROR: failed to negotiate cipher with server. Configure --data-ciphers-fallback if you want to connect to this server.\n2024-12-04 11:39:18 us\u003d328000 ERROR: Failed to apply push options\n2024-12-04 11:39:18 us\u003d328000 Failed to update options\n2024-12-04 11:39:18 us\u003d328000 TCP/UDP: Closing socket","commit_id":"276532c7679c20d23c7b9997c776ab464c63c97d"},{"author":{"_account_id":1000040,"name":"mrbff","email":"marco@mandelbit.com","username":"mrbff"},"change_message_id":"742f48ae69220687c4f879112511b19e8aba2bdb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c5c4e09e_4cf381dd","in_reply_to":"4bd17661_86bced76","updated":"2024-12-10 10:46:09.000000000","message":"Done","commit_id":"276532c7679c20d23c7b9997c776ab464c63c97d"},{"author":{"_account_id":1000008,"name":"stipa","display_name":"Lev Stipakov","email":"lstipakov@gmail.com","username":"stipa"},"change_message_id":"203acd958eccc3516b0ada820bf4edaaf1026dd2","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"4bd17661_86bced76","in_reply_to":"6182b82d_33d63c99","updated":"2024-12-06 09:08:14.000000000","message":"Not resolved.","commit_id":"276532c7679c20d23c7b9997c776ab464c63c97d"},{"author":{"_account_id":1000008,"name":"stipa","display_name":"Lev Stipakov","email":"lstipakov@gmail.com","username":"stipa"},"change_message_id":"36358c54992140e1a5c95365b72fed8ddea245d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"78f525ce_252aace1","updated":"2024-12-27 13:11:30.000000000","message":"I managed to change client IP address and return it back, so ifconfig push works, no crashes etc. However pushing routes didn\u0027t work for me - push-update command was processed but routing table wasn\u0027t updated:\n\nhttps://gist.github.com/lstipakov/7fd402f43c042e103845912028a0971f","commit_id":"1911821623d14de96b2b1c4b353796b32262374a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"7f8bf5994ef167a8e7cd30790096e07fff66a3c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"929a6463_16ee3674","updated":"2025-07-21 18:25:37.000000000","message":"As discussed on IRC, I do have some things I\u0027d like to see changed before merging.\n\nI am taking note of the +2\u0027s already given, it\u0027s just polishing, comments, readability...","commit_id":"64947efd2d2b337427d40046816e95dd942bf8bb"}],"src/openvpn/init.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"7f8bf5994ef167a8e7cd30790096e07fff66a3c4","unresolved":true,"context_lines":[{"line_number":2830,"context_line":"    /* process (potentially) pushed options */"},{"line_number":2831,"context_line":"    if (c-\u003eoptions.pull)"},{"line_number":2832,"context_line":"    {"},{"line_number":2833,"context_line":"        if (!is_update \u0026\u0026 !check_pull_client_ncp(c, found))"},{"line_number":2834,"context_line":"        {"},{"line_number":2835,"context_line":"            return false;"},{"line_number":2836,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"20d8d7ae_599aaf68","line":2833,"updated":"2025-07-21 18:25:37.000000000","message":"does it make sense to suppress this check?  It should never fail, and never modify anything (as we passed on the first run).\n\nAs it is, this code is a bit confusing, so we\u0027d need a comment\n\n```\n    /* on PUSH_UPDATE, do not run the NCP checks, because they take 5 minutes\n     * to complete and we are in a hurry\n     */\n```\n\n(put the real reasoning there, of course ;-) )\n\nMmmh, I think I see the reason, OPT_P_NCP is not set on PUSH_UPDATE, so the code assumes \"we have no cipher\" and does fallback things... so the comment would need to be something like\n\n```\n    /* on PUSH_UPDATE, NCP related flags are never updated, and so the code\n     * would assume \"no cipher pushed \u003d NCP failed\" - so, don\u0027t call it on\n     * updates */\n```","commit_id":"64947efd2d2b337427d40046816e95dd942bf8bb"},{"author":{"_account_id":1000040,"name":"mrbff","email":"marco@mandelbit.com","username":"mrbff"},"change_message_id":"05d0396b684c4c7f3ae6832e8adc4b668b76989c","unresolved":false,"context_lines":[{"line_number":2830,"context_line":"    /* process (potentially) pushed options */"},{"line_number":2831,"context_line":"    if (c-\u003eoptions.pull)"},{"line_number":2832,"context_line":"    {"},{"line_number":2833,"context_line":"        if (!is_update \u0026\u0026 !check_pull_client_ncp(c, found))"},{"line_number":2834,"context_line":"        {"},{"line_number":2835,"context_line":"            return false;"},{"line_number":2836,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"1bf8ad22_b4ec599b","line":2833,"in_reply_to":"20d8d7ae_599aaf68","updated":"2025-07-23 17:11:43.000000000","message":"Done","commit_id":"64947efd2d2b337427d40046816e95dd942bf8bb"}],"src/openvpn/init.h":[{"author":{"_account_id":1000008,"name":"stipa","display_name":"Lev Stipakov","email":"lstipakov@gmail.com","username":"stipa"},"change_message_id":"fd83571d84f246d2b4eb2f4869ee7e1e14eb1070","unresolved":true,"context_lines":[{"line_number":86,"context_line":"           bool pulled_options,"},{"line_number":87,"context_line":"           unsigned int option_types_found);"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"bool do_update(struct context *c, unsigned int option_types_found);"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"unsigned int pull_permission_mask(const struct context *c);"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"94a55af1_56ebeb0e","line":89,"updated":"2024-12-03 14:42:41.000000000","message":"Doxygen","commit_id":"672f1a0c2582183737c2aa066f3c01e2c948fc5c"},{"author":{"_account_id":1000040,"name":"mrbff","email":"marco@mandelbit.com","username":"mrbff"},"change_message_id":"c31ed76ff96ab6afeb98b02159644c1cfdff412e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"           bool pulled_options,"},{"line_number":87,"context_line":"           unsigned int option_types_found);"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"bool do_update(struct context *c, unsigned int option_types_found);"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"unsigned int pull_permission_mask(const struct context *c);"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"c56bc11c_d397fa0c","line":89,"in_reply_to":"94a55af1_56ebeb0e","updated":"2024-12-03 20:40:38.000000000","message":"Done","commit_id":"672f1a0c2582183737c2aa066f3c01e2c948fc5c"}],"src/openvpn/options.c":[{"author":{"_account_id":1000008,"name":"stipa","display_name":"Lev Stipakov","email":"lstipakov@gmail.com","username":"stipa"},"change_message_id":"fd83571d84f246d2b4eb2f4869ee7e1e14eb1070","unresolved":true,"context_lines":[{"line_number":3297,"context_line":"    else if ((!opt-\u003eroutes"},{"line_number":3298,"context_line":"              || opt-\u003eroute_method !\u003d ROUTE_METHOD_SERVICE"},{"line_number":3299,"context_line":"              || !(opt-\u003eroutes-\u003eflags \u0026 RG_REROUTE_GW))"},{"line_number":3300,"context_line":"             \u0026\u0026 (opt-\u003eroutes-\u003eflags \u0026 RG_DEF1))"},{"line_number":3301,"context_line":"    {"},{"line_number":3302,"context_line":"        msg(M_INFO, \"Flag \u0027def1\u0027 removed from --redirect-gateway\");"},{"line_number":3303,"context_line":"        opt-\u003eroutes-\u003eflags \u0026\u003d ~RG_DEF1;"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"3765b756_2ab72e4d","line":3300,"updated":"2024-12-03 14:42:41.000000000","message":"this gives me \"access violation\" on Windows, opt-\u003eroutes is nullptr.","commit_id":"315c1f34138cbc85608ac3e9a2553c45026ed82e"},{"author":{"_account_id":1000040,"name":"mrbff","email":"marco@mandelbit.com","username":"mrbff"},"change_message_id":"c31ed76ff96ab6afeb98b02159644c1cfdff412e","unresolved":false,"context_lines":[{"line_number":3297,"context_line":"    else if ((!opt-\u003eroutes"},{"line_number":3298,"context_line":"              || opt-\u003eroute_method !\u003d ROUTE_METHOD_SERVICE"},{"line_number":3299,"context_line":"              || !(opt-\u003eroutes-\u003eflags \u0026 RG_REROUTE_GW))"},{"line_number":3300,"context_line":"             \u0026\u0026 (opt-\u003eroutes-\u003eflags \u0026 RG_DEF1))"},{"line_number":3301,"context_line":"    {"},{"line_number":3302,"context_line":"        msg(M_INFO, \"Flag \u0027def1\u0027 removed from --redirect-gateway\");"},{"line_number":3303,"context_line":"        opt-\u003eroutes-\u003eflags \u0026\u003d ~RG_DEF1;"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"f9991389_446e70bf","line":3300,"in_reply_to":"3765b756_2ab72e4d","updated":"2024-12-03 20:40:38.000000000","message":"Done","commit_id":"315c1f34138cbc85608ac3e9a2553c45026ed82e"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"7f8bf5994ef167a8e7cd30790096e07fff66a3c4","unresolved":true,"context_lines":[{"line_number":5499,"context_line":"}"},{"line_number":5500,"context_line":""},{"line_number":5501,"context_line":"void"},{"line_number":5502,"context_line":"options_server_import(struct options *o,"},{"line_number":5503,"context_line":"                      const char *filename,"},{"line_number":5504,"context_line":"                      int msglevel,"},{"line_number":5505,"context_line":"                      unsigned int permission_mask,"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"758d81ff_703882a6","side":"PARENT","line":5502,"updated":"2025-07-21 18:25:37.000000000","message":"please do not move them (as for 808).  thanks :-)","commit_id":"fd11d0263c36a4b2a7466cd83b307c0af9feb0e0"},{"author":{"_account_id":1000040,"name":"mrbff","email":"marco@mandelbit.com","username":"mrbff"},"change_message_id":"05d0396b684c4c7f3ae6832e8adc4b668b76989c","unresolved":false,"context_lines":[{"line_number":5499,"context_line":"}"},{"line_number":5500,"context_line":""},{"line_number":5501,"context_line":"void"},{"line_number":5502,"context_line":"options_server_import(struct options *o,"},{"line_number":5503,"context_line":"                      const char *filename,"},{"line_number":5504,"context_line":"                      int msglevel,"},{"line_number":5505,"context_line":"                      unsigned int permission_mask,"}],"source_content_type":"text/x-csrc","patch_set":21,"id":"0b58e5d7_f3dccb6a","side":"PARENT","line":5502,"in_reply_to":"758d81ff_703882a6","updated":"2025-07-23 17:11:43.000000000","message":"Done","commit_id":"fd11d0263c36a4b2a7466cd83b307c0af9feb0e0"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"7f8bf5994ef167a8e7cd30790096e07fff66a3c4","unresolved":true,"context_lines":[{"line_number":3131,"context_line":"    {"},{"line_number":3132,"context_line":"        msg(M_INFO, \"Flag \u0027def1\u0027 removed from --redirect-gateway\");"},{"line_number":3133,"context_line":"        opt-\u003eroutes-\u003eflags \u0026\u003d ~RG_DEF1;"},{"line_number":3134,"context_line":"    }"},{"line_number":3135,"context_line":"}"},{"line_number":3136,"context_line":"#endif /* ifdef _WIN32 */"},{"line_number":3137,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":21,"id":"dbc0b2a7_f3d837dd","line":3134,"updated":"2025-07-21 18:25:37.000000000","message":"with the extra code, the comment before the function is no longer appropriate.\n\nAlso, it\u0027s unclear to me why this is needed?  I\u0027m not guessing the reasoning but claiming \"this does not look reasonable\" - if `redirect-gateway def1` was pushed or updated, we should not remove it again just because it\u0027s not METHOD_SERVICE?\n\nIf we need it, we definitely need a comment to explain why.","commit_id":"64947efd2d2b337427d40046816e95dd942bf8bb"},{"author":{"_account_id":1000040,"name":"mrbff","email":"marco@mandelbit.com","username":"mrbff"},"change_message_id":"05d0396b684c4c7f3ae6832e8adc4b668b76989c","unresolved":false,"context_lines":[{"line_number":3131,"context_line":"    {"},{"line_number":3132,"context_line":"        msg(M_INFO, \"Flag \u0027def1\u0027 removed from --redirect-gateway\");"},{"line_number":3133,"context_line":"        opt-\u003eroutes-\u003eflags \u0026\u003d ~RG_DEF1;"},{"line_number":3134,"context_line":"    }"},{"line_number":3135,"context_line":"}"},{"line_number":3136,"context_line":"#endif /* ifdef _WIN32 */"},{"line_number":3137,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":21,"id":"99a69d66_161a9554","line":3134,"in_reply_to":"dbc0b2a7_f3d837dd","updated":"2025-07-23 17:11:43.000000000","message":"actually i should remove it, in case of an update of the option `routes-\u003eflags \u003d 0`, so there is no need for this code. I think i forgot there from the previous development where i updated the flags individually. Tnx for the catch.","commit_id":"64947efd2d2b337427d40046816e95dd942bf8bb"}],"src/openvpn/route.h":[{"author":{"_account_id":1000008,"name":"stipa","display_name":"Lev Stipakov","email":"lstipakov@gmail.com","username":"stipa"},"change_message_id":"894ff32815ef2afd7e93799f75c37ffce948d45b","unresolved":true,"context_lines":[{"line_number":322,"context_line":"                   openvpn_net_ctx_t *ctx);"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"void"},{"line_number":325,"context_line":"destroy_routes_v4(struct route_list *rl, const struct tuntap *tt,"},{"line_number":326,"context_line":"                  unsigned int flags, const struct env_set *es,"},{"line_number":327,"context_line":"                  openvpn_net_ctx_t *ctx, struct options *options);"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"f45f9775_7e0c3f33","line":325,"updated":"2025-01-21 12:58:58.000000000","message":"Apart from lacking comments, how does it differ from delete_routes()? Couldn\u0027t we reuse existing function (probably with some adjustments) ?","commit_id":"a442cdf1dfec750e9f9d3eb55a4ecdfe3e889841"},{"author":{"_account_id":1000008,"name":"stipa","display_name":"Lev Stipakov","email":"lstipakov@gmail.com","username":"stipa"},"change_message_id":"3235112644e4e46b59c7e134dd9e7eb5a6bddc5e","unresolved":true,"context_lines":[{"line_number":322,"context_line":"                   openvpn_net_ctx_t *ctx);"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"void"},{"line_number":325,"context_line":"destroy_routes_v4(struct route_list *rl, const struct tuntap *tt,"},{"line_number":326,"context_line":"                  unsigned int flags, const struct env_set *es,"},{"line_number":327,"context_line":"                  openvpn_net_ctx_t *ctx, struct options *options);"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"ea98c22c_ce50dc61","line":325,"in_reply_to":"7dd177d3_7d6de585","updated":"2025-01-21 14:29:27.000000000","message":"Could we then remove existing delete_routes() which is called from the single place and instead call delete_routes_v4() and delete_routes_v6() (and rename destroy-\u003edelete) ?","commit_id":"a442cdf1dfec750e9f9d3eb55a4ecdfe3e889841"},{"author":{"_account_id":1000040,"name":"mrbff","email":"marco@mandelbit.com","username":"mrbff"},"change_message_id":"c1b909b1e7210af9d5393461389c6b38680ea478","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                   openvpn_net_ctx_t *ctx);"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"void"},{"line_number":325,"context_line":"destroy_routes_v4(struct route_list *rl, const struct tuntap *tt,"},{"line_number":326,"context_line":"                  unsigned int flags, const struct env_set *es,"},{"line_number":327,"context_line":"                  openvpn_net_ctx_t *ctx, struct options *options);"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"03187090_139abae8","line":325,"in_reply_to":"ea98c22c_ce50dc61","updated":"2025-01-21 15:58:48.000000000","message":"ok i extracted the logic from delete_routes() and i separated it into delete_routes_v4() and delete_routes_v6()","commit_id":"a442cdf1dfec750e9f9d3eb55a4ecdfe3e889841"},{"author":{"_account_id":1000040,"name":"mrbff","email":"marco@mandelbit.com","username":"mrbff"},"change_message_id":"24b3257c027a8fcef95dce03cb335a728fb44f93","unresolved":true,"context_lines":[{"line_number":322,"context_line":"                   openvpn_net_ctx_t *ctx);"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"void"},{"line_number":325,"context_line":"destroy_routes_v4(struct route_list *rl, const struct tuntap *tt,"},{"line_number":326,"context_line":"                  unsigned int flags, const struct env_set *es,"},{"line_number":327,"context_line":"                  openvpn_net_ctx_t *ctx, struct options *options);"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":11,"id":"7dd177d3_7d6de585","line":325,"in_reply_to":"f45f9775_7e0c3f33","updated":"2025-01-21 14:14:27.000000000","message":"The destroy_routes_vx are used to split the logic of delete_routes in v4 and v6 and also to delete the routes in the \"options\" struct. In most cases where delete_route functions are used it is correct not to delete the routes in the \"options\" struct so I simply created the functions I needed.","commit_id":"a442cdf1dfec750e9f9d3eb55a4ecdfe3e889841"}]}
