• PyGate Has been released

    From Stephen Walsh@3:633/280 to All on Thu Jan 22 11:36:10 2026
    Hello everybody!


    PyGate - Python FidoNet-NNTP Gateway, has been released to the public.

    PyGate is a Python-based gateway system that bridges FidoNet echomail and NNTP newsgroups, allowing seamless message exchange between the two networks.

    Version: 1.5.2
    Author: Stephen Walsh
    Contact: vk3heg@gmail.com | FidoNet 3:633/280 | FSXNet 21:1/195 | Amiganet 39:901/280
    Based on: SoupGate by Tom Torfs

    Features
    Core Functionality

    Bidirectional Gateway: Messages flow seamlessly between FidoNet and NNTP
    Flexible Deployment Modes: Full gateway mode or client-only mode
    Area Mapping: Flexible mapping between FidoNet areas and NNTP newsgroups
    Message Hold System: Manual review and approval of messages
    Spam Filtering: Advanced regex-based filtering with built-in patterns
    Netmail Notifications: Automatic notifications for held messages
    Areafix Support: Dynamic area management via netmail with wildcard protection
    Character Set Handling: Proper encoding conversion per FTS standards

    Advanced Features

    Message Deduplication: Prevents duplicate messages
    Cross-posting Control: Configurable limits on cross-posted messages
    Timezone Support: Proper timezone handling (TZUTC)
    Message Threading: Preserves reply chains and references
    Administrative Panel: Admin panel interface for message review of held messages, filter management, newsrc management, newsgroups list viewing.

    Requirements

    Python 3.7 or higher
    NNTP server access
    FidoNet mailer (binkd recommended)
    Required Python packages:
    configparser
    pathlib
    logging
    datetime
    uuid
    json
    paramiko (for SSH/remote ctlinnd on Windows deployments)
    psutil (for automation script process management)


    Deployment Modes

    PyGate supports two deployment modes:
    Full Gateway Mode (Default)

    In this mode, PyGate manages both the NNTP connection and the server configuration:

    Updates local newsrc file when areas are added/removed
    Executes ctlinnd commands to create/remove newsgroups on NNTP server
    Requires server administrative privileges or SSH access
    Best for deployments where PyGate runs on or manages the news server

    [Gateway]
    client_mode = false # or omit this line (false is default)

    Client-Only Mode

    In this mode, PyGate operates as a standard NNTP client without server management:

    Updates local newsrc file when areas are added/removed
    Does NOT execute ctlinnd commands
    Assumes newsgroups already exist on the remote NNTP server
    Does not require server administrative privileges
    Best for connecting to external/remote news servers you don't control

    [Gateway]
    client_mode = true

    When to use client-only mode:

    Connecting to a remote news server you don't administer
    Using a commercial or third-party news provider
    Testing PyGate without affecting server configuration
    Security-restricted environments where ctlinnd access is unavailable

    Note: In client-only mode, areafix operations will still update your local newsrc file, but you must ensure the corresponding newsgroups exist on the NNTP
    server before subscribing to them.


    Message Hold System

    The hold system allows manual review of messages before they are gated, providing control over message flow. When areas are remapped to fidonet echomail
    areas. This is mainly to protect fidonet from usenet spam.

    Configuration

    Enable holding in pygate.cfg:

    [Arearemap]
    Hold = yes
    notify_sysop = yes

    How It Works

    Message Evaluation: Each message is checked against area mappings
    Hold Decision: Messages in mapped areas are held for review
    Notification: Netmail sent to sysop (once per hour maximum)
    Review Process: Admin reviews messages via admin panel
    Action: Messages are approved, rejected, or archived

    Notification System

    When messages are held:

    Netmail sent to sysop at linked_address
    Rate Limited: Maximum one notification per hour
    Comprehensive: Lists all areas with pending messages
    Tracking: State saved in hold/notifications.json





    https://github.com/vk3heg/pygate




    Vorlon


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Tommi Koivula@2:221/1 to All on Thu Jan 22 17:33:20 2026
    On 22.01.2026 17.15, Stephen Walsh wrote:

    Hello everybody!

    PyGate - Python FidoNet-NNTP Gateway, has been released to the public.

    Testing...

    Based on: SoupGate by Tom Torfs

    +1 :)

    'Tommi


    --- PyGate Linux v1.5.2
    * Origin: RBB PyGate (2:221/1)
  • From Stephen Walsh@3:633/280 to Tommi Koivula on Fri Jan 23 11:05:52 2026
    Hello Tommi!

    22 Jan 26 17:33, you wrote to all:

    PyGate - Python FidoNet-NNTP Gateway, has been released to the
    public.

    Testing...

    Will be waiting for any feedback!

    It's been running here on my news server every half an hour since I started the project in October last year.

    Based on: SoupGate by Tom Torfs

    +1 :)

    Soupgate was good, but there was just to many bits that needed bolting together.

    Compiling it for Linux showed a number of short comings and bugs.



    Stephen


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Tommi Koivula@2:221/10 to All on Fri Jan 23 19:41:34 2026
    Stephen Walsh wrote:

    Will be waiting for any feedback!

    Ok, here is goes, for starters. :)

    I installed it first as a point. (Pygate: 2:221/1.100, Boss: 2:221/1). Noticed the the .pkts Pygate creates are from 2:221/1 to 2:221/1. No point. :(

    Then I was wondering why some messages from fidonet are not apperaring at my INN. It seems that Pygate sees only one message per one .pkt. It this case there are two, but only one gets to my news server:

    # pktinfo -h 6973af9c.pkt
    PktInfo/lnx 1.9 2024-03-02

    Packet header ========================================================================= Filename : 6973af9c.pkt
    OrigAddr : 2:221/600.0
    DestAddr : 2:221/10.0
    AuxNet : 0
    CapWord : 0x0001
    DateCreation : Fri 2026-01-23 19:27:55
    ProdCode : 10ff
    ProdVersion : 1.9

    Message header -+-----------------------------------------------------------------------
    From : "Tommi Koivula"
    To : "All"
    Subject : "1p"
    DateTime : "23 Jan 26 19:26:54"
    Attr : 0x0000
    OrigAddr : 221/0
    DestAddr : 221/10

    Message header -+-----------------------------------------------------------------------
    From : "Tommi Koivula"
    To : "All"
    Subject : "2p??"
    DateTime : "23 Jan 26 19:27:14"
    Attr : 0x0000
    OrigAddr : 221/0
    DestAddr : 221/10



    Starting import operation...
    INFO - Starting packet import operation
    INFO - Processing approved held messages for NNTP posting
    INFO - No approved messages to post to NNTP
    INFO - Processing packet: /bbs/piste/obox/pygate/6973af9c.pkt
    INFO - Parsed 1 messages from /bbs/piste/obox/pygate/6973af9c.pkt

    Ok, now it is running for some echos like this one.

    Let's see how it goes...

    'Tommi

    --- PyGate Linux v1.5.2
    * Origin: RBB PyGate (2:221/10)
  • From Tommi Koivula@2:221/10 to All on Fri Jan 23 19:50:34 2026
    Stephen Walsh wrote:

    One more thing. Some newsreaders like HotDogED put "X-Comment-To" line when replying. Would be nice if PyGate could read that and put it in "To:" field in fidonet .PKT.

    Soupgate was good, but there was just to many bits that needed
    bolting together.

    It is still doing it's job here, like it has been done over 25 years.. Not perfect but it is running. :)

    Compiling it for Linux showed a number of short comings and bugs.

    I've got it compiled and running in Linux. But Spoon dies when trying to post.. That's why I still use OS/2 to post. :)

    'Tommi

    --- PyGate Linux v1.5.2
    * Origin: RBB PyGate (2:221/10)
  • From Stephen Walsh@3:633/280 to Tommi Koivula on Sat Jan 24 12:38:38 2026
    Hello Tommi!

    23 Jan 26 19:41, you wrote to all:

    I installed it first as a point. (Pygate: 2:221/1.100, Boss: 2:221/1). Noticed the the .pkts Pygate creates are from 2:221/1 to 2:221/1. No point. :(

    I didn't code it to run as a point, so that's why that issue shows up.

    Then I was wondering why some messages from fidonet are not apperaring
    at my INN. It seems that Pygate sees only one message per one .pkt. It this case there are two, but only one gets to my news server:

    I'll test that out and look at a fix.


    Stephen


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Tommi Koivula@2:221/10 to All on Sat Jan 24 10:11:34 2026
    On 24.01.2026 5.50, Stephen Walsh wrote:

    I installed it first as a point. (Pygate: 2:221/1.100, Boss: 2:221/1). Noticed the the .pkts Pygate creates are from 2:221/1 to 2:221/1. No point. :(

    I didn't code it to run as a point, so that's why that issue shows up.

    Sure thing. However, it is better to run tests as a point rather than an unlisted node. ;)

    Then I was wondering why some messages from fidonet are not apperaring
    at my INN. It seems that Pygate sees only one message per one .pkt. It this case there are two, but only one gets to my news server:

    I'll test that out and look at a fix.

    Thanks.

    Usually there are not many messages going in that direction. I did a
    %rescan for this area and only the first message showed up.

    'Tommi





    --- PyGate Linux v1.5.2
    * Origin: RBB PyGate (2:221/10)
  • From Stephen Walsh@3:633/280 to Tommi Koivula on Sat Jan 24 22:51:20 2026
    Hello Tommi!

    23 Jan 26 19:50, you wrote to all:

    Soupgate was good, but there was just to many bits that needed
    bolting together.

    It is still doing it's job here, like it has been done over 25 years..
    Not perfect but it is running. :)

    In the testing I did, it was prone to not doing a full run.
    Also having to use a 2-3 step process was a pain.

    Compiling it for Linux showed a number of short comings and bugs.

    I've got it compiled and running in Linux. But Spoon dies when trying
    to post.. That's why I still use OS/2 to post. :)

    Have you compiled it on a 64bit system? That will come along and bite you even more.
    Yes, spoon was a pain in the backside. Having the source code was fine and good, but it was missing
    files. (I find it hard to read/understand 'c', so fixing the bugs was above my skill level).




    Stephen


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Stephen Walsh@3:633/280 to Tommi Koivula on Sat Jan 24 22:44:16 2026
    Hello Tommi!

    24 Jan 26 10:11, you wrote to all:

    Noticed the the .pkts Pygate creates are from 2:221/1 to
    2:221/1. No point. :(

    I didn't code it to run as a point, so that's why that issue shows
    up.

    Sure thing. However, it is better to run tests as a point rather than
    an unlisted node. ;)

    This has now been put in place. I've not tested it though. #-;
    Your the guinea pig for that!

    Then I was wondering why some messages from fidonet are not
    apperaring at my INN. It seems that Pygate sees only one message per
    one .pkt. It this case there are two, but only one gets to my news
    server:

    I'll test that out and look at a fix.

    Usually there are not many messages going in that direction. I did a %rescan for this area and only the first message showed up.


    Yeah, I was only working with single messages myself going to nntp, as it's very rare to see more then
    one at a time from fidonet.

    This has now been implemented. Tested with two messages, so should work with more. The messages go
    through the same process stream.



    Stephen


    --- GoldED+/LNX 1.1.5-b20250409
    * Origin: Dragon's Lair ---:- dragon.vk3heg.net -:--- Prt: 6800 (3:633/280)
  • From Mortar M.@1:124/5016 to Tommi Koivula on Sat Jan 24 21:35:24 2026
    Re: Re: PyGate Has been released
    By: Tommi Koivula to All on Fri Jan 23 2026 19:41:35

    ...some messages from fidonet are not apperaring at my INN.

    Maybe there's no room? ;)
    --- SBBSecho 3.35-Linux
    * Origin: End Of The Line BBS - endofthelinebbs.com (1:124/5016)
  • From Tommi Koivula@2:221/1.1 to Stephen Walsh on Sun Jan 25 09:30:10 2026
    Hi Stephen.

    24 Jan 26 22:51:20, you wrote to me:

    Compiling it for Linux showed a number of short comings and bugs.

    I've got it compiled and running in Linux. But Spoon dies when
    trying to post.. That's why I still use OS/2 to post. :)

    Have you compiled it on a 64bit system? That will come along and bite
    you even more. Yes, spoon was a pain in the backside. Having the source code was fine and good, but it was missing files. (I find it hard to read/understand 'c', so fixing the bugs was above my skill level).

    I compiled soupgate with "-m32" in 64bit debian. It works.

    Spoon compiles 64bit. It can fetch mail and news, but when posting it crashes. Tried to compile also in real 32bit debian but no luck.

    === Cut ===
    Posting mail to localhost...
    Mailing from SysOp@f1.n221.z2.fidonet.fi
    Mailing to ping@tkk.iki.fi
    free(): double free detected in tcache 2
    ./send.sh: line 10: 145759 Aborted (core dumped)
    === Cut ===

    I don't really know C/C++, so there's not much to do.

    'Tommi

    ---
    * Origin: Point One (2:221/1.1)
  • From Tommi Koivula@2:221/1.1 to Stephen Walsh on Sun Jan 25 09:46:40 2026
    Hi Stephen.

    24 Jan 26 22:44:16, you wrote to me:

    Noticed the the .pkts Pygate creates are from 2:221/1 to
    2:221/1. No point. :(

    I didn't code it to run as a point, so that's why that issue shows
    up.

    Sure thing. However, it is better to run tests as a point rather
    than an unlisted node. ;)

    This has now been put in place. I've not tested it though. #-;
    Your the guinea pig for that!

    The Pig says well done. :)

    Yeah, I was only working with single messages myself going to nntp, as it's very rare to see more then one at a time from fidonet.

    This has now been implemented. Tested with two messages, so should work with more. The messages go through the same process stream.

    This one works fine now. I did a rescan of 15 messages. :)

    === Cut ===

    - INFO - Processing packet: /bbs/pygate/inbound/6974b8a2.pkt
    - INFO - Parsed 15 messages from /bbs/pygate/inbound/6974b8a2.pkt
    - INFO - Loaded 4 areas from config/newsrc
    - INFO - Connecting to NNTP server 192.168.10.2:119
    - INFO - Posting message to rbb.test.1: 1
    - INFO - Message posted successfully: NNTPResponse(code=240,
    .....
    - INFO - Area RBB.TEST.1: 15 gated, 0 filtered, 0 failed
    - INFO - Updating newsrc for 1 newsgroup(s) after import
    - INFO - Loaded 4 areas from config/newsrc
    - INFO - Updated rbb.test.1 (rbb.test.1): 10 -> 25
    - INFO - Updated newsrc configuration
    - INFO - Newsrc updated successfully after import
    - INFO - Import complete: 1 packets processed
    === Cut ===

    'Tommi

    ---
    * Origin: Point One (2:221/1.1)
  • From Tommi Koivula@2:221/10 to All on Sun Jan 25 10:07:32 2026
    On 25.01.2026 7.40, Mortar M. wrote:

    ...some messages from fidonet are not apperaring at my INN.

    Maybe there's no room? ;)

    There was enough space in the lobby. ;)

    'Tommi

    --- PyGate Linux v1.5.5
    * Origin: RBB PyGate (2:221/10)