[open-ils-commits] [GIT] Evergreen ILS branch tags/rel_2_2_3 created. 97729fd25fc3a1c3b023c52306576961e6212aa4

Evergreen Git git at git.evergreen-ils.org
Thu Nov 8 13:32:56 EST 2012


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Evergreen ILS".

The branch, tags/rel_2_2_3 has been created
        at  97729fd25fc3a1c3b023c52306576961e6212aa4 (commit)

- Log -----------------------------------------------------------------
commit 97729fd25fc3a1c3b023c52306576961e6212aa4
Author: Bill Erickson <berick at esilibrary.com>
Date:   Tue Nov 6 16:16:36 2012 -0500

    Bumping version numbers, adding Upgrade Script and Changelog
    
    Signed-off-by: Bill Erickson <berick at esilibrary.com>

diff --git a/ChangeLog b/ChangeLog
index 1f72b2c..6caaf05 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,972 @@
-Evergreen doesn't keep a GNU-style ChangeLog except in release tarballs.
-Those seeking a change log are encouraged to run 'git log -v', or read
-it online at: http://git.evergreen-ils.org/?p=Evergreen.git;a=log
+commit 845e482ab46a2b2ef1c6bf9404ef633b8525e5f2
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Fri Nov 2 15:28:27 2012 -0400
+
+    CStoreEditor auto-activity log redaction
+    
+    CStoreEditor logs all update calls to the activity log as key/value
+    pairs on the updated object.  Avoid loging key/value pairs for objects
+    when the API call being relayed by CStoreEditor is on the list of
+    log-protect API calls.  Instead, log "**DETAILS REDACTED**".
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+
+20	3	Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm
+
+commit b230c152544b372d57661f091d8a43568833eba0
+Author: Mike Rylander <mrylander at gmail.com>
+Date:   Wed Oct 10 17:36:52 2012 -0400
+
+    Make it possible to suppress IDL fields
+    
+    Some clients of external services, particularly pcrud and reporter-store,
+    need to be able to access tables that contain columns we'd rather restrict.
+    For instance, the passwd field on actor.usr.
+    
+    To effect this feature we provide a blacklist attribute for fields, called
+    suppress_controller, which works in the same way as the class controller
+    attribute but names controllers not allowed to use the field.  When the field
+    is explicitly named in a query (fieldmapper select block or json_query) an
+    error is thrown, and suppressed fields are ingored in general fieldmapper
+    search/retreive requests.
+    
+    Signed-off-by: Mike Rylander <mrylander at gmail.com>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+1	1	Open-ILS/examples/fm_IDL.xml
+1	0	Open-ILS/examples/fm_IDL.xsd
+7	0	Open-ILS/src/c-apps/oils_idl-core.c
+27	2	Open-ILS/src/c-apps/oils_sql.c
+3	0	Open-ILS/web/reports/xul/source-browse.js
+3	0	Open-ILS/web/reports/xul/source-setup.js
+
+commit 245c4faa7a22f9c67a3a738913df6fd5df15a06f
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Wed Oct 31 09:00:19 2012 -0400
+
+    Add sample log redaction config to EG opensrf_core
+    
+    Redact parameter logging for the following API calls:
+    
+    Login:
+    open-ils.auth.authenticate.verify
+    open-ils.auth.authenticate.complete
+    open-ils.auth_proxy.login
+    
+    User updates:
+    open-ils.actor.user.password
+    open-ils.actor.user.username
+    open-ils.actor.user.email
+    open-ils.actor.patron.update
+    open-ils.cstore.direct.actor.user.create
+    open-ils.cstore.direct.actor.user.update
+    open-ils.cstore.direct.actor.user.delete
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+
+18	0	Open-ILS/examples/opensrf_core.xml.example
+
+commit 650caa116c210bb5b8c1903239b27e04ab5f6d30
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Tue Nov 6 09:48:51 2012 -0500
+
+    Document log redaction XML for opensrf_core.xml (2.2)
+    
+    Based on Bill Erickson's original text.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+
+28	1	docs/RELEASE_NOTES_2_2.txt
+
+commit 92f9a371dffad6a741dd5e6abc6ab8ba65a82713
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Wed Oct 10 17:26:06 2012 -0400
+
+    Sample Apache error syslog captures stderr
+    
+    Not all STDERR output and not all $req->log->foo() output makes it to
+    the Apache error log when using the 'ErrorLog syslog:local7'
+    configuration directive.  This changes the sample config to match the
+    CustomLog config so that all output is captured and redirected to
+    syslog.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+
+1	1	Open-ILS/examples/apache/eg.conf
+
+commit ea7ecb2dc7bdb12582aac55ca7e92a416592cecd
+Author: Mark Cooper <markchristophercooper at gmail.com>
+Date:   Mon Oct 22 22:01:22 2012 -0700
+
+    LP#1066629: Acq: Receiving an item should not change the status to "In Process" in many cases
+    
+    As suggested, when received, restrict copy status update for lineitem copies to only those that were on-order. Otherwise copies may have the status set to 'In Process' inappropriately.
+    
+    Signed-off-by: Mark Cooper <markchristophercooper at gmail.com>
+    Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+2	1	Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm
+
+commit 2d83263fcaadde28e4d0ed511b09154653a8ae84
+Author: Mark Cooper <markchristophercooper at gmail.com>
+Date:   Tue Oct 9 21:04:32 2012 -0700
+
+    LP#826917: Marc editor, CTRL+F6, F7, F8 no longer working on 2.0+
+    
+    Updated marcedit.js to recognize F6/7/8 according to codes at:
+    http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes.
+    Did not modify behavior (so input focus is not adjusted post record load).
+    
+    Signed-off-by: Mark Cooper <markchristophercooper at gmail.com>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+6	6	Open-ILS/xul/staff_client/server/cat/marcedit.js
+
+commit 5cf254fb3e63fb3e700cbfc743fcf5270c8e4d0c
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Thu Oct 18 14:54:08 2012 -0400
+
+    Rollback cstore transaction before bbag record load
+    
+    To avoid timeouts, which results in transaction rollbacks, preemptively
+    roll back the bookbag fetching cstore transaction before we retrieve
+    what could be a very large list of bookbag records data.
+    
+    Conflicts:
+    
+    	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Jason Stephenson <jstephenson at mvlc.org>
+
+9	0	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm
+
+commit 94051cef50fe8a7248ba305db60e50ae27384c17
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Mon Oct 8 22:30:32 2012 -0400
+
+    Enable maintain_control_number() to handle new OCLCnums
+    
+    In July 2013, per LP# 1049171, OCLC will begin generating control
+    numbers beginning with the "on" prefix.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+    
+    Conflicts:
+    
+    	Open-ILS/src/sql/Pg/002.schema.config.sql
+
+2	2	Open-ILS/src/sql/Pg/002.functions.config.sql
+1	1	Open-ILS/src/sql/Pg/002.schema.config.sql
+137	0	Open-ILS/src/sql/Pg/upgrade/0742.schema.maintain_control_number_oclc.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/0742.schema.maintain_control_number_oclc.sql
+
+commit 30b6b8c483962ae24e47eb61450dc59534a3b896
+Author: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+Date:   Thu Oct 11 16:00:36 2012 -0400
+
+    TPAC: Make facet display work as in JSPAC
+    
+    Namely, this means:
+        - You see five facets per category by default, not ten.
+        - You can click a link to see all the facets in a category
+            (before this it was impossible to display more than ten).
+        - When viewing all the facets in a category, you can click a link
+            to reduce the list back to five.
+        - This number five I'm talking about is configurable in config.tt2.
+        - Alphabetical sorting of facets grouped by the same numbers of
+          results is restored.
+    
+    This addresses LP #1065109.
+    
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+    Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+    
+    Conflicts:
+    
+    	Open-ILS/src/templates/opac/css/style.css.tt2
+
+8	2	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm
+1	0	Open-ILS/src/templates/opac/parts/config.tt2
+31	27	Open-ILS/src/templates/opac/parts/result/facets.tt2
+6	3	Open-ILS/web/css/skin/default/opac/style.css
+
+commit dabeec45dc60f64e697ef661963f2245d519fc4f
+Author: Steven Callender <stevecallender at esilibrary.com>
+Date:   Mon Oct 15 10:48:28 2012 -0400
+
+    Added a check for the money.collections_tracker table when using the open-ils.collections.users_of_interest.warning_penalty.retrieve API call.
+    
+    Users that are already entered into the money.collections_tracker table should not be recalled from the open-ils.collections.users_of_interest.warning_penalty.retrieve API. This change will check for the existance of the user in the money.colletions_tracker table.
+    
+    Signed-off-by: Steven Callender <stevecallender at esilibrary.com>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+10	1	Open-ILS/src/perlmods/lib/OpenILS/Application/Collections.pm
+
+commit dd646c9a28910c4b5319d7ce149b5c955e52cec5
+Author: Galen Charlton <gmc at esilibrary.com>
+Date:   Fri Oct 12 15:38:59 2012 -0400
+
+    trivial whitespace cleanup
+    
+    Locally consistent, globally all over the map in this file.
+    
+    Signed-off-by: Galen Charlton <gmc at esilibrary.com>
+
+1	1	Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/actor.pm
+
+commit 97d8f94f37e2f57e2b4cf448c201bd3b996392c4
+Author: Chris Sharp <csharp at georgialibraries.org>
+Date:   Thu Oct 11 19:33:16 2012 -0400
+
+    Adding a WHERE clause to prevent timeout of juv-to-adult function
+    
+    Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
+    Signed-off-by: Galen Charlton <gmc at esilibrary.com>
+
+2	1	Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/actor.pm
+
+commit bda6a467b549e103f87efbfab9c87e94170bf5ec
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Thu Oct 11 01:43:01 2012 -0400
+
+    TPAC: Respect location visibility for result copies
+    
+    Robert Soulliere noted in LP# 1062502 that copies in a location marked
+    "opac_visible = FALSE" were erroneously being displayed in search
+    results. This would occur if at least one copy on a record was in a
+    visible location, but other copies were in an invisible location.
+    
+    This commit prevents copies in hidden locations from being displayed,
+    and also adds guards for the visibility of the copy status and the
+    circulation library.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Robert Soulliere <robert.soulliere at mohawkcollege.ca>
+
+5	0	Open-ILS/src/templates/opac/parts/misc_util.tt2
+
+commit 695745b457e8d89b070e9916986c0b3b34062bfe
+Author: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+Date:   Thu Sep 27 14:51:44 2012 -0400
+
+    Serials: Don't force a Receive Unit Template in Alt Serials Control
+    
+    Mary Llewellyn reported that she used to be able to use serials and
+    perform copy-less receiving without any value in this field.
+    
+    The requirement that a value be set in the Receive Unit Template field
+    of serial distributions was added (by me) in 2.1 to the alternate serials
+    control interface, but is not enforced at lower levels.
+    
+    I now believe that requiring a value here must have been a ham-handed
+    way to avoid a difficult-to-troubleshoot issue in copy-FUL receiving,
+    but copy-LESS serials receiving workflows indeed don't need this, so
+    this commit removes the requirement.
+    
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+0	1	Open-ILS/src/templates/serial/subscription/distribution.tt2
+
+commit 2ece1249b2aaa53e2b98e2707a41416ae1807b15
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Wed Sep 5 14:39:36 2012 -0400
+
+    Use current fiscal year for PO creation (API)
+    
+    When creating a PO, if no fiscal_year is specified by the caller, use
+    the current fiscal year of the ordering agency.  This change primarily
+    affects the Open-ILS/src/support-scripts/acq_order_reader.pl script (and
+    any other direct API callers) which does not offer the user a chance to
+    set the fiscal year manually.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Mike Rylander <mrylander at gmail.com>
+
+11	1	Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm
+
+commit 0a3b116b2292601048a72351330427c694b12f2b
+Author: Mike Rylander <mrylander at gmail.com>
+Date:   Thu Sep 20 15:17:36 2012 -0400
+
+    Fix autosuggest when in no-vis-check mode
+    
+    When autosuggest is configured to avoid visiblity checking, it sends a
+    special org unit id of -1 to the database as a signal.  However, the stored
+    procedure is expecting a NULL instead.  This allows either by transforming
+    -1 to NULL within the stored procedure.
+    
+    Signed-off-by: Mike Rylander <mrylander at gmail.com>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+    
+    Conflicts:
+    
+    	Open-ILS/src/sql/Pg/002.schema.config.sql
+
+1	1	Open-ILS/src/sql/Pg/002.schema.config.sql
+1	0	Open-ILS/src/sql/Pg/030.schema.metabib.sql
+134	0	Open-ILS/src/sql/Pg/upgrade/0740.schema.checkless_browse_fix.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/0740.schema.checkless_browse_fix.sql
+
+commit 684c17f38e48c5d774dc0ce2136796c5533590e4
+Author: Mark Cooper <markchristophercooper at gmail.com>
+Date:   Tue Oct 9 12:41:44 2012 -0700
+
+    LP#1007020: Using checkout, last activity shows as unset
+    
+    Added usr_activity to $fields for flesh_user function.
+    
+    Signed-off-by: Mark Cooper <markchristophercooper at gmail.com>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+2	1	Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm
+
+commit 4aa6ba3446d22881fc7761d7ab7773acbc35f6d3
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Thu Aug 30 00:21:01 2012 -0400
+
+    Remove C compiler warning for writeAuditInfo
+    
+    The C compiler was throwing the following warning:
+    
+    oils_sql.c: In function 'writeAuditInfo':
+    oils_sql.c:7244:1: warning: control reaches end of non-void function
+    [-Wreturn-type]
+    
+    By shifting the "return 0" to the end of the function, outside of the if
+    statements, we can ensure that we always return an int value.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Jason Stephenson <jstephenson at mvlc.org>
+
+1	1	Open-ILS/src/c-apps/oils_sql.c
+
+commit 235b2e93f2be65c6e490d6390bd6252f35345353
+Author: Mike Rylander <mrylander at gmail.com>
+Date:   Mon Oct 8 14:12:49 2012 -0400
+
+    Be more strict about dates we generate
+    
+    ISO-8601 dates must have a 4-character year component, however strftime does
+    not left-pad years to 4 characters when the century is one character long even
+    though the man page for strftime(3) suggests otherwise:
+    
+           %F     Equivalent to %Y-%m-%d (the ISO 8601 date format). (C99)
+    
+    This makes stricter ISO-8601 parsers, such as Perl's DateTime module, unhappy.
+    So, we'll do it ourselves using the glibc extensions available to strftime for
+    specifying a padding character and desired length.
+    
+    Signed-off-by: Mike Rylander <mrylander at gmail.com>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+4	4	Open-ILS/src/c-apps/oils_sql.c
+
+commit fb103be06ed98b1cca9dd1e4bfbe91377e978498
+Author: Dan Scott <dan at coffeecode.net>
+Date:   Mon Oct 8 15:08:47 2012 -0400
+
+    Checkout: further validation of due date override
+    
+    The check_past() function failed if given a date that was not strictly
+    in YYYY-mm-dd format; interestingly, a common transposition typo such
+    as "0212-10-20" results in "212-10-20" getting passed to check_past(),
+    and therefore generating an invalid date. Throw an exception in
+    check_past() rather than returning true, because we are not in fact
+    stating that the due date is in the past - and catch the exception and
+    flag the due date override box accordingly in the checkout screen.
+    
+    We could bubble the exception up to the user, but hopefully highlighting
+    the checkout box as being in an invalid state will catch the attention
+    of the users.
+    
+    [LFW: Slightly amended a comment in OpenILS/WWW/EGCatLoader/Util.pm]
+    
+    Signed-off-by: Dan Scott <dan at coffeecode.net>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+1	1	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm
+9	1	Open-ILS/xul/staff_client/chrome/content/util/date.js
+12	5	Open-ILS/xul/staff_client/server/circ/checkout.js
+
+commit c5bf1c88b9cb072f7d00df6f3ded9280b5b85f56
+Author: Dan Scott <dan at coffeecode.net>
+Date:   Mon Oct 8 11:25:41 2012 -0400
+
+    TPAC: Invalid due dates cause 500 server error
+    
+    CStore appears to return dates with leading 0s (such as '0212-10-08
+    23:59:59-05:17:32') with the leading 0s stripped off, resulting in
+    cases with 1-digit or 3-digit years for which DateTime::Format::ISO8601
+    returns an error.
+    
+    We can protect against this problem by adding some defensive code to the
+    TPAC utility method to add the 0s back to the start of the year. We can
+    also log the problem when it occurs so that administrators can fix the
+    problem dates in the database.
+    
+    Signed-off-by: Dan Scott <dan at coffeecode.net>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+16	1	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm
+
+commit 5842afbf1590d6ff580168b8f59640d0f8a6f0e0
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Thu Aug 30 11:55:10 2012 -0400
+
+    Slightly saner login form markup
+    
+    Try to provide accessibility via label attributes and move from a
+    table-within-a-table layout to a single table for the form.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+43	124	Open-ILS/src/templates/opac/parts/login/form.tt2
+
+commit d1ea5dbdbc01ef8fb3f5e7fbfca621304df796ad
+Author: Steven Chan <schan at sitka.bclibraries.ca>
+Date:   Wed Jul 25 13:45:40 2012 -0700
+
+    Fix LP1029095, Acq: Receive Items on an Invoice does not work with Line Item Alerts
+    
+    1. Item reception was encountering a Javascript exception in the
+    check_lineitem_alerts() helper function, because there was a mismatch
+    between the input parameter name and the variable name actually used.
+    
+    2. Also, took the opportunity to improve the performance of the for loop
+    to scan through alerts.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+6	4	Open-ILS/web/js/ui/default/acq/invoice/receive.js
+
+commit ba4e46321ca727ee86df1f167e01a5df6373931a
+Author: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+Date:   Fri Sep 28 15:26:06 2012 -0400
+
+    Make scrollOnFocus default to false for dojo-based/conify interfaces
+    
+    This change is intended to prevent a phenomenon in certain user
+    interfaces wherein clicking on a button or other widget can cause a
+    user's screen to suddenly jump and the user to need to click the widget
+    a second time before the desired function actually happens.
+    
+    Dijits that have the scrollOnFocus property are the ones that tend to
+    exhibit this issue, especially, but not always, within the staff client
+    when the user's xulrunner window is not maximized.
+    
+    There may be cases of interfaces actually relying on scrollOnFocus to do
+    something, but I think those cases should be so rare that this is still
+    worth doing, and exceptions can be applied there as needed.
+    
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+6	1	Open-ILS/web/js/ui/base.js
+
+commit 81128c1b53f5649f25f0cea8ba06c491731fe630
+Author: Thomas Berezansky <tsbere at mvlc.org>
+Date:   Tue Jun 19 12:23:09 2012 -0400
+
+    Can't use README for version, so use configure.ac
+    
+    Because one good "this works for now" being broken can be replaced with
+    another one easily.
+    
+    Signed-off-by: Thomas Berezansky <tsbere at mvlc.org>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+2	2	Open-ILS/xul/staff_client/Makefile.am
+
+commit fc75ed33c18251a165701c3b2e543cfef6bd91ff
+Author: Michael Peters <mrpeters at library.in.gov>
+Date:   Mon Oct 1 14:51:31 2012 -0400
+
+    LP#1020261 Better label for "Host" field in acq.edi_account
+    
+    The host field of acq.edi_account is really meant to contain more than just a hostname.
+    It needs a scheme part, so that the whole contents of the field should be URI-ish, like
+    
+    ftp://ftp1.somevendor.com
+    
+    Otherwise Evergreen's EDI mechanism can guess wrongly that we want to use
+    SSH instead of FTP to connect.
+    
+    This also adds a description for the field, in the footer, along with the other
+    "helpers".
+    
+    Signed-off-by: Michael Peters <mrpeters at library.in.gov>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+1	0	Open-ILS/src/templates/conify/global/acq/edi_account.tt2
+
+commit 53c0ef3fdb76f95395e829de2cef2c0c6f63d401
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Fri Sep 21 17:10:58 2012 -0400
+
+    Copy location group searching repairs
+    
+    In the get_library BLOCK, upgrade any use of 'loc' to 'locg' instead of
+    trying to determine which to use in which situation.  Before this change,
+    'loc' was being used as the loc_name for the main org unit selector,
+    which should always use 'locg'.  For any other cases (related to search
+    params), it's always safe to use 'locg' over 'loc'.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+4	10	Open-ILS/src/templates/opac/parts/misc_util.tt2
+
+commit fc00263d5b96c04af4b9e5bc5e167019427854b5
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Mon Sep 17 09:55:07 2012 -0400
+
+    back-port tpac get_library macro
+    
+    Code which uses this macro was back-ported without defining the macro.
+    Back-ported here for great justice.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+16	0	Open-ILS/src/templates/opac/parts/misc_util.tt2
+
+commit 9326986172d4db62c9c2423e6feae532c9c41cec
+Author: Galen Charlton <gmc at esilibrary.com>
+Date:   Wed Sep 26 23:34:32 2012 -0400
+
+    After upgrade, list records with missing or incorrect 901$c
+    
+    This is a common cause of pain for upgrades. Let's try to identify the
+    problem early (even if it takes forever on a site with 3 million bibs)
+    and offer advice on correcting the problem if it is flagged.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+19	0	Open-ILS/src/sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql
+
+commit 8800bd9e106d03709ad460eb177e9beb03bd386a
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Wed Sep 26 23:47:26 2012 -0400
+
+    Set eg_version at start of 2.2 upgrade scripts
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+1	0	Open-ILS/src/sql/Pg/version-upgrade/2.2.0-2.2.1-upgrade-db.sql
+1	0	Open-ILS/src/sql/Pg/version-upgrade/2.2.1-2.2.2-upgrade-db.sql
+
+commit ca739b2cdd13115f61bc4b8b397609ed2efafa1d
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Wed Sep 26 23:25:53 2012 -0400
+
+    Apply the 0715 update for acq settings_group
+    
+    We add the 'acq' config.settings_group in the seed data, and add the
+    other settings groups in the 2.1-2.2 upgrade script, but need to add the
+    acq settings_group to the 2.1-2.2 upgrade script.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+9	0	Open-ILS/src/sql/Pg/version-upgrade/2.1-2.2-upgrade-db.sql
+
+commit 92a09b52c5096ab85ff9151cd5e46005d6dc5337
+Author: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+Date:   Mon May 14 14:50:43 2012 -0400
+
+    Copy Location Order Editor: avoid interface failure with blank area
+    
+    Symptom is "ll is undefined" at line 65 of previous version of this
+    file.
+    
+    Reported by George Duimovich and John Jones.
+    
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+6	3	Open-ILS/web/js/ui/default/conify/global/asset/copy_location_order.js
+
+commit 887fe856e579d04d6f608a71dcfda4fbd20bb6da
+Author: Thomas Berezansky <tsbere at mvlc.org>
+Date:   Thu Sep 20 15:45:05 2012 -0400
+
+    TPac: Disable "Enter places hold" for staff
+    
+    This should prevent barcode scanners from auto-submitting on scan.
+    
+    Signed-off-by: Thomas Berezansky <tsbere at mvlc.org>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+1	1	Open-ILS/src/templates/opac/parts/place_hold.tt2
+7	0	Open-ILS/web/js/ui/default/opac/staff.js
+
+commit 0775659def4500dd3e5a0aad1dfc21e78c74f591
+Author: Jeff Godin <jgodin at tadl.org>
+Date:   Wed Apr 25 02:59:01 2012 -0400
+
+    Syndetic AC: Add more review sources with comments
+    
+    * Add more Syndetic review sources (commented out)
+        Add additional Syndetic review sources, commented out
+        for performance reasons -- each source represents a distinct
+        request from the server to the AC provider, and we currently
+        lack a means of configuring which are on/off, short of
+        commenting / uncommenting.
+    
+    * Add comments for Syndetics review sources
+    * Fix file name for School Library Journal reviews, add New
+        York Times reviews.
+    
+    Signed-off-by: Jeff Godin <jgodin at tadl.org>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+18	8	Open-ILS/src/perlmods/lib/OpenILS/WWW/AddedContent/Syndetic.pm
+
+commit 9dcca3fcbca4a3ac96039275185603843a7ff107
+Author: Ben Shum <bshum at biblio.org>
+Date:   Tue Apr 24 23:23:04 2012 -0400
+
+    Do not hide copy counts from results in staff client.
+    
+    Remove the check for whether you are a staff login or not.
+    
+    Ideally, we would want the copy counts to be displayed in both
+    public catalog and staff client.
+    
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+    Signed-off-by: Olli-Antti Kivilahti <olli-antti.kivilahti at jns.fi>
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+
+1	1	Open-ILS/src/templates/opac/parts/result/copy_counts.tt2
+
+commit e1014dff83a6a1cab910315a430a426bdc40755d
+Author: Thomas Berezansky <tsbere at mvlc.org>
+Date:   Mon Aug 20 12:22:44 2012 -0400
+
+    Enable 1-hit redirect for item barcode searches
+    
+    Signed-off-by: Thomas Berezansky <tsbere at mvlc.org>
+    Signed-off-by: Jason Stephenson <jstephenson at mvlc.org>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+4	1	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm
+
+commit 2b77c235a9da8bdfe77316d2c64d42e6b5c3ee43
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Mon Sep 17 08:48:26 2012 -0400
+
+    Protect against fleshed circ_lib in legacy check_age_protect
+    
+    Retrieving org settings with an org unit object as the context org unit
+    results in errors and dying.
+    
+    This affects legacy scripts only.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Michael Peters <mrpeters at library.in.gov>
+
+3	1	Open-ILS/src/perlmods/lib/OpenILS/Utils/PermitHold.pm
+
+commit b757adaa91825788a10ef302f37481b9d7bf6469
+Author: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+Date:   Fri Sep 7 11:42:12 2012 -0400
+
+    Revert "Bug #1044721: QP handles explicit group+joiner badly"
+    
+    This reverts commit b77bb9943009b81042b4ef1a6ac33ec9e3e96dd7.
+    
+    Unfortunately this had side effects that escaped our manual testing
+    processes.  Especially with facets as reported by Ben Shum.
+    
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+
+0	1	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm
+
+commit d4cc86cca92296e5af37312a8d4aee6e23b0c602
+Author: Dan Wells <dbw2 at calvin.edu>
+Date:   Tue Sep 4 17:09:44 2012 -0400
+
+    Upgrade bits for Vandelay Overlay Changes
+    
+    Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+1	1	Open-ILS/src/sql/Pg/002.schema.config.sql
+249	0	Open-ILS/src/sql/Pg/upgrade/0738.schema.vandelay.import-match-no-like-any.sql
+0	249	Open-ILS/src/sql/Pg/upgrade/XXXX.schema.vandelay.import-match-no-like-any.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/0738.schema.vandelay.import-match-no-like-any.sql
+ delete mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.vandelay.import-match-no-like-any.sql
+
+commit a9f8d2c6c2dd143be427f6281e93447f9e69bf10
+Author: Dan Wells <dbw2 at calvin.edu>
+Date:   Thu Aug 30 15:26:15 2012 -0400
+
+    Increase Overlay Speed for Standard Identifiers
+    
+    Due to an inefficient query order and a confused query planner,
+    some overlay matching can end up going abysmally slow.  See LP
+    bug #1024095 for elaboration on the issue.
+    
+    This commit reorders the joins as originally suggested by Lebbeous,
+    then adds a specific index to coax the query planner into making the
+    best choices.  The example index here only targets the 02x identifier
+    fields, so other tag/subfield/substring(value) indexes will likely
+    be necessary for maximum benefit when matching on other fields
+    (e.g. 010).
+    
+    These changes combined with the previous commit which replaces 'LIKE
+    ANY' with 'LIKE (... OR ...)' has shown great promise in testing.
+    
+    Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+26	19	Open-ILS/src/sql/Pg/012.schema.vandelay.sql
+14	0	Open-ILS/src/sql/Pg/030.schema.metabib.sql
+41	20	Open-ILS/src/sql/Pg/upgrade/XXXX.schema.vandelay.import-match-no-like-any.sql
+
+commit 0a2007b4efb151e5221c653f217869eec1b2b80e
+Author: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+Date:   Mon Jun 25 20:00:33 2012 -0400
+
+    Vandelay: Fix index-miss with MARC Imports using Match Sets
+    
+    In some Postgres installations, an expression such as:
+    
+    (value LIKE '13423488%' OR value LIKE '245425%') will use a btree index,
+    but
+    
+    value LIKE ANY('{13423488%,245425%}'::TEXT[])
+    
+    will not.
+    
+    Missing such an index can make matching incoming bibs based on a field
+    that's present in most of your existing records terrifically slow.
+    
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+    Signed-off-by: Dan Wells <dbw2 at calvin.edu>
+
+56	14	Open-ILS/src/sql/Pg/012.schema.vandelay.sql
+228	0	Open-ILS/src/sql/Pg/upgrade/XXXX.schema.vandelay.import-match-no-like-any.sql
+ create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.vandelay.import-match-no-like-any.sql
+
+commit 304d7065458cfc6c01043c2c6f529abaa50e19f7
+Author: Jared Camins-Esakov <jcamins at cpbibliography.com>
+Date:   Sat Sep 1 10:21:51 2012 -0400
+
+    Bug #1044721: QP handles explicit group+joiner badly
+    
+    Although the following four queries should be equivalent:
+      george  ||  fred
+     (george) ||  fred
+      george  || (fred)
+     (george) || (fred)
+    
+    The Pg QueryParser driver generates SQL queries that return different
+    numbers of results for each of those queries, with all desired results
+    appearing only with the first query. This seems to be because of the way
+    filters are added in the interface.
+    
+    This patch adjusts the Search code in TPAC to add an explicit group
+    around the user-entered query, which enables the Pg QueryParser driver
+    to handle all four of the above queries properly.
+    
+    This patch should also resolve the problems encountered with the patch
+    for bug #1040740, "Implicit ANDs should have higher precedence than
+    explicit ORs"
+    
+    Signed-off-by: Jared Camins-Esakov <jcamins at cpbibliography.com>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+1	0	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm
+
+commit 9eeb9e6b251d77915d9033f49186a3b376f30f2c
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Mon Aug 13 16:50:33 2012 -0400
+
+    TPAC: Make call number browse record links retain search lib
+    
+    In addition to maintaining scope for the call number browse search
+    results, we also need to maintain the scope for the links for the call
+    number records in the results themselves (for example, the "retrieve
+    this record" link, or the "search for this author" link).
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+7	5	Open-ILS/src/templates/opac/parts/record/cnbrowse.tt2
+
+commit 2cd6ebfb6d173fbe43f8902e54086c9e58fd1813
+Author: Steven Callender <stevecallender at esilibrary.com>
+Date:   Tue Jul 10 15:43:59 2012 -0400
+
+    Changed the thawing of a hold to first update the hold record and then re-target.
+    
+    When thawing a hold, originaly we were first re-targeting before actually saving the hold record. On items with large quantities, sometimes the hold would timeout on targetig before getting a chance to actually save. This patch moves things around to first save the hold record before attempting to retarget.
+    
+    Signed-off-by: Mike Rylander <mrylander at gmail.com>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+11	1	Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm
+
+commit 5f62d8b337f0e6937967b10a8926377ad1a8c52a
+Author: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+Date:   Tue Aug 28 16:09:00 2012 -0400
+
+    Acq: New lineitems added to existing POs should inherit provider
+    
+    Jeremy Miller of the Albany Public Library in Albany, OR, reports that
+    through the interface at
+        Actions For This Record -> View/Place Orders
+    in the staff client, when you add a lineitem to an existing PO, the new
+    lineitem has a null value in the "provider" field, instead of inheriting
+    the expected value from the PO.
+    
+    This causes problems for some Acquisitions workflows.
+    
+    The feature containing the bug appeared in 2.2, and this fix for it can be
+    backported that far.
+    
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+1	0	Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm
+
+commit 23bb2a43464704a13db9b5b37201a716588e2e5f
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Wed May 2 09:55:06 2012 -0400
+
+    ACQ support for two-step vandelay imports
+    
+    If a lineitm is loaded into a queue via ACQ+Vandelay and a later attempt
+    is made to load the record into the catalog via ACQ+Vandelay, the
+    attempt will fail, because ACQ+Vandelay treats all
+    not-yet-fully-imported lineitems as new to vandelay.  This change
+    inspects lineitems at vandelay processing time to determine if they are
+    already linked to a VL record or if a new one is needed.  It also
+    removes the requirement that a queue be provided when all records in
+    process are already linked to a VL record (which already lives in a
+    queue).
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+55	15	Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm
+
+commit fdcab6cb9db557faa4a556d8306e87b6b2e80186
+Author: Robert Soulliere <robert.soulliere at mohawkcollege.ca>
+Date:   Thu Aug 23 12:58:40 2012 -0400
+
+    Documentation: Update upgrade instructions for 2.2.2.
+    
+    Signed-off-by: Robert Soulliere <robert.soulliere at mohawkcollege.ca>
+
+11	10	docs/installation/server_upgrade.txt
+
+commit 1f2a69f8829989bb4f5c77c0371a1b91ce259926
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Thu Aug 23 09:43:18 2012 -0400
+
+    Add 2.1.2-2.1.3 database schema upgrade script
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+
+114	0	Open-ILS/src/sql/Pg/version-upgrade/2.1.2-2.1.3-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/2.1.2-2.1.3-upgrade-db.sql
+
+commit 97fd7113783e0de46e826f994ad61b2ea7854459
+Author: Thomas Berezansky <tsbere at mvlc.org>
+Date:   Thu Jul 12 11:42:21 2012 -0400
+
+    Remove an extra ternary op
+    
+    And adjust the comment to make more sense. There is no higher level filter
+    that prevents copy holds on parted items, so there is no filter for them to
+    "slip through".
+    
+    Signed-off-by: Thomas Berezansky <tsbere at mvlc.org>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+2	2	Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
+
+commit c327c1c08f247689aa020240240408f0610b0372
+Author: Mike Rylander <mrylander at gmail.com>
+Date:   Wed Jun 13 09:37:54 2012 -0400
+
+    Allow copy-ish holds to target, even for part-copies, if they somehow slip through the UI pre-checks
+    
+    Signed-off-by: Mike Rylander <mrylander at gmail.com>
+    Signed-off-by: Thomas Berezansky <tsbere at mvlc.org>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+12	11	Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
+
+commit 969dfd735415509d0fbcf65a4e3c8275d4462853
+Author: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+Date:   Wed Aug 22 14:49:02 2012 -0400
+
+    2.2.1 -> 2.2.2 upgrade script
+    
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+13	0	Open-ILS/src/sql/Pg/version-upgrade/2.2.1-2.2.2-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/2.2.1-2.2.2-upgrade-db.sql
+
+commit 0e10e2613a4bf92cabb9314bfe3f1029dc08f16f
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Thu Aug 16 15:40:58 2012 -0400
+
+    Sanity check cstore limit/offset param values
+    
+    Certain cstore calls (direct / json_query) that support limit/offset
+    params called with a non-string / non-numeric value
+    
+    e.g. { "limit": null }
+    
+    result in a cstore segfault as it tries to call atoi(NULL) under the
+    covers.  This patch prevents this by verifying that the limit/offset
+    values are actual strings or numbers (i.e. return a value from
+    jsonObjectGetString) and not JSON_NULL, etc.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+20	12	Open-ILS/src/c-apps/oils_sql.c
+
+commit 01f1ea70d07de59e3c85af44b7c1a2f98cde0323
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Wed Aug 15 07:18:53 2012 -0400
+
+    TPAC: Move "Export to RefWorks" into utility area
+    
+    When the RefWorks functionality was being added to TPAC, the design and
+    layout were very much in flux. Now that the layout has been established
+    with utilities like "Place Hold" on the right hand side, move the
+    "Export to RefWorks" button into the same location.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Art Rhyno <art632000 at yahoo.ca>
+
+3	3	Open-ILS/src/templates/opac/parts/record/refworks.tt2
+3	4	Open-ILS/src/templates/opac/parts/record/summary.tt2
+
+commit 8c5d40deb4284be07ecded1904b44ca5a482914d
+Author: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+Date:   Wed Aug 22 12:20:22 2012 -0400
+
+    2.2.0 -> 2.2.1 upgrade script never actually went into master or rel_2_2
+    
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+366	0	Open-ILS/src/sql/Pg/version-upgrade/2.2.0-2.2.1-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/2.2.0-2.2.1-upgrade-db.sql
diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application.pm
index 7e36e0e..ef61078 100644
--- a/Open-ILS/src/perlmods/lib/OpenILS/Application.pm
+++ b/Open-ILS/src/perlmods/lib/OpenILS/Application.pm
@@ -6,7 +6,7 @@ use base qw/OpenSRF::Application/;
 sub ils_version {
     # version format is "x-y-z", for example "2-0-0" for Evergreen 2.0.0
     # For branches, format is "x-y"
-    return "2-2";
+    return "2-2-3";
 }
 
 __PACKAGE__->register_method(
diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql
index a8f6d0f..d8eccd8 100644
--- a/Open-ILS/src/sql/Pg/002.schema.config.sql
+++ b/Open-ILS/src/sql/Pg/002.schema.config.sql
@@ -88,6 +88,7 @@ CREATE TRIGGER no_overlapping_deps
     FOR EACH ROW EXECUTE PROCEDURE evergreen.array_overlap_check ('deprecates');
 
 INSERT INTO config.upgrade_log (version, applied_to) VALUES ('0742', :eg_version); -- dbs/senator
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('2.2.3', :eg_version);
 
 CREATE TABLE config.bib_source (
 	id		SERIAL	PRIMARY KEY,
diff --git a/Open-ILS/src/sql/Pg/version-upgrade/2.2.2-2.2.3-upgrade-db.sql b/Open-ILS/src/sql/Pg/version-upgrade/2.2.2-2.2.3-upgrade-db.sql
new file mode 100644
index 0000000..25a16cc
--- /dev/null
+++ b/Open-ILS/src/sql/Pg/version-upgrade/2.2.2-2.2.3-upgrade-db.sql
@@ -0,0 +1,518 @@
+--Upgrade Script for 2.2.2 to 2.2.3
+BEGIN;
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('2.2.3', :eg_version);
+
+-- 0738.schema.vandelay.import-match-no-like-any.sql
+
+SELECT evergreen.upgrade_deps_block_check('0738', :eg_version);
+
+CREATE OR REPLACE FUNCTION vandelay.match_set_test_marcxml(
+    match_set_id INTEGER, record_xml TEXT
+) RETURNS SETOF vandelay.match_set_test_result AS $$
+DECLARE
+    tags_rstore HSTORE;
+    svf_rstore  HSTORE;
+    coal        TEXT;
+    joins       TEXT;
+    query_      TEXT;
+    wq          TEXT;
+    qvalue      INTEGER;
+    rec         RECORD;
+BEGIN
+    tags_rstore := vandelay.flatten_marc_hstore(record_xml);
+    svf_rstore := vandelay.extract_rec_attrs(record_xml);
+
+    CREATE TEMPORARY TABLE _vandelay_tmp_qrows (q INTEGER);
+    CREATE TEMPORARY TABLE _vandelay_tmp_jrows (j TEXT);
+
+    -- generate the where clause and return that directly (into wq), and as
+    -- a side-effect, populate the _vandelay_tmp_[qj]rows tables.
+    wq := vandelay.get_expr_from_match_set(match_set_id, tags_rstore);
+
+    query_ := 'SELECT DISTINCT(record), ';
+
+    -- qrows table is for the quality bits we add to the SELECT clause
+    SELECT ARRAY_TO_STRING(
+        ARRAY_ACCUM('COALESCE(n' || q::TEXT || '.quality, 0)'), ' + '
+    ) INTO coal FROM _vandelay_tmp_qrows;
+
+    -- our query string so far is the SELECT clause and the inital FROM.
+    -- no JOINs yet nor the WHERE clause
+    query_ := query_ || coal || ' AS quality ' || E'\n';
+
+    -- jrows table is for the joins we must make (and the real text conditions)
+    SELECT ARRAY_TO_STRING(ARRAY_ACCUM(j), E'\n') INTO joins
+        FROM _vandelay_tmp_jrows;
+
+    -- add those joins and the where clause to our query.
+    query_ := query_ || joins || E'\n' || 'JOIN biblio.record_entry bre ON (bre.id = record) ' || 'WHERE ' || wq || ' AND not bre.deleted';
+
+    -- this will return rows of record,quality
+    FOR rec IN EXECUTE query_ USING tags_rstore, svf_rstore LOOP
+        RETURN NEXT rec;
+    END LOOP;
+
+    DROP TABLE _vandelay_tmp_qrows;
+    DROP TABLE _vandelay_tmp_jrows;
+    RETURN;
+END;
+
+$$ LANGUAGE PLPGSQL;
+
+CREATE OR REPLACE FUNCTION vandelay.get_expr_from_match_set(
+    match_set_id INTEGER,
+    tags_rstore HSTORE
+) RETURNS TEXT AS $$
+DECLARE
+    root    vandelay.match_set_point;
+BEGIN
+    SELECT * INTO root FROM vandelay.match_set_point
+        WHERE parent IS NULL AND match_set = match_set_id;
+
+    RETURN vandelay.get_expr_from_match_set_point(root, tags_rstore);
+END;
+$$  LANGUAGE PLPGSQL;
+
+CREATE OR REPLACE FUNCTION vandelay.get_expr_from_match_set_point(
+    node vandelay.match_set_point,
+    tags_rstore HSTORE
+) RETURNS TEXT AS $$
+DECLARE
+    q           TEXT;
+    i           INTEGER;
+    this_op     TEXT;
+    children    INTEGER[];
+    child       vandelay.match_set_point;
+BEGIN
+    SELECT ARRAY_ACCUM(id) INTO children FROM vandelay.match_set_point
+        WHERE parent = node.id;
+
+    IF ARRAY_LENGTH(children, 1) > 0 THEN
+        this_op := vandelay._get_expr_render_one(node);
+        q := '(';
+        i := 1;
+        WHILE children[i] IS NOT NULL LOOP
+            SELECT * INTO child FROM vandelay.match_set_point
+                WHERE id = children[i];
+            IF i > 1 THEN
+                q := q || ' ' || this_op || ' ';
+            END IF;
+            i := i + 1;
+            q := q || vandelay.get_expr_from_match_set_point(child, tags_rstore);
+        END LOOP;
+        q := q || ')';
+        RETURN q;
+    ELSIF node.bool_op IS NULL THEN
+        PERFORM vandelay._get_expr_push_qrow(node);
+        PERFORM vandelay._get_expr_push_jrow(node, tags_rstore);
+        RETURN vandelay._get_expr_render_one(node);
+    ELSE
+        RETURN '';
+    END IF;
+END;
+$$  LANGUAGE PLPGSQL;
+
+CREATE OR REPLACE FUNCTION vandelay._get_expr_push_jrow(
+    node vandelay.match_set_point,
+    tags_rstore HSTORE
+) RETURNS VOID AS $$
+DECLARE
+    jrow        TEXT;
+    my_alias    TEXT;
+    op          TEXT;
+    tagkey      TEXT;
+    caseless    BOOL;
+    jrow_count  INT;
+    my_using    TEXT;
+    my_join     TEXT;
+BEGIN
+    -- remember $1 is tags_rstore, and $2 is svf_rstore
+
+    caseless := FALSE;
+    SELECT COUNT(*) INTO jrow_count FROM _vandelay_tmp_jrows;
+    IF jrow_count > 0 THEN
+        my_using := ' USING (record)';
+        my_join := 'FULL OUTER JOIN';
+    ELSE
+        my_using := '';
+        my_join := 'FROM';
+    END IF;
+
+    IF node.tag IS NOT NULL THEN
+        caseless := (node.tag IN ('020', '022', '024'));
+        tagkey := node.tag;
+        IF node.subfield IS NOT NULL THEN
+            tagkey := tagkey || node.subfield;
+        END IF;
+    END IF;
+
+    IF node.negate THEN
+        IF caseless THEN
+            op := 'NOT LIKE';
+        ELSE
+            op := '<>';
+        END IF;
+    ELSE
+        IF caseless THEN
+            op := 'LIKE';
+        ELSE
+            op := '=';
+        END IF;
+    END IF;
+
+    my_alias := 'n' || node.id::TEXT;
+
+    jrow := my_join || ' (SELECT *, ';
+    IF node.tag IS NOT NULL THEN
+        jrow := jrow  || node.quality ||
+            ' AS quality FROM metabib.full_rec mfr WHERE mfr.tag = ''' ||
+            node.tag || '''';
+        IF node.subfield IS NOT NULL THEN
+            jrow := jrow || ' AND mfr.subfield = ''' ||
+                node.subfield || '''';
+        END IF;
+        jrow := jrow || ' AND (';
+        jrow := jrow || vandelay._node_tag_comparisons(caseless, op, tags_rstore, tagkey);
+        jrow := jrow || ')) ' || my_alias || my_using || E'\n';
+    ELSE    -- svf
+        jrow := jrow || 'id AS record, ' || node.quality ||
+            ' AS quality FROM metabib.record_attr mra WHERE mra.attrs->''' ||
+            node.svf || ''' ' || op || ' $2->''' || node.svf || ''') ' ||
+            my_alias || my_using || E'\n';
+    END IF;
+    INSERT INTO _vandelay_tmp_jrows (j) VALUES (jrow);
+END;
+$$ LANGUAGE PLPGSQL;
+
+CREATE OR REPLACE FUNCTION vandelay._node_tag_comparisons(
+    caseless BOOLEAN,
+    op TEXT,
+    tags_rstore HSTORE,
+    tagkey TEXT
+) RETURNS TEXT AS $$
+DECLARE
+    result  TEXT;
+    i       INT;
+    vals    TEXT[];
+BEGIN
+    i := 1;
+    vals := tags_rstore->tagkey;
+    result := '';
+
+    WHILE TRUE LOOP
+        IF i > 1 THEN
+            IF vals[i] IS NULL THEN
+                EXIT;
+            ELSE
+                result := result || ' OR ';
+            END IF;
+        END IF;
+
+        IF caseless THEN
+            result := result || 'LOWER(mfr.value) ' || op;
+        ELSE
+            result := result || 'mfr.value ' || op;
+        END IF;
+
+        result := result || ' ' || COALESCE('''' || vals[i] || '''', 'NULL');
+
+        IF vals[i] IS NULL THEN
+            EXIT;
+        END IF;
+        i := i + 1;
+    END LOOP;
+
+    RETURN result;
+
+END;
+$$ LANGUAGE PLPGSQL;
+
+-- drop old versions of these functions with fewer args
+DROP FUNCTION vandelay.get_expr_from_match_set( INTEGER );
+DROP FUNCTION vandelay.get_expr_from_match_set_point( vandelay.match_set_point );
+DROP FUNCTION vandelay._get_expr_push_jrow( vandelay.match_set_point );
+
+-- This next index might fully supplant an existing one but leaving both for now
+-- (they are not too large)
+-- The reason we need this index is to ensure that the query parser always
+-- prefers this index over the simpler tag/subfield index, as this greatly
+-- increases Vandelay overlay speed for these identifiers, especially when
+-- a record has many of these fields (around > 4-6 seems like the cutoff
+-- on at least one PG9.1 system)
+-- A similar index could be added for other fields (e.g. 010), but one should
+-- leave out the LOWER() in all other cases.
+-- TODO: verify whether we can discard the non tag/subfield/substring version
+-- (metabib_full_rec_isxn_caseless_idx)
+CREATE INDEX metabib_full_rec_02x_tag_subfield_lower_substring
+    ON metabib.real_full_rec (tag, subfield, LOWER(substring(value, 1, 1024)))
+    WHERE tag IN ('020', '022', '024');
+
+
+
+SELECT evergreen.upgrade_deps_block_check('0740', :eg_version);
+
+CREATE OR REPLACE
+    FUNCTION metabib.suggest_browse_entries(
+        raw_query_text  TEXT,   -- actually typed by humans at the UI level
+        search_class    TEXT,   -- 'alias' or 'class' or 'class|field..', etc
+        headline_opts   TEXT,   -- markup options for ts_headline()
+        visibility_org  INTEGER,-- null if you don't want opac visibility test
+        query_limit     INTEGER,-- use in LIMIT clause of interal query
+        normalization   INTEGER -- argument to TS_RANK_CD()
+    ) RETURNS TABLE (
+        value                   TEXT,   -- plain
+        field                   INTEGER,
+        buoyant_and_class_match BOOL,
+        field_match             BOOL,
+        field_weight            INTEGER,
+        rank                    REAL,
+        buoyant                 BOOL,
+        match                   TEXT    -- marked up
+    ) AS $func$
+DECLARE
+    prepared_query_texts    TEXT[];
+    query                   TSQUERY;
+    plain_query             TSQUERY;
+    opac_visibility_join    TEXT;
+    search_class_join       TEXT;
+    r_fields                RECORD;
+BEGIN
+    prepared_query_texts := metabib.autosuggest_prepare_tsquery(raw_query_text);
+
+    query := TO_TSQUERY('keyword', prepared_query_texts[1]);
+    plain_query := TO_TSQUERY('keyword', prepared_query_texts[2]);
+
+    visibility_org := NULLIF(visibility_org,-1);
+    IF visibility_org IS NOT NULL THEN
+        opac_visibility_join := '
+    JOIN asset.opac_visible_copies aovc ON (
+        aovc.record = x.source AND
+        aovc.circ_lib IN (SELECT id FROM actor.org_unit_descendants($4))
+    )';
+    ELSE
+        opac_visibility_join := '';
+    END IF;
+
+    -- The following determines whether we only provide suggestsons matching
+    -- the user's selected search_class, or whether we show other suggestions
+    -- too. The reason for MIN() is that for search_classes like
+    -- 'title|proper|uniform' you would otherwise get multiple rows.  The
+    -- implication is that if title as a class doesn't have restrict,
+    -- nor does the proper field, but the uniform field does, you're going
+    -- to get 'false' for your overall evaluation of 'should we restrict?'
+    -- To invert that, change from MIN() to MAX().
+
+    SELECT
+        INTO r_fields
+            MIN(cmc.restrict::INT) AS restrict_class,
+            MIN(cmf.restrict::INT) AS restrict_field
+        FROM metabib.search_class_to_registered_components(search_class)
+            AS _registered (field_class TEXT, field INT)
+        JOIN
+            config.metabib_class cmc ON (cmc.name = _registered.field_class)
+        LEFT JOIN
+            config.metabib_field cmf ON (cmf.id = _registered.field);
+
+    -- evaluate 'should we restrict?'
+    IF r_fields.restrict_field::BOOL OR r_fields.restrict_class::BOOL THEN
+        search_class_join := '
+    JOIN
+        metabib.search_class_to_registered_components($2)
+        AS _registered (field_class TEXT, field INT) ON (
+            (_registered.field IS NULL AND
+                _registered.field_class = cmf.field_class) OR
+            (_registered.field = cmf.id)
+        )
+    ';
+    ELSE
+        search_class_join := '
+    LEFT JOIN
+        metabib.search_class_to_registered_components($2)
+        AS _registered (field_class TEXT, field INT) ON (
+            _registered.field_class = cmc.name
+        )
+    ';
+    END IF;
+
+    RETURN QUERY EXECUTE '
+SELECT  DISTINCT
+        x.value,
+        x.id,
+        x.push,
+        x.restrict,
+        x.weight,
+        x.ts_rank_cd,
+        x.buoyant,
+        TS_HEADLINE(value, $7, $3)
+  FROM  (SELECT DISTINCT
+                mbe.value,
+                cmf.id,
+                cmc.buoyant AND _registered.field_class IS NOT NULL AS push,
+                _registered.field = cmf.id AS restrict,
+                cmf.weight,
+                TS_RANK_CD(mbe.index_vector, $1, $6),
+                cmc.buoyant,
+                mbedm.source
+          FROM  metabib.browse_entry_def_map mbedm
+                JOIN (SELECT * FROM metabib.browse_entry WHERE index_vector @@ $1 LIMIT 10000) mbe ON (mbe.id = mbedm.entry)
+                JOIN config.metabib_field cmf ON (cmf.id = mbedm.def)
+                JOIN config.metabib_class cmc ON (cmf.field_class = cmc.name)
+                '  || search_class_join || '
+          ORDER BY 3 DESC, 4 DESC NULLS LAST, 5 DESC, 6 DESC, 7 DESC, 1 ASC
+          LIMIT 1000) AS x
+        ' || opac_visibility_join || '
+  ORDER BY 3 DESC, 4 DESC NULLS LAST, 5 DESC, 6 DESC, 7 DESC, 1 ASC
+  LIMIT $5
+'   -- sic, repeat the order by clause in the outer select too
+    USING
+        query, search_class, headline_opts,
+        visibility_org, query_limit, normalization, plain_query
+        ;
+
+    -- sort order:
+    --  buoyant AND chosen class = match class
+    --  chosen field = match field
+    --  field weight
+    --  rank
+    --  buoyancy
+    --  value itself
+
+END;
+$func$ LANGUAGE PLPGSQL;
+
+
+SELECT evergreen.upgrade_deps_block_check('0742', :eg_version);
+
+-- Prepare for the July 2013 introduction of OCLC's "on" prefix
+-- Per LP# 1049171
+
+CREATE OR REPLACE FUNCTION maintain_control_numbers() RETURNS TRIGGER AS $func$
+use strict;
+use MARC::Record;
+use MARC::File::XML (BinaryEncoding => 'UTF-8');
+use MARC::Charset;
+use Encode;
+use Unicode::Normalize;
+
+MARC::Charset->assume_unicode(1);
+
+my $record = MARC::Record->new_from_xml($_TD->{new}{marc});
+my $schema = $_TD->{table_schema};
+my $rec_id = $_TD->{new}{id};
+
+# Short-circuit if maintaining control numbers per MARC21 spec is not enabled
+my $enable = spi_exec_query("SELECT enabled FROM config.global_flag WHERE name = 'cat.maintain_control_numbers'");
+if (!($enable->{processed}) or $enable->{rows}[0]->{enabled} eq 'f') {
+    return;
+}
+
+# Get the control number identifier from an OU setting based on $_TD->{new}{owner}
+my $ou_cni = 'EVRGRN';
+
+my $owner;
+if ($schema eq 'serial') {
+    $owner = $_TD->{new}{owning_lib};
+} else {
+    # are.owner and bre.owner can be null, so fall back to the consortial setting
+    $owner = $_TD->{new}{owner} || 1;
+}
+
+my $ous_rv = spi_exec_query("SELECT value FROM actor.org_unit_ancestor_setting('cat.marc_control_number_identifier', $owner)");
+if ($ous_rv->{processed}) {
+    $ou_cni = $ous_rv->{rows}[0]->{value};
+    $ou_cni =~ s/"//g; # Stupid VIM syntax highlighting"
+} else {
+    # Fall back to the shortname of the OU if there was no OU setting
+    $ous_rv = spi_exec_query("SELECT shortname FROM actor.org_unit WHERE id = $owner");
+    if ($ous_rv->{processed}) {
+        $ou_cni = $ous_rv->{rows}[0]->{shortname};
+    }
+}
+
+my ($create, $munge) = (0, 0);
+
+my @scns = $record->field('035');
+
+foreach my $id_field ('001', '003') {
+    my $spec_value;
+    my @controls = $record->field($id_field);
+
+    if ($id_field eq '001') {
+        $spec_value = $rec_id;
+    } else {
+        $spec_value = $ou_cni;
+    }
+
+    # Create the 001/003 if none exist
+    if (scalar(@controls) == 1) {
+        # Only one field; check to see if we need to munge it
+        unless (grep $_->data() eq $spec_value, @controls) {
+            $munge = 1;
+        }
+    } else {
+        # Delete the other fields, as with more than 1 001/003 we do not know which 003/001 to match
+        foreach my $control (@controls) {
+            $record->delete_field($control);
+        }
+        $record->insert_fields_ordered(MARC::Field->new($id_field, $spec_value));
+        $create = 1;
+    }
+}
+
+my $cn = $record->field('001')->data();
+# Special handling of OCLC numbers, often found in records that lack 003
+if ($cn =~ /^o(c[nm]|n)\d/) {
+    $cn =~ s/^o(c[nm]|n)0*(\d+)/$2/;
+    $record->field('003')->data('OCoLC');
+    $create = 0;
+}
+
+# Now, if we need to munge the 001, we will first push the existing 001/003
+# into the 035; but if the record did not have one (and one only) 001 and 003
+# to begin with, skip this process
+if ($munge and not $create) {
+
+    my $scn = "(" . $record->field('003')->data() . ")" . $cn;
+
+    # Do not create duplicate 035 fields
+    unless (grep $_->subfield('a') eq $scn, @scns) {
+        $record->insert_fields_ordered(MARC::Field->new('035', '', '', 'a' => $scn));
+    }
+}
+
+# Set the 001/003 and update the MARC
+if ($create or $munge) {
+    $record->field('001')->data($rec_id);
+    $record->field('003')->data($ou_cni);
+
+    my $xml = $record->as_xml_record();
+    $xml =~ s/\n//sgo;
+    $xml =~ s/^<\?xml.+\?\s*>//go;
+    $xml =~ s/>\s+</></go;
+    $xml =~ s/\p{Cc}//go;
+
+    # Embed a version of OpenILS::Application::AppUtils->entityize()
+    # to avoid having to set PERL5LIB for PostgreSQL as well
+
+    # If we are going to convert non-ASCII characters to XML entities,
+    # we had better be dealing with a UTF8 string to begin with
+    $xml = decode_utf8($xml);
+
+    $xml = NFC($xml);
+
+    # Convert raw ampersands to entities
+    $xml =~ s/&(?!\S+;)/&amp;/gso;
+
+    # Convert Unicode characters to entities
+    $xml =~ s/([\x{0080}-\x{fffd}])/sprintf('&#x%X;',ord($1))/sgoe;
+
+    $xml =~ s/[\x00-\x1f]//go;
+    $_TD->{new}{marc} = $xml;
+
+    return "MODIFY";
+}
+
+return;
+$func$ LANGUAGE PLPERLU;
+
+COMMIT;
diff --git a/Open-ILS/xul/staff_client/chrome/content/main/about.html b/Open-ILS/xul/staff_client/chrome/content/main/about.html
index 7443192..b792f5f 100644
--- a/Open-ILS/xul/staff_client/chrome/content/main/about.html
+++ b/Open-ILS/xul/staff_client/chrome/content/main/about.html
@@ -1,7 +1,7 @@
 <html><head><script></script></head><body onload="var x = document.getElementById('version'); var version ='/xul/server/'.split(/\//)[2]; if (version == 'server') { version = 'versionless debug build'; } x.appendChild(document.createTextNode(version));">
 <h1 style="text-decoration: underline">Evergreen</h1>
 <p>Target Server ID: <span id="version"></span></p>
-<p>http://git.evergreen-ils.org/Evergreen.git?h=refs/heads/rel_2_2</p>
+<p>http://git.evergreen-ils.org/Evergreen.git?h=refs/heads/rel_2_2_3</p>
 <h2>What is Evergreen?</h2>
 <blockquote>
 <p>
diff --git a/Open-ILS/xul/staff_client/defaults/preferences/prefs.js b/Open-ILS/xul/staff_client/defaults/preferences/prefs.js
index 97dbf01..ebbaf1d 100644
--- a/Open-ILS/xul/staff_client/defaults/preferences/prefs.js
+++ b/Open-ILS/xul/staff_client/defaults/preferences/prefs.js
@@ -11,7 +11,7 @@ pref("toolkit.singletonWindowType", "eg_main");
 pref("open-ils.enable_join_tabs", true);
 
 // We'll use this one to help brand some build information into the client, and rely on subversion keywords
-pref("open-ils.repository.headURL","http://git.evergreen-ils.org/Evergreen.git?h=refs/heads/rel_2_2");
+pref("open-ils.repository.headURL","http://git.evergreen-ils.org/Evergreen.git?h=refs/heads/rel_2_2_3");
 pref("open-ils.repository.author","$Author$");
 pref("open-ils.repository.revision","$Revision$");
 pref("open-ils.repository.date","$Date$");
diff --git a/README b/README
deleted file mode 120000
index b57451a..0000000
--- a/README
+++ /dev/null
@@ -1 +0,0 @@
-docs/installation/server_installation.txt
\ No newline at end of file
diff --git a/README b/README
new file mode 100644
index 0000000..19ae158
--- /dev/null
+++ b/README
@@ -0,0 +1,549 @@
+Installing the Evergreen server
+===============================
+:toc:
+:numbered:
+
+Preamble: referenced user accounts
+----------------------------------
+
+In subsequent sections, we will refer to a number of different accounts, as
+follows:
+
+  * Linux user accounts:
+    ** The *user* Linux account is the account that you use to log onto the
+       Linux system as a regular user.
+    ** The *root* Linux account is an account that has system administrator
+       privileges. On Debian and Fedora you can switch to this account from
+       your *user* account by issuing the `su -` command and entering the
+       password for the *root* account when prompted. On Ubuntu you can switch
+       to this account from your *user* account using the `sudo su -` command
+       and entering the password for your *user* account when prompted.
+    ** The *opensrf* Linux account is an account that you create when installing
+       OpenSRF. You can switch to this account from the *root* account by
+       issuing the `su - opensrf` command.
+    ** The *postgres* Linux account is created automatically when you install
+       the PostgreSQL database server. You can switch to this account from the
+       *root* account by issuing the `su - postgres` command.
+  * PostgreSQL user accounts:
+    ** The *evergreen* PostgreSQL account is a superuser account that you will
+       create to connect to the PostgreSQL database server.
+  * Evergreen administrator account:
+    ** The *egadmin* Evergreen account is an administrator account for
+       Evergreen that you will use to test connectivity and configure your
+       Evergreen instance.
+
+Preamble: developer instructions
+--------------------------------
+
+[NOTE]
+Skip this section if you are using an official release tarball downloaded
+from http://evergreen-ils.org/downloads
+
+Developers working directly with the source code from the Git repository,
+rather than an official release tarball, must install some extra packages
+and perform one step before they can proceed with the `./configure` step.
+
+As the *root* Linux account, install the following packages:
+
+  * autoconf
+  * automake
+  * libtool
+
+As the *user* Linux account, issue the following command in the Evergreen
+source directory to generate the configure script and Makefiles:
+
+[source, bash]
+------------------------------------------------------------------------------
+autoreconf -i
+------------------------------------------------------------------------------
+
+After running `make install`, developers also need to install the Dojo Toolkit
+set of JavaScript libraries. The appropriate version of Dojo is included
+in Evergreen release tarballs. Developers should install the Dojo 1.3.3
+version of Dojo by issuing the following commands as the *opensrf* Linux
+account:
+
+[source, bash]
+------------------------------------------------------------------------------
+wget http://download.dojotoolkit.org/release-1.3.3/dojo-release-1.3.3.tar.gz
+tar -C /openils/var/web/js -xzf dojo-release-1.3.3.tar.gz
+cp -r /openils/var/web/js/dojo-release-1.3.3/* /openils/var/web/js/dojo/.
+------------------------------------------------------------------------------
+
+Installing prerequisites
+------------------------
+
+Evergreen has a number of prerequisite packages that must be installed
+before you can successfully configure, compile, and install Evergreen.
+
+1. Begin by installing the most recent version of OpenSRF (2.1 or later).
+   You can download OpenSRF releases from http://evergreen-ils.org/opensrf.php
+2. On many distributions, it is necessary to install PostgreSQL 9 from external
+   repositories.
++
+  * On Debian Squeeze, open `/etc/apt/sources.list` in a text editor as the
+    *root* Linux account and add the following line:
++
+[source, bash]
+------------------------------------------------------------------------------
+deb http://backports.debian.org/debian-backports squeeze-backports main contrib
+------------------------------------------------------------------------------
++
+  * On Ubuntu Lucid, you can use a PPA (personal package archive), which are 
+    package sources hosted on Launchpad. The one most commonly used by Evergreen
+    Community members is maintained by Martin Pitt, who also maintains the
+    official PostgreSQL packages for Ubuntu. As the *root* Linux account, issue
+    the following commands to add the PPA source:
++
+[source, bash]
+------------------------------------------------------------------------------
+apt-get install python-software-properties
+add-apt-repository ppa:pitti/postgresql
+------------------------------------------------------------------------------
++
+  * Ubuntu Precise comes with PostgreSQL 9, so no additional steps are required.
++
+  * Fedora comes with PostgreSQL 9, so no additional steps are required.
++
+3. On Debian and Ubuntu, run `aptitude update` as the *root* Linux account to
+   retrieve the new packages from the backports repository.
+4. Issue the following commands as the *root* Linux account to install
+   prerequisites using the `Makefile.install` prerequisite installer,
+   substituting `debian-squeeze`, `fedora`, `ubuntu-lucid`, or
+   `ubuntu-precise` for <osname> below:
++
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install <osname>
+------------------------------------------------------------------------------
++
+5. Add the libdbi-libdbd libraries to the system dynamic library path by
+   issuing the following commands as the *root* Linux account:
++
+[NOTE]
+You should skip this step if installing on Ubuntu Precise. The ubuntu-precise
+target uses libdbd-pgsql from packages.
++
+.Debian / Ubuntu Lucid
+[source, bash]
+------------------------------------------------------------------------------
+echo "/usr/local/lib/dbd" > /etc/ld.so.conf.d/eg.conf
+ldconfig
+------------------------------------------------------------------------------
++
+.Fedora
+[source, bash]
+------------------------------------------------------------------------------
+echo "/usr/lib64/dbd" > /etc/ld.so.conf.d/eg.conf
+ldconfig
+------------------------------------------------------------------------------
+
+Configuration and compilation instructions
+------------------------------------------
+
+For the time being, we are still installing everything in the `/openils/`
+directory. From the Evergreen source directory, issue the following commands as
+the *user* Linux account to configure and build Evergreen:
+
+[source, bash]
+------------------------------------------------------------------------------
+./configure --prefix=/openils --sysconfdir=/openils/conf
+make
+------------------------------------------------------------------------------
+
+Installation instructions
+-------------------------
+
+1. Once you have configured and compiled Evergreen, issue the following
+   command as the *root* Linux account to install Evergreen, build the server
+   portion of the staff client, and copy example configuration files to
+   `/openils/conf`.
+   Change the value of the `STAFF_CLIENT_STAMP_ID` variable to match the version
+   of the staff client that you will use to connect to the Evergreen server.
++
+[source, bash]
+------------------------------------------------------------------------------
+make STAFF_CLIENT_STAMP_ID=rel_2_2_3 install
+------------------------------------------------------------------------------
++
+2. The server portion of the staff client expects `http://hostname/xul/server`
+   to resolve. Issue the following commands as the *root* Linux account to
+   create a symbolic link pointing to the `server` subdirectory of the server
+   portion of the staff client that we just built using the staff client ID
+   'rel_name':
++
+[source, bash]
+------------------------------------------------------------------------------
+cd /openils/var/web/xul
+ln -sf rel_name/server server
+------------------------------------------------------------------------------
+
+Change ownership of the Evergreen files
+---------------------------------------
+
+All files in the `/openils/` directory and subdirectories must be owned by the
+`opensrf` user. Issue the following command as the *root* Linux account to
+change the ownership on the files:
+
+[source, bash]
+------------------------------------------------------------------------------
+chown -R opensrf:opensrf /openils
+------------------------------------------------------------------------------
+
+Configure the Apache Web server
+-------------------------------
+
+1. Use the example configuration files in `Open-ILS/examples/apache/` to
+configure your Web server for the Evergreen catalog, staff client, Web
+services, and administration interfaces. Issue the following commands as the
+*root* Linux account:
++
+.Debian and Ubuntu
+[source,bash]
+------------------------------------------------------------------------------
+cp Open-ILS/examples/apache/eg.conf       /etc/apache2/sites-available/
+cp Open-ILS/examples/apache/eg_vhost.conf /etc/apache2/
+cp Open-ILS/examples/apache/startup.pl    /etc/apache2/
+# Now set up SSL
+mkdir /etc/apache2/ssl
+cd /etc/apache2/ssl
+------------------------------------------------------------------------------
++
+.Fedora
+[source,bash]
+------------------------------------------------------------------------------
+cp Open-ILS/examples/apache/eg.conf       /etc/httpd/conf.d/
+cp Open-ILS/examples/apache/eg_vhost.conf /etc/httpd/
+cp Open-ILS/examples/apache/startup.pl    /etc/httpd/
+# Now set up SSL
+mkdir /etc/httpd/ssl
+cd /etc/httpd/ssl
+------------------------------------------------------------------------------
++
+2. The `openssl` command cuts a new SSL key for your Apache server. For a
+production server, you should purchase a signed SSL certificate, but you can
+just use a self-signed certificate and accept the warnings in the staff client
+and browser during testing and development. Create an SSL key for the Apache
+server by issuing the following command as the *root* Linux account:
++
+[source,bash]
+------------------------------------------------------------------------------
+openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key
+------------------------------------------------------------------------------
++
+3. As the *root* Linux account, edit the `eg.conf` file that you copied into
+place.
+  a. Replace `Allow from 10.0.0.0/8` with `Allow from all` (to enable
+     access to the offline upload / execute interface from any workstation on
+     any network - note that you must secure this for a production instance)
+  b. (Fedora): Change references from the non-existent `/etc/apache2/` directory
+     to `/etc/httpd/`.
+4. Change the user for the Apache server.
+  * (Debian and Ubuntu): As the *root* Linux account, edit
+    `/etc/apache2/envvars`.  Change `export APACHE_RUN_USER=www-data` to 
+    `export APACHE_RUN_USER=opensrf`.
+  * (Fedora): As the *root* Linux account , edit `/etc/httpd/conf/httpd.conf`.
+    Change `User apache` to `User opensrf`.
+5. Configure Apache with performance settings appropriate for Evergreen:
+  * (Debian and Ubuntu): As the *root* Linux account, edit
+    `/etc/apache2/apache2.conf`:
+  * (Fedora): As the *root* Linux account, edit `/etc/httpd/conf/httpd.conf`:
+    a. Change `KeepAliveTimeout` to `1`. Higher values reduce the chance of
+       a request timing out unexpectedly, but increase the risk of using up
+       all available Apache child processes.
+    b. 'Optional': Change `MaxKeepAliveRequests` to `100`
+    c. Update the prefork configuration section to suit your environment. The
+       following settings apply to a busy system:
++
+[source,bash]
+------------------------------------------------------------------------------
+<IfModule mpm_prefork_module>
+   StartServers           20
+   MinSpareServers         5
+   MaxSpareServers        15
+   MaxClients            150
+   MaxRequestsPerChild 10000
+</IfModule>
+------------------------------------------------------------------------------
++
+6. (Fedora): As the *root* Linux account, edit the `/etc/httpd/eg_vhost.conf`
+   file to change references from the non-existent `/etc/apache2/` directory
+   to `/etc/httpd/`.
+7. (Debian and Ubuntu): As the *root* Linux account, enable the Evergreen site:
++
+[source,bash]
+------------------------------------------------------------------------------
+a2dissite default  # OPTIONAL: disable the default site (the "It Works" page)
+a2ensite eg.conf
+------------------------------------------------------------------------------
+
+Configure OpenSRF for the Evergreen application
+-----------------------------------------------
+There are a number of example OpenSRF configuration files in `/openils/conf/`
+that you can use as a template for your Evergreen installation. Issue the
+following commands as the *opensrf* Linux account:
+
+[source, bash]
+------------------------------------------------------------------------------
+cp -b /openils/conf/opensrf_core.xml.example /openils/conf/opensrf_core.xml
+cp -b /openils/conf/opensrf.xml.example /openils/conf/opensrf.xml
+------------------------------------------------------------------------------
+
+When you installed OpenSRF, you created four Jabber users on two
+separate domains and edited the `opensrf_core.xml` file accordingly. Please
+refer back to the OpenSRF README and, as the *opensrf* Linux account, edit the
+Evergreen version of the `opensrf_core.xml` file using the same Jabber users
+and domains as you used while installing and testing OpenSRF.
+
+[NOTE]
+The `-b` flag tells the `cp` command to create a backup version of the
+destination file. The backup version of the destination file has a tilde (`~`)
+appended to the file name, so if you have forgotten the Jabber users and
+domains, you can retrieve the settings from the backup version of the files.
+
+`eg_db_config.pl`, described in the following section, sets the database
+connection information in `opensrf.xml` for you.
+
+Creating the Evergreen database
+-------------------------------
+
+By default, the `Makefile.install` prerequisite installer does not install
+the PostgreSQL 9 database server required by every Evergreen system;
+for production use, most libraries install the PostgreSQL database server on a
+dedicated machine. You can install the packages required by Debian or Ubuntu Lucid
+on the machine of your choice using the following commands as the *root*
+Linux account:
+
+.(Debian and Ubuntu Lucid) Installing PostgreSQL 9.1 server packages
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install install_pgsql_server_backport_debs_91
+------------------------------------------------------------------------------
+
+.(Ubuntu Precise) Installing PostgreSQL 9.1 server packages
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install install_pgsql_server_debs_91
+------------------------------------------------------------------------------
+
+You can install the packages required by Fedora on the machine of your choice
+using the following commands as the *root* Linux account:
+
+.(Fedora) Installing PostgreSQL server packages
+[source, bash]
+------------------------------------------------------------------------------
+make -f Open-ILS/src/extras/Makefile.install install_fedora_pgsql_server
+postgresql-setup initdb
+------------------------------------------------------------------------------
+
+For a standalone PostgreSQL server, install the following Perl modules as the
+*root* Linux account:
+
+.(Debian / Ubuntu) Installing additional Perl modules on a standalone PostgreSQL 9 server
+[source, bash]
+------------------------------------------------------------------------------
+aptitude install gcc libxml-libxml-perl libxml-libxslt-perl
+cpan Business::ISBN
+cpan JSON::XS
+cpan Library::CallNumber::LC
+cpan MARC::Record
+cpan MARC::File::XML
+cpan UUID::Tiny
+------------------------------------------------------------------------------
+
+.(Fedora) Installing additional Perl modules on a standalone PostgreSQL 9 server
+[source, bash]
+------------------------------------------------------------------------------
+yum install gcc perl-XML-LibXML perl-XML-LibXSLT perl-Business-ISBN
+cpan Library::CallNumber::LC
+cpan MARC::Record
+cpan MARC::File::XML
+cpan UUID::Tiny
+------------------------------------------------------------------------------
+
+You need to create a PostgreSQL superuser to create and access the database.
+Issue the following command as the *postgres* Linux account to create a new
+PostgreSQL superuser named `evergreen`. When prompted, enter the new user's
+password:
+
+[source, bash]
+------------------------------------------------------------------------------
+createuser -s -P evergreen
+------------------------------------------------------------------------------
+
+Once you have created the *evergreen* PostgreSQL account, you also need to
+create the database and schema, and configure your configuration files to point
+at the database server. Issue the following command as the *root* Linux account
+from inside the Evergreen source directory, replacing <user>, <password>,
+<hostname>, <port>, and <dbname> with the appropriate values for your
+PostgreSQL database (where <user> and <password> are for the *evergreen*
+PostgreSQL account you just created), and replace <admin-user> and <admin-pass>
+with the values you want for the *egadmin* Evergreen administrator account:
+
+[source, bash]
+------------------------------------------------------------------------------
+perl Open-ILS/src/support-scripts/eg_db_config.pl --update-config \
+       --service all --create-database --create-schema --create-offline \
+       --user <user> --password <password> --hostname <hostname> --port <port> \
+       --database <dbname> --admin-user <admin-user> --admin-pass <admin-pass>
+------------------------------------------------------------------------------
+
+This creates the database and schema and configures all of the services in
+your `/openils/conf/opensrf.xml` configuration file to point to that database.
+It also creates the configuration files required by the Evergreen `cgi-bin`
+administration scripts, and sets the user name and password for the *egadmin*
+Evergreen administrator account to your requested values.
+
+Creating the database on a remote server
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+In a production instance of Evergreen, your PostgreSQL server should be
+installed on a dedicated server.
+
+PostgreSQL 9.1 and later
+^^^^^^^^^^^^^^^^^^^^^^^^
+To create the database instance on a remote database server running PostgreSQL
+9.1 or later, simply use the `--create-database` flag on `eg_db_config.pl`.
+
+For PostgreSQL 9.0
+^^^^^^^^^^^^^^^^^^
+To create the database instance on a remote database server running PostgreSQL
+9.0, you can either:
+
+  *  Install the PostgreSQL contrib modules on the machine on which you
+     are installing the Evergreen code, and use the `--create-database`
+     option from that machine, or
+  *  Copy the `Open-ILS/src/sql/Pg/create_database.sql` script to your
+     PostgreSQL server and invoke it as the *postgres* Linux account:
++
+[source, bash]
+------------------------------------------------------------------------------
+psql -vdb_name=<dbname> -vcontrib_dir=`pg_config --sharedir`/contrib -f create_database.sql
+------------------------------------------------------------------------------
+
+Then you can issue the `eg_db_config.pl` command as above _without_ the
+`--create-database` argument to create your schema and configure your
+configuration files.
+
+Starting Evergreen
+------------------
+1. As the *root* Linux account, start the `memcached` and `ejabberd` services
+(if they aren't already running):
++
+[source, bash]
+------------------------------------------------------------------------------
+/etc/init.d/ejabberd start
+/etc/init.d/memcached start
+------------------------------------------------------------------------------
++
+2. As the *opensrf* Linux account, start Evergreen. The `-l` flag in the
+following command is only necessary if you want to force Evergreen to treat the
+hostname as `localhost`; if you configured `opensrf.xml` using the real
+hostname of your machine as returned by `perl -ENet::Domain 'print
+Net::Domain::hostfqdn() . "\n";'`, you should not use the `-l` flag.
++
+[source, bash]
+------------------------------------------------------------------------------
+osrf_ctl.sh -l -a start_all
+------------------------------------------------------------------------------
++
+  ** If you receive the error message `bash: osrf_ctl.sh: command not found`,
+     then your environment variable `PATH` does not include the `/openils/bin`
+     directory; this should have been set in the *opensrf* Linux account's
+     `.bashrc` configuration file. To manually set the `PATH` variable, edit the
+     configuration file `~/.bashrc` as the *opensrf* Linux account and add the
+     following line:
++
+[source, bash]
+------------------------------------------------------------------------------
+export PATH=$PATH:/openils/bin
+------------------------------------------------------------------------------
++
+3. As the *opensrf* Linux account, generate the Web files needed by the staff
+   client and catalogue and update the organization unit proximity (you need to do
+   this the first time you start Evergreen, and after that each time you change
+   the library hierarchy in `config.cgi`):
++
+[source, bash]
+------------------------------------------------------------------------------
+autogen.sh -u
+------------------------------------------------------------------------------
++
+4. As the *root* Linux account, restart the Apache Web server:
++
+[source, bash]
+------------------------------------------------------------------------------
+/etc/init.d/apache2 restart
+------------------------------------------------------------------------------
++
+If the Apache Web server was running when you started the OpenSRF services, you
+might not be able to successfully log in to the OPAC or staff client until the
+Apache Web server is restarted.
+
+Testing connections to Evergreen
+--------------------------------
+
+Once you have installed and started Evergreen, test your connection to
+Evergreen via `srfsh`. As the *opensrf* Linux account, issue the following
+commands to start `srfsh` and try to log onto the Evergreen server using the
+*egadmin* Evergreen administrator user name and password that you set using the
+`eg_db_config.pl` command:
+
+[source, bash]
+------------------------------------------------------------------------------
+/openils/bin/srfsh
+srfsh% login <admin-user> <admin-pass>
+------------------------------------------------------------------------------
+
+You should see a result like:
+
+    Received Data: "250bf1518c7527a03249858687714376"
+    ------------------------------------
+    Request Completed Successfully
+    Request Time in seconds: 0.045286
+    ------------------------------------
+
+    Received Data: {
+       "ilsevent":0,
+       "textcode":"SUCCESS",
+       "desc":" ",
+       "pid":21616,
+       "stacktrace":"oils_auth.c:304",
+       "payload":{
+          "authtoken":"e5f9827cc0f93b503a1cc66bee6bdd1a",
+          "authtime":420
+       }
+
+    }
+
+    ------------------------------------
+    Request Completed Successfully
+    Request Time in seconds: 1.336568
+    ------------------------------------
+
+If this does not work, it's time to do some troubleshooting.
+
+  * As the *opensrf* Linux acccount, run the `settings-tester.pl` script to see
+    if it finds any system configuration problems. The script is found at
+    `Open-ILS/src/support-scripts/settings-tester.pl` in the Evergreen source
+    tree.
+  * Follow the steps in the http://evergreen-ils.org/dokuwiki/doku.php?id=troubleshooting:checking_for_errors[troubleshooting guide].
+  * If you have faithfully followed the entire set of installation steps
+    listed here, you are probably extremely close to a working system.
+    Gather your configuration files and log files and contact the
+    http://open-ils.org/listserv.php[Evergreen development mailing list]
+    for assistance before making any drastic changes to your system
+    configuration.
+
+Getting help
+------------
+
+Need help installing or using Evergreen? Join the mailing lists at
+http://evergreen-ils.org/listserv.php or contact us on the Freenode
+IRC network on the #evergreen channel.
+
+License
+-------
+This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
+Unported License. To view a copy of this license, visit
+http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative
+Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
diff --git a/configure.ac b/configure.ac
index d599a51..8ec4fb7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,8 +20,8 @@
 
 export PATH=${PATH}:/usr/sbin
 AC_PREREQ(2.61)
-AC_INIT(Open-ILS, 2.2, open-ils-dev at list.georgialibraries.org)
-AM_INIT_AUTOMAKE([OpenILS], [2.2])
+AC_INIT(Open-ILS, 2.2.3, open-ils-dev at list.georgialibraries.org)
+AM_INIT_AUTOMAKE([OpenILS], [2.2.3])
 AC_REVISION($Revision: 0.1 $)
 AC_CONFIG_SRCDIR([configure.ac])
 AC_PREFIX_DEFAULT([/openils/])

commit 845e482ab46a2b2ef1c6bf9404ef633b8525e5f2
Author: Bill Erickson <berick at esilibrary.com>
Date:   Fri Nov 2 15:28:27 2012 -0400

    CStoreEditor auto-activity log redaction
    
    CStoreEditor logs all update calls to the activity log as key/value
    pairs on the updated object.  Avoid loging key/value pairs for objects
    when the API call being relayed by CStoreEditor is on the list of
    log-protect API calls.  Instead, log "**DETAILS REDACTED**".
    
    Signed-off-by: Bill Erickson <berick at esilibrary.com>
    Signed-off-by: Dan Scott <dscott at laurentian.ca>

diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm b/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm
index d41e435..70553b7 100644
--- a/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm
+++ b/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm
@@ -1,6 +1,7 @@
 use strict; use warnings;
 package OpenILS::Utils::CStoreEditor;
 use OpenILS::Application::AppUtils;
+use OpenSRF::Application;
 use OpenSRF::AppSession;
 use OpenSRF::EX qw(:try);
 use OpenILS::Utils::Fieldmapper;
@@ -624,9 +625,25 @@ sub _checkperm {
 # Logs update actions to the activity log
 # -----------------------------------------------------------------------------
 sub log_activity {
-	my( $self, $type, $action, $arg ) = @_;
+	my( $self, $method, $type, $action, $arg ) = @_;
 	my $str = "$type.$action";
-	$str .= _prop_string($arg);
+
+    if ($arg) {
+
+        my $redact = $OpenSRF::Application::shared_conf->shared->log_protect;
+        if (ref($redact) eq 'ARRAY' and grep { $method =~ /^$_/ } @{$redact}) {
+
+            # when API calls are marked as log-protect, avoid 
+            # dumping the param object to the activity log.
+            $str .= " **DETAILS REDACTED**";
+
+        } else {
+
+            $str .= _prop_string($arg);
+        }
+    }
+
+
 	$self->log(A, $str);
 }
 
@@ -747,7 +764,7 @@ sub runmethod {
 			$logger->error("Attempt to update DB while not in a transaction : $method");
 			throw OpenSRF::EX::ERROR ("Attempt to update DB while not in a transaction : $method");
 		}
-		$self->log_activity($type, $action, $arg);
+		$self->log_activity($method, $type, $action, $arg);
 	}
 
 	if($$options{checkperm}) {

commit b230c152544b372d57661f091d8a43568833eba0
Author: Mike Rylander <mrylander at gmail.com>
Date:   Wed Oct 10 17:36:52 2012 -0400

    Make it possible to suppress IDL fields
    
    Some clients of external services, particularly pcrud and reporter-store,
    need to be able to access tables that contain columns we'd rather restrict.
    For instance, the passwd field on actor.usr.
    
    To effect this feature we provide a blacklist attribute for fields, called
    suppress_controller, which works in the same way as the class controller
    attribute but names controllers not allowed to use the field.  When the field
    is explicitly named in a query (fieldmapper select block or json_query) an
    error is thrown, and suppressed fields are ingored in general fieldmapper
    search/retreive requests.
    
    Signed-off-by: Mike Rylander <mrylander at gmail.com>
    Signed-off-by: Bill Erickson <berick at esilibrary.com>

diff --git a/Open-ILS/examples/fm_IDL.xml b/Open-ILS/examples/fm_IDL.xml
index d388b86..af64c25 100644
--- a/Open-ILS/examples/fm_IDL.xml
+++ b/Open-ILS/examples/fm_IDL.xml
@@ -2686,7 +2686,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 			<field reporter:label="Is Group Lead Account" name="master_account" reporter:datatype="bool"/>
 			<field reporter:label="Internet Access Level" name="net_access_level" reporter:datatype="link"/>
 			<field reporter:label="Other Phone" name="other_phone"  reporter:datatype="text"/>
-			<field reporter:label="Password" name="passwd"  reporter:datatype="text"/>
+			<field reporter:label="Password" name="passwd" suppress_controller="open-ils.pcrud open-ils.reporter-store" reporter:datatype="text"/>
 			<field reporter:label="Photo URL" name="photo_url"  reporter:datatype="text"/>
 			<field reporter:label="Prefix/Title" name="prefix"  reporter:datatype="text"/>
 			<field reporter:label="Main (Profile) Permission Group" name="profile" reporter:datatype="link"/>
diff --git a/Open-ILS/examples/fm_IDL.xsd b/Open-ILS/examples/fm_IDL.xsd
index b2720a1..7ebbd51 100644
--- a/Open-ILS/examples/fm_IDL.xsd
+++ b/Open-ILS/examples/fm_IDL.xsd
@@ -51,6 +51,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
    <xs:element ref="idl:description" minOccurs="0" maxOccurs="1"/>
   </xs:sequence>
   <xs:attribute name="name"/>
+  <xs:attribute name="suppress_controller"/>
   <xs:attribute ref="oils_obj:array_position"/>
   <xs:attribute ref="oils_obj:required"/>
   <xs:attribute ref="oils_obj:validate"/>
diff --git a/Open-ILS/src/c-apps/oils_idl-core.c b/Open-ILS/src/c-apps/oils_idl-core.c
index 471435c..5d432ab 100644
--- a/Open-ILS/src/c-apps/oils_idl-core.c
+++ b/Open-ILS/src/c-apps/oils_idl-core.c
@@ -156,6 +156,13 @@ osrfHash* oilsIDLInit( const char* idl_filename ) {
 						snprintf( array_pos_buf, sizeof( array_pos_buf ), "%u", array_pos++ );
 						osrfHashSet( field_def_hash, strdup( array_pos_buf ), "array_position" );
 
+						// Tokenize suppress_controller attribute into an osrfStringArray
+						if( (prop_str = (char*)xmlGetProp(_f, BAD_CAST "suppress_controller")) ) {
+							osrfLogDebug(OSRF_LOG_MARK, "Controller suppression list is %s", prop_str );
+							osrfStringArray* controller = osrfStringArrayTokenize( prop_str, ' ' );
+							osrfHashSet( field_def_hash, controller, "suppress_controller");
+						}
+
 						if( (prop_str = (char*)xmlGetNsProp(_f, BAD_CAST "i18n", BAD_CAST PERSIST_NS)) ) {
 							osrfHashSet(
 								field_def_hash,
diff --git a/Open-ILS/src/c-apps/oils_sql.c b/Open-ILS/src/c-apps/oils_sql.c
index b262a70..a0ba678 100644
--- a/Open-ILS/src/c-apps/oils_sql.c
+++ b/Open-ILS/src/c-apps/oils_sql.c
@@ -4203,7 +4203,16 @@ char* SELECT (
 
 					// Look up the field in the IDL
 					const char* col_name = jsonObjectGetString( selfield );
-					osrfHash* field_def = osrfHashGet( class_field_set, col_name );
+					osrfHash* field_def;
+
+					if (!osrfStringArrayContains(
+							osrfHashGet(
+								osrfHashGet( class_field_set, col_name ),
+								"suppress_controller"),
+							modulename
+					))
+						field_def = osrfHashGet( class_field_set, col_name );
+
 					if( !field_def ) {
 						// No such field in current class
 						osrfLogError(
@@ -4282,7 +4291,16 @@ char* SELECT (
 							jsonObjectGetKeyConst( selfield, "column" ) );
 
 					// Get the field definition from the IDL
-					osrfHash* field_def = osrfHashGet( class_field_set, col_name );
+					osrfHash* field_def;
+					if (!osrfStringArrayContains(
+							osrfHashGet(
+								osrfHashGet( class_field_set, col_name ),
+								"suppress_controller"),
+							modulename
+					))
+						field_def = osrfHashGet( class_field_set, col_name );
+
+
 					if( !field_def ) {
 						// No such field in current class
 						osrfLogError(
@@ -5202,6 +5220,9 @@ static char* buildSELECT ( const jsonObject* search_hash, jsonObject* rest_of_qu
 			if( !field )
 				continue;
 
+			if (osrfStringArrayContains( osrfHashGet(field, "suppress_controller"), modulename ))
+				continue;
+
 			if( first ) {
 				first = 0;
 			} else {
@@ -6056,6 +6077,10 @@ int doUpdate( osrfMethodContext* ctx ) {
 		if( str_is_true( osrfHashGet( field_def, "virtual") ) )
 			continue;
 
+		if (osrfStringArrayContains( osrfHashGet(field_def, "suppress_controller"), modulename ))
+			continue;
+
+
 		const char* field_name = osrfHashIteratorKey( field_itr );
 		if( ! strcmp( field_name, pkey ) )
 			continue;
diff --git a/Open-ILS/web/reports/xul/source-browse.js b/Open-ILS/web/reports/xul/source-browse.js
index 4075dd1..0442e3a 100644
--- a/Open-ILS/web/reports/xul/source-browse.js
+++ b/Open-ILS/web/reports/xul/source-browse.js
@@ -36,6 +36,9 @@ function sourceTreeHandler (ev, dbl) {
 				var name = field.getAttributeNS(rptNS,'label');
 				if (!name) name = field.getAttribute('name');
 
+				var suppress = field.getAttribute('suppress_controller');
+				if (suppress && suppress.indexOf('open-ils.reporter-store') > -1) continue;
+
 				var idlclass = link_fields[i].getAttribute('class');
 				var map = link_fields[i].getAttribute('map');
 				var link = link_fields[i].getAttribute('field');
diff --git a/Open-ILS/web/reports/xul/source-setup.js b/Open-ILS/web/reports/xul/source-setup.js
index 7a9ca84..ebb6a6d 100644
--- a/Open-ILS/web/reports/xul/source-setup.js
+++ b/Open-ILS/web/reports/xul/source-setup.js
@@ -300,6 +300,9 @@ function populateDetailTree (tcNode, c, item) {
 		var type = fields[i].getAttributeNS(rptNS, 'datatype');
 		//if (!type) type = 'text';
 
+		var suppress = fields[i].getAttribute('suppress_controller');
+		if (suppress && suppress.indexOf('open-ils.reporter-store') > -1) continue;
+
 		var label = fields[i].getAttributeNS(rptNS, 'label');
 		var name = fields[i].getAttribute('name');
 		if (!label) label = name;

commit 245c4faa7a22f9c67a3a738913df6fd5df15a06f
Author: Bill Erickson <berick at esilibrary.com>
Date:   Wed Oct 31 09:00:19 2012 -0400

    Add sample log redaction config to EG opensrf_core
    
    Redact parameter logging for the following API calls:
    
    Login:
    open-ils.auth.authenticate.verify
    open-ils.auth.authenticate.complete
    open-ils.auth_proxy.login
    
    User updates:
    open-ils.actor.user.password
    open-ils.actor.user.username
    open-ils.actor.user.email
    open-ils.actor.patron.update
    open-ils.cstore.direct.actor.user.create
    open-ils.cstore.direct.actor.user.update
    open-ils.cstore.direct.actor.user.delete
    
    Signed-off-by: Bill Erickson <berick at esilibrary.com>
    Signed-off-by: Dan Scott <dscott at laurentian.ca>

diff --git a/Open-ILS/examples/opensrf_core.xml.example b/Open-ILS/examples/opensrf_core.xml.example
index 440bd8b..7bc022f 100644
--- a/Open-ILS/examples/opensrf_core.xml.example
+++ b/Open-ILS/examples/opensrf_core.xml.example
@@ -170,4 +170,22 @@ Example OpenSRF bootstrap configuration file for Evergreen
     </router>
   </routers>
   <!-- ======================================================================================== -->
+
+  <!-- Any methods which match any of these match_string node values will     
+       have their params redacted from lower-level input logging.             
+       Adjust these examples as needed. -->      
+  <shared>
+    <log_protect>
+      <match_string>open-ils.auth.authenticate.verify</match_string>
+      <match_string>open-ils.auth.authenticate.complete</match_string>
+      <match_string>open-ils.auth_proxy.login</match_string>
+      <match_string>open-ils.actor.user.password</match_string>
+      <match_string>open-ils.actor.user.username</match_string>
+      <match_string>open-ils.actor.user.email</match_string>
+      <match_string>open-ils.actor.patron.update</match_string>
+      <match_string>open-ils.cstore.direct.actor.user.create</match_string>
+      <match_string>open-ils.cstore.direct.actor.user.update</match_string>
+      <match_string>open-ils.cstore.direct.actor.user.delete</match_string>
+    </log_protect>
+  </shared>
 </config>

commit 650caa116c210bb5b8c1903239b27e04ab5f6d30
Author: Dan Scott <dscott at laurentian.ca>
Date:   Tue Nov 6 09:48:51 2012 -0500

    Document log redaction XML for opensrf_core.xml (2.2)
    
    Based on Bill Erickson's original text.
    
    Signed-off-by: Dan Scott <dscott at laurentian.ca>

diff --git a/docs/RELEASE_NOTES_2_2.txt b/docs/RELEASE_NOTES_2_2.txt
index 11ac2ef..5961379 100644
--- a/docs/RELEASE_NOTES_2_2.txt
+++ b/docs/RELEASE_NOTES_2_2.txt
@@ -6,6 +6,33 @@ Release notes
 Upgrade notes
 -------------
 
+Log Protect (redaction)
+~~~~~~~~~~~~~~~~~~~~~~~
+To prevent sensitive information such as passwords from being logged
+in general activity logs, add the following XML chunk to the bottom of
+`opensrf_core.xml`, just inside the `<config>` section:
+
+[source, xml]
+----------------------------------------------------------------
+  ...
+  </routers>
+  <shared> <!-- new block starts here -->
+    <log_protect>
+      <match_string>open-ils.auth.authenticate.verify</match_string>
+      <match_string>open-ils.auth.authenticate.complete</match_string>
+      <match_string>open-ils.auth_proxy.login</match_string>
+      <match_string>open-ils.actor.user.password</match_string>
+      <match_string>open-ils.actor.user.username</match_string>
+      <match_string>open-ils.actor.user.email</match_string>
+      <match_string>open-ils.actor.patron.update</match_string>
+      <match_string>open-ils.cstore.direct.actor.user.create</match_string>
+      <match_string>open-ils.cstore.direct.actor.user.update</match_string>
+      <match_string>open-ils.cstore.direct.actor.user.delete</match_string>
+    </log_protect>
+  </shared> <!-- new block ends here -->
+</config>
+----------------------------------------------------------------
+
 Z39.50 Server Definitions
 ~~~~~~~~~~~~~~~~~~~~~~~
 Z39.50 server target definitions have been removed from the sample
@@ -608,4 +635,4 @@ License
 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
 Unported License. To view a copy of this license, visit
 http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative
-Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
\ No newline at end of file
+Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.

-----------------------------------------------------------------------


hooks/post-receive
-- 
Evergreen ILS


More information about the open-ils-commits mailing list