Closed Bug 1473736 Opened 6 years ago Closed 6 years ago

Implement necko part of ESNI

Categories

(Core :: Networking, enhancement, P1)

59 Branch
enhancement

Tracking

()

RESOLVED FIXED
mozilla64
Tracking Status
firefox64 --- fixed

People

(Reporter: dragana, Assigned: dragana)

References

Details

(Whiteboard: [necko-triaged])

Attachments

(2 files, 1 obsolete file)

Priority: -- → P1
Whiteboard: [necko-triaged]
Implement necko part of ESNI
Depends on: 1480704
There is only a dns test. I will implement the rest of the test when nss part of the code lands.

I have implemented a tsl server that we can use for this test and it works, but I need nss part to acuatlly send esni and test. it.

I just notice that I have left the pref on :) I will update the patch and turn it off.
A procedural note: The attached patch has added data collection that will require Data Collection Review before landing: https://wiki.mozilla.org/Firefox/Data_Collection
(In reply to Chris H-C :chutten from comment #3)
> A procedural note: The attached patch has added data collection that will
> require Data Collection Review before landing:
> https://wiki.mozilla.org/Firefox/Data_Collection

I know :)
Depends on: 1481251
No longer depends on: 1481251
Blocks: 1481251
Attached file bug_1473736_tele_request.txt (obsolete) —
Attachment #9002124 - Flags: review?(francois)
Comment on attachment 9002124 [details]
bug_1473736_tele_request.txt

> 4) Can current instrumentation answer these questions?

Please provide a response to this question, even if it's just "no".

> 8) If this data collection is default on, what is the opt-out mechanism for users?

Disabling telemetry is the opt-out for this.

> 10) Where do you intend to share the results of your analysis?
>
> maybe.

"Maybe" as in "we may share the results publicly in a blog post, but otherwise it will only be used internally"?
Attachment #9002124 - Flags: review?(francois) → review-
Comment on attachment 8997396 [details]
Bug 1473736 - Implement necko part of ESNI

Patrick McManus [:mcmanus] has approved the revision.
Attachment #8997396 - Flags: review+
Francois is not accepting reviews, may I ask you for a review?
Attachment #9002124 - Attachment is obsolete: true
Attachment #9009603 - Flags: review?(chutten)
Comment on attachment 9009603 [details]
bug_1473736_tele_request.txt

DATA COLLECTION REVIEW RESPONSE:

    Is there or will there be documentation that describes the schema for the ultimate data set available publicly, complete and accurate?

Standard Telemetry mechanisms apply.

    Is there a control mechanism that allows the user to turn the data collection on and off?

Standard Telemetry mechanisms apply.

    If the request is for permanent data collection, is there someone who will monitor the data over time?

N/A, expires in Firefox 70

    Using the category system of data types on the Mozilla wiki, what collection type of data do the requested measurements fall under?

Category 1, Technical

    Is the data collection request for default-on or default-off?

The request is for default-on, but the code is for pre-release only.

    Does the instrumentation include the addition of any new identifiers (whether anonymous or otherwise; e.g., username, random IDs, etc. See the appendix for more details)?

No.

    Is the data collection covered by the existing Firefox privacy notice?

Yes.

    Does there need to be a check-in in the future to determine whether to renew the data? 

Yes. :dragana is responsible for renewing or removing this probe before it expires in Firefox 70.

---
Result: datareview+

NOTE: If you intended to have this collection from all channels including release, there's no need to resubmit for an additional data review if the only change is adding releaseChannelCollection: opt-out to the data definitions (this is covered by question 5 of the response)
Attachment #9009603 - Flags: review?(chutten) → review+
Keywords: checkin-needed
Pushed by nerli@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/7aa742bff8fb
Implement necko part of ESNI r=mcmanus
Keywords: checkin-needed
Comment on attachment 8997396 [details]
Bug 1473736 - Implement necko part of ESNI

