)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"df9037b7838b0a98275660c2cf05cbbb331d7f7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cdbe6742_a7a9b856","updated":"2024-09-25 14:12:42.000000000","message":"Need to look into the macOS build failures.","commit_id":"613c22c8c39792b71a7491c606ff985e400aae23"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bbce814b21986fc9e2e41650941fd57d8bd16e38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"13fe6cb4_269001f2","updated":"2024-11-27 18:19:55.000000000","message":"This is messier than it should be - having the `local` list in the CE structure, while it is only useful for servers (that do not use CE).  But maybe this cannot be fixed if we do want to permit a (single) `local` entry inside a `\u003cconnection\u003e` (which makes sense).\n\nBut besides this, there\u0027s questions...","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"e4256d9fc61fa9035e78fbeeb8178d89b443c5d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"8e5dbb0b_83757240","updated":"2024-12-30 19:04:42.000000000","message":"This works, but I find the `local_list` structure in need of improvement.","commit_id":"d62a121b5c10d88e66c9e7f351e0c845f1cdf34a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"005a503db71e8dfa16b758e92c019c9c4e9990ab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"510f4885_a0397832","updated":"2025-01-23 15:22:20.000000000","message":"A few comments to look at, but at this point I\u0027d say \"fix the manpage and ship\" ;-)","commit_id":"53f2842df4d5fdc5813f5549a5748e3dde3f0c31"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"74aa36bfe25d2d0b48698e377e77571f97ff7875","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"630af09f_9139fbb5","updated":"2025-01-23 15:50:49.000000000","message":"I think we need to do some more wordsmithing (possibly find a native speaker that understands OpenVPN...) here, but for now, this should go on.","commit_id":"e7262f926a89de186f129bed9761c0520c0a0613"}],"doc/man-sections/link-options.rst":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"7260010127fceb9d9977977bc88eebe3ebe5b0e5","unresolved":true,"context_lines":[{"line_number":111,"context_line":"  to this address. If unspecified, OpenVPN will bind to all interfaces."},{"line_number":112,"context_line":"  \u0027*\u0027 can be used as hostname and means \u0027any host\u0027 (OpenVPN will listen on what"},{"line_number":113,"context_line":"  is returned by the OS). Implies --bind."},{"line_number":114,"context_line":"  0.0.0.0 or :: can be used to specifically open a socket."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"--lport port"},{"line_number":117,"context_line":"  Set local TCP/UDP port number or name. Cannot be used together with"}],"source_content_type":"text/x-rst","patch_set":5,"id":"82b9206f_257c5965","line":114,"updated":"2024-10-16 14:06:07.000000000","message":"Sentence does end in the middle?","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"10761432f72fe25425cb7c9583929d3332ca30c9","unresolved":false,"context_lines":[{"line_number":111,"context_line":"  to this address. If unspecified, OpenVPN will bind to all interfaces."},{"line_number":112,"context_line":"  \u0027*\u0027 can be used as hostname and means \u0027any host\u0027 (OpenVPN will listen on what"},{"line_number":113,"context_line":"  is returned by the OS). Implies --bind."},{"line_number":114,"context_line":"  0.0.0.0 or :: can be used to specifically open a socket."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"--lport port"},{"line_number":117,"context_line":"  Set local TCP/UDP port number or name. Cannot be used together with"}],"source_content_type":"text/x-rst","patch_set":5,"id":"e41c0651_4dde7880","line":114,"in_reply_to":"82b9206f_257c5965","updated":"2024-10-17 14:50:31.000000000","message":"Done","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"7260010127fceb9d9977977bc88eebe3ebe5b0e5","unresolved":true,"context_lines":[{"line_number":114,"context_line":"  0.0.0.0 or :: can be used to specifically open a socket."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"--lport port"},{"line_number":117,"context_line":"  Set local TCP/UDP port number or name. Cannot be used together with"},{"line_number":118,"context_line":"  ``--nobind`` option."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"--mark value"}],"source_content_type":"text/x-rst","patch_set":5,"id":"729f1acd_879715ca","line":117,"range":{"start_line":117,"start_character":32,"end_line":117,"end_character":39},"updated":"2024-10-16 14:06:07.000000000","message":"Should probably say \"default TCP/UDP port number\" or something like that and mention that this can be overridden by individual --local entries.","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"10761432f72fe25425cb7c9583929d3332ca30c9","unresolved":false,"context_lines":[{"line_number":114,"context_line":"  0.0.0.0 or :: can be used to specifically open a socket."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"--lport port"},{"line_number":117,"context_line":"  Set local TCP/UDP port number or name. Cannot be used together with"},{"line_number":118,"context_line":"  ``--nobind`` option."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"--mark value"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a0ba867_50a05ad8","line":117,"range":{"start_line":117,"start_character":32,"end_line":117,"end_character":39},"in_reply_to":"729f1acd_879715ca","updated":"2024-10-17 14:50:31.000000000","message":"Done","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bbce814b21986fc9e2e41650941fd57d8bd16e38","unresolved":true,"context_lines":[{"line_number":111,"context_line":"  to this address. If unspecified, OpenVPN will bind to all interfaces."},{"line_number":112,"context_line":"  \u0027*\u0027 can be used as hostname and means \u0027any host\u0027 (OpenVPN will listen on what"},{"line_number":113,"context_line":"  is returned by the OS). Implies --bind, 0.0.0.0 or :: can be used to specifically"},{"line_number":114,"context_line":"  open a socket."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"--lport port"},{"line_number":117,"context_line":"  Set default TCP/UDP port number. Cannot be used together with"}],"source_content_type":"text/x-rst","patch_set":7,"id":"2ee16be6_972b5621","line":114,"updated":"2024-11-27 18:19:55.000000000","message":"This text is not clear to me.  What does \"*\" do?  (This interacts with #761 on `::`).\n\nMaybe:\n\n```\nOn a client, or in point-to-point mode, this can only be specified once (1 socket).  On an OpenVPN setup running as `--server`, this can be specified multiple times to open multiple listening sockets on different addresses and/or different ports.\n\nIn order to specify multiple listen ports without specifying an address, use \u0027*\u0027 to signal \"use what the operating system gives you as default\".  For \"all IPv4 addresses\" use \u00270.0.0.0\u0027, for \"all IPv6 addresses\" use \u0027::\u0027.\n\n`--local` implies `--bind`.\n```\n\n(It\u0027s also slightly unclear how this interacts with `--proto`?  Maybe this is added in a later patch of the series?)","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78de764131ff5411ac031cd5e832a61791eb311b","unresolved":true,"context_lines":[{"line_number":111,"context_line":"  to this address. If unspecified, OpenVPN will bind to all interfaces."},{"line_number":112,"context_line":"  \u0027*\u0027 can be used as hostname and means \u0027any host\u0027 (OpenVPN will listen on what"},{"line_number":113,"context_line":"  is returned by the OS). Implies --bind, 0.0.0.0 or :: can be used to specifically"},{"line_number":114,"context_line":"  open a socket."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"--lport port"},{"line_number":117,"context_line":"  Set default TCP/UDP port number. Cannot be used together with"}],"source_content_type":"text/x-rst","patch_set":7,"id":"8dd8c81c_1c28df37","line":114,"in_reply_to":"2ee16be6_972b5621","updated":"2024-12-12 09:42:51.000000000","message":"Done, for the text.\n\n(--proto)\nIt will not interact with --proto, I tried to avoid checking it as it is fishy on the server side since we may have multiple sockets of different protocols, instead we will check the protocol for each socket when possible, otherwise we rely on the mode.","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"07d58f6ef6fb90fa301386498953f57f58bf2e01","unresolved":false,"context_lines":[{"line_number":111,"context_line":"  to this address. If unspecified, OpenVPN will bind to all interfaces."},{"line_number":112,"context_line":"  \u0027*\u0027 can be used as hostname and means \u0027any host\u0027 (OpenVPN will listen on what"},{"line_number":113,"context_line":"  is returned by the OS). Implies --bind, 0.0.0.0 or :: can be used to specifically"},{"line_number":114,"context_line":"  open a socket."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"--lport port"},{"line_number":117,"context_line":"  Set default TCP/UDP port number. Cannot be used together with"}],"source_content_type":"text/x-rst","patch_set":7,"id":"2e09fad4_f8cd789d","line":114,"in_reply_to":"8dd8c81c_1c28df37","updated":"2024-12-30 17:42:11.000000000","message":"Done","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"005a503db71e8dfa16b758e92c019c9c4e9990ab","unresolved":true,"context_lines":[{"line_number":121,"context_line":"  "},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"  Implies --bind, 0.0.0.0 or :: can be used to specifically"},{"line_number":124,"context_line":"  open a socket."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"--lport port"},{"line_number":127,"context_line":"  Set default TCP/UDP port number. Cannot be used together with"}],"source_content_type":"text/x-rst","patch_set":11,"id":"5e7f4c84_d49c3a9f","line":124,"updated":"2025-01-23 15:22:20.000000000","message":"As discussed on IRC, this is still a bit unclear / a leftover from earlier versions.","commit_id":"53f2842df4d5fdc5813f5549a5748e3dde3f0c31"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"74aa36bfe25d2d0b48698e377e77571f97ff7875","unresolved":false,"context_lines":[{"line_number":121,"context_line":"  "},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"  Implies --bind, 0.0.0.0 or :: can be used to specifically"},{"line_number":124,"context_line":"  open a socket."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"--lport port"},{"line_number":127,"context_line":"  Set default TCP/UDP port number. Cannot be used together with"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7c571c01_7328cf09","line":124,"in_reply_to":"5e7f4c84_d49c3a9f","updated":"2025-01-23 15:50:49.000000000","message":"Done","commit_id":"53f2842df4d5fdc5813f5549a5748e3dde3f0c31"}],"src/openvpn/options.c":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"df9037b7838b0a98275660c2cf05cbbb331d7f7a","unresolved":true,"context_lines":[{"line_number":124,"context_line":"    \"--version       : Show copyright and version information.\\n\""},{"line_number":125,"context_line":"    \"\\n\""},{"line_number":126,"context_line":"    \"Tunnel Options:\\n\""},{"line_number":127,"context_line":"    \"--local host|* [port] : Local host name or ip address and port. \u0027*\u0027 can be used\\n\""},{"line_number":128,"context_line":"    \"                        as hostname and means \u0027any host\u0027 (openvpn will listen on\\n\""},{"line_number":129,"context_line":"    \"                        what is returned by the OS). Implies --bind.\\n\""},{"line_number":130,"context_line":"    \"                        0.0.0.0 or :: can be used to specifically open a socket\\n\""}],"source_content_type":"text/x-csrc","patch_set":2,"id":"d52e4152_214d8bc0","line":127,"updated":"2024-09-25 14:12:42.000000000","message":"Some of this should move to the documentation instead.","commit_id":"613c22c8c39792b71a7491c606ff985e400aae23"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"88fe8f0ce4e7b479971904f38e372042b40b4e83","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    \"--version       : Show copyright and version information.\\n\""},{"line_number":125,"context_line":"    \"\\n\""},{"line_number":126,"context_line":"    \"Tunnel Options:\\n\""},{"line_number":127,"context_line":"    \"--local host|* [port] : Local host name or ip address and port. \u0027*\u0027 can be used\\n\""},{"line_number":128,"context_line":"    \"                        as hostname and means \u0027any host\u0027 (openvpn will listen on\\n\""},{"line_number":129,"context_line":"    \"                        what is returned by the OS). Implies --bind.\\n\""},{"line_number":130,"context_line":"    \"                        0.0.0.0 or :: can be used to specifically open a socket\\n\""}],"source_content_type":"text/x-csrc","patch_set":2,"id":"e65be83d_307d5115","line":127,"in_reply_to":"d52e4152_214d8bc0","updated":"2024-10-01 15:31:58.000000000","message":"Done","commit_id":"613c22c8c39792b71a7491c606ff985e400aae23"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"df9037b7838b0a98275660c2cf05cbbb331d7f7a","unresolved":true,"context_lines":[{"line_number":994,"context_line":"                        const int i)"},{"line_number":995,"context_line":"{"},{"line_number":996,"context_line":"    setenv_str_i(es, \"proto\", proto2ascii(e-\u003eproto, e-\u003eaf, false), i);"},{"line_number":997,"context_line":"    /* expected to befor single socket contexts only */"},{"line_number":998,"context_line":"    setenv_str_i(es, \"local\", e-\u003elocal_list-\u003earray[0]-\u003elocal, i);"},{"line_number":999,"context_line":"    setenv_str_i(es, \"local_port\", e-\u003elocal_list-\u003earray[0]-\u003eport, i);"},{"line_number":1000,"context_line":"    setenv_str_i(es, \"remote\", e-\u003eremote, i);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"84cfb07a_49de2180","line":997,"range":{"start_line":997,"start_character":19,"end_line":997,"end_character":24},"updated":"2024-09-25 14:12:42.000000000","message":"\"be for\"?","commit_id":"613c22c8c39792b71a7491c606ff985e400aae23"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"88fe8f0ce4e7b479971904f38e372042b40b4e83","unresolved":false,"context_lines":[{"line_number":994,"context_line":"                        const int i)"},{"line_number":995,"context_line":"{"},{"line_number":996,"context_line":"    setenv_str_i(es, \"proto\", proto2ascii(e-\u003eproto, e-\u003eaf, false), i);"},{"line_number":997,"context_line":"    /* expected to befor single socket contexts only */"},{"line_number":998,"context_line":"    setenv_str_i(es, \"local\", e-\u003elocal_list-\u003earray[0]-\u003elocal, i);"},{"line_number":999,"context_line":"    setenv_str_i(es, \"local_port\", e-\u003elocal_list-\u003earray[0]-\u003eport, i);"},{"line_number":1000,"context_line":"    setenv_str_i(es, \"remote\", e-\u003eremote, i);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"e082d9e2_59ce1158","line":997,"range":{"start_line":997,"start_character":19,"end_line":997,"end_character":24},"in_reply_to":"84cfb07a_49de2180","updated":"2024-10-01 15:31:58.000000000","message":"Done","commit_id":"613c22c8c39792b71a7491c606ff985e400aae23"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"7260010127fceb9d9977977bc88eebe3ebe5b0e5","unresolved":true,"context_lines":[{"line_number":2397,"context_line":"    }"},{"line_number":2398,"context_line":""},{"line_number":2399,"context_line":"    /*"},{"line_number":2400,"context_line":"     * Sanity check on daemon mode"},{"line_number":2401,"context_line":"     */"},{"line_number":2402,"context_line":""},{"line_number":2403,"context_line":"    if (ce-\u003eremote \u0026\u0026 ce-\u003elocal_list-\u003elen \u003e 1)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"e215e510_be593b03","line":2400,"updated":"2024-10-16 14:06:07.000000000","message":"Not sure what daemon is supposed to mean in this context?","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"10761432f72fe25425cb7c9583929d3332ca30c9","unresolved":false,"context_lines":[{"line_number":2397,"context_line":"    }"},{"line_number":2398,"context_line":""},{"line_number":2399,"context_line":"    /*"},{"line_number":2400,"context_line":"     * Sanity check on daemon mode"},{"line_number":2401,"context_line":"     */"},{"line_number":2402,"context_line":""},{"line_number":2403,"context_line":"    if (ce-\u003eremote \u0026\u0026 ce-\u003elocal_list-\u003elen \u003e 1)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"bea38f19_4d89f447","line":2400,"in_reply_to":"e215e510_be593b03","updated":"2024-10-17 14:50:31.000000000","message":"Done","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"7260010127fceb9d9977977bc88eebe3ebe5b0e5","unresolved":true,"context_lines":[{"line_number":3195,"context_line":"        ce-\u003ebind_local \u003d false;"},{"line_number":3196,"context_line":"    }"},{"line_number":3197,"context_line":""},{"line_number":3198,"context_line":"    if (ce-\u003eproto \u003d\u003d PROTO_UDP \u0026\u0026 ce-\u003esocks_proxy_server \u0026\u0026 !ce-\u003elocal_list \u0026\u0026 !ce-\u003elocal_port_defined \u0026\u0026 !ce-\u003ebind_defined)"},{"line_number":3199,"context_line":"    {"},{"line_number":3200,"context_line":"        ce-\u003ebind_local \u003d false;"},{"line_number":3201,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"7f064a0d_b60cd452","line":3198,"updated":"2024-10-16 14:06:07.000000000","message":"Should use need_bind to simplify the condition.","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"10761432f72fe25425cb7c9583929d3332ca30c9","unresolved":false,"context_lines":[{"line_number":3195,"context_line":"        ce-\u003ebind_local \u003d false;"},{"line_number":3196,"context_line":"    }"},{"line_number":3197,"context_line":""},{"line_number":3198,"context_line":"    if (ce-\u003eproto \u003d\u003d PROTO_UDP \u0026\u0026 ce-\u003esocks_proxy_server \u0026\u0026 !ce-\u003elocal_list \u0026\u0026 !ce-\u003elocal_port_defined \u0026\u0026 !ce-\u003ebind_defined)"},{"line_number":3199,"context_line":"    {"},{"line_number":3200,"context_line":"        ce-\u003ebind_local \u003d false;"},{"line_number":3201,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"a4fc0da7_d28cb303","line":3198,"in_reply_to":"7f064a0d_b60cd452","updated":"2024-10-17 14:50:31.000000000","message":"Done","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"7260010127fceb9d9977977bc88eebe3ebe5b0e5","unresolved":true,"context_lines":[{"line_number":3324,"context_line":"}"},{"line_number":3325,"context_line":""},{"line_number":3326,"context_line":"static void"},{"line_number":3327,"context_line":"options_postprocess_mutate_le(struct options *o, struct local_entry *le)"},{"line_number":3328,"context_line":"{"},{"line_number":3329,"context_line":"    /* use the global port if none is specified */"},{"line_number":3330,"context_line":"    if (!le-\u003eport)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"09c9c53d_d50c5988","line":3327,"updated":"2024-10-16 14:06:07.000000000","message":"should maybe take o-\u003ece as input and not o, just to make clear that it doesn\u0027t need the rest?","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"10761432f72fe25425cb7c9583929d3332ca30c9","unresolved":false,"context_lines":[{"line_number":3324,"context_line":"}"},{"line_number":3325,"context_line":""},{"line_number":3326,"context_line":"static void"},{"line_number":3327,"context_line":"options_postprocess_mutate_le(struct options *o, struct local_entry *le)"},{"line_number":3328,"context_line":"{"},{"line_number":3329,"context_line":"    /* use the global port if none is specified */"},{"line_number":3330,"context_line":"    if (!le-\u003eport)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"08d0b545_36ce02f5","line":3327,"in_reply_to":"09c9c53d_d50c5988","updated":"2024-10-17 14:50:31.000000000","message":"Done","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"7260010127fceb9d9977977bc88eebe3ebe5b0e5","unresolved":true,"context_lines":[{"line_number":6244,"context_line":"        /* \u0027*\u0027 is treated as \u0027ask the system to get some socket\u0027,"},{"line_number":6245,"context_line":"         * therefore force binding on a particular address only when"},{"line_number":6246,"context_line":"         * actually specified. */"},{"line_number":6247,"context_line":"        if (strcmp(p[1], \"*\") !\u003d 0)"},{"line_number":6248,"context_line":"        {"},{"line_number":6249,"context_line":"            e-\u003elocal \u003d p[1];"},{"line_number":6250,"context_line":"            e-\u003ebind_local \u003d true;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"5052e26b_a665c5df","line":6247,"updated":"2024-10-16 14:06:07.000000000","message":"should we issue a warning if someone specifies \"--local *\" without port number that this is a NOOP?","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78de764131ff5411ac031cd5e832a61791eb311b","unresolved":false,"context_lines":[{"line_number":6244,"context_line":"        /* \u0027*\u0027 is treated as \u0027ask the system to get some socket\u0027,"},{"line_number":6245,"context_line":"         * therefore force binding on a particular address only when"},{"line_number":6246,"context_line":"         * actually specified. */"},{"line_number":6247,"context_line":"        if (strcmp(p[1], \"*\") !\u003d 0)"},{"line_number":6248,"context_line":"        {"},{"line_number":6249,"context_line":"            e-\u003elocal \u003d p[1];"},{"line_number":6250,"context_line":"            e-\u003ebind_local \u003d true;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"3c4e7f07_331b4f56","line":6247,"in_reply_to":"5052e26b_a665c5df","updated":"2024-12-12 09:42:51.000000000","message":"Acknowledged","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bbce814b21986fc9e2e41650941fd57d8bd16e38","unresolved":true,"context_lines":[{"line_number":130,"context_line":"    \"                        0.0.0.0 or :: can be used to specifically open a socket\\n\""},{"line_number":131,"context_line":"    \"                        listening on any IPv4 or IPv6 address respectively.\\n\""},{"line_number":132,"context_line":"    \"                        The user can specify multiple --local entries to have\\n\""},{"line_number":133,"context_line":"    \"                        a server listen on multiple sockets at the same time.\\n\""},{"line_number":134,"context_line":"    \"--remote host [port] : Remote host name or ip address.\\n\""},{"line_number":135,"context_line":"    \"--remote-random : If multiple --remote options specified, choose one randomly.\\n\""},{"line_number":136,"context_line":"    \"--remote-random-hostname : Add a random string to remote DNS name.\\n\""}],"source_content_type":"text/x-csrc","patch_set":7,"id":"c96e1fb3_88b2e29c","line":133,"updated":"2024-11-27 18:19:55.000000000","message":"when there is agreement on the wording in the manpage, this needs to be addressed as well","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78de764131ff5411ac031cd5e832a61791eb311b","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    \"                        0.0.0.0 or :: can be used to specifically open a socket\\n\""},{"line_number":131,"context_line":"    \"                        listening on any IPv4 or IPv6 address respectively.\\n\""},{"line_number":132,"context_line":"    \"                        The user can specify multiple --local entries to have\\n\""},{"line_number":133,"context_line":"    \"                        a server listen on multiple sockets at the same time.\\n\""},{"line_number":134,"context_line":"    \"--remote host [port] : Remote host name or ip address.\\n\""},{"line_number":135,"context_line":"    \"--remote-random : If multiple --remote options specified, choose one randomly.\\n\""},{"line_number":136,"context_line":"    \"--remote-random-hostname : Add a random string to remote DNS name.\\n\""}],"source_content_type":"text/x-csrc","patch_set":7,"id":"d9af2a74_f67140b0","line":133,"in_reply_to":"c96e1fb3_88b2e29c","updated":"2024-12-12 09:42:51.000000000","message":"Done","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bbce814b21986fc9e2e41650941fd57d8bd16e38","unresolved":true,"context_lines":[{"line_number":995,"context_line":"{"},{"line_number":996,"context_line":"    setenv_str_i(es, \"proto\", proto2ascii(e-\u003eproto, e-\u003eaf, false), i);"},{"line_number":997,"context_line":"    /* expected to be for single socket contexts only */"},{"line_number":998,"context_line":"    setenv_str_i(es, \"local\", e-\u003elocal_list-\u003earray[0]-\u003elocal, i);"},{"line_number":999,"context_line":"    setenv_str_i(es, \"local_port\", e-\u003elocal_list-\u003earray[0]-\u003eport, i);"},{"line_number":1000,"context_line":"    setenv_str_i(es, \"remote\", e-\u003eremote, i);"},{"line_number":1001,"context_line":"    setenv_str_i(es, \"remote_port\", e-\u003eremote_port, i);"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"1ff60b54_20cb34b1","line":998,"updated":"2024-11-27 18:19:55.000000000","message":"will this crash if `--local` has not been used at all?","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78de764131ff5411ac031cd5e832a61791eb311b","unresolved":false,"context_lines":[{"line_number":995,"context_line":"{"},{"line_number":996,"context_line":"    setenv_str_i(es, \"proto\", proto2ascii(e-\u003eproto, e-\u003eaf, false), i);"},{"line_number":997,"context_line":"    /* expected to be for single socket contexts only */"},{"line_number":998,"context_line":"    setenv_str_i(es, \"local\", e-\u003elocal_list-\u003earray[0]-\u003elocal, i);"},{"line_number":999,"context_line":"    setenv_str_i(es, \"local_port\", e-\u003elocal_list-\u003earray[0]-\u003eport, i);"},{"line_number":1000,"context_line":"    setenv_str_i(es, \"remote\", e-\u003eremote, i);"},{"line_number":1001,"context_line":"    setenv_str_i(es, \"remote_port\", e-\u003eremote_port, i);"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"b04415ed_9d0e4ae8","line":998,"in_reply_to":"1ff60b54_20cb34b1","updated":"2024-12-12 09:42:51.000000000","message":"No, it will not, even without specifying any \u0027--local\u0027 we\u0027re gonna create a local_entry based on the global port, see options.c:3818 for details.","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bbce814b21986fc9e2e41650941fd57d8bd16e38","unresolved":true,"context_lines":[{"line_number":2403,"context_line":"    if (ce-\u003eremote \u0026\u0026 ce-\u003elocal_list-\u003elen \u003e 1)"},{"line_number":2404,"context_line":"    {"},{"line_number":2405,"context_line":"        msg(M_USAGE, \"multiple --local do not make sense in Client mode\");"},{"line_number":2406,"context_line":"    }"},{"line_number":2407,"context_line":""},{"line_number":2408,"context_line":"    if (options-\u003elladdr \u0026\u0026 dev !\u003d DEV_TYPE_TAP)"},{"line_number":2409,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"24119bb9_af8f4bf9","line":2406,"updated":"2024-11-27 18:19:55.000000000","message":"I would not check on `ce-\u003eremote` but on `mode \u003d\u003d SERVER` here, and change the wording to `multiple --local statements only allowed in --server mode`.\n\nAlso, will this crash if no `--local` statement has been used (aka is the list always initialized?)","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78de764131ff5411ac031cd5e832a61791eb311b","unresolved":false,"context_lines":[{"line_number":2403,"context_line":"    if (ce-\u003eremote \u0026\u0026 ce-\u003elocal_list-\u003elen \u003e 1)"},{"line_number":2404,"context_line":"    {"},{"line_number":2405,"context_line":"        msg(M_USAGE, \"multiple --local do not make sense in Client mode\");"},{"line_number":2406,"context_line":"    }"},{"line_number":2407,"context_line":""},{"line_number":2408,"context_line":"    if (options-\u003elladdr \u0026\u0026 dev !\u003d DEV_TYPE_TAP)"},{"line_number":2409,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"750168cd_967ca0a0","line":2406,"in_reply_to":"24119bb9_af8f4bf9","updated":"2024-12-12 09:42:51.000000000","message":"Done for the check.\n\nSee answer above for --local crash question.","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bbce814b21986fc9e2e41650941fd57d8bd16e38","unresolved":true,"context_lines":[{"line_number":3182,"context_line":"    }"},{"line_number":3183,"context_line":""},{"line_number":3184,"context_line":"    /* an option is present that requires local bind to enabled */"},{"line_number":3185,"context_line":"    bool need_bind \u003d ce-\u003elocal_port_defined || ce-\u003ebind_defined;"},{"line_number":3186,"context_line":""},{"line_number":3187,"context_line":"    /* socks proxy is enabled */"},{"line_number":3188,"context_line":"    bool uses_socks \u003d ce-\u003eproto \u003d\u003d PROTO_UDP \u0026\u0026 ce-\u003esocks_proxy_server;"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"8fdc0098_59259f5f","line":3185,"updated":"2024-11-27 18:19:55.000000000","message":"this looks incomplete - shouldn\u0027t the existence of a `--local` entry also set `need_bind \u003d true`?","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78de764131ff5411ac031cd5e832a61791eb311b","unresolved":false,"context_lines":[{"line_number":3182,"context_line":"    }"},{"line_number":3183,"context_line":""},{"line_number":3184,"context_line":"    /* an option is present that requires local bind to enabled */"},{"line_number":3185,"context_line":"    bool need_bind \u003d ce-\u003elocal_port_defined || ce-\u003ebind_defined;"},{"line_number":3186,"context_line":""},{"line_number":3187,"context_line":"    /* socks proxy is enabled */"},{"line_number":3188,"context_line":"    bool uses_socks \u003d ce-\u003eproto \u003d\u003d PROTO_UDP \u0026\u0026 ce-\u003esocks_proxy_server;"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"fb946320_525f1ec3","line":3185,"in_reply_to":"8fdc0098_59259f5f","updated":"2024-12-12 09:42:51.000000000","message":"Extended this with checking for the local_list, (if not NULL we\u0027re going to bind).","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bbce814b21986fc9e2e41650941fd57d8bd16e38","unresolved":true,"context_lines":[{"line_number":3195,"context_line":"        ce-\u003ebind_local \u003d false;"},{"line_number":3196,"context_line":"    }"},{"line_number":3197,"context_line":""},{"line_number":3198,"context_line":"    if (o-\u003eclient \u0026\u0026 !need_bind)"},{"line_number":3199,"context_line":"    {"},{"line_number":3200,"context_line":"        ce-\u003ebind_local \u003d false;"},{"line_number":3201,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"f467c398_a6c43f2d","line":3198,"updated":"2024-11-27 18:19:55.000000000","message":"is this intentional or a rebase artefact?  This looks a bit unrelated","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78de764131ff5411ac031cd5e832a61791eb311b","unresolved":false,"context_lines":[{"line_number":3195,"context_line":"        ce-\u003ebind_local \u003d false;"},{"line_number":3196,"context_line":"    }"},{"line_number":3197,"context_line":""},{"line_number":3198,"context_line":"    if (o-\u003eclient \u0026\u0026 !need_bind)"},{"line_number":3199,"context_line":"    {"},{"line_number":3200,"context_line":"        ce-\u003ebind_local \u003d false;"},{"line_number":3201,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"d52d560f_2dcb23ff","line":3198,"in_reply_to":"f467c398_a6c43f2d","updated":"2024-12-12 09:42:51.000000000","message":"Done","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bbce814b21986fc9e2e41650941fd57d8bd16e38","unresolved":true,"context_lines":[{"line_number":3824,"context_line":"        e-\u003ebind_local \u003d o-\u003econnection_list-\u003earray[0]-\u003ebind_local;"},{"line_number":3825,"context_line":"    }"},{"line_number":3826,"context_line":""},{"line_number":3827,"context_line":"    /* use the same listen list for every outgoing connection */"},{"line_number":3828,"context_line":"    for (i \u003d 0; i \u003c o-\u003econnection_list-\u003elen; ++i)"},{"line_number":3829,"context_line":"    {"},{"line_number":3830,"context_line":"        o-\u003econnection_list-\u003earray[i]-\u003elocal_list \u003d o-\u003ece.local_list;"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"18bf97b8_6adc2bc6","line":3827,"updated":"2024-11-27 18:19:55.000000000","message":"well... for outgoing connections we do not want to use a *list* at all, as we can only bind() once...?  (but I need to read up on o-\u003ece vs. o-\u003econnection_list)","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78de764131ff5411ac031cd5e832a61791eb311b","unresolved":true,"context_lines":[{"line_number":3824,"context_line":"        e-\u003ebind_local \u003d o-\u003econnection_list-\u003earray[0]-\u003ebind_local;"},{"line_number":3825,"context_line":"    }"},{"line_number":3826,"context_line":""},{"line_number":3827,"context_line":"    /* use the same listen list for every outgoing connection */"},{"line_number":3828,"context_line":"    for (i \u003d 0; i \u003c o-\u003econnection_list-\u003elen; ++i)"},{"line_number":3829,"context_line":"    {"},{"line_number":3830,"context_line":"        o-\u003econnection_list-\u003earray[i]-\u003elocal_list \u003d o-\u003ece.local_list;"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"6ecec3d0_fc5af621","line":3827,"in_reply_to":"18bf97b8_6adc2bc6","updated":"2024-12-12 09:42:51.000000000","message":"We handle everything as a list, but later on there\u0027s a specific sanity check that in the case of clients ensures that the list has only one element.","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"07d58f6ef6fb90fa301386498953f57f58bf2e01","unresolved":false,"context_lines":[{"line_number":3824,"context_line":"        e-\u003ebind_local \u003d o-\u003econnection_list-\u003earray[0]-\u003ebind_local;"},{"line_number":3825,"context_line":"    }"},{"line_number":3826,"context_line":""},{"line_number":3827,"context_line":"    /* use the same listen list for every outgoing connection */"},{"line_number":3828,"context_line":"    for (i \u003d 0; i \u003c o-\u003econnection_list-\u003elen; ++i)"},{"line_number":3829,"context_line":"    {"},{"line_number":3830,"context_line":"        o-\u003econnection_list-\u003earray[i]-\u003elocal_list \u003d o-\u003ece.local_list;"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"0fb1fac6_8c60bfdc","line":3827,"in_reply_to":"6ecec3d0_fc5af621","updated":"2024-12-30 17:42:11.000000000","message":"Done","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bbce814b21986fc9e2e41650941fd57d8bd16e38","unresolved":true,"context_lines":[{"line_number":6247,"context_line":"        if (strcmp(p[1], \"*\") !\u003d 0)"},{"line_number":6248,"context_line":"        {"},{"line_number":6249,"context_line":"            e-\u003elocal \u003d p[1];"},{"line_number":6250,"context_line":"            e-\u003ebind_local \u003d true;"},{"line_number":6251,"context_line":"        }"},{"line_number":6252,"context_line":""},{"line_number":6253,"context_line":"        if (p[2])"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"42fa7611_2d03d61e","line":6250,"updated":"2024-11-27 18:19:55.000000000","message":"I do not understand this `bind_local` variable.  Of course we bind(), otherwise the whole setting of `local` does not make sense?   And even on \"*\" we do want to `bind()`...?","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"07d58f6ef6fb90fa301386498953f57f58bf2e01","unresolved":false,"context_lines":[{"line_number":6247,"context_line":"        if (strcmp(p[1], \"*\") !\u003d 0)"},{"line_number":6248,"context_line":"        {"},{"line_number":6249,"context_line":"            e-\u003elocal \u003d p[1];"},{"line_number":6250,"context_line":"            e-\u003ebind_local \u003d true;"},{"line_number":6251,"context_line":"        }"},{"line_number":6252,"context_line":""},{"line_number":6253,"context_line":"        if (p[2])"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"843e9fd5_709eae74","line":6250,"in_reply_to":"3a5e4b2a_9eed652f","updated":"2024-12-30 17:42:11.000000000","message":"Done","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"78de764131ff5411ac031cd5e832a61791eb311b","unresolved":true,"context_lines":[{"line_number":6247,"context_line":"        if (strcmp(p[1], \"*\") !\u003d 0)"},{"line_number":6248,"context_line":"        {"},{"line_number":6249,"context_line":"            e-\u003elocal \u003d p[1];"},{"line_number":6250,"context_line":"            e-\u003ebind_local \u003d true;"},{"line_number":6251,"context_line":"        }"},{"line_number":6252,"context_line":""},{"line_number":6253,"context_line":"        if (p[2])"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"3a5e4b2a_9eed652f","line":6250,"in_reply_to":"42fa7611_2d03d61e","updated":"2024-12-12 09:42:51.000000000","message":"I removed the bind_local variable on the local_entry and rely on the o-\u003ece.bind_local which has all the sanity checks of the case.","commit_id":"b77782884411a45eb3f52ae9a9da4be5cffff2d6"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"e4256d9fc61fa9035e78fbeeb8178d89b443c5d2","unresolved":true,"context_lines":[{"line_number":2473,"context_line":"            \u0026\u0026 string_defined_equal(le-\u003elocal, ce-\u003eremote)"},{"line_number":2474,"context_line":"            \u0026\u0026 string_defined_equal(le-\u003eport, ce-\u003eremote_port))"},{"line_number":2475,"context_line":"        {"},{"line_number":2476,"context_line":"            msg(M_USAGE, \"--remote and a --local addresses are the same\");"},{"line_number":2477,"context_line":"        }"},{"line_number":2478,"context_line":""},{"line_number":2479,"context_line":"        if (string_defined_equal(le-\u003elocal, options-\u003eifconfig_local)"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"b6ab664e_ab058053","line":2476,"updated":"2024-12-30 19:04:42.000000000","message":"`a local address`, singular :-) (or `one of the --local addresses`)\n\nDunno.  Something grammarly correct :-)","commit_id":"d62a121b5c10d88e66c9e7f351e0c845f1cdf34a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"834cde78dd621d234ed9965968b35d871ae87cd0","unresolved":false,"context_lines":[{"line_number":2473,"context_line":"            \u0026\u0026 string_defined_equal(le-\u003elocal, ce-\u003eremote)"},{"line_number":2474,"context_line":"            \u0026\u0026 string_defined_equal(le-\u003eport, ce-\u003eremote_port))"},{"line_number":2475,"context_line":"        {"},{"line_number":2476,"context_line":"            msg(M_USAGE, \"--remote and a --local addresses are the same\");"},{"line_number":2477,"context_line":"        }"},{"line_number":2478,"context_line":""},{"line_number":2479,"context_line":"        if (string_defined_equal(le-\u003elocal, options-\u003eifconfig_local)"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"9783668c_48b6cdb6","line":2476,"in_reply_to":"b6ab664e_ab058053","updated":"2025-01-09 13:47:18.000000000","message":"Done","commit_id":"d62a121b5c10d88e66c9e7f351e0c845f1cdf34a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"005a503db71e8dfa16b758e92c019c9c4e9990ab","unresolved":true,"context_lines":[{"line_number":2482,"context_line":"            msg(M_USAGE, \"--local addresses must be distinct from --ifconfig addresses\");"},{"line_number":2483,"context_line":"        }"},{"line_number":2484,"context_line":""},{"line_number":2485,"context_line":"        if (le-\u003elocal \u0026\u0026 !ce-\u003ebind_local)"},{"line_number":2486,"context_line":"        {"},{"line_number":2487,"context_line":"            msg(M_USAGE, \"--local and --nobind don\u0027t make sense when used together\");"},{"line_number":2488,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"87b58fcf_5e96bec6","line":2485,"updated":"2025-01-23 15:22:20.000000000","message":"I do wonder if we really need to check this for every entry in the local_list, or checking it once (`if ( ce-\u003elocal_list \u0026\u0026 !ce-\u003ebind_local )`) would be sufficient...  but this is not really important.","commit_id":"53f2842df4d5fdc5813f5549a5748e3dde3f0c31"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"005a503db71e8dfa16b758e92c019c9c4e9990ab","unresolved":true,"context_lines":[{"line_number":3777,"context_line":"    {"},{"line_number":3778,"context_line":"        for (i \u003d 0; i \u003c o-\u003ece.local_list-\u003elen; i++)"},{"line_number":3779,"context_line":"        {"},{"line_number":3780,"context_line":"            options_postprocess_mutate_le(o-\u003ece, o-\u003ece.local_list-\u003earray[i]);"},{"line_number":3781,"context_line":"        }"},{"line_number":3782,"context_line":"    }"},{"line_number":3783,"context_line":"    else"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"9744ee88_ecea7af7","line":3780,"updated":"2025-01-23 15:22:20.000000000","message":"I guess that this is preparations for one of the later patches?  For the simple case having an extra function 420 lines further up in the code seems more complicated then necessary.","commit_id":"53f2842df4d5fdc5813f5549a5748e3dde3f0c31"}],"src/openvpn/options.h":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"e4256d9fc61fa9035e78fbeeb8178d89b443c5d2","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"struct connection_entry"},{"line_number":104,"context_line":"{"},{"line_number":105,"context_line":"    struct local_list *local_list;"},{"line_number":106,"context_line":"    int proto;"},{"line_number":107,"context_line":"    sa_family_t af;"},{"line_number":108,"context_line":"    const char *local_port;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"b51da7c8_0ec98e70","line":105,"updated":"2024-12-30 19:04:42.000000000","message":"I do not like this data structure - having an extra indirection seems to serve no good purpose (like, it\u0027s not actually a \"list\").\n\nAll the other new multisocket code just has a local array, and I think we should do the same thing here - that is:\n\n`struct connection_entry\n{\n    struct local_entry *local_list;\n    int local_list_len;\n    ...\n`\n\nmost of the remaining code will simplify itself (`ce-\u003elocal_list-\u003earray[i]` to `ce-\u003elocal_list[i]` etc.) or will not care at all (if dealing with a `le`).","commit_id":"d62a121b5c10d88e66c9e7f351e0c845f1cdf34a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"0b5cf67b7a0353743de5154f973a7b4080d7439b","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"struct connection_entry"},{"line_number":104,"context_line":"{"},{"line_number":105,"context_line":"    struct local_list *local_list;"},{"line_number":106,"context_line":"    int proto;"},{"line_number":107,"context_line":"    sa_family_t af;"},{"line_number":108,"context_line":"    const char *local_port;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"aae7f902_0402e836","line":105,"in_reply_to":"64b2e454_7dc2ac24","updated":"2025-01-09 08:38:17.000000000","message":"okay, so we discussed this at lenght in IRC.  There are other `xxx_list` things with `array[]` elements (well, `** array`, and dynamic allocations, but that\u0027s an incremental improvelemts).  So I withdraw my objection \"we don\u0027t do this elsewhere\", and with the copying around it\u0027s easier to always have the `len` automatic.","commit_id":"d62a121b5c10d88e66c9e7f351e0c845f1cdf34a"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"6b983fa1738b18be8f094922f081a9b2ed49007b","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"struct connection_entry"},{"line_number":104,"context_line":"{"},{"line_number":105,"context_line":"    struct local_list *local_list;"},{"line_number":106,"context_line":"    int proto;"},{"line_number":107,"context_line":"    sa_family_t af;"},{"line_number":108,"context_line":"    const char *local_port;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"64b2e454_7dc2ac24","line":105,"in_reply_to":"6b965d3f_513428fb","updated":"2025-01-08 16:12:43.000000000","message":"You\u0027re not supposed to have a `local_list[]` member but a `struct local_entry *`... which can be copied around as you want.","commit_id":"d62a121b5c10d88e66c9e7f351e0c845f1cdf34a"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"772f6f7a19f8961d16c32f204f41d57dc6438762","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"struct connection_entry"},{"line_number":104,"context_line":"{"},{"line_number":105,"context_line":"    struct local_list *local_list;"},{"line_number":106,"context_line":"    int proto;"},{"line_number":107,"context_line":"    sa_family_t af;"},{"line_number":108,"context_line":"    const char *local_port;"}],"source_content_type":"text/x-csrc","patch_set":10,"id":"6b965d3f_513428fb","line":105,"in_reply_to":"b51da7c8_0ec98e70","updated":"2025-01-08 15:21:08.000000000","message":"Gianmarco dived north and south to remove this local_list container. However, he found the actual reason for having a pointer to a container here, instead of the plain array: the value of `struct local_list *` is copied over all connection entries, so that the list of locals can be shared.\n\nIf we remove such container and let a `struct connection_entry` directly have a `local_list[]` member, we then need to copy this array over to every other connection entry.\n\nHence, we use more memory and we must memcpy() the array to every `ce`.\n\nWould you agree that it may be better to keep the local_list container as it is now and avoid this complexity?","commit_id":"d62a121b5c10d88e66c9e7f351e0c845f1cdf34a"}],"src/openvpn/socket.c":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"df9037b7838b0a98275660c2cf05cbbb331d7f7a","unresolved":true,"context_lines":[{"line_number":342,"context_line":"void"},{"line_number":343,"context_line":"do_preresolve(struct context *c)"},{"line_number":344,"context_line":"{"},{"line_number":345,"context_line":"    int i, j;"},{"line_number":346,"context_line":"    struct connection_list *l \u003d c-\u003eoptions.connection_list;"},{"line_number":347,"context_line":"    const unsigned int preresolve_flags \u003d GETADDR_RESOLVE"},{"line_number":348,"context_line":"                                          |GETADDR_UPDATE_MANAGEMENT_STATE"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"cbf102c9_02a57533","line":345,"updated":"2024-09-25 14:12:42.000000000","message":"For new code please move the declaration to the actual first use. No need to stay in pre-C99 style.","commit_id":"613c22c8c39792b71a7491c606ff985e400aae23"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"88fe8f0ce4e7b479971904f38e372042b40b4e83","unresolved":false,"context_lines":[{"line_number":342,"context_line":"void"},{"line_number":343,"context_line":"do_preresolve(struct context *c)"},{"line_number":344,"context_line":"{"},{"line_number":345,"context_line":"    int i, j;"},{"line_number":346,"context_line":"    struct connection_list *l \u003d c-\u003eoptions.connection_list;"},{"line_number":347,"context_line":"    const unsigned int preresolve_flags \u003d GETADDR_RESOLVE"},{"line_number":348,"context_line":"                                          |GETADDR_UPDATE_MANAGEMENT_STATE"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"7a7bcf88_b92b38b3","line":345,"in_reply_to":"cbf102c9_02a57533","updated":"2024-10-01 15:31:58.000000000","message":"Done","commit_id":"613c22c8c39792b71a7491c606ff985e400aae23"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"7260010127fceb9d9977977bc88eebe3ebe5b0e5","unresolved":true,"context_lines":[{"line_number":355,"context_line":"        const char *remote;"},{"line_number":356,"context_line":"        int flags \u003d preresolve_flags;"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        struct connection_entry *ce \u003d c-\u003eoptions.connection_list-\u003earray[i];"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        if (proto_is_dgram(ce-\u003eproto))"},{"line_number":361,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"c0b1d821_0f10076d","line":358,"range":{"start_line":358,"start_character":41,"end_line":358,"end_character":48},"updated":"2024-10-16 14:06:07.000000000","message":"either this should use \"l\" or the definition of \"l\" should be removed completely.","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"10761432f72fe25425cb7c9583929d3332ca30c9","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        const char *remote;"},{"line_number":356,"context_line":"        int flags \u003d preresolve_flags;"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        struct connection_entry *ce \u003d c-\u003eoptions.connection_list-\u003earray[i];"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        if (proto_is_dgram(ce-\u003eproto))"},{"line_number":361,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"f094b608_24a1894e","line":358,"range":{"start_line":358,"start_character":41,"end_line":358,"end_character":48},"in_reply_to":"c0b1d821_0f10076d","updated":"2024-10-17 14:50:31.000000000","message":"Done","commit_id":"234b2ecde3b3d7ceee33ecadee1139acb485cfc0"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"e4256d9fc61fa9035e78fbeeb8178d89b443c5d2","unresolved":true,"context_lines":[{"line_number":418,"context_line":"        flags |\u003d GETADDR_PASSIVE;"},{"line_number":419,"context_line":"        flags \u0026\u003d ~GETADDR_RANDOMIZE;"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        for (int j \u003d 0; j \u003c ce-\u003elocal_list-\u003elen; j++)"},{"line_number":422,"context_line":"        {"},{"line_number":423,"context_line":"            struct local_entry *le \u003d ce-\u003elocal_list-\u003earray[j];"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":10,"id":"fc6cd992_13935a2b","line":421,"updated":"2024-12-30 19:04:42.000000000","message":"is this save against \"no `--local` specified at all, list not initialized\"?  The old code had an `if (ce-\u003ebind_local)` check here, for which I\u0027m missing the equivalent","commit_id":"d62a121b5c10d88e66c9e7f351e0c845f1cdf34a"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"834cde78dd621d234ed9965968b35d871ae87cd0","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        flags |\u003d GETADDR_PASSIVE;"},{"line_number":419,"context_line":"        flags \u0026\u003d ~GETADDR_RANDOMIZE;"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        for (int j \u003d 0; j \u003c ce-\u003elocal_list-\u003elen; j++)"},{"line_number":422,"context_line":"        {"},{"line_number":423,"context_line":"            struct local_entry *le \u003d ce-\u003elocal_list-\u003earray[j];"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":10,"id":"9530a00a_45891312","line":421,"in_reply_to":"fc6cd992_13935a2b","updated":"2025-01-09 13:47:18.000000000","message":"Done","commit_id":"d62a121b5c10d88e66c9e7f351e0c845f1cdf34a"}]}
