Exemple #1
0
def test_nntp_server(host,
                     port,
                     server=None,
                     username=None,
                     password=None,
                     ssl=None,
                     ssl_verify=1):
    """ Will connect (blocking) to the nttp server and report back any errors """
    timeout = 4.0
    if '*' in password and not password.strip('*'):
        # If the password is masked, try retrieving it from the config
        if not server:
            servers = get_servers()
            got_pass = False
            for server in servers:
                if host in servers[server].host():
                    srv = servers[server]
                    password = srv.password()
                    got_pass = True
        else:
            srv = get_servers().get(server)
            if srv:
                password = srv.password()
                got_pass = True
        if not got_pass:
            return False, T('Password masked in ******, please re-enter')
    try:
        s = Server(-1, '', host, port, timeout, 0, 0, ssl, ssl_verify, None,
                   False, username, password)
    except:
        return False, T('Invalid server details')

    try:
        nw = NewsWrapper(s, -1, block=True)
        nw.init_connect(None)
        while not nw.connected:
            nw.clear_data()
            nw.recv_chunk(block=True)
            #more ssl related: handle 1/n-1 splitting to prevent Rizzo/Duong-Beast
            read_sockets, _, _ = select.select([nw.nntp.sock], [], [], 0.1)
            if read_sockets:
                nw.recv_chunk(block=True)
            nw.finish_connect(nw.status_code)

    except socket.timeout:
        if port != 119 and not ssl:
            return False, T(
                'Timed out: Try enabling SSL or connecting on a different port.'
            )
        else:
            return False, T('Timed out')

    except socket.error, e:
        # Trying SSL on non-SSL port?
        if 'unknown protocol' in str(e).lower():
            return False, T(
                'Unknown SSL protocol: Try disabling SSL or connecting on a different port.'
            )

        return False, unicode(e)
Exemple #2
0
def test_nntp_server(host, port, server=None, username=None, password=None, ssl=None, ssl_verify=1):
    """ Will connect (blocking) to the nttp server and report back any errors """
    timeout = 4.0
    if '*' in password and not password.strip('*'):
        # If the password is masked, try retrieving it from the config
        if not server:
            servers = get_servers()
            got_pass = False
            for server in servers:
                if host in servers[server].host():
                    srv = servers[server]
                    password = srv.password()
                    got_pass = True
        else:
            srv = get_servers().get(server)
            if srv:
                password = srv.password()
                got_pass = True
        if not got_pass:
            return False, T('Password masked in ******, please re-enter')
    try:
        s = Server(-1, '', host, port, timeout, 0, 0, ssl, ssl_verify, None, False, username, password)
    except:
        return False, T('Invalid server details')

    try:
        nw = NewsWrapper(s, -1, block=True)
        nw.init_connect(None)
        while not nw.connected:
            nw.clear_data()
            nw.recv_chunk(block=True)
            #more ssl related: handle 1/n-1 splitting to prevent Rizzo/Duong-Beast
            read_sockets, _, _ = select.select([nw.nntp.sock], [], [], 0.1)
            if read_sockets:
                nw.recv_chunk(block=True)
            nw.finish_connect(nw.status_code)

    except socket.timeout:
        if port != 119 and not ssl:
            return False, T('Timed out: Try enabling SSL or connecting on a different port.')
        else:
            return False, T('Timed out')

    except socket.error, e:
        # Trying SSL on non-SSL port?
        if 'unknown protocol' in str(e).lower():
            return False, T('Unknown SSL protocol: Try disabling SSL or connecting on a different port.')

        return False, unicode(e)
Exemple #3
0
def test_nntp_server(host,
                     port,
                     server=None,
                     username=None,
                     password=None,
                     ssl=None,
                     ssl_type='t1'):
    """ Will connect (blocking) to the nttp server and report back any errors """
    timeout = 4.0
    if '*' in password and not password.strip('*'):
        # If the password is masked, try retrieving it from the config
        if not server:
            servers = get_servers()
            got_pass = False
            for server in servers:
                if host in server:
                    srv = servers[server]
                    password = srv.password()
                    got_pass = True
        else:
            srv = get_servers().get(server)
            if srv:
                password = srv.password()
                got_pass = True
        if not got_pass:
            return False, T('Password masked in ******, please re-enter')
    try:
        s = Server(-1, '', host, port, timeout, 0, 0, ssl, ssl_type, False,
                   username, password)
    except:
        return False, T('Invalid server details')

    try:
        nw = NewsWrapper(s, -1, block=True)
        nw.init_connect(None)
        while not nw.connected:
            nw.lines = []
            nw.recv_chunk(block=True)
            nw.finish_connect(nw.lines[0][:3])

    except socket.timeout, e:
        if port != 119 and not ssl:
            return False, T(
                'Timed out: Try enabling SSL or connecting on a different port.'
            )
        else:
            return False, T('Timed out')
Exemple #4
0
def test_nntp_server(host, port, server=None, username=None, password=None, ssl=None):
    ''' Will connect (blocking) to the nttp server and report back any errors '''
    timeout = 4.0
    if '*' in password and not password.strip('*'):
        # If the password is masked, try retrieving it from the config
        if not server:
            servers = get_servers()
            got_pass = False
            for server in servers:
                if host in server:
                    srv = servers[server]
                    password = srv.password()
                    got_pass = True
        else:
            srv = get_servers().get(server)
            if srv:
                password = srv.password()
                got_pass = True
        if not got_pass:
            return False, T('Password masked in ******, please re-enter')
    try:
        s = Server(-1, host, port, timeout, 0, 0, ssl, username, password)
    except:
        return False, T('Invalid server details')

    try:
        nw = NewsWrapper(s, -1, block=True)
        nw.init_connect(None)
        while not nw.connected:
            nw.lines = []
            nw.recv_chunk(block=True)
            nw.finish_connect(nw.lines[0][:3])

    except socket.timeout, e:
        if port != 119 and not ssl:
            return False, T('Timed out: Try enabling SSL or connecting on a different port.')
        else:
            return False, T('Timed out')
Exemple #5
0
def test_nntp_server(host,
                     port,
                     server=None,
                     username=None,
                     password=None,
                     ssl=None,
                     ssl_verify=1,
                     ssl_ciphers=None):
    """ Will connect (blocking) to the nttp server and report back any errors """
    timeout = 4.0
    if "*" in password and not password.strip("*"):
        # If the password is masked, try retrieving it from the config
        if not server:
            servers = get_servers()
            got_pass = False
            for server in servers:
                if host in servers[server].host():
                    srv = servers[server]
                    password = srv.password()
                    got_pass = True
        else:
            srv = get_servers().get(server)
            if srv:
                password = srv.password()
                got_pass = True
        if not got_pass:
            return False, T("Password masked in ******, please re-enter")
    try:
        s = Server(-1, "", host, port, timeout, 0, 0, ssl, ssl_verify,
                   ssl_ciphers, False, username, password)
    except:
        return False, T("Invalid server details")

    try:
        nw = NewsWrapper(s, -1, block=True)
        nw.init_connect(None)
        while not nw.connected:
            nw.clear_data()
            nw.recv_chunk(block=True)
            # Handle 1/n-1 splitting to prevent Rizzo/Duong-Beast
            read_sockets, _, _ = select.select([nw.nntp.sock], [], [], 0.1)
            if read_sockets:
                nw.recv_chunk(block=True)
            nw.finish_connect(nw.status_code)

    except socket.timeout:
        if port != 119 and not ssl:
            return False, T(
                "Timed out: Try enabling SSL or connecting on a different port."
            )
        else:
            return False, T("Timed out")

    except socket.error as e:
        # Trying SSL on non-SSL port?
        if "unknown protocol" in str(e).lower():
            return False, T(
                "Unknown SSL protocol: Try disabling SSL or connecting on a different port."
            )

        return False, str(e)

    except TypeError:
        return False, T("Invalid server address.")

    except IndexError:
        # No data was received in recv_chunk() call
        return False, T("Server quit during login sequence.")

    except:
        return False, str(sys.exc_info()[1])

    if not username or not password:
        nw.nntp.sock.sendall(b"ARTICLE <test@home>\r\n")
        try:
            nw.clear_data()
            nw.recv_chunk(block=True)
        except:
            # Some internal error, not always safe to close connection
            return False, str(sys.exc_info()[1])

    # Close the connection
    nw.terminate(quit=True)

    if nw.status_code == 480:
        return False, T("Server requires username and password.")

    elif nw.status_code == 100 or str(nw.status_code).startswith(("2", "4")):
        return True, T("Connection Successful!")

    elif nw.status_code == 502 or clues_login(nntp_to_msg(nw.data)):
        return False, T("Authentication failed, check username/password.")

    elif clues_too_many(nntp_to_msg(nw.data)):
        return False, T(
            "Too many connections, please pause downloading or try again later"
        )

    else:
        return False, T("Could not determine connection result (%s)"
                        ) % nntp_to_msg(nw.data)