| Index: gerrit_util.py
 | 
| diff --git a/gerrit_util.py b/gerrit_util.py
 | 
| index 691daf9182989a93339e8ed4245b4e8f326713e1..bafd60a178acb0860ffb763237feb7df3208feff 100755
 | 
| --- a/gerrit_util.py
 | 
| +++ b/gerrit_util.py
 | 
| @@ -9,6 +9,7 @@ https://gerrit-review.googlesource.com/Documentation/rest-api.html
 | 
|  """
 | 
|  
 | 
|  import base64
 | 
| +import cookielib
 | 
|  import httplib
 | 
|  import json
 | 
|  import logging
 | 
| @@ -91,6 +92,7 @@ class NetrcAuthenticator(Authenticator):
 | 
|  
 | 
|    def __init__(self):
 | 
|      self.netrc = self._get_netrc()
 | 
| +    self.gitcookies = self._get_gitcookies()
 | 
|  
 | 
|    @staticmethod
 | 
|    def _get_netrc():
 | 
| @@ -114,8 +116,39 @@ class NetrcAuthenticator(Authenticator):
 | 
|          raise
 | 
|        return netrc.netrc(os.devnull)
 | 
|  
 | 
| +  @staticmethod
 | 
| +  def _get_gitcookies():
 | 
| +    gitcookies = {}
 | 
| +    path = os.path.join(os.environ['HOME'], '.gitcookies')
 | 
| +    try:
 | 
| +      f = open(path, 'rb')
 | 
| +    except IOError:
 | 
| +      return gitcookies
 | 
| +
 | 
| +    with f:
 | 
| +      for line in f:
 | 
| +        try:
 | 
| +          fields = line.strip().split('\t')
 | 
| +          if line.strip().startswith('#') or len(fields) != 7:
 | 
| +            continue
 | 
| +          domain, xpath, key, value = fields[0], fields[2], fields[5], fields[6]
 | 
| +          if xpath == '/' and key == 'o':
 | 
| +            login, secret_token = value.split('=', 1)
 | 
| +            gitcookies[domain] = (login, secret_token)
 | 
| +        except (IndexError, ValueError, TypeError) as exc:
 | 
| +          logging.warning(exc)
 | 
| +
 | 
| +    return gitcookies
 | 
| +
 | 
|    def get_auth_header(self, host):
 | 
| -    auth = self.netrc.authenticators(host)
 | 
| +    auth = None
 | 
| +    for domain, creds in self.gitcookies.iteritems():
 | 
| +      if cookielib.domain_match(host, domain):
 | 
| +        auth = (creds[0], None, creds[1])
 | 
| +        break
 | 
| +
 | 
| +    if not auth:
 | 
| +      auth = self.netrc.authenticators(host)
 | 
|      if auth:
 | 
|        return 'Basic %s' % (base64.b64encode('%s:%s' % (auth[0], auth[2])))
 | 
|      return None
 | 
| 
 |