Skip to content

Mistake in Username in env file leads to NetworkError #792

@chStaiger

Description

@chStaiger

I am using PRC 3.2.0 and I am connecting to an SSL enabled iRODS instance which uses the pam module to authenticate users.

When I use a wrong username in my irods environment file, the PRC throws a NetworkError while as a user I would expect a CAT_INVALID_USER or CAT_INVALID_AUTHENTICATION:

CRITICAL:irods.connection:Read 0 bytes from socket instead of expected 4 bytes
ERROR:irods.connection:Could not receive server response
NetworkException('Could not receive server response')
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
File /opt/homebrew/lib/python3.13/site-packages/irods/session.py:368, in iRODSSession.__server_version(self)
    367 try:
--> 368     conn = next(iter(self.pool.active))
    369     return conn.server_version

StopIteration:

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
File /opt/homebrew/lib/python3.13/site-packages/irods/pool.py:93, in Pool.get_connection(self)
     92 try:
---> 93     conn = self.idle.pop()
     95     curr_time = datetime.datetime.now()

KeyError: 'pop from an empty set'

During handling of the above exception, another exception occurred:

OSError                                   Traceback (most recent call last)
File /opt/homebrew/lib/python3.13/site-packages/irods/connection.py:173, in Connection.recv(self, into_buffer, return_message, acceptable_errors)
    172 if into_buffer is None:
--> 173     msg = iRODSMessage.recv(self.socket)
    174 else:

File /opt/homebrew/lib/python3.13/site-packages/irods/message/__init__.py:341, in iRODSMessage.recv(sock)
    338 @staticmethod
    339 def recv(sock):
    340     # rsp_header_size = sock.recv(4, socket.MSG_WAITALL)
--> 341     rsp_header_size = _recv_message_in_len(sock, 4)
    342     rsp_header_size = struct.unpack(">i", rsp_header_size)[0]

File /opt/homebrew/lib/python3.13/site-packages/irods/message/__init__.py:245, in _recv_message_in_len(sock, size)
    242     msg = "Read {} bytes from socket instead of expected {} bytes".format(
    243         retbuf_size, size
    244     )
--> 245     raise socket.error(msg)
    247 return retbuf

OSError: Read 0 bytes from socket instead of expected 4 bytes

During handling of the above exception, another exception occurred:

NetworkException                          Traceback (most recent call last)
File ~/git-repos/iBridges/ibridges/session.py:311, in Session.authenticate_using_auth_file(self)
    310                 os.unlink(temp_ienv_path)
--> 311     _ = irods_session.server_version  # pylint: disable=possibly-used-before-assignment
    312 except NonAnonymousLoginWithoutPassword as e:

File /opt/homebrew/lib/python3.13/site-packages/irods/session.py:331, in iRODSSession.server_version(self)
    329 @property
    330 def server_version(self):
--> 331     return self._server_version()

File /opt/homebrew/lib/python3.13/site-packages/irods/session.py:364, in iRODSSession._server_version(self, version_func)
    363     return tuple(ast.literal_eval(reported_vsn))
--> 364 return self.__server_version() if version_func is None else version_func(self)

File /opt/homebrew/lib/python3.13/site-packages/irods/session.py:371, in iRODSSession.__server_version(self)
    370 except StopIteration:
--> 371     conn = self.pool.get_connection()
    372     version = conn.server_version

File /opt/homebrew/lib/python3.13/site-packages/irods/pool.py:18, in attribute_from_return_value.<locals>.deco.<locals>.method_(self, *s, **kw)
     17 def method_(self, *s, **kw):
---> 18     ret = method(self, *s, **kw)
     19     setattr(self, attrname, ret)

File /opt/homebrew/lib/python3.13/site-packages/irods/pool.py:117, in Pool.get_connection(self)
    116 except KeyError:
--> 117     conn = Connection(self, self.account)
    118     new_conn = True

File /opt/homebrew/lib/python3.13/site-packages/irods/connection.py:83, in Connection.__init__(self, pool, account)
     82 self._client_signature = None
---> 83 self._server_version = self._connect()
     84 self._disconnected = False

File /opt/homebrew/lib/python3.13/site-packages/irods/connection.py:365, in Connection._connect(self)
    364 # Server responds with version
--> 365 version_msg = self.recv()
    367 if neg_result == USE_SSL:

File /opt/homebrew/lib/python3.13/site-packages/irods/connection.py:184, in Connection.recv(self, into_buffer, return_message, acceptable_errors)
    183     self.release(True)
--> 184     raise NetworkException("Could not receive server response")
    185 if isinstance(return_message, list):

NetworkException: Could not receive server response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions