public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: Mark Kubacki <wmark@hurrikane.de>
To: gentoo-portage-dev@lists.gentoo.org
Cc: W-Mark Kubacki <wmark@hurrikane.de>
Subject: [gentoo-portage-dev] [PATCH 2/3] Send output of ```emerge --version``` as User-Agent HTTP-header
Date: Wed, 14 Aug 2013 22:10:39 +0200	[thread overview]
Message-ID: <1376511040-15874-3-git-send-email-wmark@hurrikane.de> (raw)
In-Reply-To: <1376511040-15874-1-git-send-email-wmark@hurrikane.de>

From: W-Mark Kubacki <wmark@hurrikane.de>

The remote server logs will read like this:
  2001:db8::4 - - [14/Aug/2013:20:58:02 +0200]
  "GET /Packages HTTP/1.1" 304 0 "-"
  "Gentoo Portage 2.1.13.7 (default/linux/amd64/13.0, gcc-4.6.2,
   glibc-2.18, 3.9.0-rc8-mark-signed+ x86_64)"

This will enable administrators to…
• check if a machine uses the correct binhost
• decide when new server-side features can be enabled (Portage ver.)
• notify the machine's administrator of malconfigurations
  (such as wrong GCC libraries, profile, obsolete kernel)

Construction of this header happens before "Packages" are fetched
from a remote binhost.

Signed-off-by: W-Mark Kubacki <wmark@hurrikane.de>
---
 pym/portage/dbapi/bintree.py | 8 +++++++-
 pym/portage/util/_urlopen.py | 4 ++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index 61ac6b5..44ee8e6 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -20,6 +20,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
 	'portage.util.listdir:listdir',
 	'portage.util._urlopen:urlopen@_urlopen',
 	'portage.versions:best,catpkgsplit,catsplit,_pkg_str',
+	'_emerge.actions:load_emerge_config,getportageversion',
 )
 
 from portage.cache.mappings import slot_dict_class
@@ -892,8 +893,13 @@ class binarytree(object):
 				# Don't use urlopen for https, since it doesn't support
 				# certificate/hostname verification (bug #469888).
 				if parsed_url.scheme not in ('https',):
+					trees = load_emerge_config().trees
+					user_agent = "Gentoo "+getportageversion(self.settings["PORTDIR"], None,
+							self.settings.profile_path, self.settings["CHOST"],
+							trees[self.settings['EROOT']]["vartree"].dbapi)
 					try:
-						f = _urlopen(url, if_modified_since=local_timestamp)
+						f = _urlopen(url, user_agent=user_agent,
+							if_modified_since=local_timestamp)
 						if hasattr(f, 'headers') and f.headers.get('timestamp', ''):
 							remote_timestamp = f.headers.get('timestamp')
 					except IOError as err:
diff --git a/pym/portage/util/_urlopen.py b/pym/portage/util/_urlopen.py
index 798e7b4..9876f29 100644
--- a/pym/portage/util/_urlopen.py
+++ b/pym/portage/util/_urlopen.py
@@ -26,7 +26,7 @@ if sys.hexversion >= 0x3000000:
 #  and the file-'mtime'
 TIMESTAMP_TOLERANCE=5
 
-def urlopen(url, if_modified_since=None):
+def urlopen(url, user_agent=None, if_modified_since=None):
 	parse_result = urllib_parse.urlparse(url)
 	if parse_result.scheme not in ("http", "https"):
 		return _urlopen(url)
@@ -35,7 +35,7 @@ def urlopen(url, if_modified_since=None):
 		url = urllib_parse.urlunparse((parse_result.scheme, netloc, parse_result.path, parse_result.params, parse_result.query, parse_result.fragment))
 		password_manager = urllib_request.HTTPPasswordMgrWithDefaultRealm()
 		request = urllib_request.Request(url)
-		request.add_header('User-Agent', 'Gentoo Portage '+VERSION)
+		request.add_header('User-Agent', user_agent or 'Gentoo Portage '+VERSION)
 		if if_modified_since:
 			request.add_header('If-Modified-Since', _timestamp_to_http(if_modified_since))
 		if parse_result.username is not None:
-- 
1.8.3.2



  parent reply	other threads:[~2013-08-14 20:11 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-14 20:10 [gentoo-portage-dev] [PATCH 0/3] Implement a more verbose User-Agent HTTP-header Mark Kubacki
2013-08-14 20:10 ` [gentoo-portage-dev] [PATCH 1/3] Send exact version with " Mark Kubacki
2013-08-14 20:10 ` Mark Kubacki [this message]
2013-08-15  6:25   ` [gentoo-portage-dev] [PATCH 2/3] Send output of ```emerge --version``` as " Zac Medico
2013-08-14 20:10 ` [gentoo-portage-dev] [PATCH 3/3] Add CPU model name to output of getportageversion as fifth element Mark Kubacki
2013-08-14 20:27   ` [gentoo-portage-dev] " Mark Kubacki
2013-08-15  8:00   ` [gentoo-portage-dev] " Fabian Groffen
2013-08-24 22:39     ` Mike Frysinger
2013-08-15 10:58   ` Alexander Berntsen
2013-08-24 22:38     ` Mike Frysinger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1376511040-15874-3-git-send-email-wmark@hurrikane.de \
    --to=wmark@hurrikane.de \
    --cc=gentoo-portage-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox