[tor-commits] [tor/main] Don't kill managed proxy on method error

nickm at torproject.org nickm at torproject.org
Tue Nov 23 16:28:38 UTC 2021


commit 809b636b6ec9039262c1feb874a9d167046bf515
Author: Cecylia Bocovich <cohosh at torproject.org>
Date:   Fri Nov 19 14:50:36 2021 -0500

    Don't kill managed proxy on method error
    
    Some PT applications support more than one transport. For example,
    obfs4proxy supports obfs4, obfs3, and meek. If one or more transports
    specified in the torrc file are supported, we shouldn't kill the managed
    proxy on a {C,S}METHOD-ERROR. Instead, we should log a warning.
    
    We were already logging warnings on method errors. This change just
    makes sure that the managed proxy isn't killed, and then if no
    transports are configured for the managed proxy, bumps the log level up
    from a notice to a warning.
    
    Closes #7362
---
 src/feature/client/transports.c | 6 +++---
 src/test/test_pt.c              | 4 ++++
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/feature/client/transports.c b/src/feature/client/transports.c
index 167beb96c6..5eda63ce8e 100644
--- a/src/feature/client/transports.c
+++ b/src/feature/client/transports.c
@@ -843,7 +843,7 @@ handle_methods_done(const managed_proxy_t *mp)
   tor_assert(mp->transports);
 
   if (smartlist_len(mp->transports) == 0)
-    log_notice(LD_GENERAL, "Managed proxy '%s' was spawned successfully, "
+    log_warn(LD_GENERAL, "Managed proxy '%s' was spawned successfully, "
                "but it didn't launch any pluggable transport listeners!",
                mp->argv[0]);
 
@@ -904,13 +904,13 @@ handle_proxy_line(const char *line, managed_proxy_t *mp)
       goto err;
 
     parse_client_method_error(line);
-    goto err;
+    return;
   } else if (!strcmpstart(line, PROTO_SMETHOD_ERROR)) {
     if (mp->conf_state != PT_PROTO_ACCEPTING_METHODS)
       goto err;
 
     parse_server_method_error(line);
-    goto err;
+    return;
   } else if (!strcmpstart(line, PROTO_CMETHOD)) {
     if (mp->conf_state != PT_PROTO_ACCEPTING_METHODS)
       goto err;
diff --git a/src/test/test_pt.c b/src/test/test_pt.c
index 27e74d5ebf..07c5032933 100644
--- a/src/test/test_pt.c
+++ b/src/test/test_pt.c
@@ -233,6 +233,10 @@ test_pt_protocol(void *arg)
   handle_proxy_line(line, mp);
   tt_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
 
+  strlcpy(line,"CMETHOD-ERROR fakename not supported",sizeof(line));
+  handle_proxy_line(line, mp);
+  tt_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
+
   strlcpy(line,"CMETHODS DONE",sizeof(line));
   handle_proxy_line(line, mp);
   tt_assert(mp->conf_state == PT_PROTO_CONFIGURED);





More information about the tor-commits mailing list