Skip to content

Releases: m2osw/snapcpp

Release 1.8.2

07 Oct 05:22

Choose a tag to compare

Fixed to the Reindex feature which would timeout. So it would be impossible to generate all indexes (because restarting would start from the beginning and we would not get the last items in the indexes table.)

Also fixed the counting of index items. It was not ever set so we would always get 0. Now we do a COUNT(*) which can be really slow with Cassandra although we're in a pretty good case so it should be okay for a while.

Release 1.8.0

28 Sep 18:22

Choose a tag to compare

Major Changes

Some new projects in the contrib. These are extracts from the libsnapwebsites
library which was getting really big.

Especially, I moved the thread, log, snapcommunicator, some low level headers
which are stand alone and could be useful to all our other libraries.

I also made the cassandra-cpp-driver and libuv1 part of our contribs which
made it possible to move forward to newer versions of Ubuntu (we can compile
our code on 18.04 and 19.04).

Bug Fixes

This version includes a few important bug fixes.

Fast Lists

The list plugin uses a journal and reads a ton of data from the cluster, so it is actually very slow.

We now have an index plugin instead. That new plugin makes use of the index table where we can "manually" create a key which is going to be used to sort entries automatically. The huge difference here is that the sort happens at the time we write that one key to the database. As a result, the lists are instantaneous. The drawback is that we need a special key for each such entry (We also do have special keys for lists, though) and that key can be slow to calculate. However, seeing how slow the management of list items is, this new method will look extremely fast in comparison. Once the Save is done, your lists were updated.

The one potential problem is that one item could be part of many lists and that could be a problem as in we are going to add the item to all those lists one after the other which the client is waiting for an answer...

Background Services

Started work on having services create a PID file. This is useful for systemd which uses the PID file to know that a service is running and to save the identifier (pid) of the process to kill when asked to STOP a service.

libaddr Buffer Overflow

The libaddr had a case where the length of a buffer was not being checked.

libcasswrapper Multi-thread Bug

