[oe-commits] Stefan Stanacar : scripts/send-error-report: simple hack to use proxy from the enviroment

git at git.openembedded.org git at git.openembedded.org
Wed Apr 23 10:44:19 UTC 2014


Module: openembedded-core.git
Branch: master
Commit: a8511ee80246b4e2caa353b87f4b586f1539e6d4
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=a8511ee80246b4e2caa353b87f4b586f1539e6d4

Author: Stefan Stanacar <stefanx.stanacar at intel.com>
Date:   Fri Apr 11 20:49:14 2014 +0300

scripts/send-error-report: simple hack to use proxy from the enviroment

People behind a proxy couldn't send an error report to an upstream server,
this should fix the issue if they use a proxy that doesn't require authentication,
or one that uses basic http authentication and it's correctly exported in the enviroment.

Signed-off-by: Stefan Stanacar <stefanx.stanacar at intel.com>
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>

---

 scripts/send-error-report | 43 ++++++++++++++++++++++++++++++++++++-------
 1 file changed, 36 insertions(+), 7 deletions(-)

diff --git a/scripts/send-error-report b/scripts/send-error-report
index d23ae27..3d1f7a4 100755
--- a/scripts/send-error-report
+++ b/scripts/send-error-report
@@ -7,7 +7,39 @@
 
 
 
-import httplib, urllib, os, sys, json
+import httplib, urllib, os, sys, json, base64
+from urllib2 import _parse_proxy as parseproxy
+
+
+def handle_connection(server, data):
+    params = urllib.urlencode({'data': data})
+    headers = {"Content-type": "application/json"}
+    proxyrequired = False
+    if os.environ.get("http_proxy") or os.environ.get("HTTP_PROXY"):
+        proxyrequired = True
+        # we need to check that the server isn't a local one, as in no_proxy
+        try:
+            temp = httplib.HTTPConnection(server, strict=True, timeout=5)
+            temp.request("GET", "/")
+            tempres = temp.getresponse()
+            if tempres.status == 200:
+                proxyrequired = False
+            temp.close()
+        except:
+            pass
+
+    if proxyrequired:
+        proxy = parseproxy(os.environ.get("http_proxy") or os.environ.get("HTTP_PROXY"))
+        if proxy[1] and proxy[2]:
+            auth = base64.encodestring("%s:%s" % (proxy[1], proxy[2]))
+            headers["Authorization"] = "Basic %s" % auth
+        conn = httplib.HTTPConnection(proxy[3])
+        conn.request("POST", "http://%s/ClientPost/" % server, params, headers)
+    else:
+        conn = httplib.HTTPConnection(server)
+        conn.request("POST", "/ClientPost/", params, headers)
+
+    return conn
 
 
 def sendData(json_file, server):
@@ -45,10 +77,7 @@ def sendData(json_file, server):
             return
 
         try:
-            params = urllib.urlencode({'data': data})
-            headers = {"Content-type": "application/json"}
-            conn = httplib.HTTPConnection(server)
-            conn.request("POST", "/ClientPost/", params, headers)
+            conn = handle_connection(server, data)
             response = conn.getresponse()
             print response.status, response.reason
             res = response.read()
@@ -59,8 +88,8 @@ def sendData(json_file, server):
                 with open("%s.response.html" % json_file, "w") as f:
                     f.write(res)
             conn.close()
-        except:
-                print("Server connection failed")
+        except Exception as e:
+                print("Server connection failed: %s" % e)
 
     else:
         print("No data file found.")



More information about the Openembedded-commits mailing list