Kris Maglione [:kmag] has approved the revision.
Attachment #8997396 - Flags: review+
I see a review request on me, what should I be looking at, the browser part?
(In reply to Marco Bonardo [::mak] from comment #13)
> I see a review request on me, what should I be looking at, the browser part?

Yes, just browser.js (I left a comment on phabricator :)

Thanks.
Flags: needinfo?(dd.mozilla)
Comment on attachment 8997396 [details]
Bug 1473736 - Implement necko part of ESNI

Marco Bonardo [::mak] has approved the revision.
Attachment #8997396 - Flags: review+
Keywords: checkin-needed
Pushed by rgurzau@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/dc225279994a
Implement necko part of ESNI r=mak,kmag,mcmanus
Keywords: checkin-needed
Backed out changeset dc225279994a (bug 1473736) for web platform leaks because there was no response on irc while asking for a look at this perma failing issue by the relevant reviewer.


Backout link:  https://hg.mozilla.org/integration/autoland/rev/8d8dc3f35c3d65b8268c014cf10709c37049bce1

Push with failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&resultStatus=testfailed,busted,exception&revision=dc225279994a8921a5f53ab879d771c268828beb&searchStr=wpt

Log link: https://treeherder.mozilla.org/logviewer.html#?job_id=200586855&repo=autoland&lineNumber=1738

Log snippet: 

[task 2018-09-20T23:36:18.799Z] 23:36:18     INFO - PID 6860 | Indirect leak of 32 byte(s) in 1 object(s) allocated from:
[task 2018-09-20T23:36:18.799Z] 23:36:18     INFO - PID 6860 |     #0 0x5651f86a5263 in malloc /builds/worker/workspace/moz-toolchain/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:88:3
[task 2018-09-20T23:36:18.800Z] 23:36:18     INFO - PID 6860 |     #1 0x7f4134187cf2 in Alloc /builds/worker/workspace/build/src/xpcom/string/nsSubstring.cpp:260:22
[task 2018-09-20T23:36:18.801Z] 23:36:18     INFO - PID 6860 |     #2 0x7f4134187cf2 in nsTSubstring<char>::StartBulkWriteImpl(unsigned int, unsigned int, bool, unsigned int, unsigned int, unsigned int) /builds/worker/workspace/build/src/xpcom/string/nsTSubstring.cpp:216
[task 2018-09-20T23:36:18.802Z] 23:36:18     INFO - PID 6860 |     #3 0x7f413419bd36 in nsTSubstring<char>::ReplacePrepInternal(unsigned int, unsigned int, unsigned int, unsigned int) /builds/worker/workspace/build/src/xpcom/string/nsTSubstring.cpp:324:43
[task 2018-09-20T23:36:18.803Z] 23:36:18     INFO - PID 6860 |     #4 0x7f4134198133 in nsTSubstring<char>::Assign(char const*, unsigned int, std::nothrow_t const&) /builds/worker/workspace/build/src/xpcom/string/nsTSubstring.cpp:451:8
[task 2018-09-20T23:36:18.804Z] 23:36:18     INFO - PID 6860 |     #5 0x7f4134184024 in nsTSubstring<char>::Assign(nsTSubstring<char> const&) /builds/worker/workspace/build/src/xpcom/string/nsTSubstring.cpp:502:8
[task 2018-09-20T23:36:18.804Z] 23:36:18     INFO - PID 6860 |     #6 0x7f413462cbdb in operator= /builds/worker/workspace/build/src/obj-firefox/dist/include/nsTSubstring.h:532:5
[task 2018-09-20T23:36:18.806Z] 23:36:18     INFO - PID 6860 |     #7 0x7f413462cbdb in mozilla::net::nsStandardURL::GetAsciiHost(nsTSubstring<char>&) /builds/worker/workspace/build/src/netwerk/base/nsStandardURL.cpp:1453
[task 2018-09-20T23:36:18.807Z] 23:36:18     INFO - PID 6860 |     #8 0x7f413455b8e6 in nsDNSPrefetch::nsDNSPrefetch(nsIURI*, mozilla::OriginAttributes&, nsIDNSListener*, bool) /builds/worker/workspace/build/src/netwerk/base/nsDNSPrefetch.cpp:47:11
[task 2018-09-20T23:36:18.807Z] 23:36:18     INFO - PID 6860 |     #9 0x7f4134f59895 in mozilla::net::nsHttpChannel::BeginConnectActual() /builds/worker/workspace/build/src/netwerk/protocol/http/nsHttpChannel.cpp:6695:28
[task 2018-09-20T23:36:18.809Z] 23:36:18     INFO - PID 6860 |     #10 0x7f4134f56cb1 in mozilla::net::nsHttpChannel::BeginConnect() /builds/worker/workspace/build/src/netwerk/protocol/http/nsHttpChannel.cpp:6655:16
[task 2018-09-20T23:36:18.809Z] 23:36:18     INFO - PID 6860 |     #11 0x7f4134f5b47a in mozilla::net::nsHttpChannel::OnProxyAvailable(nsICancelable*, nsIChannel*, nsIProxyInfo*, nsresult) /builds/worker/workspace/build/src/netwerk/protocol/http/nsHttpChannel.cpp:6957:14
[task 2018-09-20T23:36:18.811Z] 23:36:18     INFO - PID 6860 |     #12 0x7f413465cdc0 in mozilla::net::nsAsyncResolveRequest::DoCallback() /builds/worker/workspace/build/src/netwerk/base/nsProtocolProxyService.cpp:421:24
[task 2018-09-20T23:36:18.812Z] 23:36:18     INFO - PID 6860 |     #13 0x7f4134658a95 in Run /builds/worker/workspace/build/src/netwerk/base/nsProtocolProxyService.cpp:271:13
[task 2018-09-20T23:36:18.813Z] 23:36:18     INFO - PID 6860 |     #14 0x7f4134658a95 in operator() /builds/worker/workspace/build/src/netwerk/base/nsProtocolProxyService.cpp:250
[task 2018-09-20T23:36:18.815Z] 23:36:18     INFO - PID 6860 |     #15 0x7f4134658a95 in std::_Function_handler<nsresult (mozilla::net::nsAsyncResolveRequest*, nsIProxyInfo*, bool), mozilla::net::nsAsyncResolveRequest::ProcessLocally(mozilla::net::nsProtocolInfo&, nsIProxyInfo*, bool)::{lambda(mozilla::net::nsAsyncResolveRequest*, nsIProxyInfo*, bool)#1}>::_M_invoke(std::_Any_data const&, mozilla::net::nsAsyncResolveRequest*, nsIProxyInfo*, bool) /builds/worker/workspace/build/src/clang/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.4/../../../../include/c++/4.9.4/functional:2024
[task 2018-09-20T23:36:18.815Z] 23:36:18     INFO - PID 6860 |     #16 0x7f41345d4eaf in operator() /builds/worker/workspace/build/src/clang/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.4/../../../../include/c++/4.9.4/functional:2440:14
[task 2018-09-20T23:36:18.816Z] 23:36:18     INFO - PID 6860 |     #17 0x7f41345d4eaf in mozilla::net::nsAsyncResolveRequest::AsyncApplyFilters::Finish() /builds/worker/workspace/build/src/netwerk/base/nsProtocolProxyService.cpp:622
[task 2018-09-20T23:36:18.818Z] 23:36:18     INFO - PID 6860 |     #18 0x7f41345d492b in mozilla::net::nsAsyncResolveRequest::AsyncApplyFilters::ProcessNextFilter() /builds/worker/workspace/build/src/netwerk/base/nsProtocolProxyService.cpp:533:14
[task 2018-09-20T23:36:18.818Z] 23:36:18     INFO - PID 6860 |     #19 0x7f41345d41c6 in mozilla::net::nsAsyncResolveRequest::AsyncApplyFilters::AsyncProcess(mozilla::net::nsAsyncResolveRequest*) /builds/worker/workspace/build/src/netwerk/base/nsProtocolProxyService.cpp:508:19
[task 2018-09-20T23:36:18.819Z] 23:36:18     INFO - PID 6860 |     #20 0x7f41345e4719 in mozilla::net::nsAsyncResolveRequest::ProcessLocally(mozilla::net::nsProtocolInfo&, nsIProxyInfo*, bool) /builds/worker/workspace/build/src/netwerk/base/nsProtocolProxyService.cpp:259:37
[task 2018-09-20T23:36:18.820Z] 23:36:18     INFO - PID 6860 |     #21 0x7f41345e23a4 in mozilla::net::nsProtocolProxyService::AsyncResolveInternal(nsIChannel*, unsigned int, nsIProtocolProxyCallback*, nsICancelable**, bool, nsIEventTarget*) /builds/worker/workspace/build/src/netwerk/base/nsProtocolProxyService.cpp:1686:19
[task 2018-09-20T23:36:18.821Z] 23:36:18     INFO - PID 6860 |     #22 0x7f41345e481c in mozilla::net::nsProtocolProxyService::AsyncResolve2(nsIChannel*, unsigned int, nsIProtocolProxyCallback*, nsIEventTarget*, nsICancelable**) /builds/worker/workspace/build/src/netwerk/base/nsProtocolProxyService.cpp:1708:12
[task 2018-09-20T23:36:18.823Z] 23:36:18     INFO - PID 6860 |     #23 0x7f4134f3cf5a in StartAssignment /builds/worker/workspace/build/src/obj-firefox/dist/include/nsCOMPtr.h:827:34
[task 2018-09-20T23:36:18.823Z] 23:36:18     INFO - PID 6860 |     #24 0x7f4134f3cf5a in operator nsICancelable ** /builds/worker/workspace/build/src/obj-firefox/dist/include/nsCOMPtr.h:1335
[task 2018-09-20T23:36:18.824Z] 23:36:18     INFO - PID 6860 |     #25 0x7f4134f3cf5a in mozilla::net::nsHttpChannel::ResolveProxy() /builds/worker/workspace/build/src/netwerk/protocol/http/nsHttpChannel.cpp:3210
[task 2018-09-20T23:36:18.825Z] 23:36:18     INFO - PID 6860 |     #26 0x7f4134f54ac4 in mozilla::net::nsHttpChannel::AsyncOpen(nsIStreamListener*, nsISupports*) /builds/worker/workspace/build/src/netwerk/protocol/http/nsHttpChannel.cpp:6407:9
[task 2018-09-20T23:36:18.826Z] 23:36:18     INFO - PID 6860 |     #27 0x7f4134f57e33 in mozilla::net::nsHttpChannel::AsyncOpen2(nsIStreamListener*) /builds/worker/workspace/build/src/netwerk/protocol/http/nsHttpChannel.cpp:6448:10
[task 2018-09-20T23:36:18.827Z] 23:36:18     INFO - PID 6860 |     #28 0x7f413a565d4d in mozilla::dom::FetchDriver::HttpFetch(nsTSubstring<char> const&) /builds/worker/workspace/build/src/dom/fetch/FetchDriver.cpp:721:16
[task 2018-09-20T23:36:18.828Z] 23:36:18     INFO - PID 6860 |     #29 0x7f413a55f168 in mozilla::dom::FetchDriver::Fetch(mozilla::dom::AbortSignalImpl*, mozilla::dom::FetchDriverObserver*) /builds/worker/workspace/build/src/dom/fetch/FetchDriver.cpp:404:8
[task 2018-09-20T23:36:18.830Z] 23:36:18     INFO - PID 6860 |     #30 0x7f413a5576cb in mozilla::dom::FetchRequest(nsIGlobalObject*, mozilla::dom::RequestOrUSVString const&, mozilla::dom::RequestInit const&, mozilla::dom::CallerType, mozilla::ErrorResult&) /builds/worker/workspace/build/src/dom/fetch/Fetch.cpp:552:18
[task 2018-09-20T23:36:18.830Z] 23:36:18     INFO - PID 6860 |     #31 0x7f4135cf904e in SandboxFetch /builds/worker/workspace/build/src/js/xpconnect/src/Sandbox.cpp:321:9
[task 2018-09-20T23:36:18.831Z] 23:36:18     INFO - PID 6860 |     #32 0x7f4135cf904e in SandboxFetchPromise(JSContext*, unsigned int, JS::Value*) /builds/worker/workspace/build/src/js/xpconnect/src/Sandbox.cpp:335
[task 2018-09-20T23:36:18.832Z] 23:36:18     INFO - PID 6860 |     #33 0x7f4141b629db in CallJSNative /builds/worker/workspace/build/src/js/src/vm/Interpreter.cpp:461:15
[task 2018-09-20T23:36:18.833Z] 23:36:18     INFO - PID 6860 |     #34 0x7f4141b629db in js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) /builds/worker/workspace/build/src/js/src/vm/Interpreter.cpp:553
[task 2018-09-20T23:36:18.834Z] 23:36:18     INFO - PID 6860 |     #35 0x7f4141b4b914 in CallFromStack /builds/worker/workspace/build/src/js/src/vm/Interpreter.cpp:613:12
[task 2018-09-20T23:36:18.835Z] 23:36:18     INFO - PID 6860 |     #36 0x7f4141b4b914 in Interpret(JSContext*, js::RunState&) /builds/worker/workspace/build/src/js/src/vm/Interpreter.cpp:3451
[task 2018-09-20T23:36:18.836Z] 23:36:18     INFO - PID 6860 |     #37 0x7f4141b3090d in js::RunScript(JSContext*, js::RunState&) /builds/worker/workspace/build/src/js/src/vm/Interpreter.cpp:440:12
[task 2018-09-20T23:36:18.837Z] 23:36:18     INFO - PID 6860 |     #38 0x7f4141b634ee in js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) /builds/worker/workspace/build/src/js/src/vm/Interpreter.cpp:580:15
[task 2018-09-20T23:36:18.838Z] 23:36:18     INFO - PID 6860 |     #39 0x7f4141b65282 in js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>) /builds/worker/workspace/build/src/js/src/vm/Interpreter.cpp:626:10
[task 2018-09-20T23:36:18.839Z] 23:36:18     INFO - PID 6860 | -----------------------------------------------------
[task 2018-09-20T23:36:18.839Z] 23:36:18     INFO - PID 6860 | Suppressions used:
[task 2018-09-20T23:36:18.841Z] 23:36:18     INFO - PID 6860 |   count      bytes template
[task 2018-09-20T23:36:18.841Z] 23:36:18     INFO - PID 6860 |      11       4736 libc.so
[task 2018-09-20T23:36:18.842Z] 23:36:18     INFO - PID 6860 |     551      18104 nsComponentManagerImpl
[task 2018-09-20T23:36:18.843Z] 23:36:18     INFO - PID 6860 |      41       8528 mozJSComponentLoader::LoadModule
[task 2018-09-20T23:36:18.844Z] 23:36:18     INFO - PID 6860 |     611      17509 libfontconfig.so
[task 2018-09-20T23:36:18.844Z] 23:36:18     INFO - PID 6860 |       6        264 _PR_Getfd
[task 2018-09-20T23:36:18.845Z] 23:36:18     INFO - PID 6860 |       1         29 libglib-2.0.so
[task 2018-09-20T23:36:18.846Z] 23:36:18     INFO - PID 6860 | -----------------------------------------------------
[task 2018-09-20T23:36:18.847Z] 23:36:18     INFO - Browser exited with return code 0
[task 2018-09-20T23:36:18.848Z] 23:36:18     INFO - ERROR | LeakSanitizer | SUMMARY: AddressSanitizer: 5008 byte(s) leaked in 14 allocation(s).
[task 2018-09-20T23:36:18.849Z] 23:36:18     INFO - LeakSanitizer | To show the addresses of leaked objects add report_objects=1 to LSAN_OPTIONS
[task 2018-09-20T23:36:18.850Z] 23:36:18     INFO - This can be done in testing/mozbase/mozrunner/mozrunner/utils.py
[task 2018-09-20T23:36:18.850Z] 23:36:18     INFO - TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at NewPage, Push, PutEvent, mozilla::PrioritizedEventQueue
[task 2018-09-20T23:36:18.850Z] 23:36:18     INFO - TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at DNSListenerProxy, nsDNSService::AsyncResolveInternal, nsDNSService::AsyncResolveNative, nsDNSPrefetch::Prefetch
[task 2018-09-20T23:36:18.851Z] 23:36:18     INFO - TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at NewPage, Push, mozilla::EventQueue::PutEvent, nsThreadPool::PutEvent
[task 2018-09-20T23:36:18.853Z] 23:36:18     INFO - TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at nsSupportsWeakReference::GetWeakReference, NS_GetWeakReference, do_GetWeakReference, nsDNSPrefetch::nsDNSPrefetch
[task 2018-09-20T23:36:18.853Z] 23:36:18     INFO - TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at mozilla::net::nsHttpChannel::BeginConnectActual, mozilla::net::nsHttpChannel::BeginConnect, mozilla::net::nsHttpChannel::OnProxyAvailable, mozilla::net::nsAsyncResolveRequest::DoCallback
[task 2018-09-20T23:36:18.855Z] 23:36:18     INFO - TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at Alloc, nsTSubstring, nsTSubstring, nsTSubstring
[task 2018-09-20T23:36:18.855Z] 23:36:18     INFO - TEST-UNEXPECTED-FAIL | LeakSanitizer | leak at nsDNSService::AsyncResolveInternal, nsDNSService::AsyncResolveNative, nsDNSPrefetch::Prefetch, mozilla::net::nsHttpChannel::BeginConnectActual
[task 2018-09-20T23:36:18.858Z] 23:36:18  WARNING - u'runner_teardown': ()
[task 2018-09-20T23:36:18.860Z] 23:36:18     INFO - STDOUT: Setting up LSAN
[task 2018-09-20T23:36:18.861Z] 23:36:18     INFO - INFO | runtests.py | ASan using symbolizer at /builds/worker/workspace/build/application/firefox/llvm-symbolizer
[task 2018-09-20T23:36:18.862Z] 23:36:18     INFO - LSan enabled.
[task 2018-09-20T23:36:18.862Z] 23:36:18     INFO - LSan using suppression file /builds/worker/workspace/build/tests/web-platform/prefs/lsan_suppressions.txt
[task 2018-09-20T23:36:18.864Z] 23:36:18     INFO - INFO | runtests.py | ASan running in default memory configuration
[task 2018-09-20T23:36:18.864Z] 23:36:18     INFO - Setting up ssl
[task 2018-09-20T23:36:18.941Z] 23:36:18     INFO - certutil | 
[task 2018-09-20T23:36:19.030Z] 23:36:19     INFO - certutil | 
[task 2018-09-20T23:36:19.098Z] 23:36:19     INFO - certutil | 
[task 2018-09-20T23:36:19.099Z] 23:36:19     INFO - Certificate Nickname                                         Trust Attributes
[task 2018-09-20T23:36:19.099Z] 23:36:19     INFO -                                                              SSL,S/MIME,JAR/XPI
[task 2018-09-20T23:36:19.099Z] 23:36:19     INFO - 
[task 2018-09-20T23:36:19.100Z] 23:36:19     INFO - web-platform-tests                                           CT,, 
[task 2018-09-20T23:36:19.100Z] 23:36:19     INFO -
Flags: needinfo?(dd.mozilla)
https://treeherder.mozilla.org/#/jobs?repo=try&revision=d2f56fa0ed93a617fca765b4841d28543b3c8f58

this try looks good. I have fixed the leak.
Flags: needinfo?(dd.mozilla)
Keywords: checkin-needed
Pushed by ccoroiu@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/52ee9ddf5060
Implement necko part of ESNI r=mak,kmag,mcmanus
Keywords: checkin-needed
https://hg.mozilla.org/mozilla-central/rev/52ee9ddf5060
Status: ASSIGNED → RESOLVED
Closed: 6 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla64
Could you please abandon the revision in phab so it disappears from our dashboards, since it landed through inbound?
Flags: needinfo?(dd.mozilla)
Flags: needinfo?(dd.mozilla)
Alias: esni
Regressions: 1579466
Alias: esni
No longer depends on: 1542754
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: