Detailed Caucus Interpreter History Log

Charles Roth

This document is a detailed log of the history of feature changes in the Caucus interpreter, aka "binaries".

4.70 -- 24 Apr 2005

  1. Fix: SQL query memory leak.
    Each call to $sql_query...() consumed 10-30K of RAM that was never returned.  This has been corrected!

4.69 -- 15 Feb 2005

  1. Use unixODBC (instead of iODBC) to connect to MySQL.
    As of MySQL 4.1, the MyODBC-3.51.11 package has severe problems working with the iODBC driver manager.  As a result, Caucus 4.69 and higher is built to use unixODBC instead.  This also requires that sites upgrading to Caucus 4.69 must install the unixODBC driver manager.

    Partly as a consequence, there is a new swebd.conf parameter "Stderr", which controls what happens to diagnostic messages sent to stderr.  The default is to ignore it (send it to /dev/null), largely because unixODBC generates a bunch of useless warning messages when Caucus starts up.

    Changed: include/sweb.h, sweb/loadconf.c, swebs.c, sweba.c

  2. Fix: make $readln() handle any size line.
    In previous versions, $readln() stopped after 2000 characters.  This caused a problem, in particular, when restoring a course conference from an archive, and assignments had text > 2000 characters.

    Changed: sweb/funcvalue.c

  3. Fix: wildcard permission bug.
    The new wildcard feature in 4.68c introduced a bug, where (for example) "xy*" would not match "xyroth".

    Changed: people/equalid.c

4.68c -- 08 Jan 2005

  1. Allow wild cards at start or end of userid matching.
    Previously, when matching userids in conference userlists or groups files, the only wildcard matching allowed was "abc*" or just "*".  Patterns such as "*smith" were not supported (and worse, acted like plain "*").

    Now "*smith" is supported.  Combinations such as "j*smith" are not allowed, and will return failure (not a match).

  2. Force end of URL detection at > or <
    If a user types "<http://caucus.com>" into the richtext editor, it converts the ">" into "&gt;", which would not normally be detected as the end of the URL -- even though it clearly is. 

    Note that this means that the richtext editor will always get confused by a URL like "http://caucus.com/handler.html?a=5&b=6", since it always forcibly translates the "&" into "&amp;".  The only solution in that case is to use the richtext editor's "link" button (globe with chains icon) to enter the precise link.

4.68b -- 22 Dec 2004

  1. Bug fix: $array_set() crashed swebs if its first ~10 arguments are all numbers.

4.68a -- 12 Dec 2004

  1. Add $encode64() for base64 file encoding.
    Primarily useful for converting binary files into email attachment text.

4.68 -- 9 Nov 2004

  1. Add $addtarget() to add TARGET fields to <A HREF> tags.
    For post-processing the output of the Caucus richtext editor, so that automatically "blued" URLs will open a new window when appropriate.

  2. Add $h2url() to translate URLs in HTML text.
    For post-processing the output of the Caucus richtext editor, so that URLs in HTML text will be automatically "blued".

  3. Make $unique() start with a psuedo-random number.
    To help protect against browser & proxy-server caching errors across different Caucus sessions.

4.67 -- 20 Oct 2004

  1. Extend $it_resign() so that sweba scripts can "resign" anyone from any conference.

  2. Fix $pw_add() so that it uses the internal database if both LDAP and internal methods are enabled.
    In config file swebd.conf, parameter PW_Prog specifies which method(s) may be used for user authentication.  The value "ldap internal" means that Caucus first tries to authenticate against the LDAP database; if that fails, it falls back to the internal (flat-file) database.

    However, when adding, changing, or deleting entries, in this situation Caucus should always use the internal database (since it does not support modifying an LDAP database, and most LDAP databases shouldn't be updated from an application like Caucus anyway!).

  3. Prevent infinite recursion in function evaluation.
    Caucus now applies a limit of 100 levels of recursion in function evalution.  At that point, it will add the message ERROR: infinite recursion in function or macro call to the output stream, and begin unwinding the CML function call stack.

    For example: imagine a (CML format) response that contains a call to $re_text() for itself.

  4. Fix: do not force SOCKET/sws*.log creation if event logging fails.
    Event logging will fail frequently if the mod_stats module has not been installed, but course conferences (and thus MySQL) are in use. So don't create log files in SOCKET in that case.

4.66 -- 20 August 2004

  1. Add $sql_query_select() function.
    This is a much easier way to assemble all the results from all the rows of a simple SELECT query -- rather than using sql_query_open(), while, and sql_query_close() to assemble the entire result set.

  2. Add $it_hidden() function.
    Provides basis for hidden/retired features.

  3. Add $set_it_hidden() function.
    Provides basis for hidden/retired features.  Note that a hidden item has an $it_visib() value of 0.

4.65 -- 1 August 2004

  1. Fix rare "post-disappearing-response" problem.
    In very rare circumstances, a user could enter a response, press "Post & View", and the response would promptly disappear (not get posted).

  2. Add $peo_access() function.
    Provides a list of userids with specific access to a specific conference.

4.64 -- 6 July 2004

  1. Remove embedded blanks from userids.
    Caucus assumes that a userid has no embedded blanks.  If Caucus is used with an external user authentication method (specified by the PW_Prog parameter in the swebd.conf configuration file) that does allow embedded blanks, confusion can result.  Symptoms can include users that cannot be seen or deleted.

    To remove this problem, this version automatically strips embedded blanks from a userid immediately after authentication.

  2. Make $escsingle() escape return characters.
    The $escsingle() function now "escapes" single quotes, newlines (linefeeds) and returns (carriage-returns).

  3. Make $readfile() translate return-newline pairs to newlines.
    $readfile() now deals intelligently with text files that may have originated on a Windows PC, translating them into "unix" format (newlines only).

  4. Add $str_replace() function.

  5. Add $unhtml() function.

4.63 -- 3 June 2004

  1. Modify $add_resp() function so it can create an "empty" response.

  2. Add $mkdir() function.

4.62 -- 16 May 2004

  1. Fix $re_delete() et al conference permission problems
    Version 4.60 added the $co_priv() function to define new values for conference roles such as organizer, instructor (new), include, readonly, exclude.  But a few CML functions like $re_delete() used the old hard-coded values, and thus in some cases could allow non-organizers to delete other users' responses.

4.61 -- 5 May 2004

  1. Fix default organizer/include/etc permission values
    Version 4.60 added the $co_priv() function to define new values for conference roles such as organizer, instructor (new), include, readonly, exclude.  But the new default values "broke" old CML code.

    This version fixes the problem by making the default values be organizer=3, include=2, readonly=1, exclude=0.

  2. Fix $set_per_join() access when "force-joining" users.
    In some cases, $set_per_join() could make a person a member of a conference, even though they did not have access to the conference.  (This would only affect membership lists, and would not give people access they shouldn't have.)