#5856 closed defect (fixed)
Image() URLs fail due to lack of ATTACHMENT_VIEW permissions, crashes WikiToPDF
| Reported by: | Owned by: | Ryan J Ollos | |
|---|---|---|---|
| Priority: | highest | Component: | TracWikiToPdfPlugin |
| Severity: | critical | Keywords: | |
| Cc: | Trac Release: | 0.11 |
Description
I think this one is more a Trac flaw, due to their addition of more granular image access.
But it does result in breaking this plugin. If you upload an image to the page and link using the short form recommended in the wiki formatting guide, the WikiToPDF plugin crashes.
A workaround is to explicitly specify wiki:PageName:MyImage.png?
Although this is a bit convoluted. I'm not sure what the solution is, just documenting it here for other users of the plugin.
Attachments (0)
Change History (7)
comment:1 Changed 15 years ago by
| Priority: | normal → highest |
|---|---|
| Severity: | normal → critical |
comment:2 Changed 15 years ago by
I still get the following error: (I think this is due to the 401 - unauthorized) can you point me towards a solution? is this due to missconfiguration, or a bug?
(i had to replace all occurences of "http" with "tthp" for beeing able to post this)
# File "build/bdist.linux-i686/egg/trac/web/main.py", line 513, in _dispatch_request
Local variables:
NameValue
dispatcher File<trac.web.main.RequestDispatcher object at 0xa6811cc>
e FileEOFError('EOF when reading a line',)
env File<trac.env.Environment object at 0xa1da6ac>
env_error FileNone
req File<Request "GET '/wiki/test_mediawiki'">
resp File[]
# File "build/bdist.linux-i686/egg/trac/web/main.py", line 235, in dispatch
Local variables:
NameValueValue
chosen_handler File<trac.wiki.web_ui.WikiModule object at 0xa68ed0c>
chrome File<trac.web.chrome.Chrome object at 0xa6813ec>
err File(<type 'exceptions.EOFError'>, EOFError('EOF when reading a line',), ...
handler File<trac.wiki.web_ui.WikiModule object at 0xa68ed0c>
req File<Request "GET '/wiki/test_mediawiki'">
self File<trac.web.main.RequestDispatcher object at 0xa6811cc>
# File "build/bdist.linux-i686/egg/trac/wiki/web_ui.py", line 172, in process_request
Local variables:
NameValueValue
action File'view'
format Fileu'pdf'
old_version FileNone
page File<trac.wiki.model.WikiPage object at 0xa6492ec>
pagename Fileu'test_mediawiki'
req File<Request "GET '/wiki/test_mediawiki'">
self File<trac.wiki.web_ui.WikiModule object at 0xa68ed0c>
version FileNone
versioned_page File<trac.wiki.model.WikiPage object at 0xa68102c>
# File "build/bdist.linux-i686/egg/trac/mimeview/api.py", line 982, in send_converted
Local variables:
NameValueValue
RequestDone File<class 'trac.web.api.RequestDone'>
content Fileu"{{{\r\n#!mediawiki\r\n\r\n__TOC__\r\n\r\n= 1 =\r\n== 1.1 ==\r\n== 1.2 ...
filename Fileu'test_mediawiki'
in_type File'text/x-trac-wiki'
req File<Request "GET '/wiki/test_mediawiki'">
selector Fileu'pdf'
self File<trac.mimeview.api.Mimeview object at 0xa67ee0c>
# File "build/bdist.linux-i686/egg/trac/mimeview/api.py", line 681, in convert_content
Local variables:
NameValueValue
c File('pdf', 'PDF', 'pdf', 'text/x-trac-wiki', 'application/pdf', 7, ...
candidates File[('pdf', 'PDF', 'pdf', 'text/x-trac-wiki', 'application/pdf', 7, ...
ck File'pdf'
content Fileu"{{{\r\n#!mediawiki\r\n\r\n__TOC__\r\n\r\n= 1 =\r\n== 1.1 ==\r\n== 1.2 ...
converter File<wikitopdf.wikitopdf.WikiToPdfPage object at 0xa6830cc>
ext File'pdf'
filename FileNone
full_mimetype File'text/x-trac-wiki'
input_mimettype File'text/x-trac-wiki'
key Fileu'pdf'
mimetype File'text/x-trac-wiki'
name File'PDF'
output_mimetype File'application/pdf'
quality File7
req File<Request "GET '/wiki/test_mediawiki'">
self File<trac.mimeview.api.Mimeview object at 0xa67ee0c>
url FileNone
# File "build/bdist.linux-x86_64/egg/wikitopdf/wikitopdf.py", line 224, in convert_content
Local variables:
NameValueValue
base_dir Fileu'/var/lib/trac/demo/htdocs'
codepage Fileu'iso-8859-15'
input_type File'text/x-trac-wiki'
output_type File'pdf'
req File<Request "GET '/wiki/test_mediawiki'">
self File<wikitopdf.wikitopdf.WikiToPdfPage object at 0xa6830cc>
text Fileu"{{{\r\n#!mediawiki\r\n\r\n__TOC__\r\n\r\n= 1 =\r\n== 1.1 ==\r\n== 1.2 ...
# File "build/bdist.linux-x86_64/egg/wikitopdf/wikitopdf.py", line 94, in wiki_to_pdf
Local variables:
NameValueValue
addrpos File1201
base_dir Fileu'/var/lib/trac/demo/htdocs'
codepage Fileu'iso-8859-15'
env File<trac.env.Environment object at 0xa1da6ac>
file File<closed file '<fdopen>', mode 'w' at 0xa7a08d8>
imgcounter File0
imgpos File1185
newimg Fileu'/var/lib/trac/demo/wikitopdf/167a_/0_r-Mq2S'
page Fileu'<table id="toc" class="toc" summary="Contents"><tr><td><div ...
r File<_sre.SRE_Pattern object at 0xa78cd40>
req File<Request "GET '/wiki/test_mediawiki'">
text Fileu"{{{\r\n#!mediawiki\r\n\r\n__TOC__\r\n\r\n= 1 =\r\n== 1.1 ==\r\n== 1.2 ...
theimg Fileu'tthp//trac/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd ...
thepos File85
tmp_dir Fileu'/var/lib/trac/demo/wikitopdf/167a_'
tracuri Fileu'tthp//trac'
# File "/usr/lib/python2.5/urllib.py", line 89, in urlretrieve
Code fragment:
Line
84return opener.open(url, data)
85def urlretrieve(url, filename=None, reporthook=None, data=None):
86global _urlopener
87if not _urlopener:
8859_urlopener = FancyURLopener()
89return _urlopener.retrieve(url, filename, reporthook, data)
90def urlcleanup():
91if _urlopener:
92_urlopener.cleanup()
93
94# exception raised when downloaded size does not match content-length
Local variables:
NameValueValue
data FileNone
filename Fileu'/var/lib/trac/demo/wikitopdf/167a_/0_r-Mq2S'
reporthook FileNone
url Fileu'tthp//trac/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd ...
# File "/usr/lib/python2.5/urllib.py", line 222, in retrieve
Code fragment:
Line
217hdrs = fp.info()
218del fp
219return url2pathname(splithost(url1)[1]), hdrs
220except IOError, msg:
221pass
222fp = self.open(url, data)
223headers = fp.info()
224if filename:
225tfp = open(filename, 'wb')
226else:
227import tempfile
Local variables:
NameValueValue
data FileNone
filename Fileu'/var/lib/trac/demo/wikitopdf/167a_/0_r-Mq2S'
reporthook FileNone
self File<urllib.FancyURLopener instance at 0xa68120c>
type File'http'
url File'tthp//trac/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd9 ...
url1 File'//trac/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd94868e ...
# File "/usr/lib/python2.5/urllib.py", line 190, in open
Code fragment:
Line
185return self.open_unknown_proxy(proxy, fullurl, data)
186else:
187return self.open_unknown(fullurl, data)
188try:
189if data is None:
190return getattr(self, name)(url)
191else:
192return getattr(self, name)(url, data)
193except socket.error, msg:
194raise IOError, ('socket error', msg), sys.exc_info()[2]
195
Local variables:
NameValueValue
data FileNone
fullurl File'tthp//trac/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd9 ...
name File'open_http'
proxy FileNone
self File<urllib.FancyURLopener instance at 0xa68120c>
url File'//trac/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd94868e ...
urltype File'http'
# File "/usr/lib/python2.5/urllib.py", line 338, in open_http
Code fragment:
Line
333fp = h.getfile()
334if errcode == 200:
335return addinfourl(fp, headers, "tthp" + url)
336else:
337if data is None:
338return self.http_error(url, fp, errcode, errmsg, headers)
339else:
340return self.http_error(url, fp, errcode, errmsg, headers, data)
341
342def http_error(self, url, fp, errcode, errmsg, headers, data=None):
343"""Handle http errors.
Local variables:
NameValueValue
args File('User-Agent', 'Python-urllib/1.17')
auth FileNone
data FileNone
errcode File401
errmsg File'Authorization Required'
fp File<socket._fileobject object at 0xa7a59cc>
h File<httplib.HTTP instance at 0xa68a7ac>
headers File<httplib.HTTPMessage instance at 0xa68aaac>
host File'trac'
httplib File<module 'httplib' from '/usr/lib/python2.5/httplib.pyc'>
proxy_auth FileNone
proxy_passwd FileNone
realhost File'trac'
selector File'/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd94868e1c.png ...
self File<urllib.FancyURLopener instance at 0xa68120c>
url File'//trac/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd94868e ...
user_passwd FileNone
# File "/usr/lib/python2.5/urllib.py", line 351, in http_error
Code fragment:
Line
346# First check if there's a specific handler for this error
347name = 'http_error_%d' % errcode
348if hasattr(self, name):
349method = getattr(self, name)
350if data is None:
351result = method(url, fp, errcode, errmsg, headers)
352else:
353result = method(url, fp, errcode, errmsg, headers, data)
354if result: return result
355return self.http_error_default(url, fp, errcode, errmsg, headers)
356
Local variables:
NameValueValue
data FileNone
errcode File401
errmsg File'Authorization Required'
fp File<socket._fileobject object at 0xa7a59cc>
headers File<httplib.HTTPMessage instance at 0xa68aaac>
method File<bound method FancyURLopener.http_error_401 of <urllib.FancyURLopener ...
name File'http_error_401'
self File<urllib.FancyURLopener instance at 0xa68120c>
url File'//trac/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd94868e ...
# File "/usr/lib/python2.5/urllib.py", line 680, in http_error_401
Code fragment:
Line
675if scheme.lower() != 'basic':
676URLopener.http_error_default(self, url, fp,
677errcode, errmsg, headers)
678name = 'retry_' + self.type + '_basic_auth'
679if data is None:
680return getattr(self,name)(url, realm)
681else:
682return getattr(self,name)(url, realm, data)
683
684def http_error_407(self, url, fp, errcode, errmsg, headers, data=None):
685"""Error 407 -- proxy authentication required.
Local variables:
NameValueValue
data FileNone
errcode File401
errmsg File'Authorization Required'
fp File<socket._fileobject object at 0xa7a59cc>
headers File<httplib.HTTPMessage instance at 0xa68aaac>
match File<_sre.SRE_Match object at 0xa7a09b0>
name File'retry_http_basic_auth'
re File<module 're' from '/usr/lib/python2.5/re.pyc'>
realm File'Trac Project'
scheme File'Basic'
self File<urllib.FancyURLopener instance at 0xa68120c>
stuff File'Basic realm="Trac Project"'
url File'//trac/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd94868e ...
# File "/usr/lib/python2.5/urllib.py", line 744, in retry_http_basic_auth
Code fragment:
Line
739
740def retry_http_basic_auth(self, url, realm, data=None):
741host, selector = splithost(url)
742i = host.find('@') + 1
743host = host[i:]
744user, passwd = self.get_user_passwd(host, realm, i)
745if not (user or passwd): return None
746host = quote(user, safe='') + ':' + quote(passwd, safe='') + '@' + host
747newurl = 'tthp//' + host + selector
748if data is None:
749return self.open(newurl)
Local variables:
NameValueValue
data FileNone
host File'trac'
i File0
realm File'Trac Project'
selector File'/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd94868e1c.png ...
self File<urllib.FancyURLopener instance at 0xa68120c>
url File'//trac/projects/demo/login/tracmath/da1c76cfc5919c0aea6d9c58c65037cd94868e ...
# File "/usr/lib/python2.5/urllib.py", line 773, in get_user_passwd
Code fragment:
Line
768if key in self.auth_cache:
769if clear_cache:
770del self.auth_cache[key]
771else:
772return self.auth_cache[key]
773user, passwd = self.prompt_user_passwd(host, realm)
774if user or passwd: self.auth_cache[key] = (user, passwd)
775return user, passwd
776
777def prompt_user_passwd(self, host, realm):
778"""Override this in a GUI environment!"""
Local variables:
NameValueValue
clear_cache File0
host File'trac'
key File'Trac Project@trac'
realm File'Trac Project'
self File<urllib.FancyURLopener instance at 0xa68120c>
# File "/usr/lib/python2.5/urllib.py", line 782, in prompt_user_passwd
comment:3 Changed 7 years ago by
| Owner: | Diorgenes Felipe Grzesiuk deleted |
|---|
comment:4 Changed 7 years ago by
| Owner: | set to Ryan J Ollos |
|---|---|
| Status: | new → accepted |
comment:7 Changed 7 years ago by
This is more complicated than I initially thought. We'll probably needs to use urlretrieve for external images.



same Problem here.
WikiToPdf plugin tries to get the images as user anonymous. I do not want to give WIKI_VIEW/ATTACHMENT_VIEW to the anonymous user!
Please fix this, or give us a workaround.