diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..da6ad108c --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,15 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +polar: # Replace with a single Polar username +buy_me_a_coffee: # Replace with a single Buy Me a Coffee username +thanks_dev: # Replace with a single thanks.dev username +custom: ['https://www.digitalocean.com/?refcode=2b2e5ea689b2&utm_campaign=Referral_Invite&utm_medium=Referral_Program', 'https://www.eggheads.org'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index d3dacb753..0b4786a08 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -11,7 +11,7 @@ jobs: name: Tcl Versions strategy: matrix: - tcl_version: [ '8.5.19', '8.6.14', '8.7a5', '9.0b2' ] + tcl_version: [ '8.5.19', '8.6.14', '8.7a5', '9.0.0' ] continue-on-error: true runs-on: ubuntu-latest steps: @@ -31,6 +31,7 @@ jobs: cd tcl${{ matrix.tcl_version }}/unix && \ ./configure --prefix=$HOME/tcl && \ make -j4 && make install + - uses: ammaraskar/gcc-problem-matcher@master - name: Build run: | ./configure --with-tcl=$HOME/tcl/lib | tee configure.log @@ -58,6 +59,7 @@ jobs: sha256sum --status --check <(echo f1d9f3ed1b85a82ecf80d0e2d389e1fda3fca9a4dba0bf07adbf231e1a5e2fd6 openssl-0.9.8zh.tar.gz) && \ tar xzf openssl-0.9.8zh.tar.gz && \ cd openssl-0.9.8zh && ./config --prefix=$HOME/ssl -fPIC && make -j4 && make install_sw + - uses: ammaraskar/gcc-problem-matcher@master - name: Build run: | cd $GITHUB_WORKSPACE/eggdrop @@ -86,6 +88,7 @@ jobs: sha256sum --status --check <(echo ecd0c6ffb493dd06707d38b14bb4d8c2288bb7033735606569d8f90f89669d16 openssl-1.0.2u.tar.gz) && \ tar xzf openssl-1.0.2u.tar.gz && \ cd openssl-1.0.2u && ./config --prefix=$HOME/ssl -fPIC && make -j4 && make install_sw + - uses: ammaraskar/gcc-problem-matcher@master - name: Build run: | cd $GITHUB_WORKSPACE/eggdrop @@ -117,6 +120,7 @@ jobs: - uses: actions/checkout@v4 with: path: 'eggdrop' + - uses: ammaraskar/gcc-problem-matcher@master - name: Build run: | cd $GITHUB_WORKSPACE/eggdrop @@ -159,6 +163,7 @@ jobs: path: 'eggdrop' - name: install dependencies run: sudo apt-get update && sudo apt-get install tcl tcl-dev + - uses: ammaraskar/gcc-problem-matcher@master - name: Build run: | cd $GITHUB_WORKSPACE/eggdrop diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index 7dc22acd9..ddd97ae61 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -17,6 +17,8 @@ jobs: - uses: actions/checkout@v4 - name: install dependencies run: sudo apt-get update && sudo apt-get install clang tcl tcl-dev openssl libssl-dev + - uses: ammaraskar/gcc-problem-matcher@master + if: ${{ matrix.cc == 'gcc' }} - name: Build env: CC: ${{ matrix.cc }} @@ -35,5 +37,6 @@ jobs: - uses: actions/checkout@v4 - name: install dependencies run: sudo apt-get update && sudo apt-get install tcl tcl-dev openssl libssl-dev + - uses: ammaraskar/gcc-problem-matcher@master - name: Build run: ./configure ${{ matrix.conf_tls }} ${{ matrix.conf_ipv6 }} ${{ matrix.conf_tdns }} && make config && make -j4 diff --git a/ChangeLog.gz b/ChangeLog.gz index 4d44a0caa..2bf583e48 100644 Binary files a/ChangeLog.gz and b/ChangeLog.gz differ diff --git a/NEWS b/NEWS index 54eea1d7e..adc7ec616 100644 --- a/NEWS +++ b/NEWS @@ -6,314 +6,104 @@ Last revised: December 4, 2021 This file lists major and incompatible changes in Eggdrop versions. - You can find the full list of changes in doc/Changes1.9. + You can find the full list of changes in doc/Changes1.10. For support, feel free to visit us on Libera #eggdrop. - For upgrading from a pre-1.6 version of Eggdrop: Read the UPGRADING file. + For upgrading help, read the UPGRADING file. - In general, always make a BACKUP of your config and user/chanfile. + In general, always make a BACKUP of your config and user/chanfile + before performing an upgrade! _________________________________________________________________ -Eggdrop v1.9.5: +Eggdrop v1.10.0: General changes: - - Implemented a workaround for a Tcl issue parsing emojis that can cause a - crash - - Fixed an improper change to the display of bind flags that caused issues - with Tcl scripts that parse bind flags - - Added SSL header information to .status to help diagnose ./configure - mismatches - - Lots of under-the-hood bug fixes + - Added the new Tcl 'autoscripts' capability. By loading the autoscripts Tcl + script, Eggdrop can automatically view, download and install Tcl scripts + hosted by the Eggheads team, all via the partyline! No modification of the + config file needed. + - Eggdrop can now use the account a user is logged into as an identification + method in the same manner that a hostmask does. For this feature to be + fully accurate, Eggdrop use a server with WHOX enabled and negotiate the + extended-join and account-notify IRCv3 capabilities. + - Added the IRCv3 userhost-in-names capability. This capability is + negotiated with the server at connect and prompts the server to add + hostmask to the NAMES command. This is useful in a scenario where an IRC + server has disabled the WHO command, but allows + Eggdrop to still track hostmasks (and removes the "pending" status from + the channel listing under .status). + - Added the IRCv3 standard-replies capability. This capability is negotiated + with the server at connect and enables the use of non-numeric FAIL, WARN, + and NOTE messages. + - Modified .bans to properly display channel bans. + - Fixed a bug with network reads performed on TLS connections, where + Eggdrop could hang until a connection times out, most commonly + manifesting itself on server connects and userfile transfers. This is + expected to fix the last documented issue with Eggdrop's handling of + secure connections. + - Eggdrop now requires TLS/SSL libs to be installed by default. Whereas + previously Eggdrop would previously continue to compile if TLS libraries + were not found, it will now error unless the user explicitly specifies + the --disable-tls flag. + - Fixed the Monitor bind to properly use wildcards in binds. + - Updated language files from ISO-8859 to UTF-8. Botnet changes: - - None + - Fixed an issue in pbkdf2-only links properly using/comparing PASS2 entries Tcl API changes: - - Tcl minimum required version is now 8.5! This actually happened in version - 1.9.0; we just forgot to tell people. Oops! :) + - Updated much of the core Tcl integration to be compatible with the + upcoming Tcl 9 release. Much work was done (thank you DasBrain!) to update + Eggdrop's internal Tcl calls to prevent breakages using Tcl 9. Most of + these changes are transparent to the user, but the one major item to call + out is the improvement of Tcl's UTF-8 emoji handling, which no longer + requires users to modify TCL_MAX and compile Tcl manually in order to use + emojis properly. + - The Python module (below) adds the pysource Tcl command, to load + a python script into Eggdrop. + - Added the Tcl CHGHOST bind, which is triggered when a user's + hostmask is changed via an IRCv3 CHGHOST message. + - Added the 'hidden-host' type to the event (EVNT) bind. This bind + is triggered when the bot's own host is hidden (+x) by a 396 + message sent by server. + - Added the 'got-chanlist' type to the event (EVNT) bind. This bind + is triggered once Eggdrop finishes receiving the list of usernames + for a channel from a server. This can be used when Eggdrop needs to + wait to perform specific functions when joining a channel but + needs to wait until the users on a channel have been presented by + the server. + - Fixed a bug in the isidentified command to check if a user has + definitively been identified or unidentified. Module changes: - - Updated woobie.mod with additional example code + - Added a Python module! This module integrates an embedded Python + interpreter similar to the Tcl interpreter already present in + Eggdrop. This module adds the .python command to the partyline + (again, similar to the .tcl command) to execute python strings, + as well as adding the pysource Tcl command that will load a Python + script into Eggdrop. See doc/modules/mod.python for details on how + to use it, or example scripts in the scripts/ directory. Eggdrop config changes: - - None + - The copy-to-tmp option was removed from the config. This value is + now functions under the old '1' behavior where an intermediate temp + file is created before copying from/to files that are in use. + - The quick-logs option was removed from the config. This value was + created to hedge against frequent writes to disk, but is less + relveant with today's technology. Eggdrop now writes logfiles to + disk immediately. + - The old DNS module section was removed + - A Python module section was added, but does not load the python + module by default. + - The Autoscripts capability to load and manage some scripts from the + partyline is loaded by default Documentation changes: - - Added additional documentation to help write modules - - Updated botnet docs to include reference to TLS docs for secure links - - Updated Tcl repo from unmaintained FTP to HTTP repository - -Eggdrop v1.9.4: - - General changes: - - Fixed a DNS bug causing Eggdrop to often hang on DCC or telnet - connections - - BETA: Added -systemd option to autobotchk script to restart Eggdrop via - systemd instead of cron - - Reverted matchattr match syntax to previous functionality. Matching - against "-" as a flag will once again successfully match against "no" - flags, instead of returning an error. - - Fixed some inaccurate log messages - - Fixed some format specifiers that could cause crashes in certain - situations - - Fixed logging of TAGMSG messages - - Fixed unspecified behavior of freeaddrinfo() on some BSD systems - - Botnet changes: - - None - - Tcl API changes: - - Moved the 'gotmsg' function back as a raw bind. It was inadvertently - moved to a rawt bind in 1.9.3, causing issues with scripts attempting to - unbind this internal reference - Module changes: - - None - -Eggdrop config changes: - - None - - -Eggdrop v1.9.3: - - General changes: - - Added the ability to track services account names for users in a channel - and those added to an Eggdrop. To work properly, this feature requires a - server that supports WHOX requests and can negotiate the extended-join - and account-notify capabilities - - Added the +account and -account partyline commands to add or remove a - services account name to a handle - - Updated .channel output to display services account names associated with - channel users - - Added the ability to create a timer with a custom name instead of the - default "timerXX" format - - Fixed a compile error if TLS libraraies weren't detected on the host OS - - Fixed a compile error for pthreads found mainly on BSD systems - - Fixed a bug with threaded DNS queries where threads were not terminated - properly, potentially resulting in an out-of-memory error - - Fixed an issue where PLAIN SASL authentication incorrectly errored unless - (unneeded) TLS libraries were installed - - Updated information obtained via extended-join to all channels the user is - on, not just the channel they joined - - Force ident requests to originate from the specified vhost/listen IP - - Reorganized the documentation structure - - Botnet changes: - - None - - Tcl API changes: - - Updated the 'finduser' command to accept the -account flag. Using this - flag will search the userfile and return the handle that contains the - provided account name - - Updated the getuser and setuser commands to accept the "ACCOUNT" entry - - Added the 'accounttracking' variable, which returns a '1' if all three - requirements (WHOX, extended-join, and account-notify) are available and - active for the current server connection - - Added an optional timer name field to the timer and utimer commands - - Updated docs to reflect a value of '0' for the server-online value when - Eggdrop is disconnected - - Module changes: - - None - - Eggdrop config changes: - - None - - _________________________________________________________________ - -Eggdrop v1.9.2: - - General changes: - - Added CAP 302 support, and generally enhance CAP support - - Enabled threaded core DNS requests as the default method for DNS lookups; - this can be disabled with ./configure --disable-tdns - - Added support for the MONITOR CAP capability, allowing tracking of online - and offline nicknames - - Added support for the 005 BOT flag, allowing tracking of users that - declare themselves as bots to the IRC server - - Added SSL status to the .bottree command, denoted with a '=' symbol - - Fixed allowing Eggdrop to process message-tags even if the message-tags - capability is not explicitly requested - - Alt-nick is now used before a randomly generated nickname if the requested - nickname is rejected as invalid by the server. This feature is now - divorced of any previous dependence on the keep-nick setting, with the - reasoning that getting the Eggdrop onto the server with a random nick is - more important than keeping a nickname and not ever joining, particularly - from a troubleshooting standpoint - - RAWT binds returning a '1' now block similar RAW binds from triggering - by the same activity (but RAW binds cannot block a RAWT bind- use a RAWT!) - - Fixed mistakenly requiring a flag for the 'listen script' command - - Fixed an issue with Eggdrop not properly updating the account-tracking - status - - Botnet changes: - - None - - Tcl API changes: - - Added the 'monitor' command, which allows interaction with the CAP - MONITOR capability - - Added the 'isircbot' command, which returns if a user has registered as a - bot with the IRC server - - Added the 'server list' command, which lists servers added to Eggdrop - - Added the USERNOTICE bind to the Twitch module - - Added a 'values' argument to the 'cap' command, outputting the display of - CAP 302 values, if any, associated with each capability - - Module changes: - - Fixed bug in PBKDF2 that caused PBKDF2-only environments to not store - hashes properly, resulting in 'bad password' errors after relinking - - Deprecated the DNS module (functionality has been moved core Eggdrop - code). Eggdrop now natively handles asynchronous DNS (which was the - purpose of the DNS module), so the DNS module is no longer needed - - Fixed a bug with the Twitch module where it would crash on .rehash and - .restart - - Eggdrop config file changes: - - Added the 'extended-join' setting, to enable the extended-join CAP - capability - - Moved DNS-related settings out of the modules section and into the core - config area - - No longer load the (now-deprecated) DNS module by default - - _________________________________________________________________ - -Eggdrop v1.9.1: - - General changes: - - Fixed an issue where an IP address was incorrectly overwritten after a - CTCP chat was received - - Fixed an issue where Eggdrop would occasionally crash if no port was - provided when the server was added - - Error, instead of silently change, when adding a bot with invalid ascii - characters in the handle (.+bot) - - Removed an incorrect error message after restarting the bot with the - PBKDF2 module loaded - - Further improved error reporting for socket connections - - Botnet changes: - - None - - Tcl API changes: - - Fixed the isaway command to properly track AWAY server messages - - Module changes: - - None - - Eggdrop config file changes: - - Added Libera Chat to the accepted server types - - _________________________________________________________________ - -Eggdrop v1.9.0: - - General changes: - - Added CAP support, allowing Eggdrop to extend IRC server capabilities - - Added support for SASL authentication - - Added a BETA threaded DNS capability, enabled with the --enable-tdns - configure flag. This allows asynchronous DNS requests similar to the what - the current DNS module offers, but using host system capability instead - of rewriting it from scratch. Using this means you no longer have to use - the DNS module. - - Eggdrop can listen on multiple IPs (and ports) now by using multiple - instances of the 'listen' command - - Added Twitch support - - Added support for users that change hosts mid-session, usually associated - with authenticating with services (396 raw code and CHGHOST capability). - - Added support for the users that change their realname value mid-session - (SETNAME capability) - - Added the ability for Eggdrop to internally track the away status of an - individual, with some limitations. - - Added the 'make sslsilent' option that creates an SSL certificate keypair - non-interactively, to assist in scripted/automated installs - - Differentiate between scripted and server WHOX calls, preventing mangling - of channel userlists - - The -n flag is no longer required to run Eggdrop in terminal mode; just - -t or -c are fine by themselves - - Added some checks to flags added via .chattr and .botattr to clearly - identify what happens when you add flags that can't co-exist together - - Botnet changes: - - Removed automatic upgrade to TLS-protected botnet links with STARTTLS. - Based on user feedback, protecting a botnet link is now at the discretion - of the user. Prefixing a port with a '+' will require a TLS connection, - otherwise the connection will be in plaintext. A port not prefixed with a - + can still be upgraded with STARTTLS, allowing 1.8 bots and scripts to - initiate a secure connection, but 1.9.0 bots will not attempt the upgrade. - - Added granular userfile sharing flags (bcejnu). Adding these flags can - limit userfile sharing to a combination of bans, invites, exempts, - channels, users, and ignores (or still the s flag for all these). - - No longer try port+1,2,3 when connecting to a botnet port doesn't work - the first time - - Tcl API changes: - - Added the RAWT bind, which will (eventually) phase out the RAW bind. - Implementing the IRCv3 message-tags capability requires a new way to - handle basic IRC messages, and RAWT was added in a way so that a) RAW - binds in old scripts still work and b) the RAWT bind can handle messages - that either do or do not have message-tags attached - - Added the INVT bind, allowing Eggdrop to react to a standard invitation, - or the new IRCv3 invite-notify capability - - Added the AWY3 bind, allowing Eggdrop to react to the new IRCv3 - away-notify capability. - - Added the refreshchan command, which refreshes without removing existing - channel status information tracked by Eggdrop for users on a channel. - - Added the isaway command, which returns if a user is listed by the server - as away or not, if using the IRCv3 away-notify capability. If away-notify - is not enabled, this command can still be used effectively in conjunction - with 'refreshchan w', described above. - - Added the hand2nicks command, an alternative to the hand2nick command. - hand2nicks returns ALL nicks matching a handle, not just the first one. - - Added the socklist command, an update to the dcclist command. Returns - similar info as a Tcl dict, and adds the IP to the information. - - Use the system's strftime formatting instead of Eggdrop-provided - GNU version/extensions. This could cause formatting differences - or errors between systems. To ensure fully portable code, developers - should only rely on POSIX-compliant formatting specifiers. - - The dcclist command now returns port information and whether or not TLS - is in use for that port. This change could affect field-based parsers - depending on this command - - Added the addserver and delserver command, to *gasp* add and delete a - server from Eggdrop's server list - - Modified the listen command to accept an optional IP argument. This - allows Eggdrop to listen on multiple addresses by using multiple listen - commands in the config file or Tcl script. If no IP is specified, 0.0.0.0 - is used as default. As a result of this change, the listen-addr command - is no longer needed and removed from the config file - - Added an optional -channel flag to the end of the is* commands (isban, - isexempt, etc). This flag prevents the is* command from checking the - global list and returning a '1' when there is no channel-specific case - - Added several Tcl commands and binds to enable better interaction with - the Twitch gaming service. Because these commands only work with a Twitch - server, they are not included in tcl-commands.doc but rather - twitch-tcl-commands.doc, located in the doc/ directory. - - Limited the expiration for new bans, ignores and exempts to 2000 days. - - Module changes: - - Added the PBKDF2 module, which allows Eggdrop to hash passwords using the - PBKDF2 algorithm. This module is a stepping stone to future, more - adaptable hashing and encryption implementation. IMPORTANT: PLEASE read - doc/PBKDF2 for more information on how to properly use it, you could - accidentally render old passwords useless! - - Added the twitch module, which allows Eggdrop to connect to the Twitch - gaming service. As Twitch offers only a limited subset of standard IRC - functionality, be prepared for some commands or scripts to work - differently than on a normal IRC server. Please read doc/TWITCH for more - information. - - Added the ident module, which can automatically interact with a running - oidentd service or allow Eggdrop to serve as its own ident server to - respond to ident requests during the server connection process. - - Eggdrop config file changes: - - Added additional net-types for freenode, Quakenet, and Rizon (net-type) - - Added ability to choose specific SSL/TLS protocols to use (ssl-protocols) - - Added ability to allow bots to remain linked if userfile sharing fails - (sharefail-unlink) - - Changed the method Eggdrop uses to add servers from a {} list to the new - addserver command - - Removed the listen-addr command. See above; the listen command now - accepts an optional IP argument in lieu of using listen-addr - - Added the show-uname setting, which allows you to disable the display of - uname info for the host system in things like .status + - Added documentation that covers values commonly used when writing + new Tcl binds in C + - Added a tutorial to demonstrate how to share userfiles + - Added version variable for document generation ________________________________________________________________________ Copyright (C) 1997 Robey Pointer diff --git a/README b/README index 468549297..b7d376601 100644 --- a/README +++ b/README @@ -24,10 +24,10 @@ WHAT IS EGGDROP? events, providing information, hosting games, etc. One of the features that makes Eggdrop stand out from other bots is - module and Tcl scripting support. With scripts and modules you can - make the bot perform almost any task you want. They can do anything: - from preventing floods to greeting users and banning advertisers from - channels. + module and Tcl and Python scripting support. With scripts and modules + you can make the bot perform almost any task you want. They can do + anything: from preventing floods to greeting users and banning + advertisers from channels. You can also link multiple Eggdrop bots together to form a botnet. This can allow bots to op each other securely, control floods @@ -60,16 +60,17 @@ FTP The latest Eggdrop stable source code is always located at https://geteggdrop.com. You can also download the current stable, - previous stable, and development snapshot via FTP at - ftp://ftp.eggheads.org/pub/eggdrop/source + previous stable, and development snapshot at + https://ftp.eggheads.org/pub/eggdrop/source Git Development Snapshot - Eggdrop development has moved from a CVS-based version control system - to git. If you are interested in trying out the VERY LATEST updates to - Eggdrop, you may be interested in pulling the most recent code from - there. BE WARNED, the development branch of Eggdrop is not to be - considered stable and may (haha) have some significant bugs in it. + Eggdrop developers use git to manage the Eggdrop codebase for + development. If you are interested in trying out the VERY LATEST + updates to Eggdrop, you can use git to obtain most recent code from + the Eggheads repository. BE WARNED, the development branch of Eggdrop + is not to be considered stable and may (haha) contain significant bugs + still being worked on. To obtain Eggdrop via the git repository (hosted by GitHub), you can either clone the repository via git or download a development @@ -105,10 +106,29 @@ SYSTEM PRE-REQUISITES download Tcl source from https://www.tcl.tk/software/tcltk/download.html. - It is also strongly recommended to install openssl (and its - development headers) in order to enable SSL/TLS protection of network - data. The header files are often called something similar to - 'libssl-dev'. + Eggdrop also requires openssl (and its development headers) in order + to enable SSL/TLS protection of network data. The header files are + often called something similar to 'libssl-dev'. While not advised, + this requirement can be removed by compiling using + ./configure --disable-tls, but you will not be able to connect to + TLS-protected IRC servers nor utilize secure botnet communication. + +MINIMUM REQUIREMENTS + +Some components of Eggdrop relies on a variety of third-party libraries, +documented here. + + ----------------------------------------------------------------------- + Functionality Package Minimum Version + ------------------------------- ------------------- ------------------- + Tcl interpreter (required) Tcl Dev Library 8.5.0 + + Secure communication OpenSSL 0.9.8 + + Python module Python 3.8.0 + + Compression module zlib Any + ----------------------------------------------------------------------- QUICK STARTUP diff --git a/UPGRADING b/UPGRADING index 562c88247..d714aecfd 100644 --- a/UPGRADING +++ b/UPGRADING @@ -2,9 +2,11 @@ Upgrading Eggdrop It is easy to upgrade Eggdrop to a new version! To have a full picture of the changes made since your last upgrade, we recommend reading the - NEWS file. Upgrades from the 1.6 and 1.8 lines of Eggdrop should take - place with little to no issues. The config file, user files, and - channel files can all be reused. + NEWS file. Upgrades from the 1.8 and 1.9 lines of Eggdrop should take + place with little to no issues. While the config file, user files, and + channel files can all be reused, it is recommended to review the NEWS + files for each release to identify new configuration settings that + have been added. For support, feel free to visit us on Libera #eggdrop. @@ -26,7 +28,7 @@ HOW TO UPGRADE Restart your Eggdrop and you will be up and running with the latest version of Eggdrop. -MUST-READ CHANGES FOR EGGDROP V1.9 +MUST-READ CHANGES FOR EGGDROP V1.10 These are NOT all the changes or new settings; rather just the "killer" changes that may directly affect Eggdrop's previous performance without @@ -34,7 +36,7 @@ modification. Config file changes -To migrate from a 1.8 to a 1.9 Eggdrop, some changes are suggested to be +To migrate from a 1.8 to a Eggdrop, some changes are suggested to be made in your configuration file: - Eggdrop has deprecated the blowfish module for password hashing in @@ -62,22 +64,22 @@ made in your configuration file: Modules -While most 3rd party modules that worked on Eggdrop v1.6/v1.8 should -still work with Eggdrop v1.9, many of them contain a version check that -only allows them to run on 1.6.x bots. We have removed the version check -from some of the more popular modules provide them at -ftp://eggheads.org/pub/eggdrop/modules/1.9/ +While most 3rd party modules that worked on older Eggdrop versions +should still work with Eggdrop , many of them contain a version check +that only allows them to run on 1.6.x bots. We have removed the version +check from some of the more popular modules provide them at +https://ftp.eggheads.org/pub/eggdrop/modules/1.10/ Scripts -All 3rd party Tcl scripts that work with Eggdrop v1.6/v1.8 should fully -work with Eggdrop v1.9. +All 3rd party Tcl scripts that worked with Eggdrop versions as early as +v1.6 should still fully work with Eggdrop . Botnet In Eggdrop v1.8, Eggdrop bots would automatically attempt to upgrade any -botnet link to an SSL/TLS connection. In v1.9, the user is required to -explicitly request an SSL/TLS connection by prefixing the port with a +botnet link to an SSL/TLS connection. Since v1.9, the user is required +to explicitly request an SSL/TLS connection by prefixing the port with a '+'. If you wish your botnet to take advantage of encryption, use the .chaddr command to update your ports to start with a '+'. diff --git a/aclocal.m4 b/aclocal.m4 index 13e3649e9..33d32ac1f 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -565,7 +565,7 @@ AC_DEFUN([EGG_CHECK_MODULE_SUPPORT], [ MODULES_OK="yes" MOD_EXT="so" - DEFAULT_MAKE="debug" + DEFAULT_MAKE="eggdrop" LOAD_METHOD="dl" WEIRD_OS="yes" UNKNOWN_OS="no" @@ -1249,7 +1249,6 @@ AC_DEFUN([EGG_DEBUG_DEFAULTS], debug_cflags_debug="-g3 -DDEBUG" AX_CHECK_COMPILE_FLAG([-Og], [debug_cflags_debug="-Og $debug_cflags_debug"]) - AX_CHECK_COMPILE_FLAG([-fsanitize=address], [debug_cflags_debug="$debug_cflags_debug -fsanitize=address"]) debug_cflags_debug_assert="-DDEBUG_ASSERT" debug_cflags_debug_mem="-DDEBUG_MEM" debug_cflags_debug_dns="-DDEBUG_DNS" diff --git a/configure b/configure index de68e72ac..bcc924603 100755 --- a/configure +++ b/configure @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.ac cd32a73. +# From configure.ac 495e922. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for Eggdrop 1.9.5. +# Generated by GNU Autoconf 2.71 for Eggdrop 1.10.0. # # Report bugs to . # @@ -614,8 +614,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Eggdrop' PACKAGE_TARNAME='eggdrop' -PACKAGE_VERSION='1.9.5' -PACKAGE_STRING='Eggdrop 1.9.5' +PACKAGE_VERSION='1.10.0' +PACKAGE_STRING='Eggdrop 1.10.0' PACKAGE_BUGREPORT='bugs@eggheads.org' PACKAGE_URL='https://www.eggheads.org' @@ -1361,7 +1361,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Eggdrop 1.9.5 to adapt to many kinds of systems. +\`configure' configures Eggdrop 1.10.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1428,7 +1428,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Eggdrop 1.9.5:";; + short | recursive ) echo "Configuration of Eggdrop 1.10.0:";; esac cat <<\_ACEOF @@ -1540,7 +1540,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Eggdrop configure 1.9.5 +Eggdrop configure 1.10.0 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2199,7 +2199,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Eggdrop $as_me 1.9.5, which was +It was created by Eggdrop $as_me 1.10.0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -6266,7 +6266,7 @@ printf "%s\n" "$egg_cv_var_system_release" >&6; } MODULES_OK="yes" MOD_EXT="so" - DEFAULT_MAKE="debug" + DEFAULT_MAKE="eggdrop" LOAD_METHOD="dl" WEIRD_OS="yes" UNKNOWN_OS="no" @@ -9059,7 +9059,10 @@ printf "%s\n" "$as_me: WARNING: --with-tcl argument should refer to directory co for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ - `ls -d /System/Library/Frameworks 2>/dev/null` \ + `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Library/Frameworks/Tcl.framework 2>/dev/null` \ + `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Network/Library/Frameworks/Tcl.framework 2>/dev/null` \ + `ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tcl.framework 2>/dev/null` \ + `ls -d /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" @@ -9086,14 +9089,14 @@ printf "%s\n" "$as_me: WARNING: --with-tcl argument should refer to directory co for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ - `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ + `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/pkg/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ `ls -d /usr/lib64 2>/dev/null` \ - `ls -d /usr/lib/tcl[8-9].[0-9] 2>/dev/null` \ - `ls -d /usr/local/lib/tcl[8-9].[0-9] 2>/dev/null` \ - `ls -d /usr/local/lib/tcl/tcl[8-9].[0-9] 2>/dev/null` \ + `ls -d /usr/lib/tcl[8-9].[0-9] 2>/dev/null` \ + `ls -d /usr/local/lib/tcl[8-9].[0-9] 2>/dev/null` \ + `ls -d /usr/local/lib/tcl/tcl[8-9].[0-9] 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" @@ -9805,44 +9808,6 @@ else $as_nop : fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fsanitize=address" >&5 -printf %s "checking whether C compiler accepts -fsanitize=address... " >&6; } -if test ${ax_cv_check_cflags___fsanitize_address+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - ax_check_save_flags=$CFLAGS - CFLAGS="$CFLAGS -fsanitize=address" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ax_cv_check_cflags___fsanitize_address=yes -else $as_nop - ax_cv_check_cflags___fsanitize_address=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CFLAGS=$ax_check_save_flags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fsanitize_address" >&5 -printf "%s\n" "$ax_cv_check_cflags___fsanitize_address" >&6; } -if test "x$ax_cv_check_cflags___fsanitize_address" = xyes -then : - debug_cflags_debug="$debug_cflags_debug -fsanitize=address" -else $as_nop - : -fi - debug_cflags_debug_assert="-DDEBUG_ASSERT" debug_cflags_debug_mem="-DDEBUG_MEM" debug_cflags_debug_dns="-DDEBUG_DNS" @@ -11284,7 +11249,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Eggdrop $as_me 1.9.5, which was +This file was extended by Eggdrop $as_me 1.10.0, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11353,7 +11318,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -Eggdrop config.status 1.9.5 +Eggdrop config.status 1.10.0 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 7620bdffb..ed9e1e5b5 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ dnl configure.ac: this file is processed by autoconf to produce ./configure. AC_PREREQ([2.71]) -AC_INIT([Eggdrop],[1.9.5],[bugs@eggheads.org],[eggdrop],[https://www.eggheads.org]) +AC_INIT([Eggdrop],[1.10.0],[bugs@eggheads.org],[eggdrop],[https://www.eggheads.org]) AC_COPYRIGHT([Copyright (C) 1999 - 2024 Eggheads Development Team]) AC_LANG([C]) AC_REVISION([m4_esyscmd([misc/getcommit])]) diff --git a/doc/BOTNET b/doc/BOTNET index a33c42d00..e5d5468f7 100644 --- a/doc/BOTNET +++ b/doc/BOTNET @@ -90,15 +90,18 @@ Port and/or users. Note that you can define separate ports for user and bot connections. -EXAMPLE BOTTREE +EXAMPLE BOTTREES BotA |-+BotB - `-+BotC - -BotB is linked to a master sharebot, BotA, and a slave sharebot, BotC. -BotB shares passively with [receives from] BotA and shares aggressively -with [sends to] BotC. + |==BotC + |=+BotD + `--BotC + +Legend: * -- means the bots are linked, but not sharing userfiles * -+ +means the bots are sharing userfiles * == means the bots have an +encrypted link between them, and are not sharing userfiles * =+ means +the bots have an encrypted link between them, and are sharing userfiles BOT FLAGS diff --git a/doc/COMPILE-GUIDE b/doc/COMPILE-GUIDE index 05173bb8f..85f6419d6 100644 --- a/doc/COMPILE-GUIDE +++ b/doc/COMPILE-GUIDE @@ -219,10 +219,12 @@ Last revised: May 14, 2023 brew update brew install openssl - Tell configure where to find tcl and openssl: + Tell configure where to find tcl and / or openssl in case it could not + autodetect: ./configure --with-tcl=/System/Volumes/Data/Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Tcl.framework/tclConfig.sh -with-sslinc=/usr/local/Cellar/openssl@3/3.0.7/include --with-ssllib=/usr/local/Cellar/openssl@3/3.0.7/lib + E. AIX Follow the standard compile process in Section A. To compile dynamically (with module support), use 'make eggdrop' instead of 'make'. diff --git a/doc/Changes1.10 b/doc/Changes1.10 new file mode 100644 index 000000000..ed6c14bbe --- /dev/null +++ b/doc/Changes1.10 @@ -0,0 +1,314 @@ + +Eggdrop Changes (Last Updated 2024-10-13): +__________________________________________ + +Eggdrop v1.10.0: + + 2024-10-13 * Update FEATURES + * Update Github-actions Tcl9.0 to release + * Problem matcher for compiler warnings (#1694) + * Update missed python var type for Tcl9 + * Update python docs + * Remove reference to non-user-configurable use_354 + +Eggdrop v1.10.0rc2 (2024-09-08): + + 2024-09-08 * Fix user/chanrecord checking on join (#1678) + * Add additional MacOS Tcl search path + * Fix get_user_from_member return value + [Found by: mortmann] + * Update version info in tcl-commands.doc + * Typo fixes + * Fix .channel formatting + [Found by: Geo / Patch by: Geo] + * fix broken doc links, small tweaks + * Update docs for rc2 + * Fix python version check + [Found by: phuzion] + * Eggdrop v1.10.0 Release Candidate 2 + +Eggdrop v1.10.0rc1 (2024-08-08): + + 2024-08-08 * Revert strerror_r to strerror for now + * Fix compiler warning + * Match misc/newversion to handle #1507 string change + * Update patchlevel to 1.10.0 alpha + * Eggdrop v1.10.0 Release Candidate 1 + 2024-08-07 * Add Tcl 9 compatibility - Tcl_Size in python module + [Found by: michaelortmann / Patch by: michaelortmann] + * Revert adding -fsanitize=address + * Update Tcl MacOS search paths + * python.mod: add dir(eggdrop.tcl) (#1596) + * Update NEWS + * Update docs + 2024-08-06 * Update README source + 2024-08-01 * Add IP to listen error message + [Patch by: michaelortmann] + 2024-07-31 * Update doc URLs, etc + [Patch by: michaelortmann] + 2024-07-30 * Convert language file encoding to UTF-8 + 2024-07-29 * Add github action to perform autoconf + * Add more compile flags for debug builds + [Patch by: michaelortmann] + * Use the clock_gettime() instead of obsolescent gettimeofday() + [Patch by: michaelortmann] + * Run autotools + * Make autobotchk Tcl9 compatible + [Found by: DasBrain / Patch by: TehPeGaSuS] + * Fix french lang typos/readability + [Patch by: ZarTek-Creole] + 2024-07-28 * Update tcl-commands example + * Fix prototypes + [Patch by: michaelortmann] + * Fix locking/race for tdns error logging + [Patch by: michaelortmann] + * Fix file descriptor leak in compress.mod + [Patch by: michaelortmann] + * Properly set chanjoin time for Eggdrop + [Found by: Empus / Patch by: michaelortmann] + 2024-07-24 * Update Tcl doc with need-* guidance + [Found by: Koragg] + 2024-07-20 * Fix python reference counting for binds + * Add Tcl9 Tcl_Size to dns module + [Found by: DasBrain / Patch by: DasBrain] + * Convert some tabs to whitespace + * Document minimum library versions + * Cleanup python.mod includes + * Fix utimer name duplication check + [Found by: ZarTek / Patch by: thommey] + * Update sys/resource.h includes + [Patch by: michaelortmann] + * Typo fixes + [Patch by: michaelortmann] + 2024-07-16 * Add unbind capability for python mod + [Patch by: thommey] + 2024-07-14 * Github actions: use cache for Tcl/SSL compilations (#1652) + * Github actions: actually check if SSL support is enabled (#1653) + 2024-07-12 * Forbid reloading of python mod (it would crash the bot) + * later + * Forbid unload + * Update src/mod/python.mod/python.c + * Python venv support added + [Found by: simple / Patch by: thommey] + 2024-07-11 * Swap lookup_user_record args + [Found by: DasBrain] + 2024-07-10 * Fix accidentally removed hostmask from #1585 + 2024-07-09 * Github Actions: Test OpenSSL 0.9.8 (#1642) + 2024-07-07 * Remove old Contexts + * Remove isacii from configure.ac + * Add python configure search paths + [Patch by: michaelortmann] + * run autotools/makedepend + * Add tcl pbkdf2 function + [Patch by: michaelortmann] + * Fix --disable-tls breakage from pbkdf2 tcl + 2024-07-06 * Enhance ssl log + * Restore exported functions for module back-compat + * Remove runtime python version check artifact + * Change strncpyz define to strlcpy + * Only configure modules containing code + * Add error reporting, increase path limits for module loads + * Update switch logic + [Patch by: @crazycatdevs] + * Remove strcats + * Fix copyrights + [Patch by: michaelortmann] + * Fix for sh-compatibility in 085583e80f64314ef08360fd66531f23c84654b8 + 2024-06-30 * Fix module export for get_user_from_member (#1633) + [Found by: Mystery-X / Patch by: thommey] + 2024-06-29 * add lookup_user_record() (#1618) + [Found by: Mystery-X / Patch by: Geo, thommey] + * Fix python configure + [Found by: Csibesz` / Patch by: Geo] + * Allow python threads and async io + [Patch by: thommey] + 2024-06-16 * Github CI with matrix tests (#1620) + * Fix include sys/time.h and time.h. Both are POSIX 2001. + [Found by: thommey / Patch by: michaelortmann] + * Run autotools + * CI: Dependency check cannot depend on other workflow + 2024-06-05 * Reintroduce user lookup cache + [Found by: mortmann / Patch by: thommey] + 2024-06-04 * Add Tcl 9 compatibility + 2024-06-02 * Fix memory leak in egg_string_unicodesup_desurrogate() + [Patch by: michaelortmann] + * Fix leak + [Patch by: michaelortmann] + 2024-05-25 * Full account tacking (#1585) + [Patch by: Geo, thommey] + 2024-05-09 * Add IRCv3 standard-replies + 2024-05-06 * run autotools, makedepend + 2024-05-05 * Update core.portuguese.lang + [Patch by: @TehPeGaSuS] + * Un-hardcode buffer size + * Fix timer drift log (#1556) + [Found by: SergioR / Patch by: michaelortmann] + * Fix autoconf of tls action-if-not-given + [Found by: ZarTek-Creole / Patch by: michaelortmann] + * strncpy() -> strlcpy() + [Patch by: michaelortmann] + * Cleanup console.mod + [Patch by: michaelortmann] + * Tcl_AppendResult() -> Tcl_SetResult() (#1571) + [Patch by: michaelortmann] + * Add logging of user/sys times for evaluated .tcl + * Do not call modules restart() function if null pointer + [Patch by: michaelortmann] + * Enhance module status report for zlib and python (#1563) + [Patch by: michaelortmann] + * Enhance auto detection of python-config + [Patch by: michaelortmann] + * Fix possible memleak from dns threads to main + [Patch by: michaelortmann] + * Enhance verification of userfile perm + [Patch by: michaelortmann] + * Fix SERVER_NICKLEN off-by-one error + [Patch by: michaelortmann] + * Fix strcpy-param-overlap + [Patch by: michaelortmann] + * Cleanup includes + * Cleanup get_user_by_handle() + [Patch by: michaelortmann] + * Fix strcmp handle + [Patch by: michaelortmann] + * TCL_INTERP_DESTROYED -> Tcl_InterpDeleted() + [Patch by: michaelortmann] + * Cleanup includes + [Patch by: michaelortmann] + * Fix pbkdf2 bot linking + [Found by: @michaelortmann / Patch by: @michaelortmann] + 2024-04-14 * Fix typo + [Patch by: ZarTek-Creole] + 2024-03-03 * Update releaseprep for 1.10 + 2024-03-02 * Add userfile sharing tutorial + * Check python version at compile + 2024-03-01 * uniqueify console procname + [Found by: DasBrain] + 2024-02-25 * fix autoscript requires logic + * hide autoscript manifest entry + 2024-02-18 * Update FILT bind doc + * Fix b64_ntop -lresolv detection for -fsanitize=address + [Found by: michaelortmann / Patch by: michaelortmann] + * Fix format string + [Found by: michaelortmann / Patch by: michaelortmann] + * refix format string + [Found by: michaelortmann / Patch by: michaelortmann] + * Join threads instead of detach + [Found by: michaelortmann / Patch by: michaelortmann] + 2024-02-11 * add check for isidentified + [Found by: @crazycatdevs / Patch by: Geo] + 2024-02-05 * fix autoscript filt bind + 2024-02-03 * allow python.mod static builds + * fix sasl-mechanism name + * Don't load autoscripts if packages missing + * update UPGRADING + 2024-01-28 * any user can use .-account + * Update core.help with current commands + * update gendocs to create mod.python file + * initialize vars + * doc typos + 2024-01-21 * Fix SSL_get_server_tmp_key not available + [Found by: Jobe] + 2024-01-20 * Add internal bind values to docs + * Properly report channel bans in .bans + [Found by: @wilkowy / Patch by: Geo] + * Add userhost-in-names capability (#1374) + [Patch by: Geo] + * Additional internals doc tweaks + 2024-01-18 * Switch autoscripts to GitHub + 2024-01-15 * change py init from Isolated to Python + 2024-01-14 * Add Python intpreter to Eggdrop + [Patch by: Geo, thommey] + * Update docs + * Update copyright + * remove quick-logs option + [Found by: michaelortmann / Patch by: michaelortmann] + 2024-01-07 * Remove copy-to-tmp option + [Found by: Geo / Patch by: michaelortmann] + * Enhance crash reporting + [Patch by: michaelortmann] + 2024-01-05 * Allow overwriting misc/runautotools version check + 2024-01-03 * Properly queue/log QUIT message + [Patch by: michaelortmann] + 2024-01-02 * Fix hangs on some SSL connections + [Found by: pym67, @PeGaSuS-Coder / Patch by: michaelortmann] + 2024-01-01 * Replace hard-coded docs version with variable + [Patch by: Geo] + 2023-12-31 * Add grammar to channel status + [Found by: jackal / Patch by: jackal] + * Typo fixes + * Enhance restricted port error msgs + [Patch by: michaelortmann] + 2023-12-30 * Call threaddata() once before loop + [Patch by: michaelortmann] + * Call time() only once + * Add homepage to configure.ac + * Cleanup stringify + * Various small doc updates + * Add log for TLS DH ephemeral key info + 2023-12-02 * Update manpage + [Patch by: michaelortmann] + * Add got-chanlist event bind type + [Found by: Many / Patch by: Geo, thommey] + * Update legacy botnet command + [Found by: Cizzle / Patch by: michaelortmann] + 2023-12-01 * Change logging for got900/901 + [Found by: Geo / Patch by: michaelortmann] + 2023-10-09 * Update autoconf to 2.71 + [Found by: Geo / Patch by: Geo, thommey] + * text cleanup + * Add logging during relay + [Found by: michaelortmann / Patch by: michaelortmann] + * Fix maskname() buffer size + [Found by: jack3 / Patch by: michaelortmann] + 2023-10-08 * Require TLS by default + [Patch by: michaelortmann] + 2023-10-07 * Fix function declarations + * POSIX functions cleanup + 2023-10-01 * Cleanup alloc() + [Found by: michaelortmann / Patch by: michaelortmann] + * Fix prototypes + [Found by: michaelortmann / Patch by: michaelortmann] + * Update explicit_bzero.c for win32 support, add C23 memset_explicit() support + [Found by: michaelortmann / Patch by: michaelortmann] + * Update misc/config.guess, misc/config.sub + [Found by: michaelortmann / Patch by: michaelortmann] + * Fix connection refused detection under Cygwin + [Found by: michaelortmann / Patch by: michaelortmann] + * Use POSIX PATH_MAX (#1439) + [Found by: michaelortmann / Patch by: michaelortmann] + * Fix strcpy-param-overlap + [Found by: michaelortmann / Patch by: michaelortmann] + 2023-09-08 * Fix egg_set if logic + 2023-08-28 * Add linewraps to autoscript config function + 2023-08-27 * Update autpscript doc with code tips + 2023-08-15 * Modifications for autoscripts (#1459) + [Patch by: CrazyCat, thommy, Geo] + 2023-07-09 * Updates/fixes for autoscript + 2023-07-08 * Remove stale MODULES file + [Found by: @jHackenthal] + * Lots of docs fixes (#1457) + [Found by: Various / Patch by: Geo] + * Fix egggdrop typo + [Found by: @iamnimnul / Patch by: @iamnimnul] + * reformat channel doc + * Add Autoscript feature + 2023-05-20 * Fix openssl3 md5 deprecation warning + [Patch by: michaelortmann] + 2023-05-17 * Bug/monitorwildcard (#1448) + [Found by: CrazyCat / Patch by: Geo] + 2023-04-11 * Add CHGHOST bind + [Found by: thommey / Patch by: Geo] + * Fix more openssl3 deprecation (#1385) + [Found by: michaelortmann / Patch by: michaelortmann] + * Roll patch level to chghost run autoconf + * Update jquery + 2023-04-04 * Fix date in autobotchk comments + [Found by: @docgonzo2015] + 2023-03-11 * Adjust motd alignment + * Typo fixes + * Update THANKS + * Fix localtime() returning NULL + [Found by: michaelortmann / Patch by: michaelortmann] + * update docs + * Update patchlevel diff --git a/doc/Changes1.8 b/doc/Changes1.8 index 84b8e046a..343142f92 100644 --- a/doc/Changes1.8 +++ b/doc/Changes1.8 @@ -647,7 +647,7 @@ Eggdrop v1.8.1rc1 (2017-03-01): - Various small bugfixes. Patch by: Geo, thommey - # RC2 Relased on Nov 1, 2016 + # RC2 Released on Nov 1, 2016 - Use -pthread for OpenBSD linking, found in TCL_EXTRA_CFLAGS in tclConfig.sh. Patch by: thommey / Found by: fahuo @@ -656,7 +656,7 @@ Eggdrop v1.8.1rc1 (2017-03-01): Patch by: thommey - Switch to using $CC -shared for BSD in general, this seems to work on - newer versios, and ld -Bshareable -x fails. + newer versions, and ld -Bshareable -x fails. Patch by: thommey / Found by: LinaSovereign - Work around some incompatibilies between gnu make 3.82 and 4.x. @@ -764,7 +764,7 @@ Eggdrop v1.8.1rc1 (2017-03-01): - Typo: "timer " should be "utimer " Patch by: sirfz, Geo / Found by: sirfz - # RC1 Relased on September 12, 2016 + # RC1 Released on September 12, 2016 - Add basic.eggdrop.conf to source directory Patch by: Geo, thommey diff --git a/doc/IRCv3 b/doc/IRCv3 index c5567b11e..0cb8e3df6 100644 --- a/doc/IRCv3 +++ b/doc/IRCv3 @@ -52,6 +52,21 @@ The following capabilities are supported by Eggdrop: - Monitor - server-time - setname + - userhost-in-names - +typing +ERRATA + +- Enabling echo-message will cause Eggdrop to trigger PUB/PUBM binds + on its own messages (because now it can actually see them). This may + cause unintentional functionality with some scripts +- Enabling userhost-in-names will cause Eggdrop's internal mechanisms + to mark a channel's userlist as synch'd upon receiving the NAMES + list after a join, instead of waiting for a full WHO listing. This + is done because the assumption is that userhost-in-names was enabled + as a response to WHO queries being disabled on a server, which + prevents Eggdrop from populating its userlist. To avoid unintended + functionality, it is suggested that this capability only be enabled + on servers that disable WHO queries. + Copyright (C) 2010 - 2024 Eggheads Development Team diff --git a/doc/TLS b/doc/TLS index e218a81cb..9b848585a 100644 --- a/doc/TLS +++ b/doc/TLS @@ -3,14 +3,14 @@ TLS support Last revised: Jan 26, 2020 TLS support This document provides information about TLS support which is a new -eggdrop feature since version 1.8.0. +Eggdrop feature since version 1.8.0. ABOUT Eggdrop can be optionally compiled with TLS support. This requires -OpenSSL 0.9.8 or more recent installed on your system. TLS support -includes encryption for IRC, DCC, botnet, telnet and scripted -connections as well as certificate authentication for users and bots. +OpenSSL 0.9.8 or later installed on your system. TLS support includes +encryption for IRC, DCC, botnet, telnet and scripted connections as well +as certificate authentication for users and bots. INSTALLATION @@ -82,7 +82,7 @@ like this: In short, a bot added to your Eggdrop with a +port in the address can only connect to a bot listening with a +port in the config. Conversely, -a bot added to your eggdrop without a + prefix can only connect to a bot +a bot added to your Eggdrop without a + prefix can only connect to a bot listening without a + prefix in the config. If TLS negotiation fails, the connection is deliberately aborted and no @@ -111,7 +111,7 @@ Scripts can open or connect to TLS ports the usual way specifying the port with a plus sign. Alternatively, the connection could be established as plaintext and later switched on with the starttls Tcl command. (Note that the other side should also switch to TLS at the same -time - the synchronization is the script's job, not eggdrop's.) +time - the synchronization is the script's job, not Eggdrop's.) KEYS, CERTIFICATES AND AUTHENTICATION @@ -121,7 +121,7 @@ bots and TLS listening ports. General information about certificates and public key infrastructure can be obtained from Internet. This document only contains eggdrop-specific information on the subject. The easy way to create a key and a certificate is to type 'make sslcert' after -compiling your bot (If you installed eggdrop to a non-standard location, +compiling your bot (If you installed Eggdrop to a non-standard location, use make sslcert DEST=/path/to/eggdrop). This will generate a 4096-bit private key (eggdrop.key) and a certificate (eggdrop.crt) after you fill in the required fields. Alternatively, you can use 'make sslsilent' to @@ -133,12 +133,12 @@ make a ssl certificate for yourself and enable ssl-cert-auth in the config file. Then either connect to the bot using TLS and type ".fprint +" or enter your certificate fingerprint with .fprint SHA1-FINGERPRINT. To generate a ssl certificate for yourself, you can run the following -command from the eggdrop source directory: +command from the Eggdrop source directory: openssl req -new -x509 -nodes -keyout my.key -out my.crt -config ssl.conf When asked about bot's handle, put your handle instead. How to use your -new certificate to connect to eggdrop, depends on your irc client. To +new certificate to connect to Eggdrop, depends on your irc client. To connect to your bot from the command line, you can use the OpenSSL ssl client: diff --git a/doc/Versions b/doc/Versions index 6b1eac815..08dfa7ade 100644 --- a/doc/Versions +++ b/doc/Versions @@ -6,6 +6,7 @@ old version not in the archive available at ftp.eggheads.org/pub/eggdrop/source/ please get in contact via #eggdrop on Libera so it can be added. Version Release date +1.10.0 Oct 13, 2024 1.9.5 Mar 11, 2023 1.9.4 Dec 14, 2022 diff --git a/doc/core.settings b/doc/core.settings index 6597611b9..b17b2c1dc 100644 --- a/doc/core.settings +++ b/doc/core.settings @@ -118,14 +118,6 @@ overwritten by the logfile of the next day. reaches the size of 550 kilobytes. Note that this only works if you have keep-all-logs set to 0 (OFF). - set quick-logs 0 - - This could be good if you have had a problem with logfiles filling - your quota/hard disk or if you log +p and publish it to the web, - and you need more up-to-date info. Note that this setting might - increase the CPU usage of your bot (on the other hand it will - decrease your RAM usage). - set raw-log 0 This setting allows you the logging of raw incoming server traffic diff --git a/doc/html/_static/basic.css b/doc/html/_static/basic.css index 6d4176051..bf515ee8a 100644 --- a/doc/html/_static/basic.css +++ b/doc/html/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/doc/html/_static/doctools.js b/doc/html/_static/doctools.js index d06a71d75..4d67807d1 100644 --- a/doc/html/_static/doctools.js +++ b/doc/html/_static/doctools.js @@ -4,7 +4,7 @@ * * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/doc/html/_static/documentation_options.js b/doc/html/_static/documentation_options.js index 935cd0815..9ed430ffa 100644 --- a/doc/html/_static/documentation_options.js +++ b/doc/html/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '1.9.5', + VERSION: '1.10.0rc2', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/doc/html/_static/language_data.js b/doc/html/_static/language_data.js index 250f5665f..367b8ed81 100644 --- a/doc/html/_static/language_data.js +++ b/doc/html/_static/language_data.js @@ -5,7 +5,7 @@ * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -13,7 +13,7 @@ var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; -/* Non-minified version is copied as a separate JS file, is available */ +/* Non-minified version is copied as a separate JS file, if available */ /** * Porter Stemmer diff --git a/doc/html/_static/searchtools.js b/doc/html/_static/searchtools.js index 7918c3fab..b08d58c9b 100644 --- a/doc/html/_static/searchtools.js +++ b/doc/html/_static/searchtools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for the full-text search. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -99,7 +99,7 @@ const _displayItem = (item, searchTerms, highlightTerms) => { .then((data) => { if (data) listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) + Search.makeSearchSummary(data, searchTerms, anchor) ); // highlight search terms in the summary if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js @@ -116,8 +116,8 @@ const _finishSearch = (resultCount) => { ); else Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); }; const _displayNextItem = ( results, @@ -137,6 +137,22 @@ const _displayNextItem = ( // search finished, update title and status message else _finishSearch(resultCount); }; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; /** * Default splitQuery function. Can be overridden in ``sphinx.search`` with a @@ -160,13 +176,26 @@ const Search = { _queued_query: null, _pulse_status: -1, - htmlToText: (htmlString) => { + htmlToText: (htmlString, anchor) => { const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; + if (docContent) return docContent.textContent; + console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." ); return ""; }, @@ -239,16 +268,7 @@ const Search = { else Search.deferQuery(query); }, - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - + _parseQuery: (query) => { // stem the search terms and add them to the correct list const stemmer = new Stemmer(); const searchTerms = new Set(); @@ -284,21 +304,38 @@ const Search = { // console.info("required: ", [...searchTerms]); // console.info("excluded: ", [...excludedTerms]); - // array of [docname, title, anchor, descr, score, filename] - let results = []; + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + _removeChildren(document.getElementById("search-progress")); - const queryLower = query.toLowerCase(); + const queryLower = query.toLowerCase().trim(); for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) - results.push([ + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, id !== null ? "#" + id : "", null, - score, + score + boost, filenames[file], ]); } @@ -308,46 +345,47 @@ const Search = { // search for explicit entries in index directives for (const [entry, foundEntries] of Object.entries(indexEntries)) { if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ docNames[file], titles[file], id ? "#" + id : "", null, score, filenames[file], - ]); + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } } } } // lookup as object objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) + normalResults.push(...Search.performObjectSearch(term, objectTerms)) ); // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; // remove duplicate search results // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept @@ -361,7 +399,12 @@ const Search = { return acc; }, []); - results = results.reverse(); + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); // for debugging //Search.lastresults = results.slice(); // a copy @@ -466,14 +509,18 @@ const Search = { // add support for partial matches if (word.length > 2) { const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } } // no match but word was a required one @@ -496,9 +543,8 @@ const Search = { // create the mapping files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); }); }); @@ -549,8 +595,8 @@ const Search = { * search summary for a given text. keywords is a list * of stemmed words. */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); if (text === "") return null; const textLower = text.toLowerCase(); diff --git a/doc/html/about/about.html b/doc/html/about/about.html index 184a2cd4c..52c779414 100644 --- a/doc/html/about/about.html +++ b/doc/html/about/about.html @@ -5,11 +5,11 @@ - About Eggdrop — Eggdrop 1.9.5 documentation + About Eggdrop — Eggdrop 1.10.0rc2 documentation - - + + @@ -18,7 +18,7 @@
diff --git a/doc/html/about/legal.html b/doc/html/about/legal.html index 5e510d5b1..ce00a59b1 100644 --- a/doc/html/about/legal.html +++ b/doc/html/about/legal.html @@ -5,11 +5,11 @@ - Boring legal stuff — Eggdrop 1.9.5 documentation + Boring legal stuff — Eggdrop 1.10.0rc2 documentation - - + + @@ -17,7 +17,7 @@
diff --git a/doc/html/index.html b/doc/html/index.html index fedeb01b5..792115db3 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -5,11 +5,11 @@ - Eggdrop, an open source IRC bot — Eggdrop 1.9.5 documentation + Eggdrop, an open source IRC bot — Eggdrop 1.10.0rc2 documentation - - + + @@ -17,7 +17,7 @@
diff --git a/doc/html/install/install.html b/doc/html/install/install.html index 2455a4844..bb2f18e03 100644 --- a/doc/html/install/install.html +++ b/doc/html/install/install.html @@ -5,11 +5,11 @@ - Installing Eggdrop — Eggdrop 1.9.5 documentation + Installing Eggdrop — Eggdrop 1.10.0rc2 documentation - - + + @@ -18,7 +18,7 @@