Browse Source

bpo-40121: Fixes audit event raised on creating a new socket (GH-19238)

pull/19238/merge
Steve Dower 6 years ago
committed by GitHub
parent
commit
63ba5cccf4
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 22
      Lib/test/audit-tests.py
  2. 12
      Lib/test/test_audit.py
  3. 1
      Misc/NEWS.d/next/Security/2020-03-30-23-16-25.bpo-40121.p2LIio.rst
  4. 7
      Modules/socketmodule.c

22
Lib/test/audit-tests.py

@ -327,6 +327,28 @@ def test_winreg():
CloseKey(kv)
def test_socket():
import socket
def hook(event, args):
if event.startswith("socket."):
print(event, *args)
sys.addaudithook(hook)
socket.gethostname()
# Don't care if this fails, we just want the audit message
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# Don't care if this fails, we just want the audit message
sock.bind(('127.0.0.1', 8080))
except error:
pass
finally:
sock.close()
if __name__ == "__main__":
from test.libregrtest.setup import suppress_msvcrt_asserts

12
Lib/test/test_audit.py

@ -118,6 +118,18 @@ class AuditTest(unittest.TestCase):
self.assertSequenceEqual(["winreg.EnumKey", " ", f"{expected} 10000"], events[3])
self.assertSequenceEqual(["winreg.PyHKEY.Detach", " ", expected], events[4])
def test_socket(self):
support.import_module("socket")
returncode, events, stderr = self.run_python("test_socket")
if returncode:
self.fail(stderr)
if support.verbose:
print(*events, sep='\n')
self.assertEqual(events[0][0], "socket.gethostname")
self.assertEqual(events[1][0], "socket.__new__")
self.assertEqual(events[2][0], "socket.bind")
self.assertTrue(events[2][2].endswith("('127.0.0.1', 8080)"))
if __name__ == "__main__":
unittest.main()

1
Misc/NEWS.d/next/Security/2020-03-30-23-16-25.bpo-40121.p2LIio.rst

@ -0,0 +1 @@
Fixes audit events raised on creating a new socket.

7
Modules/socketmodule.c

@ -5099,7 +5099,7 @@ sock_initobj(PyObject *self, PyObject *args, PyObject *kwds)
#ifdef MS_WINDOWS
/* In this case, we don't use the family, type and proto args */
if (fdobj != NULL && fdobj != Py_None)
if (fdobj == NULL || fdobj == Py_None)
#endif
{
if (PySys_Audit("socket.__new__", "Oiii",
@ -5121,8 +5121,9 @@ sock_initobj(PyObject *self, PyObject *args, PyObject *kwds)
}
memcpy(&info, PyBytes_AS_STRING(fdobj), sizeof(info));
if (PySys_Audit("socket()", "iii", info.iAddressFamily,
info.iSocketType, info.iProtocol) < 0) {
if (PySys_Audit("socket.__new__", "Oiii", s,
info.iAddressFamily, info.iSocketType,
info.iProtocol) < 0) {
return -1;
}

Loading…
Cancel
Save