[open-ils-commits] [GIT] Evergreen ILS branch tags/rel_2_3_1 created. 8a4414fd8a5047faa91352c5005588976d82b079

Evergreen Git git at git.evergreen-ils.org
Thu Nov 8 13:32:10 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_3_1 has been created
        at  8a4414fd8a5047faa91352c5005588976d82b079 (commit)

- Log -----------------------------------------------------------------
commit 8a4414fd8a5047faa91352c5005588976d82b079
Author: Bill Erickson <berick at esilibrary.com>
Date:   Tue Nov 6 15:48:06 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..08d011c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,1143 @@
-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 2df098c59ae23e8abba05ec75db446941141c398
+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 f2f53421e3df78639a07a99088ba610f6a5d0731
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Tue Nov 6 15:28:28 2012 -0500
+
+    Move 'initial host' feature docs into 2.3 release notes
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+15	0	docs/RELEASE_NOTES_2_3.txt
+0	12	docs/RELEASE_NOTES_NEXT/initial_host.txt
+ delete mode 100644 docs/RELEASE_NOTES_NEXT/initial_host.txt
+
+commit d5a0f1f5edf78857d5227874998f95daf4ec0f63
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Mon Nov 5 22:14:34 2012 -0500
+
+    Document log redaction XML chunk for opensrf_core.xml
+    
+    Based on Bill Erickson's original version.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+
+26	1	docs/RELEASE_NOTES_2_3.txt
+
+commit f502344088bac86af1634663de2d7a647987b873
+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 5224fcf99db734eed0b9d58fd5e9389b16400d5d
+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 3977a280bc7cb27e16ac890b02b68ac043c94d13
+Author: Thomas Berezansky <tsbere at mvlc.org>
+Date:   Thu Aug 2 13:28:44 2012 -0400
+
+    Staff client initial hostname
+    
+    Add support for an initial staff client hostname.
+    
+    It can be specified during building the staff client or via configure.
+    
+    During making the staff client:
+    
+    make INITIAL_HOST=hostname build
+    
+    During configure:
+    
+    ./configure --with-initialhost=hostname
+    
+    Signed-off-by: Thomas Berezansky <tsbere at mvlc.org>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+2	0	Open-ILS/xul/staff_client/Makefile.am
+7	2	Open-ILS/xul/staff_client/chrome/content/auth/controller.js
+30	3	Open-ILS/xul/staff_client/chrome/content/main/main.js
+3	0	Open-ILS/xul/staff_client/defaults/preferences/initialhost.js
+8	0	configure.ac
+12	0	docs/RELEASE_NOTES_NEXT/initial_host.txt
+ create mode 100644 Open-ILS/xul/staff_client/defaults/preferences/initialhost.js
+ create mode 100644 docs/RELEASE_NOTES_NEXT/initial_host.txt
+
+commit 8645f10ad262f5c620345ab14868451ef57ebbb5
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Thu Oct 11 00:56:40 2012 -0400
+
+    TPAC: Address some search syntax leaks in links
+    
+    Expand the list of filtered characters to cover all of the special
+    characters documented for the Evergreen search grammar
+    (http://evergreen-ils.org/dokuwiki/doku.php?id=documentation:technical:search_grammar)
+    when generating links in the TPAC so as to avoid inadvertently launching
+    filtered searches when a user clicks on something that should just be a
+    display value.
+    
+    For example, if a title includes "Presenting a subject: tips for
+    consultants", it should _not_ launch a search for "subject" containing
+    "tips for consultants".
+    
+    This commit addresses most of the link problems in the record
+    display, as well as the author links in the search results table.
+    
+    Still problematic are the facets (which seem to rely on exact matching,
+    such that filtering out the problematic characters is itself
+    problematic) and autocomplete (which requires modifying the Autocomplete
+    Dojo widget).
+    
+    In addition, this commit makes the series code actually display, as it
+    was using a non-standard method to attempt to return the results from
+    the BLOCK (and failing). Also, it makes the links for authors in the
+    record details match the MODS32 definition for personal name parts and
+    only use the "acdq" subfields. This enables a click on the link to
+    actually return results; previously, in the case where the author field
+    included (for example) a subfield "g" value, that value would be
+    included in the generated link and would likely lead to 0 hits.
+    
+    For authors, we substitute with a space rather than just eliding the
+    substituted value. Authors are particularly likely to have dates like
+    1899-1978; "1899 1978" matches, but "18991978" will not.
+    
+    Perhaps we should take the same approach with the others, or break down
+    the search/replace logic a little further (for example, we could remove
+    the "-" only if it is preceded by a space or is at the start of the
+    string and is followed immediately by a character, and preserve it if it
+    is surrounded by digits). But this seems to take us pretty far down the
+    road of less negatively surprising results.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+4	2	Open-ILS/src/templates/opac/parts/record/authors.tt2
+6	4	Open-ILS/src/templates/opac/parts/record/series.tt2
+1	1	Open-ILS/src/templates/opac/parts/record/subjects.tt2
+1	1	Open-ILS/src/templates/opac/parts/result/table.tt2
+
+commit a97b4ba5f9e085387d7f923e85287d04c34161ec
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Wed Oct 10 23:35:13 2012 -0400
+
+    TPAC: Add search torture tests to concerto record
+    
+    In addition to # signs causing problems in facets, we found that search
+    syntax in general is surfaced directly in most links that are exposed to
+    users in the TPAC. This commit adds several examples to the record with
+    the title "Trombone concerto (1991)":
+    
+    In the title, there is an embedded "subject:" search which will be
+    triggered by autocomplete.
+    
+    In the author (100 field), there is an embedded "author:" search which
+    will be triggered from the record details page. This also includes
+    another usage of the # sign.
+    
+    In the subject fields, there are:
+      * an embedded "subject:" search which will be triggered from the
+        facets, autocomplete, and record details page
+      * an embedded negation operator which will be triggered from the
+        facets, autocomplete, and record details page
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+1	1	Open-ILS/tests/datasets/concerto.sql
+
+commit 62cb022ce0ca38dc622f1ee88abf15b804d8ab00
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Wed Oct 10 15:50:49 2012 -0400
+
+    Munge concerto to include # signs in series facets
+    
+    Search for "Piano concerto in C major, op. 39" or "Beethoven: concertos
+    and overtures" and you'll get facets with # signs to assist with fixing
+    LP # 856811.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+2	2	Open-ILS/tests/datasets/concerto.sql
+
+commit feb74214accc9c710e5d0b18214113b17febb9c8
+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 fe1e9f77eb422649180e691b836a79f93aa90b08
+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 4bf6dd1c717d56914230285a5d30b5b81a9e5d73
+Author: Thomas Berezansky <tsbere at mvlc.org>
+Date:   Tue Oct 23 16:27:00 2012 -0400
+
+    Add missing ? to url_prefix regex check
+    
+    Fixes Barcode Completion and who knows what else.
+    
+    Signed-off-by: Thomas Berezansky <tsbere at mvlc.org>
+    Signed-off-by: Jason Stephenson <jstephenson at mvlc.org>
+
+1	1	Open-ILS/xul/staff_client/chrome/content/OpenILS/global_util.js
+
+commit ac5161f3dbab7741a0f8ac06098990d7426465f9
+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 9cbd12e03f7107aaa179cd3e1e35c5e66e74a7ce
+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.
+    
+    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 c24e34676132640e5c652383290e4d5a5f705fc3
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Tue Oct 9 16:49:09 2012 -0400
+
+    Authority popups are empty: fix dojo.query() usage
+    
+    When you right-click on a controllable field to display the contents of
+    the matching authority records, the contents of the matching authority
+    records simply appear as empty grey boxes.
+    
+    This is another case of needing to iterate over multiple values
+    separately rather than using one convenient CSS selector.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+7	1	Open-ILS/xul/staff_client/server/cat/marcedit.js
+
+commit f0caffee4f0fa32e897903cf6ad9773b0e6cfbe1
+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 3fcd13fb8ab41910719ca53a9d1313fd39880767
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Fri Sep 28 13:58:07 2012 -0400
+
+    ACQ invoice tabs scroll improvements
+    
+    Avoid nested scrollbars on tabbed ACQ invoice UI.  This is done by
+    removing a ContentPane layer and setting doLayout='false' on the
+    TabContainer, which allows the individual tabs to control their own
+    height dynamically, which means no more hard-set 600px height on the
+    tabs.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+5	3	Open-ILS/src/templates/acq/invoice/view.tt2
+
+commit af303657985f5d27bd100b14c1630f7c7b3e4524
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Mon Sep 17 14:50:36 2012 -0400
+
+    ACQ scroll back to top of lineitem info page
+    
+    When displaying the lineitem "info" page (li attributes, marc record),
+    be sure to scroll to the top of the page instead of relying on the
+    previous scroll location.  In particular, if you last viewed a LI
+    toward the bottom of the page, returned (causes scroll down), then go
+    back into the info page, the page will be scrolled to the bottom.
+    
+    The solution is a little funkier than I'd hoped.  The scroll-to point
+    has to be a node that is a) within the scrolling dojo div and b). non-
+    visible when scrollIntoView is called.  Since the top-level
+    page div may be different, depending on who is loading li_table, we rely
+    on the caller to place an id=oils-scroll-to-top div in the page for
+    general top-scrolling.  (Note, also, window.scrollTo does not work when
+    it's the div and not the full page that needs scrolling).
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+1	0	Open-ILS/src/templates/acq/picklist/view.tt2
+1	0	Open-ILS/src/templates/acq/po/view.tt2
+1	0	Open-ILS/src/templates/acq/search/unified.tt2
+3	0	Open-ILS/web/js/ui/default/acq/common/li_table.js
+
+commit 2cb18f20ed1c41d4d24afbcdbcb848e6b57043e0
+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>
+
+8	2	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Util.pm
+3	1	Open-ILS/src/templates/opac/css/style.css.tt2
+1	0	Open-ILS/src/templates/opac/parts/config.tt2
+31	27	Open-ILS/src/templates/opac/parts/result/facets.tt2
+
+commit 8a929d746246b56f2670d1b71adaec3377ba67c8
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Thu Aug 23 17:29:42 2012 -0400
+
+    Improvements to custom org tree UI
+    
+    This replaced the PermaCrud.js create() calls with inline transaction
+    begin, creates, and commit.  We do this to solve a number of problems:
+    
+    * Create all new nodes within the same transaction so that a failure
+    gracefully rolls back.
+    
+    * PermaCrud.js does not currently disconnect opensrf client sessions
+    (though it has a disconnect() method).  We can manage that locally.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+41	10	Open-ILS/web/js/ui/default/conify/global/actor/org_unit_custom_tree.js
+
+commit de412ce69871671af7970abba42b10fc33554b8b
+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 3d12351fdf70f702df05dafeff0b860e25a89c34
+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 8b8e973310638da48d9ac92ee636e4ee6a51fe43
+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 239e70e2256b52bcb2d4dd32fa310c5e77b98e6e
+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 b39ac1de1e4b1b598b7ada95872e012f643f8157
+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 a8e9d68e93f0a1d4fd1d2202c40180d2247d848b
+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 436fae85993182a81fdd85428949ccc26049ec8e
+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 4e9aaf50a1a7e1655183bcfce1ea00255c172d72
+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 d2bd31086e134610602c3a6a8e17b68de775d98b
+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 e30193d1712cbb6f4ebb17d71d00a0b5e1eb3b10
+Author: Michael Peters <mrpeters at library.in.gov>
+Date:   Fri Sep 21 11:47:41 2012 -0400
+
+    TPAC: Add a progress spinner after pressing search on Advanced Search
+    
+    Advanced Search had no indication of progress once you've submitted
+    a search. We should add a "progressbar_green.gif" like the basic search
+    has, so the user knows their search is in progress, and (hopefully)
+    avoids them from hammering submit to get a result.
+    
+    Signed-off-by: Michael Peters <mrpeters at library.in.gov>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+6	1	Open-ILS/src/templates/opac/parts/advanced/search.tt2
+
+commit aedb6254511dbb6656a1dceafe8085c8b4cec010
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Wed Oct 3 15:00:26 2012 -0400
+
+    ACQ invoice receive UI handles async LI retrieval
+    
+    openils.acq.Linetitem.fetchAndRender() now fetches lineitems
+    asynchronously.  This commit causes the invoice receive UI to calculate
+    the copies to be received after all lineitems have been (async) fetched.
+    Without this, it always appears as though there are no copies to receive
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+23	13	Open-ILS/web/js/ui/default/acq/invoice/receive.js
+
+commit 49c9f1214f2663b2a6b12af0ce20a279d095be20
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Wed Oct 10 22:06:32 2012 -0400
+
+    TPAC: Avoid 500 errs on record page due to ipv6 ignorance
+    
+    Net::HTTP does not handle ipv6 addresses properly, and is subject to
+    failing to return a request object if handed one (some systems seem to
+    prefer ipv6). This commit checks the value of the request object before
+    invoking any methods on it, and also short-circuits the AC lookup loop
+    if the host could not be resolved to avoid flooding the logs with
+    multiple "Unable to connect..." warnings.
+    
+    If Net::HTTP grows ipv6 support, this commit can still stay in place and
+    the lookups will just start magically working.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+5	2	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm
+
+commit 9e6ab63c189c3ac177f8422b532c76270f20cafd
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Mon Sep 10 09:32:17 2012 -0400
+
+    TPAC: Remove noise, misleading text from myopac/holds/circs/circ_history
+    
+    There are many "class='hide_me'" elements that will never be displayed
+    and which are currently just extra bits to ship over the wire. Same for
+    the inline comments.
+    
+    Also move most of the inline styles out to the stylesheet.
+    
+    Also remove the explicit widths on the table cells; if the font size
+    changes or the translated text is wider than the table cells, then the
+    display will become comical.
+    
+    Also remove explicit <br> tags from localized strings; given the
+    likelihood that font sizes and column widths will change, <br> tags
+    inside localized strings make very little sense.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+23	1	Open-ILS/src/templates/opac/css/style.css.tt2
+13	28	Open-ILS/src/templates/opac/myopac/circ_history.tt2
+19	66	Open-ILS/src/templates/opac/myopac/circs.tt2
+42	104	Open-ILS/src/templates/opac/myopac/holds.tt2
+1	3	Open-ILS/src/templates/opac/parts/login/password_hint.tt2
+1	1	Open-ILS/src/templates/opac/parts/place_hold_result.tt2
+5	1	Open-ILS/web/css/skin/default/opac/semiauto.css
+
+commit 63fcae2a0961ee9e0a4b516b678daccf9f7c9fc3
+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 465488439e75bbb9bc9fbbba0e23c0036cf9937d
+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 2950191dc6d56adbaf11afc5a13126d841b41b1c
+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 583bf046ad122225c749105b973b1d78293271ec
+Author: Jason Stephenson <jstephenson at mvlc.org>
+Date:   Wed Oct 3 12:42:01 2012 -0400
+
+    LP1052941: Internal Server Error when adding to My List in staff client.
+    
+    Don't redirect in EGCatLoader/Account.pm when in staff client context and
+    we're adding to a My List/Bookbag.
+    
+    Add a wrapper macro to bookbag_actions.tt2 to wrap the add to book bag URLs
+    with some javascript that opens a new tab in the staff client. This is to
+    prevent the staff person from losing their search results as they would if
+    the new URL were opened in their current tab.
+    
+    Signed-off-by: Jason Stephenson <jstephenson at mvlc.org>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+7	4	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm
+20	10	Open-ILS/src/templates/opac/parts/bookbag_actions.tt2
+
+commit c387ad7febf7f3ce9049187e18016fc5aa108e80
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Fri Sep 28 16:53:05 2012 -0400
+
+    "Select All" option in invoice search results
+    
+    Adds a new Select All checkbox along the top of the invoice search
+    results page.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+3	0	Open-ILS/src/templates/acq/invoice/view.tt2
+8	0	Open-ILS/web/js/ui/default/acq/invoice/view.js
+
+commit 33c0f8439f15cb13a0c59adfd8702eb1f68b803f
+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 30d325f369744adf9fb8ebc4d2f200de5d0a7ee2
+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 d3e30b106d06159c0edf4f9a59e6df5dfd4bd694
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Tue Aug 28 17:03:28 2012 -0400
+
+    Use CSS selectors that new XUL can live with
+    
+    Just another case of current XUL not liking Dojo 1.3's "dojo.query('foo
+    bar')" and converting it to "dojo.query('foo').query('bar')" instead.
+    
+    This problem manifested as bizarrely large fixed field grids and an
+    absence of working authority context menus.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+
+3	3	Open-ILS/xul/staff_client/server/cat/marcedit.js
+
+commit c6a1c0432c437c3e84384cfa6cf83b05900e02ca
+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 9692199c47cb01782cfd3156a2bfd3669fe446e3
+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 e07ffc9987f47d14db6347ab3f7174412af0d626
+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 9e10d38b34a90e98ce4298b7fe7b63bdbed3197b
+Author: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+Date:   Wed Jun 27 18:38:19 2012 -0400
+
+    Add two fields to the new FlattenerGrid-based hold pull list
+    
+    Namely (current) copy status and (number of) potential copies.
+    
+    I believe this implementation has a negligible impact on the efficiency
+    of the hold pull list query overall.
+    
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+    Signed-off-by: Kathy Lussier <klussier at masslnc.org>
+
+8	1	Open-ILS/examples/fm_IDL.xml
+1	0	Open-ILS/src/templates/circ/hold_pull_list.tt2
+
+commit 36a51d2b194f6bac647630fbe67d44c2bbb84cf6
+Author: Robert Soulliere <robert.soulliere at mohawkcollege.ca>
+Date:   Wed Oct 3 13:21:57 2012 -0400
+
+    Documentation: Update upgrade instructions to 2.3.0.
+    
+    Signed-off-by: Robert Soulliere <robert.soulliere at mohawkcollege.ca>
+
+12	12	docs/installation/server_upgrade.txt
+
+commit 719dd030798e6dfec081af9188904f59e37142ff
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Wed Sep 26 23:13:41 2012 -0400
+
+    Teach make_release to set the eg_version var
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+1	0	build/tools/make_release
+
+commit 5c8b83b596f9289a7141d0b566bdccf441319f8c
+Author: Galen Charlton <gmc at esilibrary.com>
+Date:   Wed Sep 26 22:54:06 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>
+
+20	0	Open-ILS/src/sql/Pg/version-upgrade/2.2-2.3.0-upgrade-db.sql
+
+commit 06d54e49c37519409df8dd92cc7624779270d7a3
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Wed Sep 26 22:11:45 2012 -0400
+
+    Apply the 0715 update during the 2.3.0 upgrade
+    
+    Per LP# 1057183, the 0715 update should have been applied during the
+    2.1-2.2 upgrade, but appears not to have been - and that ends up
+    causing problems during the 2.2-2.3 upgrade. Thus we prophylactically
+    attempt to apply it again.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+14	0	Open-ILS/src/sql/Pg/version-upgrade/2.2-2.3.0-upgrade-db.sql
+
+commit 7e565f99e650ddd2a979a53d59416cb424ced8d2
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Wed Sep 26 22:02:17 2012 -0400
+
+    Add an explicit "set eg_version" at start of upgrade script
+    
+    Thanks to Robert Soulliere for raising this issue in LP# 1057113!
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+3	0	Open-ILS/src/sql/Pg/version-upgrade/2.2-2.3.0-upgrade-db.sql
+
+commit 0b0a01d34b16078b71c5ac99804fa2a4692ecf84
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Wed Sep 26 22:00:03 2012 -0400
+
+    Add the 2.2-2.3.0 upgrade script
+    
+    Cloned from b9a480e7f640e7.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Lebbeous Fogle-Weekley <lebbeous at esilibrary.com>
+
+2219	0	Open-ILS/src/sql/Pg/version-upgrade/2.2-2.3.0-upgrade-db.sql
+ create mode 100644 Open-ILS/src/sql/Pg/version-upgrade/2.2-2.3.0-upgrade-db.sql
+
+commit aaf94d278b24e59000b705d14965d479576c3e54
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Mon Sep 24 17:12:11 2012 -0400
+
+    TPAC added content lookup uses local server address
+    
+    Use the current Apache server's IP address instead of apache->hostname
+    to determine where to route TPAC added content lookups.  This allows the
+    server to handle the added content lookup locally instead of having to
+    route out and back into the cluster.
+    
+    Continue using apache->hostname as the Host header to ensure the proper
+    virtualhost is used once the request is received.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Michael Peters <mrpeters at library.in.gov>
+
+13	6	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm
+
+commit 661fe70abe324c082ab9d6d0c1f01c64e2f4c9ef
+Author: Bill Erickson <berick at esilibrary.com>
+Date:   Mon Sep 24 12:50:47 2012 -0400
+
+    Added content connect timeout
+    
+    Make tpac server-side added content lookups exit after a brief timeout
+    when the apache module is unable to open a connection to its own
+    top-level hostname (the virtualhost, apache->hostname).
+    
+    As noted in the code comments, even though we are using Net::Server::NB
+    (non-blocking), it's only non-blocking in the sense of content
+    retrieval, not in how it calls connect() under the covers.
+    
+    Signed-off-by: Bill Erickson <berick at esilibrary.com>
+    Signed-off-by: Michael Peters <mrpeters at library.in.gov>
+
+12	2	Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm
+
+commit ed4c91efd0b2994f465405a790f308d5e1c36af0
+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 f3e2ab810f0cf504445ddf166dce0596c421b9a3
+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 18966cef95eca990d4fdd39a6bbb6f36f5350367
+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 8292cb5d1e71715187e1adc6cee602bf65b45877
+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: Dan Scott <dscott at laurentian.ca>
+
+4	10	Open-ILS/src/templates/opac/parts/misc_util.tt2
+
+commit 4dbef40874c931368c52af413860b47e89565d6b
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Fri Sep 28 01:00:54 2012 -0400
+
+    Docs want a space after the main header
+    
+    Formatting gets messed up if we don't have the expected blank line after
+    the main header. Okay.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+
+1	0	docs/opac/new_skin_customizations.txt
+
+commit a6221b4be39335a48f659807467b167860816920
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Thu Sep 27 23:52:14 2012 -0400
+
+    Docs: Minimum list of TPAC templates to customize
+    
+    In an effort to help new sites adopt the TPAC and avoid leaving
+    embarrassing placeholders around, I present... the minimum list!
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+
+91	0	docs/opac/new_skin_customizations.txt
+9	1	docs/root.txt
+ create mode 100644 docs/opac/new_skin_customizations.txt
+
+commit 2fed63c6e82e6226c56b16ba4b350b30bee58e11
+Author: Ben Shum <bshum at biblio.org>
+Date:   Wed Sep 5 17:02:43 2012 -0400
+
+    Make relator_map script executable
+    
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+0	0	build/tools/relator_map
+ mode change 100644 => 100755 build/tools/relator_map
+
+commit 788dc1ff65856c627e05f7deeb37541dd422edff
+Author: Dan Scott <dscott at laurentian.ca>
+Date:   Wed Sep 5 00:27:03 2012 -0400
+
+    TPAC: Fine-grained credits in record details
+    
+    For 7xx fields with $4 subfields containing relator codes, generate a
+    relator code map from http://www.loc.gov/marc/relators/relacode.html
+    that we can use in the record details to provide specific credits,
+    rather than the generic (and often inappropriate) "Added author" label.
+    
+    For example:
+    
+    700 1. ‡aMaley, Desmond, ‡d1954- ‡4prf.
+    
+    This now generates "Maley, Desmond, 1954- (Performer)" in the record
+    details credit section.
+    
+    Signed-off-by: Dan Scott <dscott at laurentian.ca>
+    Signed-off-by: Ben Shum <bshum at biblio.org>
+
+8	5	Open-ILS/src/templates/opac/parts/record/authors.tt2
+228	0	Open-ILS/src/templates/opac/parts/relators.tt2
+72	0	build/tools/relator_map
+ create mode 100644 Open-ILS/src/templates/opac/parts/relators.tt2
+ create mode 100644 build/tools/relator_map
diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application.pm
index cd4dbbf..b3c6e67 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 "HEAD";
+    return "2-3-1";
 }
 
 __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 1a5775f..64a87e9 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.3.1', :eg_version);
 
 CREATE TABLE config.bib_source (
 	id		SERIAL	PRIMARY KEY,
diff --git a/Open-ILS/src/sql/Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql b/Open-ILS/src/sql/Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql
new file mode 100644
index 0000000..089b799
--- /dev/null
+++ b/Open-ILS/src/sql/Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql
@@ -0,0 +1,271 @@
+--Upgrade Script for 2.3.0 to 2.3.1
+BEGIN;
+INSERT INTO config.upgrade_log (version, applied_to) VALUES ('2.3.1', :eg_version);
+
+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 2609bb6..bb00306 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>$HeadURL$</p>
+<p>http://git.evergreen-ils.org/Evergreen.git?h=refs/heads/rel_2_3_1</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 6352b6e..74aa50a 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","$HeadURL$");
+pref("open-ils.repository.headURL","http://git.evergreen-ils.org/Evergreen.git?h=refs/heads/rel_2_3_1");
 pref("open-ils.repository.author","$Author$");
 pref("open-ils.repository.revision","$Revision$");
 pref("open-ils.repository.date","$Date$");
diff --git a/Open-ILS/xul/staff_client/windowssetup.nsi b/Open-ILS/xul/staff_client/windowssetup.nsi
index e0bc1ef..e7e96bb 100644
--- a/Open-ILS/xul/staff_client/windowssetup.nsi
+++ b/Open-ILS/xul/staff_client/windowssetup.nsi
@@ -3,7 +3,7 @@
 ; HM NIS Edit Wizard helper defines
 ; Old versions of makensis don't like this, moved to Makefile
 ;!define /file PRODUCT_VERSION "client/VERSION"
-!define PRODUCT_TAG "Master"
+!define PRODUCT_TAG "2.3"
 !define PRODUCT_INSTALL_TAG "${PRODUCT_TAG}"
 !define UI_IMAGESET "beta"
 ;!define UI_IMAGESET "release"
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..a9ccca2
--- /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_3_1 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/build/tools/make_release b/build/tools/make_release
index 18eac29..24db8e5 100755
--- a/build/tools/make_release
+++ b/build/tools/make_release
@@ -2,7 +2,7 @@
 
 GIT_ABS=`git rev-parse --show-toplevel`
 GIT_BRANCH=`git rev-parse --abbrev-ref HEAD | sed 's|.*/||'`
-HEADURLBASE="http://git.evergreen-ils.org/Evergreen.git?h=refs/heads/"
+HEADURLBASE="http://git.evergreen-ils.org/Evergreen.git?h=refs/heads/rel_2_3_1"
 HEADURL="$HEADURLBASE$GIT_BRANCH"
 
 # Drop to the root of the checkout
diff --git a/configure.ac b/configure.ac
index 89e64f6..3481bb0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,8 +20,8 @@
 
 export PATH=${PATH}:/usr/sbin
 AC_PREREQ(2.61)
-AC_INIT(Open-ILS, trunk, open-ils-dev at list.georgialibraries.org)
-AM_INIT_AUTOMAKE([OpenILS], [trunk])
+AC_INIT(Open-ILS, 2.3.1, open-ils-dev at list.georgialibraries.org)
+AM_INIT_AUTOMAKE([OpenILS], [2.3.1])
 AC_REVISION($Revision: 0.1 $)
 AC_CONFIG_SRCDIR([configure.ac])
 AC_PREFIX_DEFAULT([/openils/])

commit 2df098c59ae23e8abba05ec75db446941141c398
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 51854e3..23559e0 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;
@@ -637,9 +638,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);
 }
 
@@ -760,7 +777,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 f2f53421e3df78639a07a99088ba610f6a5d0731
Author: Bill Erickson <berick at esilibrary.com>
Date:   Tue Nov 6 15:28:28 2012 -0500

    Move 'initial host' feature docs into 2.3 release notes
    
    Signed-off-by: Bill Erickson <berick at esilibrary.com>

diff --git a/docs/RELEASE_NOTES_2_3.txt b/docs/RELEASE_NOTES_2_3.txt
index b8fc6be..2c0e9c5 100644
--- a/docs/RELEASE_NOTES_2_3.txt
+++ b/docs/RELEASE_NOTES_2_3.txt
@@ -513,3 +513,18 @@ Support is now available to create a credit card payment type in the SIP Fee
 Paid message. There is also now support for SIP clients to retrieve and
 display a detailed/itemized list of billings to the patron.
 
+Staff Client Initial Hostname
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+For fresh installs of the staff client a common issue is people remembering
+what hostname to specify. If you are building your own staff clients you can
+now fill this in automatically.
+
+You can specify this when configuring Evergreen with a new configure option:
+
+--with-initialhost=example.org
+
+It is also possible to specify when building the staff client itself using the
+INITIAL_HOST variable:
+
+make INITIAL_HOST=example.org build
diff --git a/docs/RELEASE_NOTES_NEXT/initial_host.txt b/docs/RELEASE_NOTES_NEXT/initial_host.txt
deleted file mode 100644
index 7699480..0000000
--- a/docs/RELEASE_NOTES_NEXT/initial_host.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-Staff Client Initial Hostname
------------------------------
-
-For fresh installs of the staff client a common issue is people remembering what hostname to specify. If you are building your own staff clients you can now fill this in automatically.
-
-You can specify this when configuring Evergreen with a new configure option:
-
---with-initialhost=example.org
-
-It is also possible to specify when building the staff client itself using the INITIAL_HOST variable:
-
-make INITIAL_HOST=example.org build