The libcasswrapper project would not properly handle switching between various queries, especially in a multithreaded environment. The fact is that one variable was not correctly projected. I changed a few things and actually could make one variable thread specific (class specific, really, so there is still a need for protection, but it's very light).

Note that only cassview and some other command line tools were affected. Snap! itself is not using that feature so it had no problem in this area.

users Plugin

The users plugin is responsible for handling login data. One of the tests in there would check the "LOCALES" variable when it was supposed to checked "VERIFIED_ON". This fixes various display feature which would think that the user was not yet verified.

Note that the login feature, passwords, etc. were not affected (it was not a security issue).

Snap Manager

The snapmanager had several display bugs and problems with reload that were fixed.

We started work on a new project (snaprfs) which will also help us in building version 2 which will be a lot more AJAX and much lighter for the interface (i.e. load one screen instead of all of them). It will also be capable of handling work in a batch instead of the current method which is immediate.

I also fixed a couple of refresh bugs: problems with variables that would not call the refresh functions.

The host name may not be defined, in which case snapmanagerdaemon would crash.

Fixed the Cassandra plugin which forced us to define an IP address. If not present, it would crash preventing us from adding the address in the first place.

snapstop Missing PID

When the snapstop command is called from systemctl, it may not have a MAINPID variable. When that's the case, snapstop gets called with snapstop --service on its own. This failed in older versions. Now we ignore the option if the parameter is not specified.

snaplock Supported Messages

The snaplock binary did not properly report that it supported the CLUSTERUP and CLUSTERDOWN messages.

"Package[s]" in snapwatchdog

The default list of snapwatchdog plugins included the Packages plugin spelled "package", without the "s".

snapcommunicator Cluster File Bug

The communicator would not save the cluster status until it received its first CLUSTERSTATUS message. This means the snapmanagerdaemon could not properly report the cluster status.

Links Bug

In some cases, the deletion of a link would not be complete. There was a return in a function which should have been a continue to make sure all possible cases were properly handled.

Message Box

Whenever too many messages were shown, they would disappear since the popup has a limited size.

Content Plugin

A test in content::modified_content_impl() was inverted (i.e. return true instead of false and vice versa).

I inverted the test so it is now as it was expected.

Reproducible Binaries

I removed the __DATE__ and __TIME__ parameters. Instead, I use our UTC_BUILD_DATE and UTC_BUILD_TIME which are now directly available in our snapcmakemodules.

This allows for reproducible binaries. If you know when something was compiled, then you can recompile and get the same date and time information.

Our macros also include one variable per field (year, month, day, hour, minute, seconds) which gives us a way to create a copyright notice which changes automatically.

Project: snapdev

This small project is a set of C++ header files that implement various
algorithms and functions that we use throughout our projects.

This library is already 18 headers.

Next step: We are slowly removing duplicates from the contribs (such as
the not_reached.h).

Project: cppthread

Our the C++ thread implementation from libsnapwebsites is now a project
on its own.

It includes the functions to handle processes with pipes to
stdin/stdout/stderr.

Next step: completely remove the snap_thread.cpp/h from the Snap!
project.

Project: eventdispatcher

Our snap_communicator.cpp/h was enormous and we wanted to break it up.
This is now the eventdispatcher project.

Broken up in separate files, it is 80 files (not counting the CMakeLists.txt).
The project includes its own version and utilities.

It includes all the features we had available in the libsnapwebsites.
We will be adding more functionality to track changes to directories. For
example, you will be able to get an event whenever one of your configuration
file may have changed. That way you can automatically reload those files
and be up to date.

Next step: completely remove the snap_communicator.cpp/h from the Snap!
project. I first need to switch to snaplogger and cppthread, though.

Project: snaplogger

Our replacement to the libsnapwebsites log.cpp/h without the need for the
log4cplus v1.2. The log4cplus project has not evolved much since 1.2 came
out and the properties do not offer us a way to make global changes easily.

This new project, snaplogger, makes use of advgetopt which is much more
versatile. This also means we are walking away from the Java properties
to move to a more Unix like configuration file.

This version already includes a thread to support asynchrounous logging
and we have plans to have a 1 to 1 compatible log server which is going
to be implemented using the eventdispatcher library.

All the useful features available in log4cplus were replicated and many
more added. Especially, the format support for the log messages is
very easily extensible so other projects can add support for their own
parameters.

Note: the snapwebsites projects have not yet been converted, however, I
already make use of the snaplogger in the eventdispatcher and it works
just fine. The cppthread uses the advgetopt log functions which allow
for a callback to be setup. The snaplogger sets that callback so it
will captures those logs automatically for us. In other words, even
though snaplogger depends on advgetopt and cppthread, it is capable of
logging messages from those two lower level libraries as if they knew
about snaplogger.

Next step: completely remove the log.cpp/h from the Snap!
project. I first need to switch to cppthread, though.

Project: libutf8

I finally made a copy of my utf8 code from wpkg to a library in Snap!.

I enhanced the project (of course...) and make use of it in many places.
This is a replacement to the QString which we've been using so far.

One of the most interesting feature is the bidirectional iterator which
allows us to walk a UTF-8 string and get char32_t characters. This is
going to be extermely useful in many places where we need to know of
the Unicode character. We already use that feature in several places
such as advgetopt.

Project: snapcatch2

The old catch in 16.04 was... well... old and it was not compatible with
the version of catch available on 18.04 and newer versions of Ubuntu. This
meant we could not really compile our tests on those platforms.

Now we have our own snapcatch2 project which is a copy of a specific version
of catch2 which is going to work with all of our projects.

We also include a snapcatch2.hpp header which gives us the ability to
create a main() in a jiffy. It also gives all our tests a similar set
of options such as the --seed <seed> command line option.

Project: advgetopt

This project was very heavily updated. The main goal was to add the
configuration load and save features we had in our libsnapwebsites.

As a result, we now have a very large number of new features such as
the possibility to override parameters using filenames in a ".d" sub-folder
using files names that start with two digits (##-.conf). This is
a huge advantage since it will give our projects a way to change settings
of another projects just by installing a file under /etc.

Another major addition, the system...

Read more

Release 1.7

23 Oct 02:47

Choose a tag to compare

Probably six main things to talk about from version 1.6.

  1. the snaplock tool now works correctly, although it would work before
    it only worked in a perfect world (i.e. a world where all the snaplock
    were running and properly connected.) The new version uses three computers
    as the "lock masters" by proceeding to an election. This allows us to
    lose any one of those computers and not lose our locks (except for
    that one computer which we lose, obviously.) This change includes a few
    new messages: LOCKREADY and NOLOCKS which one can request with a LOCKSTATUS
    message.

  2. The snapwatchdog is not going to spam us as much, we can also change the
    timing in our configuration file. I also moved the flags implementation
    to the libsnapwebsites library so many more objects can deal with flags.

  3. The DNS installation now includes the proper security flags. It's automatic,
    however, it won't fix existing installations. Those have to be done manually.
    Since you are likely to have just one master DNS server at this point, we
    thought it wouldn't be useful to include an upgrade path.

  4. I went ahead and implemented SNAP-392 which means threads have to be joined.
    This version tested that in the field and we have a few additional fixes
    to the library.

  5. Added a concept of CLUSTERUP and CLUSTERDOWN which the snaplock tool uses
    to know once enough computers are interconnected. Until then, the election
    can't be performed and no lock can be obtained (which generally means you
    cannot access a website.)

  6. Many other small things and bug fixes which make the system better.

snap.cgi

  • Added a test against w00tw00t scanners (block IPs).
  • Block IP address if user attempts to go to "wp-login.php" or "GponForm/diag_Form?images".

DNS (dns_options, bundle, fail2ban)

  • Create and enabled our [snap-named-refused] jail now that SNAP-483 is complete.
  • SNAP-553: Added the ACL DNS options in the DNS bundle.
  • SNAP-483: Added the log DNS options in the DNS bundle.
  • Added a restart of bind9 to the DNS bundle.
  • Delete the bind9 logs on uninstallation.
  • Enhanced the dns_options tool to support adding acl bogusnets and logging options even when not defined at all in the options file.
  • Properly handle the case where multiple levels are missing on a CREATE (dns_options).
  • Fixed some tabulations although there are still problems.
  • Added some missing std::endl in various messages.
  • Fixed the reading of the value of the expression on the command line, the get_token() needed to use false in that case.
  • Use more variables in the DNS bundle.
  • Added a test to verify all the dns_options we have in our bundle.
  • Run dns_options when installing the DNS bundle (version, hostname, ...).
  • Install dns_options.
  • Changed the use of the dns_options keywords and use shared pointers so we can have a parent (although I ended up not using the parent.)
  • Implemented the dns_options match() function.
  • Finished up an implementation of dns_options that is enough for SNAP-522.

snapwatchdog

  • Updated the snapwatchdog server to use larger span times to send emails (changed from 15min, 1h, 1d, to 1d, 3d, 1w)
  • Made these spans and corresponding priorities editable (in conf file).
  • Move the flags out of the watchdog sub-directory since it may not be there.
  • Fixed the flags.cpp, removing the "watchdog" part since now it is in the library. Updated the rest of the code accordingly.
  • Moved the flag_path to the snapserver.conf file.
  • SNAP-661: move flags.cpp/h to libsnapwebsites so raising flags can happen from nearly anywhere.
  • SNAP-661: moved the raise_flag.cpp tool to libsnapwebsites/tools.
  • Reduce logs from snapwatchdog by raising log level to WARNING while running the plugins to reduce the logs by probably 10Mb or so...
  • Added an ALIVE -> ABSOLUTELY set of message as a watchdog that works with any daemon that implements the dispatcher.
  • Added the ability to prevent saving the snapwatchdog data to the Cassandra database to avoid possible slowness (maybe not so bad in terms of writes, but a large number of TTL/tombstones handling can be slow from my experience)
  • Added the version, hostname, and count to the flags.
  • The flag now returns an error if the unlink() fails (permissions usually).

snaplock

  • Moved the RAII lock object from finball to snap.
  • Use the RAII lock to increase the lock obtention when the content plugin tries to add an attachment, in case the file is being worked on.
  • Added a catch() of the "failed lock" so we can die() with a 423 error (locked) instead of the default/usual not talkative 500 error.
  • Fixed the test which ensures at least 3 computers for leadership when the cluster is 3 or more computers.
  • Added debug logs when TICKETADDED fails so we know why.
  • Somehow it looks like at times the LOCKSTARTED message is not received. I added an instanced sent from is_ready() when a leader is missing.
  • Fixed the handling of the LOCKLEADERS message: we must create new computers for missing leader(s) if such happens.
  • Added logs to better understand why is_ready() returns false.
  • Fixed the set_command() in CLUSTERSTATUS replies.
  • Changed "debug_lock_messages" with "debug_all_messages" in snapcommunicator.
  • Initialize start time in the constructor.
  • Set our start time in our constructor.
  • Immediately set the start time of new computers.
  • Moved the if(set_my_leaders) outside of the loop.
  • Added functions to access the is_locked() and lock_timedout() functions.
  • Removed the get_obtention_timeout_date() function since it wasn't used (and once we returned it's useless since we obtained the lock.)
  • Fixed the CLUSTERUP/DOWN/[IN]COMPLETE neighbors_count so it gets reset when the count changes, which allows adding/removing neighbors dynamically.
  • Fixed updating the f_cluster_status as it can't be done when reply_connection is not a null pointer.
  • Added a start time to each snaplock so a LOCKSTARTED tells us whether this is a new snaplock or not (i.e. if we know that snaplock but its start time changed then it was restarted so it's considered new.)
  • Made the snaplock is_ready() function return false is the quorum changes and the results is that the election would not have occurred.
  • Force service name for LISTTICKETS to be "snaplock".
  • Fixed the list of include path so the snaplock manager plugin compiles.
  • Actually install the lock manager plugin in the snaplock package.
  • Implemented the snapmanager.cgi lock tab.
  • Replaced a QStringList with snap::snap_string_list.
  • Fixed the default priority to 14 (I still had 15 in snaplock.)
  • Put a default priority in lock tab (14) instead of "".
  • Fixed the snaplock elections so they still work when we have less than three computers.
  • Fixed the usage of --debug-lock-messages in snaplock.
  • Mark ourselves as connected otherwise the election doesn't pick up.
  • Generate an error if the cluster is 3 or less computers and one or more is turned off.
  • Added a lock manager plugin to set up the candidate priority.
  • Removed a warning that would always happen and is not necessary.
  • Moved the lock_connection class in a 'details' namespace.
  • Created a lock_connection::run() function so we can call share_from_this().
  • SNAP-350: replace LOCKREADY message with LOCKSTARTED so we can use the LOCKREADY to answer a LOCKSTATUS request (like CASSANDRAREADY, etc.)
  • SNAP-350: added a LOCKSTATUS, LOCKREADY, NOLOCK set of messages. This was a bonus because of the CLUSTERUP and CLUSTERDOWN messages from the snapmanager. We don't internally use those, but they will be used by other daemons (snapserver/snapbackend).
  • SNAP-533: change the LOCKSTARTUP (was LOCKREADY) to start the election process by counting the number of computers connected and use the CLUSTERUP total number of computers to know we attained a QUORUM of computers.
  • SNAP-350: added the LOCKLEADERS to complete an election by informing the others that the election was done and inform them of the leaders. New connections get a LOCKSTARTUP with the leader information.
  • SNAP-659: detect when a snaplock connection dies and act on it by conducting new elections and sharing the status of the locks with the new leader (LOCK and LOCKTICKETS messages are used.)
  • SNAP-533: prevent locks from starting until QUORUM is reached.
  • SNAP-471: the new implementation clearly uses 3 leaders and sends messages with a key which is unique so overlap cannot happen.
  • SNAP-343: locks now timeout as expected, snaplock sends an UNLOCKED at the time of the timeout (and wait for acknowledgment with an UNLOCK.)
  • Moved the snaplock code inside the snaplock namespace.
  • Added a way to read messages in a blocking snap communicator connection in between messages (needs more testing, though.) This can be useful for locks that last a long time.
  • Added an unlock duration as UNLOCKED needs acknowledgment when due to a timeout.
  • Fixed many lock failure error handling. We send more LOCKFAILED and snaplock daemons understand and can forward a LOCKFAILED to the service asking for a lock.
  • Removed the max_pending_connections in snaplock since it wasn't used.
  • Added a SIGPIPE handler to (1) ignore the signal and (2) log the event.
  • Added USR1 and USR2 in snaplock to get some info without stopping snaplock.

snapcommunicator

  • Applied a fix to the snap_communicator permanent connection thread, now we have to call the stop() function, no matter what.
  • Fixed snapcommunicator so self is always included in the count.
  • Applied a fix so the lock_connection object gets released: i.e. the dispatcher needed to use a weak pointer in case it's to itself.
  • Fixed the msg_help() as 'this' may represent a dispatcher_base direct...
Read more

Release 1.6

04 Sep 16:52

Choose a tag to compare

Noticed that my first fix to snapcommunicator was not sufficient to get the cluster to stay connected as expected. The fact is we were still using get_client_address() for remote addresses. I replaced those with get_remote_address() and now that works. Also, I changed the handling of the GOSSIP message. When that happens, instead of checking whether the connection is enabled, I now check whether it has a messenger. If not then I restart the timer.

With these two changes, and the earlier change of having the timer set to 5 min. AND enabled, it works like a charm. Actually the re-connections happen very quickly as I was first expecting.

As I was at it, I also added a "packages" watchdog which allows us to check whether you have missing packages or unwanted packages or worse, two packages installed which are considered to be in conflict. (the one we know of which is being checked now is ntp vs ntpdate, when ntpdate runs it can prevent a clean restart of the ntpd daemon which manes ntpd stops running... so we ask you to remove ntpdate, which is not required when you run ntpd 24/7.)

Release 1.5

02 Sep 02:57

Choose a tag to compare

Many fixes on snapmanager and the libraries. The snap.cgi includes support for caching requests making it possible to get replies in 20ms instead of the usual 250ms we have with snapserver. That being said, the next version should shove around 120ms from the snapserver processing time by removing the dependency on the DESCRIBE of the Cassandra cluster. Still, the partial proxy implementation in snap.cgi makes it way better (much faster) to load pages after the very first one (i.e. who ever accesses the site the very first time will help in generating data for the local cache; after that further accesses will just use that local cache data.)

The other big change is the snapwatchdog daemon. It actually sends emails now. It detects problems, generates errors, and those errors get sent to you via an email. They are also recorded locally. You can actually access the latest status directly from snapmanager.cgi We use a stylesheet so it comes up as an HTML page instead of the XML file saved on disk. Finally the watchdog has 2x the number of plugins and handles existence of processes correctly (especially the snapbackends which may be stopped willingly because the administrator is about to run a maintenance.) There are still many things that can be checked, but only what we already have gives us a mean to make sure that the system is running smoothly.

This release also has many many fixes. See the changelog for details. You probably have pages of reading in there.

For those interested, I now will put a file with the list of our private Jira issues. This may give you an idea of what's to come (for the most part.) There are nearly 300 such issues.

(Note: version 1.2 to 1.4 have no official releases. In 1.5, the organization for the build system changed dramatically so it would work on launchpad as one source package although total we currently generate 99 packages.)

Release v0.10

19 Jun 05:33

Choose a tag to compare

Release v0.10 Pre-release
Pre-release
  • SNAP-161: The Editor Plugin Save button now makes use of the language to retrieve the correct revision key (without it, it would try to read a non-existant revision.)

  • SNAP-185: Changed the canonical meta tag title to the page title.

  • SNAP-235: Fixed the meta tag of the generator, correct version now.

  • SNAP-235: Noticed that the contact page short URL would show up on the home page. Applied a fix for that to the shorturl plugin.

  • SNAP-235: Fixed the Link header so we can add many links if we want to. At this time we support "shorturl" (was already there) and "canonical".

  • SNAP-529: Actually found one case that would SEGV in snap_backend because the connection to cassandra gets cleared up and then we still try to access a table.

  • SNAP-529: Cancel the reconnect timer if we receive a CASSANDRAREADY message before the timer times out (no need to re-request.)

  • SNAP-571: Added our own postfix filters for fail2ban.

  • EX-131: Added support for a reason parameter in the block_ip() call.

  • EX-131: Added a reason for each call to block_ip() in many places.

  • EX-131: If the snaplog_password.sh file exists, it needs to be renamed root_password.sh before we check whether the root password exists.

  • EX-131: Added broadcast for backends status for backend plugin.

  • EX-131: The self update warning now contains the number of backends running in the cluster.

  • EX-131: Send status after updating all services.

  • EX-131: Now highlights the tab with warnings/errors.

  • EX-131: Now keeps backends disabled after an upgrade (or first install).

  • EX-131: Added backend-status support to disable/enable all.

  • EX-131: Added a class which preserves the current "configuration" of backends. It remembers which the user enabled and disabled. When disable-all is initiated, then all backends are disabled. When reenabled, only the ones started are remembered.

  • EX-131: Added new select widget (i.e. Dropdown) for snapbackend.

  • EX-131: Added support for --timeout in snapdb, so we can decide what that is on the command line.

  • EX-131: DROP TABLE should have had a timeout of 5min. like the CREATE TABLE.

  • EX-131: Updated the snapcreatetables so it can actually drop old tables.

  • EX-131: Dropping the "list" table is not unlikely to timeout, we added a try/catch to ignore the problem since 99% of the time it won't be a problem at all.

  • EX-131: Reading the table definitions with attribute drop="drop" so the table gets deleted.

  • EX-131: Added drop="drop" for the list and listref tables.

  • EX-131: Updated the list plugin to make use of MySQL for the list journaling (instead of Cassandra which blocks very quickly).

  • EX-131: Changed the on_modified_content() to save new entries to the local journal instead of the Cassandra.

  • EX-131: The list plugin run by a client now pings the listjournal backend whenever the journal gets updated.

  • EX-131: Added several add_parameter() to the message class to support std::string.

  • EX-131: Added get_list_data_path() and various other things to support snaplistd.

  • EX-131: Make sure that the files used by the journal are owned by snapwebsites:snapwebsites (it may get run by root when run from the command line!)

  • EX-131: Added the snaplistjournal to the list of services to start in the snapbackend.postinst script.

  • EX-131: Added the missing dependencies on qt5sql5[-mysql].

  • EX-131: Put a virtual column of the status or key_start_date so we can get one row to know what comes next. MySQL will do the work of computing the next row using a BTREE index.

  • EX-131: Directly put now + 1 day in the status column, that way we can eliminate that computation from everywhere else.

  • EX-131: Changed the generate_all_lists() to use the MySQL table instead of the Cassandra list and listref tables.

  • EX-131: Changed the logic to make use of 3 simple SELECT and not one large SELECT of all the data. (1) get high priority, (2) if no high priority, get low priority, (3) get date and time for next wakeup.

  • EX-131: Replaced direct calls to glob() with the new snap::glob_dir class.

  • EX-131: Added glob_dir class to snapwebsites lib, and use it in snapmanagercgi.

  • EX-131: Added a glob_dir class to wrap the enumeration of the glob_t structure.

  • EX-131: This is a convenience class so you don't have to remember to free the C-based resources correctly each time. Just use the class, enumerate the contenting using a C++11 lambda function, and it's smooth sailing.

  • EX-131: Just remember to catch the exception generated from glob_dir::set_path() on error.

  • EX-131: Fixed 3 bugs in the QtCassandra library, if() tests were inverted.

  • EX-131: Moved libQtCassandra into libsnapwebsites.

  • EX-131: Added rollback API for batches.

  • EX-131: Added batch support to snapdbproxy/QCassandraOrder.

  • EX-181: Changed VARCHAR to TEXT for msgid (snaplog).

  • EX-181: Added support for journaling new pages.

  • EX-181: Added catches in the page_destroy_impl() method.

  • EX-181: Now protect page destruction by testing existence in backend.

  • EX-185: Converted to use CTest. Added comments regarding the issue.

  • EX-185: We need to allow spaces, but only if there is an angle bracket that appears last. For now, I'm keeping this case remarked off, even though it breaks a lot of the email address tests.

  • EX-185: Removed space/lf/cr/tab case and now return invalid.

  • EX-185: Add invalid email status.

  • EX-276: Added a log rotate of the /var/log/mail folder because the default logrotate for mail does not see that sub-folder.

  • Numerous fixes to snapmanagerdaemon and snapmanagercgi which improve usability. For example, the backends can now be temporarily disabled and reenabled with one command.

Release v0.8

21 May 07:14

Choose a tag to compare

Release v0.8 Pre-release
Pre-release
  • SNAP-557: Added support to add a "no-js" or "js" class to the tag of each page.

  • SNAP-551: Took out selection size check in cassview so the first click works as expected.

  • SNAP-551: Still check that the current model (argument) is valid. Just like for the columns.

  • SNAP-529: Applied several fixes to avoid crashes when we lose a connection:

  • SNAP-529: (1) reset backend/sites/context pointers with just .reset(), the destructors now know to safely clearCache() themselves.

  • SNAP-529: (2) added a try/catch in the is_ready() function since it can end up throwing and we want to continue instead of "crashing".

  • SNAP-529: (3) removed the hack in the child process of snapbackend, we do not need to keep the f_cassandra pointer of the parent around anymore.

  • SNAP-529: (4) added a signal handler so if we receive a SIGPIPE we know about it.

  • SNAP-529: (5) fixed the bio_deleter() to prevent BIO_free_all() from closing the socket and thus avoid the shutdown(), that way the connection can continue in the parent process. There is still a potential for a clash in multi-threaded or multi-process application, though.

  • SNAP-529: Added a note to the snap::process implementation and SIGPIPE.

  • SNAP-529: Fixed QCassandraTable and QCassandraRow destructors: they have to call the clearCache() and do so in a try/catch (if the connection was lost, the try/catch prevents an exception in a destructor.)

  • SNAP-529: Also check the g_child_connection pointer before using it on zombies.

  • SNAP-440: Added a BACKUP_OPTIONS= in the default parameters so one can change various other options such as the --use-ssl.

  • SNAP-440: Renamed the HOST variable as BACKUP_HOST.

  • SNAP-440: Added a BACKUP_PATH so it is possible to change the destination path too.

  • SNAP-440: Added set -e in the cron script just in case.

  • SNAP-276: Added an rsyslog configuration file to force all postfix messages to /var/log/mail/mail.log only (i.e. no syslog and no /var/log/mail.log*).

  • SNAP-276: Updated the fail2ban paths to point to the new location.

  • SNAP-276: Updated the debian/install file to add the rsyslog file.

  • SNAP-276: Updated the postinst script to move the log files in the sub-folder.

  • SNAP-276: Fixed the chown separator from '.' to ':'.

  • SNAP-289: Applied a fix to destructors which could receive exceptions.

  • SNAP-289: Now outputs messages in LOG instead of stderr on exception caught.

  • SNAP-259: EX-169: Added an extra flag to allow the "Forgot password" verification in a different browser.

  • SNAP-187: Removed the warning when finding a #id after other selectors.

  • SNAP-187: Fixed the dev/build-release and dev/pack scripts.

  • SNAP-187: Fixed the DIVIDE for calc() so it works.

  • SNAP-187: Added a test to specifically verify that a divide in calc() works.

  • SNAP-187: Fixed a test which verified that DIVIDE would fail in that case.

  • SNAP-187: Added support for @Viewport.

  • SNAP-187: Added support for @Keyframes (quite different compiling!)

  • SNAP-187: Added a new node type: FRAME, for the @Keyframes.

  • SNAP-187: Updated the mk script so it corresponds to the new BUILD scheme.

  • SNAP-187: Enhanced an error I ran into in output_component_value().

  • SNAP-187: Added support for specialized pseudo names.

  • SNAP-187: Added a compiler and assembler tests for the @Keyframes.

  • SNAP-187: Updated the node test with the FRAME node type.

  • SNAP-187: Updated the tests so they all pass.

  • SNAP-187: Fixed version definition in top CMakeLists.txt, we now use the changelog.

  • SNAP-187: Fixed version definition in dev/version to read it from changelog.

  • SNAP-187: Updated the coverage script to the new BUILD scheme.

  • SNAP-185: Replaced the jQuery() accesses to "canonical" with "page-uri".

  • SNAP-185: Added the <link rel="page-uri" ...> tag to the header.

  • SNAP-185: EX-79: Fixed the box-sizing of the editor toolbar, it still appears at the wrong position, though.

  • SNAP-185: Added the expr() function to the filter functionality.

  • SNAP-185: Fixed the filter token_help() function with missing entries.

  • SNAP-185: Fixed an error message in layout.cpp so it shows the correct filename.

  • SNAP-185: Using the "sites" variable made me discover a couple of problems in snap_uri, there may still be one more that I have not yet caught. The problem was a variable that could be incremented twice in a row.

  • SNAP-185: Started a test to verify that the snap_uri object works as expected.

  • SNAP-185: Fixed the cell() function documentation in snap_expr.

  • SNAP-185: Use the "core::canonical_domain" variable as the canonical domain name on test websites, so SEO works better.

  • SNAP-185: Changed the user_logged_info_t class so that you have to pass in a path.

  • SNAP-185: The logged-in user class needs to know the path for the user, which you must supply now in the constructor. I no longer allow read/write access to the path. It is now read-only.

  • SNAP-181: Moved the iptables logs under /var/log/iptables/.

  • SNAP-181: Updated the preinst script to use the sub-folder.

  • SNAP-181: Actually delete the /var/log/iptables on a purge.

  • SNAP-181: Commented out the Apache2 timeout handling in fail2ban.

  • SNAP-181: Enhanced the showfw script to save all the rules at once.

  • SNAP-179: Fixed a couple of instances were I used double instead of the float64.h type: float64_type.

  • SNAP-179: Fixed the tests, the tags need to be between '[' ... ']'.

  • SNAP-179: Added filter which replaces image urls with branch/rev numbers.

  • SNAP-179: Added trace statements for DEBUG-only.

  • SNAP-179: Took out the code that forces the branch/revision at this level.

  • SNAP-173: EX-171: Added a priority so a system revision may still be ordered between various plugins.

  • SNAP-173: EX-171: Removed the overwrite exception from revision since now we also need to be able to overwrite revision fields.

  • SNAP-173: EX-171: Made updates of output files for test purposes.

  • SNAP-173: EX-171: Added the "content::field_priority::" to dbutils.

  • SNAP-173: EX-171: Removed the "\n" at the end of the trace() message for the logger.

  • SNAP-110: Nevermind, the bug was actually in conf/snapmanager-apache2.conf.

  • SNAP-110: Doug added a link and did not update the skip, also he could have added to the existing regex. So I did that and did not change the skip which are now correct again.

  • SNAP-110: Actually output buffer and not buffer.c_str() or we miss quite a few bytes.

  • SNAP-110: Moved the gathering of the cookie back after favicon.ico.

  • SNAP-110: Fixed the cookie handling.

  • SNAP-110: Changed I/O interface to use the snap::file_content instead.

  • SNAP-110: Added some debug to try to see why the favicon.ico does not get through.

  • SNAP-110: Added support for favicon.ico and at the same time do not lock someone's IP address when attempting to access that file.

  • SNAP-110: Removed package snapmanagerbuild which is not used anymore.

  • SNAP-110: Updated my script to match the new build system layout and functionality.

  • SNAP-110: Added list of not allowed protocols (SSLv2/3, TLSv1).

  • SNAP-110: Force postfix to make use of TLS.

  • SNAP-110: Disabled the VRFY command.

  • SNAP-110: Force sender to use HELO to present itself.

  • SMAP-110: Added the smtpd_tls_exclude_ciphers parameter.

  • SNAP-110: Added spinning globe to snapmanager. Improved pending code in js.

  • SNAP-110: Took out the interval and replaced it with a timeout.

  • SNAP-110: This timeout is only set when waiting for a server operation to complete. This way we avoid the continuous interval loop and the variable "ajax_pending", which was a hack.

  • SNAP-110: Reworked so that instead of tab-#, I use the plugin name directly.

  • SNAP-110: This simplified the code a great deal. Now for the single div, I no longer need to calcuate the tab number--I have all the information I need.

  • SNAP-110: Changed functionality to now use an object called "FieldDiv".

  • SNAP-110: This encapsulates all of the data relevant to the modified div. This also allows me to better move data around to events. In theory, this should allow one to have multiple processes going at once--but for now, the click event for the button is ignored if there is anything modified.

  • SNAP-110: Fixed "dead button" error, and host error.

  • SNAP-110: The "dead button" problem was due to the fact that when JS replaces a div with a form in it, the event hooks from jQuery which were set up on document ready are not there for the new DOM objects. I moved that code to a function that can be called when new objects are added.

  • SNAP-110: Also, the cgi binary did not have the "host" name in the URI, so it failed to embed the hostname into the form properly the first time.

  • SNAP-110: Reusing code in javascript now, and fixed initial host error.

  • SNAP-110: Added an interval timer to POST a status request.

  • SNAP-110: The new "button" type is "status," which does nothing at all in the post_process() method. The js uses a 1 second timer to send new POST requests so long as there is a modified status in the tr.

  • SNAP-110: Now using jQuery's "data()" method, which sets the relevant info into existing DOM structures, rather than globals.

  • SNAP-110: Now snapmanagercgi and the daemon are a little more async-friendly and automated.

  • SNAP-110: Instead of having to hit the reload button, AJAX now reports the status and "unblues" the tr. This is still a big work in progress.

  • SNAP-110: Now using javascript to handle button presses.

  • SNAP-110: Fixed small bug, now writes file properly and deletes if "none".

  • SNAP-110: Added code to add an APT pin should the user desire it.

  • SNAP-110: This makes sure that the cluster cannot be upgraded to an unstable source if pinned to, say, "stable." This also allows the admin to roll a set of packages back to a known good configuration.

  • SNAP-110: Changed accordion to tabs in snapmanager.

  • SNAP-110: Finished with accordion mod, to give a basic...

Read more

Release v0.7

07 Feb 17:40

Choose a tag to compare

Release v0.7 Pre-release
Pre-release

Issues addressed:

  • SNAP-547: Properly update JS and CSS files in database when the branch (major version) changes. Fixed links to properly work with any number of branches.
  • SNAP-545: When attempting to install snapmanagercgi on the same system as snapbuild, the Apache site files would conflict. This has been resolved.
  • SNAP-541: For the snapdb package, the snapdb.conf file was mandatory. It is now optional.
  • SNAP-537: Fixed the test of the MX field when found in the cache.
  • SNAP-531: An expired verification code was preventing an email address from ever being used again.
  • SNAP-530: Actually fixed transparent hits and added support for a check as well.
  • SNAP-529: Fixed several problems with starting order and crashes of the pagelist backend. One still happens though. This included properly clearing the context caches.
  • SNAP-468: Finally fixed the layout loader: theme, layout, boxes, editor are really working properly now.
  • SNAP-440: Added BACKUP_OPTIONS and BACKUP_PATH parameters.
  • SNAP-372: Fixed a popup menu problem in cassview.
  • SNAP-331: Date widget was hidden if too low on page, now pops up going up or over.
  • SNAP-329: Redirect on log in now follows user specific info instead of being a global setting for that session ID.
  • SNAP-258: Added interface for user to change their email address. Also, the users table is indexed by user ID instead of their email address. Made a sub-class to handle the users table rows in one place. Properly create missing users. Took out exceptions to their own library so all our libraries can make use of the stack recording capability we offer.
  • SNAP-181: Created a separate library for the snap::addr class so it is accessible from iplock and snapfirewall. Library comes with a 100% coverage test.
  • SNAP-168: Fixed various problems with message broadcasting.
  • SNAP-163: Resized with CSS so e-Payment popup fields fit on more computers.
  • SNAP-158: iptables checks are now less stringent, we waste more CPU time checking for those bozos than just ignoring them. Reduce the restarting of pagelist to 5min, at least until we can figure out SNAP-529 last problem.
  • SNAP-110: Enhanced various tools such as snapdb.
  • SNAP-8: Updated the libtld library with the latest known TLDs from the Mozilla list. Updated and enhanced the tests so we can better verify more of the rather complicated domain names.
  • SNAP-5: Fixed a bug in readRows() which would crash if called with the predicate set to NULL.
  • Enhanced various installation scripts (postinst, postrm...) to take more special cases in account.
  • Enhanced the editor saveDialogPopup() so it works even if called a bit late.
  • Added support so we can have a contact form, only it is not yet a full core plugin.
  • Added the no_iframe plugin to prevent someone from showing your pages in iframes.
  • Reorganized the snapmanager[.cgi|daemon] environment.
  • Fixed various documentations and copyright notices.

Release v0.6

10 Dec 20:00

Choose a tag to compare

Release v0.6 Pre-release
Pre-release

Bug: Fixed message timeout/id check in snapcommunicator.
Bug: Fixed a problem in snapfirewall that would lose its connection to snapdbproxy.
Bug: Fixed extension check in setup_uri().
Bug: Fixed the firewall UDP checks, we now use the UDP state instead of opening ports both ways.
Enhancement: Put local IPs to the OUTPUT rules of the firewall to allow non-SSL communication on our clusters.
Enhancement: Remove the frequency and priority tags from sitemap.xml since search engines ignore them.
Enhancement: Check domains for an MX field when used in an email address.
New: Implemented HTTP to HTTPS redirect internally. Not really functional with current database structure, though.

Release v0.5

12 Nov 22:21

Choose a tag to compare

Release v0.5 Pre-release
Pre-release

Jira issues fixed:
EX-147
EX-146
EX-139
EX-138

Other entries that are probably already fixed?

EX-131
EX-83