)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"09f404c85aba63e77660d51e458d719241a3f1cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3d5bcd84_c8324c13","updated":"2025-01-28 14:15:14.000000000","message":"close.  Please extend doc/management-notes.txt with the new syntax as well.","commit_id":"3e56b25f5c61d14a2ea07466416a7f43337e399f"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"df1edeceb6210fdbd411e67b55727bf434608bbf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"982cdc55_972175f6","updated":"2025-01-29 09:40:47.000000000","message":"close :-)","commit_id":"78af7433eb6b9dae334dcabfa14c99ca5ad5a6af"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"1e05ab2f17f45586bcee62f12370cb2cfd781ece","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a5a35466_184fe936","updated":"2025-01-29 10:07:39.000000000","message":"too much enthusiasm","commit_id":"69c59cf0139cdd0bb201537e0d6611530d72ca16"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"885e21fd346c7aad20883d8ff96afbe380936bcd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"12acda6f_304a55c9","updated":"2025-01-29 16:15:50.000000000","message":"I keep +2\u0027ing this...","commit_id":"e4da42e734e5f8c5035d00d6e0d4ee2db0108bf1"}],"doc/management-notes.txt":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"df1edeceb6210fdbd411e67b55727bf434608bbf","unresolved":true,"context_lines":[{"line_number":208,"context_line":"  kill 1.2.3.4:4000:tcp -- kill the client instance having a"},{"line_number":209,"context_line":"                           source address, port and proto of "},{"line_number":210,"context_line":"                           1.2.3.4:4000:tcp"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Use the \"status\" command to see which clients are connected."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"COMMAND -- log"}],"source_content_type":"text/plain","patch_set":2,"id":"5aaed102_183dab88","line":211,"updated":"2025-01-29 09:40:47.000000000","message":"Thanks for this.  I overlooked this in v1, though - I think we should have protocol at the start `tcp:1.2.3.4:4000`, as this is really the \"most common way\", and since we *print* the addresses that way now this would be more logical.\n\nSorry for not spotting this earlier.\n\nAlso, we might mention \"this isn\u0027t working for IPv6-connected clients (yet), kill by CN or CID instead\".","commit_id":"78af7433eb6b9dae334dcabfa14c99ca5ad5a6af"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"8da3d7a943d46e3923018b46a8b68abffb0caa19","unresolved":false,"context_lines":[{"line_number":208,"context_line":"  kill 1.2.3.4:4000:tcp -- kill the client instance having a"},{"line_number":209,"context_line":"                           source address, port and proto of "},{"line_number":210,"context_line":"                           1.2.3.4:4000:tcp"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Use the \"status\" command to see which clients are connected."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"COMMAND -- log"}],"source_content_type":"text/plain","patch_set":2,"id":"57449c07_d0fa58b7","line":211,"in_reply_to":"5aaed102_183dab88","updated":"2025-01-29 10:01:40.000000000","message":"Done","commit_id":"78af7433eb6b9dae334dcabfa14c99ca5ad5a6af"}],"src/openvpn/manage.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"09f404c85aba63e77660d51e458d719241a3f1cf","unresolved":true,"context_lines":[{"line_number":570,"context_line":"                        msg(M_CLIENT, \"SUCCESS: %d client(s) at address %s:%d:%s killed\","},{"line_number":571,"context_line":"                            n_killed,"},{"line_number":572,"context_line":"                            print_in_addr_t(addr, 0, \u0026gc),"},{"line_number":573,"context_line":"                            port, p3);"},{"line_number":574,"context_line":"                    }"},{"line_number":575,"context_line":"                    else"},{"line_number":576,"context_line":"                    {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"89921c64_ce4843fe","line":573,"updated":"2025-01-28 14:15:14.000000000","message":"not sure we should use `p3` here (what if a user sends \u0027foo\u0027?).\n\nAlso, proto traditionall gets printed in front (\"tcp:10.0.0.3:1194\") so we shouldn\u0027t start printing it at the end here...","commit_id":"3e56b25f5c61d14a2ea07466416a7f43337e399f"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"e8eab5dc22f820eb5a630d374eb303ef75df3ab2","unresolved":false,"context_lines":[{"line_number":570,"context_line":"                        msg(M_CLIENT, \"SUCCESS: %d client(s) at address %s:%d:%s killed\","},{"line_number":571,"context_line":"                            n_killed,"},{"line_number":572,"context_line":"                            print_in_addr_t(addr, 0, \u0026gc),"},{"line_number":573,"context_line":"                            port, p3);"},{"line_number":574,"context_line":"                    }"},{"line_number":575,"context_line":"                    else"},{"line_number":576,"context_line":"                    {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"3db554a6_f8736f38","line":573,"in_reply_to":"387f5a9f_83884c97","updated":"2025-01-28 15:07:20.000000000","message":"Done","commit_id":"3e56b25f5c61d14a2ea07466416a7f43337e399f"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"cf387f6af5c76c58a1b7d568f618d432979341ae","unresolved":true,"context_lines":[{"line_number":570,"context_line":"                        msg(M_CLIENT, \"SUCCESS: %d client(s) at address %s:%d:%s killed\","},{"line_number":571,"context_line":"                            n_killed,"},{"line_number":572,"context_line":"                            print_in_addr_t(addr, 0, \u0026gc),"},{"line_number":573,"context_line":"                            port, p3);"},{"line_number":574,"context_line":"                    }"},{"line_number":575,"context_line":"                    else"},{"line_number":576,"context_line":"                    {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"387f5a9f_83884c97","line":573,"in_reply_to":"89921c64_ce4843fe","updated":"2025-01-28 14:22:23.000000000","message":"passing \u0027foo\u0027 will lead to ascii2proto() returning -1, which in turn will lead to \"no client found\", so we won\u0027t hit this print","commit_id":"3e56b25f5c61d14a2ea07466416a7f43337e399f"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"df1edeceb6210fdbd411e67b55727bf434608bbf","unresolved":true,"context_lines":[{"line_number":561,"context_line":"            {"},{"line_number":562,"context_line":"                const int port \u003d atoi(p2);"},{"line_number":563,"context_line":"                const int proto \u003d (streq(p3, \"tcp\")) ? PROTO_TCP_SERVER : ascii2proto(p3);"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"                if ((port \u003e 0 \u0026\u0026 port \u003c 65536) \u0026\u0026 (proto \u003e 0 \u0026\u0026 proto \u003c PROTO_N))"},{"line_number":566,"context_line":"                {"},{"line_number":567,"context_line":"                    n_killed \u003d (*man-\u003epersist.callback.kill_by_addr)(man-\u003epersist.callback.arg, addr, port, proto);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"898e15ca_959b2a49","line":564,"updated":"2025-01-29 09:40:47.000000000","message":"As discussed in the management-notes.txt comment, I am convinced that it\u0027s more logical to do protocol first, so p1 -\u003e protocol, p2 -\u003e IP, p3 -\u003e port then.  Sorry again.\n\nWe do the msg() in that format already ;-)\n\nBesides this, the new version \u0026 error handling look acceptable (we discussed getting rid of ascii2proto() and just checking for \"udp\" or \"tcp\" here, but it does not make much of a difference).","commit_id":"78af7433eb6b9dae334dcabfa14c99ca5ad5a6af"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"8da3d7a943d46e3923018b46a8b68abffb0caa19","unresolved":false,"context_lines":[{"line_number":561,"context_line":"            {"},{"line_number":562,"context_line":"                const int port \u003d atoi(p2);"},{"line_number":563,"context_line":"                const int proto \u003d (streq(p3, \"tcp\")) ? PROTO_TCP_SERVER : ascii2proto(p3);"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"                if ((port \u003e 0 \u0026\u0026 port \u003c 65536) \u0026\u0026 (proto \u003e 0 \u0026\u0026 proto \u003c PROTO_N))"},{"line_number":566,"context_line":"                {"},{"line_number":567,"context_line":"                    n_killed \u003d (*man-\u003epersist.callback.kill_by_addr)(man-\u003epersist.callback.arg, addr, port, proto);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"22c82121_32db8a43","line":564,"in_reply_to":"898e15ca_959b2a49","updated":"2025-01-29 10:01:40.000000000","message":"Done","commit_id":"78af7433eb6b9dae334dcabfa14c99ca5ad5a6af"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"1e05ab2f17f45586bcee62f12370cb2cfd781ece","unresolved":true,"context_lines":[{"line_number":594,"context_line":"        else if (strlen(p1))"},{"line_number":595,"context_line":"        {"},{"line_number":596,"context_line":"            /* common name specified */"},{"line_number":597,"context_line":"            n_killed \u003d (*man-\u003epersist.callback.kill_by_cn)(man-\u003epersist.callback.arg, p2);"},{"line_number":598,"context_line":"            if (n_killed \u003e 0)"},{"line_number":599,"context_line":"            {"},{"line_number":600,"context_line":"                msg(M_CLIENT, \"SUCCESS: common name \u0027%s\u0027 found, %d client(s) killed\", p2, n_killed);"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"a30bd653_c1d4c73d","line":597,"updated":"2025-01-29 10:07:39.000000000","message":"Ah, no, not that one :-) for CN we only have p1","commit_id":"69c59cf0139cdd0bb201537e0d6611530d72ca16"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bb8f7b87c1131935ba9ad4df8b37bceea006c24d","unresolved":false,"context_lines":[{"line_number":594,"context_line":"        else if (strlen(p1))"},{"line_number":595,"context_line":"        {"},{"line_number":596,"context_line":"            /* common name specified */"},{"line_number":597,"context_line":"            n_killed \u003d (*man-\u003epersist.callback.kill_by_cn)(man-\u003epersist.callback.arg, p2);"},{"line_number":598,"context_line":"            if (n_killed \u003e 0)"},{"line_number":599,"context_line":"            {"},{"line_number":600,"context_line":"                msg(M_CLIENT, \"SUCCESS: common name \u0027%s\u0027 found, %d client(s) killed\", p2, n_killed);"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"1917e810_8df15a58","line":597,"in_reply_to":"a30bd653_c1d4c73d","updated":"2025-01-29 10:54:35.000000000","message":"Done","commit_id":"69c59cf0139cdd0bb201537e0d6611530d72ca16"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"1e05ab2f17f45586bcee62f12370cb2cfd781ece","unresolved":true,"context_lines":[{"line_number":597,"context_line":"            n_killed \u003d (*man-\u003epersist.callback.kill_by_cn)(man-\u003epersist.callback.arg, p2);"},{"line_number":598,"context_line":"            if (n_killed \u003e 0)"},{"line_number":599,"context_line":"            {"},{"line_number":600,"context_line":"                msg(M_CLIENT, \"SUCCESS: common name \u0027%s\u0027 found, %d client(s) killed\", p2, n_killed);"},{"line_number":601,"context_line":"            }"},{"line_number":602,"context_line":"            else"},{"line_number":603,"context_line":"            {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"47dd9eb5_409a4c6d","line":600,"updated":"2025-01-29 10:07:39.000000000","message":"too enthusiastic","commit_id":"69c59cf0139cdd0bb201537e0d6611530d72ca16"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bb8f7b87c1131935ba9ad4df8b37bceea006c24d","unresolved":false,"context_lines":[{"line_number":597,"context_line":"            n_killed \u003d (*man-\u003epersist.callback.kill_by_cn)(man-\u003epersist.callback.arg, p2);"},{"line_number":598,"context_line":"            if (n_killed \u003e 0)"},{"line_number":599,"context_line":"            {"},{"line_number":600,"context_line":"                msg(M_CLIENT, \"SUCCESS: common name \u0027%s\u0027 found, %d client(s) killed\", p2, n_killed);"},{"line_number":601,"context_line":"            }"},{"line_number":602,"context_line":"            else"},{"line_number":603,"context_line":"            {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"76fd57cc_1aede7fa","line":600,"in_reply_to":"47dd9eb5_409a4c6d","updated":"2025-01-29 10:54:35.000000000","message":"Done","commit_id":"69c59cf0139cdd0bb201537e0d6611530d72ca16"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"1e05ab2f17f45586bcee62f12370cb2cfd781ece","unresolved":true,"context_lines":[{"line_number":601,"context_line":"            }"},{"line_number":602,"context_line":"            else"},{"line_number":603,"context_line":"            {"},{"line_number":604,"context_line":"                msg(M_CLIENT, \"ERROR: common name \u0027%s\u0027 not found\", p2);"},{"line_number":605,"context_line":"            }"},{"line_number":606,"context_line":"        }"},{"line_number":607,"context_line":"        else"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"986c2548_b64f20f8","line":604,"updated":"2025-01-29 10:07:39.000000000","message":"and here","commit_id":"69c59cf0139cdd0bb201537e0d6611530d72ca16"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"bb8f7b87c1131935ba9ad4df8b37bceea006c24d","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            }"},{"line_number":602,"context_line":"            else"},{"line_number":603,"context_line":"            {"},{"line_number":604,"context_line":"                msg(M_CLIENT, \"ERROR: common name \u0027%s\u0027 not found\", p2);"},{"line_number":605,"context_line":"            }"},{"line_number":606,"context_line":"        }"},{"line_number":607,"context_line":"        else"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"1f0de4eb_2449a9e2","line":604,"in_reply_to":"986c2548_b64f20f8","updated":"2025-01-29 10:54:35.000000000","message":"Done","commit_id":"69c59cf0139cdd0bb201537e0d6611530d72ca16"}],"src/openvpn/mroute.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"09f404c85aba63e77660d51e458d719241a3f1cf","unresolved":true,"context_lines":[{"line_number":438,"context_line":""},{"line_number":439,"context_line":"            case MR_ADDR_IPV6:"},{"line_number":440,"context_line":"            {"},{"line_number":441,"context_line":"                if ((maddr.type \u0026 MR_WITH_PROTO))"},{"line_number":442,"context_line":"                {"},{"line_number":443,"context_line":"                    buf_printf(\u0026out, \"%s:\", proto2ascii(maddr.proto, AF_INET6, false));"},{"line_number":444,"context_line":"                }"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"75d367d4_1b83c9e4","line":441,"updated":"2025-01-28 14:15:14.000000000","message":"double `(())` braces...","commit_id":"3e56b25f5c61d14a2ea07466416a7f43337e399f"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"e8eab5dc22f820eb5a630d374eb303ef75df3ab2","unresolved":false,"context_lines":[{"line_number":438,"context_line":""},{"line_number":439,"context_line":"            case MR_ADDR_IPV6:"},{"line_number":440,"context_line":"            {"},{"line_number":441,"context_line":"                if ((maddr.type \u0026 MR_WITH_PROTO))"},{"line_number":442,"context_line":"                {"},{"line_number":443,"context_line":"                    buf_printf(\u0026out, \"%s:\", proto2ascii(maddr.proto, AF_INET6, false));"},{"line_number":444,"context_line":"                }"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"9c991771_22e29971","line":441,"in_reply_to":"75d367d4_1b83c9e4","updated":"2025-01-28 15:07:20.000000000","message":"Done","commit_id":"3e56b25f5c61d14a2ea07466416a7f43337e399f"}]}
