Opened 9 years ago

Closed 6 years ago

#4677 closed Bug (duplicate)

Webseeds should be filtered by loaded blocklists

Reported by: x190 Owned by: jordan
Priority: High Milestone: None Set
Component: libtransmission Version: 2.42
Severity: Normal Keywords:
Cc: webseeds, blocklist

Description

Webseeds should be filtered by loaded blocklists the same as any peer. This is even more important as they don't appear to be affected by the 5 bad pieces rule nor are they removable by editing.

Change History (6)

comment:1 follow-up: Changed 9 years ago by jordan

...my two favorite features, rolled up into one ticket. :|

comment:2 in reply to: ↑ 1 Changed 9 years ago by x190

Replying to jordan:

...my two favorite features, rolled up into one ticket. :|

Yeah, I know, but we really do need a way of getting rid of misbehaving or unwanted webseeds. #4644 has brought this into focus. I'm dealing with that issue in real life and it can really mess up an otherwise perfectly good torrent.

Compliments of the Season to you and yours! :)

comment:3 Changed 9 years ago by pathetic_loser

I see nothing unexpected in scenario where web server could return wrong/corrupted/malicious file. Be it bad sector on hdd, erroneously replaced file or just some malicious server.

comment:4 Changed 8 years ago by x190

"they don't appear to be affected by the 5 bad pieces rule nor are they removable by editing."

Well, they should be!

comment:5 Changed 6 years ago by cfpp2p

Webseed addresses are not checked for blocklisting.

Simplified implementation as follows:

web.c

// after line 496 web.c

                char * server_ip;
                struct tr_address addr;

                task->is_blocklisted = false;
                // hooking for blocklist check
                if (!curl_easy_getinfo (e, CURLINFO_PRIMARY_IP, &server_ip))  // CURLE_OK
                {
                    if (tr_address_from_string( &addr, server_ip))
                    {
                        if (tr_sessionIsAddressBlocked( task->session, &addr))
                        task->is_blocklisted = true;
                    }
                }
                const tr_address * send_address = &addr;
                task->tracker_addr = tr_strdup (tr_address_to_string( send_address));

Then in webseed.c web_response_func() insert if (blocklisted) to prevent the downloading.

This is the basic idea but highly simplified for conciseness.

I have a fully functional and tested implementation for the blocklist hook at my github account but for the old v2.77 base.

I couldn't be sure I'd want to block the webseed address without some sort of indicator to the user. The user could even do a direct download of the file via browser and url from the .torrent file and wonder why transmission wasn't downloading. It's not like peers where there could be many. Blocking of webseed without warning seems problematic to me. A warning would be necessary in my opinion.

comment:6 Changed 6 years ago by x190

  • Resolution set to duplicate
  • Status changed from new to closed

See #5923 for a patch.

Note: See TracTickets for help on using tickets.