Skip to content

pysap v0.2.1

Latest

Choose a tag to compare

@github-actions github-actions released this 21 Sep 21:30
· 10 commits to master since this release

New features

  • pysap/SAPEPP.py: Added EPP v1–v3 structures, variable items,
    SAP-PASSPORT HTTP conversion, and SAP Diag/RFC/NWRFC bindings
    (@martingalloar, #107).
  • pysap/SAPPSE.py, bin/pysapgenpse, and extra/pse2john.py: Added plain
    PSE certificate export support (@martingalloar, #99).

Enhancements and improvements

  • Routed-stream examples now expose a positive --timeout for bounded
    connection and response waits. Shared console helpers now provide common
    completion primitives and run command files through the full console
    connection and cleanup lifecycle (@martingalloar, #108).
  • examples/router_fingerprint.py and its JSON database: Added two modeled
    malformed-route probes, bounded NI timeouts, typed close outcomes, weighted
    fuzzy ranking, a static database-version summary, and sanitized fingerprints
    for retained builds (@martingalloar, #108).
  • pysap/SAPMS.py, examples/ms_monitor.py, and Message Server docs: Added
    monitor operations, structures, enums, response fields, and SNC variants
    (@martingalloar, #106).
  • pysap/SAPNI.py, pysap/SAPRFC.py, and docs: Added bounded NI streaming,
    timeout controls, and named RFCID constants (@martingalloar, #107).
  • pysap/utils/console.py: Improved argument parsing, logging, cleanup, and
    interactive exit handling (@martingalloar, #105).
  • README.md, docs/index.rst: Refreshed project badges and documentation
    links.
  • CI: Updated GitHub Actions and adopted uv (@martingalloar, #98).

Fixes

  • Breaking: Split the fixed SAPMS envelope from variable Message Server
    bodies. Construct structured frames as SAPMS(...) / SAPMSPayload(...) and
    forwarded peer frames as SAPMS(...) / SAPMSPeerPayload(...); header-only
    frames are now represented by SAPMS without a payload. This removes the
    SAPMSHeaderOnly and SAPMSPeerMessage compatibility subclasses.
  • examples/router_fingerprint.py: Avoided misclassifying control replies as
    errors, duplicate-record hit inflation, and exporting matched database rows
    in place of actual observations.
  • pysap/SAPMS.py: Decode Message Server-forwarded peer frames with
    iflag=0 as messages rather than ADM records, avoiding short-message
    parser failures in ms_listener.py.
  • pysap/SAPMS.py and Message Server examples: Distinguished forwarded peer,
    Dispatcher ADM, ASCS Gateway, and header-only frames; added bounded
    connection/response timeouts, reliable cleanup, scripted monitor startup,
    and configurable impersonator identity fields (@martingalloar, #108).
  • examples/router_admin.py, examples/router_password_check.py: Accept
    password-only info requests without logging the password, bound admin
    acknowledgements, and use bounded NI-stream framing for password-check
    timings instead of a partial raw read.
  • pysap/SAPRouter.py: Omit route passwords from native-proxy debug logs.
  • examples/router_scanner.py: Serialize expanded network targets as host
    strings, distinguish denied routes from unreachable targets, and detect
    quick raw-mode closes before reporting a target open.
  • pysap/SAPRouter.py, examples/router_niping.py: Report non-denial router
    replies as typed SAPRouterResponseError values and close failed routed
    sockets instead of leaking them or showing an uncaught traceback; the
    example now exits nonzero on connection failure.
  • pysap/SAPNI.py: Treat a clean stream EOF as normal NI server-handler
    disconnect instead of surfacing an unhandled exception.
  • Breaking: Replaced the incompatible SAPRFCTHStruct name with
    pysap.SAPEPP.SAPEPP and its canonical fields (@martingalloar, #107).
  • pysap/SAPCAR.py: Fixed multi-block extraction (@martingalloar, #104).
  • pysap/SAPRFC.py: Fixed Python 3 string/bytes handling and added
    SAPXPG_END_XPG handling (@Tmm, #103).

Full Changelog: v0.2.0...v0.2.1