commit d5a0f1f5edf78857d5227874998f95daf4ec0f63
Author: Dan Scott <dscott at laurentian.ca>
Date:   Mon Nov 5 22:14:34 2012 -0500

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

diff --git a/docs/RELEASE_NOTES_2_3.txt b/docs/RELEASE_NOTES_2_3.txt
index 4d81226..b8fc6be 100644
--- a/docs/RELEASE_NOTES_2_3.txt
+++ b/docs/RELEASE_NOTES_2_3.txt
@@ -6,7 +6,32 @@ Release notes
 Upgrade notes
 -------------
 
-Coming Soon.
+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>
+----------------------------------------------------------------
 
 New features
 ------------

commit f502344088bac86af1634663de2d7a647987b873
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 5224fcf99db734eed0b9d58fd5e9389b16400d5d
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 5b9725a..a7a765d 100644
--- a/Open-ILS/examples/fm_IDL.xml
+++ b/Open-ILS/examples/fm_IDL.xml
@@ -2805,7 +2805,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 db03497..a2a1d26 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(
@@ -5198,6 +5216,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 {
@@ -6048,6 +6069,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 d3b919c..1e0d456 100644
--- a/Open-ILS/web/reports/xul/source-setup.js
+++ b/Open-ILS/web/reports/xul/source-setup.js
@@ -312,6 +312,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;

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


hooks/post-receive
-- 
Evergreen ILS


More information about the open-ils-commits mailing list