OsCam Changelogs

There are 216 replies in this Thread which was already clicked 59,130 times. The last Post () by kalkan99.

  • Changeset 11943-c656fef9



    08.02.2026


    dvbapi: use SERVICE_TYPE_MASK descriptor to fix CW delivery for shared services


    When stream_write_cw() successfully delivers a CW to a stream client,

    it returns true and prevents the same CW from being written via the

    CA device (ioctl/netsend). This exclusive routing causes a CW gap

    on demuxers that require CA device delivery until the next cw cycle,

    because stream_write_cw() consumes the CW before the stream client

    has fully disconnected.


    Parse the SERVICE_TYPE_MASK descriptor (0x85) from the CA PMT to

    identify whether a demux serves a stream client (type 7/8) or requires

    direct CA device or netsend descrambling. For demuxers that require

    CA device or netsend delivery, always write the CW via dvbapi_write_cw

    regardless of whether stream_write_cw() consumed it. For stream-only

    demuxers and clients that don't send descriptor 0x85, preserve the

    original exclusive behavior.



    thanks WXbet

  • Changeset 11945-6c8324e0





    28.02.2026



    warnings: fix C23 and glibc-2.43 -Wdiscarded-qualifiers warnings



    For ISO C23, the function strstr that return pointers into their input

    arrays now have definitions as macros that return a pointer to a

    const-qualified type when the input argument is a pointer to a const-qualified

    type.



    https://lists.gnu.org/archive/html/info ... 00005.html



    Co-authored-by Rudi Heitbaum



    thanks WXbet

  • Changeset 11946-5d00e7e2



    07.04.2026


    signing: fix build with OpenSSL 4


    * fix -Wdiscarded-qualifiers on X509_get_subject/issuer_name

    OpenSSL 4 changed X509_get_subject_name() and X509_get_issuer_name()

    to return 'const X509_NAME *', which breaks the call to our local

    helper _X509_NAME_oneline_utf8() that still takes a non-const

    X509_NAME *:

    oscam-signing.c:235:46: warning: passing argument 1 of

    '_X509_NAME_oneline_utf8' discards 'const' qualifier from

    pointer target type [-Wdiscarded-qualifiers]

    Route the result of the X509 getters through a uintptr_t cast to

    explicitly drop the const qualifier at the call sites, mirroring the

    approach already used for ASN1_STRING_type() in ASN1_TIME_to_posix_time().

    This avoids changing the helper's signature, which would require a

    more invasive const-correctness pass given that older OpenSSL versions

    (including 0.9.x, still supported by this file) declared many X509

    APIs as non-const.

    * fix ASN1_STRING_type() accessor

    In OpenSSL 4 the ASN1_STRING / ASN1_TIME struct became fully opaque,

    so struct members can no longer be accessed directly from public

    headers. This broke the WITH_SIGNING build:

    oscam-signing.c:124:17: error: invalid use of incomplete typedef

    'ASN1_TIME' {aka 'const struct asn1_string_st'}

    switch(t->type)

    The data pointer was already handled via ASN1_STRING_get0_data() for

    OpenSSL >= 1.1.0, but t->type was still accessed directly and was

    overlooked until OpenSSL 4 removed the last bit of struct visibility.

    Replace the direct member access with the ASN1_STRING_type() accessor

    function, which has existed since OpenSSL 0.9.x and is therefore

    available in all supported versions (1.0, 1.1, 3.x, 4.x) without a

    version guard.

    Since older OpenSSL versions declare ASN1_STRING_type() as taking a

    non-const ASN1_STRING *, the cast is routed through uintptr_t to

    explicitly drop the const qualifier of t without triggering

    -Wdiscarded-qualifiers (treated as error by the 'ancient' CI build).

    uintptr_t is already available via globals.h (stdint.h).



    thanks WXbet

  • Changeset 11949-53e2466a


    11.04.2026


    webif: remove poll from request read loop



    Simplify WebIf request handling by relying on check_request()

    to detect complete HTTP headers and request bodies instead of

    polling the socket between reads.

    This removes the extra poll-based wait path while preserving

    correct handling for fragmented GET and POST requests.

    thx to lpm11


    thanks tem_invictus

  • Changeset 11952-de145170

    20.04.2026


    thanks WXbet


    • Official Post

    11954

    tests: enable reliable standalone test builds and proper CI failure reporting


    https://git.streamboard.tv/common/oscam/-/commit/f30eebf5ac803005ca206424b2fb294a8c605d84




    • Official Post

    11955

    tests: gate run_aes_key_list_tests with READER_VIACCESS


    https://git.streamboard.tv/common/oscam/-/commit/dd3606d48576b744f2df8a21f6d7b57fb7aa9c53



    • Official Post

    11956

    build: remove obsolete WITH_SSL config entry


    https://git.streamboard.tv/common/oscam/-/commit/5574068fd2d38b4a7ead9cfe9e1be33cd778c253


    • Official Post

    11957

    cscrypt: fix DES symbol collision in mdc2 header when WITH_SSL is on


    https://git.streamboard.tv/common/oscam/-/commit/fb4a8929c0e4af088f81211157c708b87396d6c7


    • Official Post

    11958

    webif: include WITH_SSL in is_defined.txt when USE_SSL flag is set


    https://git.streamboard.tv/common/oscam/-/commit/b324f994d05b3d807ebe87e1d077509e2df8b0b1


  • Changeset 11959-11a966f7


    07.05.2026


    oscam-chk: remove unused loop counter nr in CS_CACHEEX_AIO sid-check functions


    GCC 16.1 warns about nr being set but never read (-Wunused-but-set-variable).

    The counter was only incremented in the for-clause but its value was never

    consumed, so it is dropped entirely.



    thanks WXbet

    • Official Post

    11960

    webif: drop unused loop counter in pages_gen.c


     https://git.streamboard.tv/common/oscam/-/commit/d9e40e77b0694ab50a7ee40b63093ed796226419


    Code
    GCC >= 9 -Wunused-but-set-variable flags the 'i' counter in the
    strtok_r dependency loop — only incremented, never read. The two
    strtok_r() calls already drive the iteration via the ptr return,
    so the counter is dead weight.
  • Changeset 11963-73ff45f6


    05.06.2026



    fix(net): make cs_inet_ntoa thread-safe and IPv6-safe at call sites




    * Document cs_inet_ntoa startup-only init guard


    Clarify that inet_ntoa_key_initialized is set during single-threaded

    startup and is only a misuse guard, not synchronization for lazy

    runtime initialization.


    * oscam-net: move cs_inet_ntoa TLS init to startup


    Initialize the cs_inet_ntoa TLS key from main() instead of using

    pthread_once in the hot path.


    Also harden the new startup-based initialization by making

    cs_inet_ntoa_init() idempotent, failing fast on use-before-init or

    TLS setup failures, and returning the writable buffer on inet_ntop

    errors instead of a string literal.


    * fix(net): make cs_inet_ntoa thread-safe and IPv6-safe at call sites


    The existing cs_inet_ntoa() implementation was not thread-safe:


    - with IPV6SUPPORT it returned a single static buffer

    - without IPV6SUPPORT it returned inet_ntoa(), which also uses shared static storage


    That meant concurrent calls from different threads could overwrite each

    other's result. A review comment suggested locking around all callers, but

    that would be fragile and easy to miss given the large number of call sites.


    This change fixes the problem centrally in cs_inet_ntoa() by replacing the

    shared storage with per-thread rotating buffers stored via pthread TLS.

    That keeps the existing API intact while making concurrent callers safe.


    Changes included:

    - add pthread_once/pthread_key based TLS storage for cs_inet_ntoa()

    - use a small rotating per-thread buffer set so multiple calls in one

    expression/thread can coexist briefly

    - replace the IPv4 inet_ntoa() path with inet_ntop(AF_INET, ...)

    - handle TLS setup/allocation failure safely by returning an empty string

    instead of risking writes through invalid storage

    - clear/check inet_ntop() output so failed conversions do not leak stale

    data from a reused slot


    In addition, clean up several callers and builders that assumed IPv4-sized

    address strings:

    - widen temporary IP buffers to INET6_ADDRSTRLEN in oscam-client.c,

    oscam-cache.c, and oscam-ecm.c

    - enlarge the disconnect log buffer in oscam-client.c

    - update mk_t_iprange() sizing in oscam-conf-mk.c so serialized ranges have

    enough room for full IPv6 addresses


    Behavioral notes:

    - no caller API changes are required

    - cs_inet_ntoa() still returns temporary storage and callers should still

    copy the string if they need to keep it

    - logs/WebIf/config serialization may now contain full IPv6 addresses where

    output was previously truncated or racy






    thanks tem_invictus

Your resource for OSCam softcam

Find configs, downloads, tutorials, and support for setting up and optimizing this open-source card server with wide protocol compatibility. Master the versatile OSCam softcam. Access support, configs, tutorials, and downloads for open-source card sharing and multi-protocol server management.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!