def print_version(url): scheme, netloc, path, params, query, fragment = urllib_parse_urlparse(url) if scheme == 'http': conn = http_client_HTTPConnection(netloc) elif scheme == 'https': conn = http_client_HTTPSConnection(netloc) else: print('ERROR: this script only supports "http" and "https" URLs') sys.exit(1) conn.putrequest('OPTIONS', path) conn.putheader('Host', netloc) conn.endheaders() resp = conn.getresponse() status, msg, server = (resp.status, resp.msg, resp.getheader('Server')) conn.close() # Handle "OK" and Handle redirect requests, if requested resource # resides temporarily under a different URL if not server: print('ERROR: could not determine version - missing Server header') else: res = re.search('.*(SVN/[\d.]+).*', server) if res != None: print('Possible version: %s' % res.group(1)) else: print('NOTICE: version unknown')
def print_version(url): scheme, netloc, path, params, query, fragment = urllib_parse_urlparse(url) if scheme == 'http': conn = http_client_HTTPConnection(netloc) elif scheme == 'https': conn = http_client_HTTPSConnection(netloc) else: print('ERROR: this script only supports "http" and "https" URLs') sys.exit(1) conn.putrequest('OPTIONS', path) conn.putheader('Host', netloc) conn.endheaders() resp = conn.getresponse() status, msg, server = (resp.status, resp.msg, resp.getheader('Server')) conn.close() # 1) Handle "OK" (200) # 2) Handle redirect requests (302), if requested resource # resides temporarily under a different URL # 3) Handle authorization (401), if server requests for authorization # ignore it, since we are interested in server version only if status != 200 and status != 302 and status != 401: print('ERROR: bad status response: %s %s' % (status, msg)) sys.exit(1) if not server: # a missing Server: header. Bad, bad server! Go sit in the corner! print('WARNING: missing header') else: for part in server.split(' '): if part[:4] == 'SVN/': print(part[4:]) break else: # the server might be configured to hide this information, or it # might not have mod_dav_svn loaded into it. print('NOTICE: version unknown')
def create_conn(baseurl,conn=None): """(baseurl,conn) --- Takes a protocol://site:port/address url, and an optional connection. If connection is already active, it is passed on. baseurl is reduced to address and is returned in tuple (conn,address)""" warnings.warn("portage.getbinpkg.create_conn() is deprecated", DeprecationWarning, stacklevel=2) parts = baseurl.split("://",1) if len(parts) != 2: raise ValueError(_("Provided URI does not " "contain protocol identifier. '%s'") % baseurl) protocol,url_parts = parts del parts url_parts = url_parts.split("/") host = url_parts[0] if len(url_parts) < 2: address = "/" else: address = "/"+"/".join(url_parts[1:]) del url_parts userpass_host = host.split("@",1) if len(userpass_host) == 1: host = userpass_host[0] userpass = ["anonymous"] else: host = userpass_host[1] userpass = userpass_host[0].split(":") del userpass_host if len(userpass) > 2: raise ValueError(_("Unable to interpret username/password provided.")) elif len(userpass) == 2: username = userpass[0] password = userpass[1] elif len(userpass) == 1: username = userpass[0] password = None del userpass http_headers = {} http_params = {} if username and password: try: encodebytes = base64.encodebytes except AttributeError: # Python 2 encodebytes = base64.encodestring http_headers = { b"Authorization": "Basic %s" % \ encodebytes(_unicode_encode("%s:%s" % (username, password))).replace( b"\012", b"" ), } if not conn: if protocol == "https": # Use local import since https typically isn't needed, and # this way we can usually avoid triggering the global scope # http.client ImportError handler (like during stage1 -> stage2 # builds where USE=ssl is disabled for python). try: try: from http.client import HTTPSConnection as http_client_HTTPSConnection except ImportError: from httplib import HTTPSConnection as http_client_HTTPSConnection except ImportError: raise NotImplementedError( _("python must have ssl enabled for https support")) conn = http_client_HTTPSConnection(host) elif protocol == "http": conn = http_client_HTTPConnection(host) elif protocol == "ftp": passive = 1 if(host[-1] == "*"): passive = 0 host = host[:-1] conn = ftplib.FTP(host) if password: conn.login(username,password) else: sys.stderr.write(colorize("WARN", _(" * No password provided for username"))+" '%s'" % \ (username,) + "\n\n") conn.login(username) conn.set_pasv(passive) conn.set_debuglevel(0) elif protocol == "sftp": try: import paramiko except ImportError: raise NotImplementedError( _("paramiko must be installed for sftp support")) t = paramiko.Transport(host) t.connect(username=username, password=password) conn = paramiko.SFTPClient.from_transport(t) else: raise NotImplementedError(_("%s is not a supported protocol.") % protocol) return (conn,protocol,address, http_params, http_headers)
def create_conn(baseurl,conn=None): """(baseurl,conn) --- Takes a protocol://site:port/address url, and an optional connection. If connection is already active, it is passed on. baseurl is reduced to address and is returned in tuple (conn,address)""" parts = baseurl.split("://",1) if len(parts) != 2: raise ValueError(_("Provided URI does not " "contain protocol identifier. '%s'") % baseurl) protocol,url_parts = parts del parts url_parts = url_parts.split("/") host = url_parts[0] if len(url_parts) < 2: address = "/" else: address = "/"+"/".join(url_parts[1:]) del url_parts userpass_host = host.split("@",1) if len(userpass_host) == 1: host = userpass_host[0] userpass = ["anonymous"] else: host = userpass_host[1] userpass = userpass_host[0].split(":") del userpass_host if len(userpass) > 2: raise ValueError(_("Unable to interpret username/password provided.")) elif len(userpass) == 2: username = userpass[0] password = userpass[1] elif len(userpass) == 1: username = userpass[0] password = None del userpass http_headers = {} http_params = {} if username and password: http_headers = { "Authorization": "Basic %s" % base64.encodestring("%s:%s" % (username, password)).replace( "\012", "" ), } if not conn: if protocol == "https": conn = http_client_HTTPSConnection(host) elif protocol == "http": conn = http_client_HTTPConnection(host) elif protocol == "ftp": passive = 1 if(host[-1] == "*"): passive = 0 host = host[:-1] conn = ftplib.FTP(host) if password: conn.login(username,password) else: sys.stderr.write(colorize("WARN", _(" * No password provided for username"))+" '%s'" % \ (username,) + "\n\n") conn.login(username) conn.set_pasv(passive) conn.set_debuglevel(0) elif protocol == "sftp": try: import paramiko except ImportError: raise NotImplementedError( _("paramiko must be installed for sftp support")) t = paramiko.Transport(host) t.connect(username=username, password=password) conn = paramiko.SFTPClient.from_transport(t) else: raise NotImplementedError(_("%s is not a supported protocol.") % protocol) return (conn,protocol,address, http_params, http_headers)
def create_conn(baseurl, conn=None): """(baseurl,conn) --- Takes a protocol://site:port/address url, and an optional connection. If connection is already active, it is passed on. baseurl is reduced to address and is returned in tuple (conn,address)""" parts = baseurl.split("://", 1) if len(parts) != 2: raise ValueError( _("Provided URI does not " "contain protocol identifier. '%s'") % baseurl) protocol, url_parts = parts del parts url_parts = url_parts.split("/") host = url_parts[0] if len(url_parts) < 2: address = "/" else: address = "/" + "/".join(url_parts[1:]) del url_parts userpass_host = host.split("@", 1) if len(userpass_host) == 1: host = userpass_host[0] userpass = ["anonymous"] else: host = userpass_host[1] userpass = userpass_host[0].split(":") del userpass_host if len(userpass) > 2: raise ValueError(_("Unable to interpret username/password provided.")) elif len(userpass) == 2: username = userpass[0] password = userpass[1] elif len(userpass) == 1: username = userpass[0] password = None del userpass http_headers = {} http_params = {} if username and password: http_headers = { "Authorization": "Basic %s" % base64.encodestring("%s:%s" % (username, password)).replace("\012", ""), } if not conn: if protocol == "https": conn = http_client_HTTPSConnection(host) elif protocol == "http": conn = http_client_HTTPConnection(host) elif protocol == "ftp": passive = 1 if (host[-1] == "*"): passive = 0 host = host[:-1] conn = ftplib.FTP(host) if password: conn.login(username, password) else: sys.stderr.write(colorize("WARN", _(" * No password provided for username"))+" '%s'" % \ (username,) + "\n\n") conn.login(username) conn.set_pasv(passive) conn.set_debuglevel(0) elif protocol == "sftp": try: import paramiko except ImportError: raise NotImplementedError( _("paramiko must be installed for sftp support")) t = paramiko.Transport(host) t.connect(username=username, password=password) conn = paramiko.SFTPClient.from_transport(t) else: raise NotImplementedError( _("%s is not a supported protocol.") % protocol) return (conn, protocol, address, http_params, http_headers)