Initial commit 4.0.5-3
authorMikal Kolbein Gule <m.k.gule@usit.uio.no>
Mon, 30 Apr 2012 10:22:09 +0000 (12:22 +0200)
committerMikal Kolbein Gule <m.k.gule@usit.uio.no>
Mon, 30 Apr 2012 10:22:09 +0000 (12:22 +0200)
1279 files changed:
bin/jsmin [new file with mode: 0755]
bin/rt [new file with mode: 0755]
bin/rt-crontool [new file with mode: 0755]
bin/rt-mailgate [new file with mode: 0755]
docs/README [new file with mode: 0644]
docs/UPGRADING-2.0 [new file with mode: 0644]
docs/UPGRADING-3.0 [new file with mode: 0644]
docs/UPGRADING-3.2 [new file with mode: 0644]
docs/UPGRADING-3.4 [new file with mode: 0644]
docs/UPGRADING-3.6 [new file with mode: 0644]
docs/UPGRADING-3.8 [new file with mode: 0644]
docs/UPGRADING-4.0 [new file with mode: 0644]
docs/UPGRADING.mysql [new file with mode: 0644]
docs/customizing/articles_introduction.pod [new file with mode: 0644]
docs/customizing/templates.pod [new file with mode: 0644]
docs/customizing/timezones_in_charts.pod [new file with mode: 0644]
docs/extending/clickable_links.pod [new file with mode: 0644]
docs/extending/external_custom_fields.pod [new file with mode: 0644]
docs/extending/using_forms_widgets.pod [new file with mode: 0644]
docs/full_text_indexing.pod [new file with mode: 0644]
docs/glossary.pod [new file with mode: 0644]
docs/hacking.pod [new file with mode: 0644]
docs/network-diagram.svg [new file with mode: 0644]
docs/schema.dot [new file with mode: 0644]
docs/security.pod [new file with mode: 0644]
docs/web_deployment.pod [new file with mode: 0644]
etc/RT_Config.pm [new file with mode: 0644]
etc/RT_Config.pm.orig [new file with mode: 0644]
etc/acl.Oracle [new file with mode: 0644]
etc/acl.Pg [new file with mode: 0644]
etc/acl.mysql [new file with mode: 0644]
etc/initialdata [new file with mode: 0644]
etc/schema.Oracle [new file with mode: 0644]
etc/schema.Pg [new file with mode: 0644]
etc/schema.SQLite [new file with mode: 0644]
etc/schema.mysql [new file with mode: 0644]
lib/RT.pm [new file with mode: 0644]
lib/RT/ACE.pm [new file with mode: 0644]
lib/RT/ACL.pm [new file with mode: 0644]
lib/RT/Action.pm [new file with mode: 0644]
lib/RT/Action/AutoOpen.pm [new file with mode: 0644]
lib/RT/Action/Autoreply.pm [new file with mode: 0644]
lib/RT/Action/CreateTickets.pm [new file with mode: 0644]
lib/RT/Action/EscalatePriority.pm [new file with mode: 0644]
lib/RT/Action/ExtractSubjectTag.pm [new file with mode: 0644]
lib/RT/Action/LinearEscalate.pm [new file with mode: 0644]
lib/RT/Action/Notify.pm [new file with mode: 0644]
lib/RT/Action/NotifyAsComment.pm [new file with mode: 0644]
lib/RT/Action/NotifyGroup.pm [new file with mode: 0644]
lib/RT/Action/NotifyGroupAsComment.pm [new file with mode: 0644]
lib/RT/Action/RecordComment.pm [new file with mode: 0644]
lib/RT/Action/RecordCorrespondence.pm [new file with mode: 0644]
lib/RT/Action/ResolveMembers.pm [new file with mode: 0644]
lib/RT/Action/SendEmail.pm [new file with mode: 0644]
lib/RT/Action/SetPriority.pm [new file with mode: 0644]
lib/RT/Action/SetStatus.pm [new file with mode: 0644]
lib/RT/Action/UserDefined.pm [new file with mode: 0644]
lib/RT/Approval.pm [new file with mode: 0644]
lib/RT/Approval/Rule.pm [new file with mode: 0644]
lib/RT/Approval/Rule/Created.pm [new file with mode: 0644]
lib/RT/Approval/Rule/NewPending.pm [new file with mode: 0644]
lib/RT/Approval/Rule/Passed.pm [new file with mode: 0644]
lib/RT/Approval/Rule/Rejected.pm [new file with mode: 0644]
lib/RT/Article.pm [new file with mode: 0644]
lib/RT/Articles.pm [new file with mode: 0644]
lib/RT/Attachment.pm [new file with mode: 0644]
lib/RT/Attachments.pm [new file with mode: 0644]
lib/RT/Attribute.pm [new file with mode: 0644]
lib/RT/Attributes.pm [new file with mode: 0644]
lib/RT/Base.pm [new file with mode: 0644]
lib/RT/CachedGroupMember.pm [new file with mode: 0644]
lib/RT/CachedGroupMembers.pm [new file with mode: 0644]
lib/RT/Class.pm [new file with mode: 0644]
lib/RT/Classes.pm [new file with mode: 0644]
lib/RT/Condition.pm [new file with mode: 0644]
lib/RT/Condition/AnyTransaction.pm [new file with mode: 0644]
lib/RT/Condition/BeforeDue.pm [new file with mode: 0644]
lib/RT/Condition/CloseTicket.pm [new file with mode: 0644]
lib/RT/Condition/Overdue.pm [new file with mode: 0644]
lib/RT/Condition/OwnerChange.pm [new file with mode: 0644]
lib/RT/Condition/PriorityChange.pm [new file with mode: 0644]
lib/RT/Condition/PriorityExceeds.pm [new file with mode: 0644]
lib/RT/Condition/QueueChange.pm [new file with mode: 0644]
lib/RT/Condition/ReopenTicket.pm [new file with mode: 0644]
lib/RT/Condition/StatusChange.pm [new file with mode: 0644]
lib/RT/Condition/UserDefined.pm [new file with mode: 0644]
lib/RT/Config.pm [new file with mode: 0644]
lib/RT/Crypt/GnuPG.pm [new file with mode: 0644]
lib/RT/CurrentUser.pm [new file with mode: 0644]
lib/RT/CustomField.pm [new file with mode: 0644]
lib/RT/CustomFieldValue.pm [new file with mode: 0644]
lib/RT/CustomFieldValues.pm [new file with mode: 0644]
lib/RT/CustomFieldValues/External.pm [new file with mode: 0644]
lib/RT/CustomFieldValues/Groups.pm [new file with mode: 0644]
lib/RT/CustomFields.pm [new file with mode: 0644]
lib/RT/Dashboard.pm [new file with mode: 0644]
lib/RT/Dashboard/Mailer.pm [new file with mode: 0644]
lib/RT/Dashboards.pm [new file with mode: 0644]
lib/RT/Date.pm [new file with mode: 0644]
lib/RT/EmailParser.pm [new file with mode: 0644]
lib/RT/Generated.pm [new file with mode: 0644]
lib/RT/Generated.pm.in [new file with mode: 0644]
lib/RT/Graph/Tickets.pm [new file with mode: 0644]
lib/RT/Group.pm [new file with mode: 0644]
lib/RT/GroupMember.pm [new file with mode: 0644]
lib/RT/GroupMembers.pm [new file with mode: 0644]
lib/RT/Groups.pm [new file with mode: 0644]
lib/RT/Handle.pm [new file with mode: 0644]
lib/RT/I18N.pm [new file with mode: 0644]
lib/RT/I18N/cs.pm [new file with mode: 0644]
lib/RT/I18N/i_default.pm [new file with mode: 0644]
lib/RT/I18N/ru.pm [new file with mode: 0644]
lib/RT/Installer.pm [new file with mode: 0644]
lib/RT/Interface/CLI.pm [new file with mode: 0644]
lib/RT/Interface/Email.pm [new file with mode: 0644]
lib/RT/Interface/Email/Auth/GnuPG.pm [new file with mode: 0644]
lib/RT/Interface/Email/Auth/MailFrom.pm [new file with mode: 0644]
lib/RT/Interface/REST.pm [new file with mode: 0644]
lib/RT/Interface/Web.pm [new file with mode: 0644]
lib/RT/Interface/Web/Handler.pm [new file with mode: 0644]
lib/RT/Interface/Web/Menu.pm [new file with mode: 0644]
lib/RT/Interface/Web/QueryBuilder.pm [new file with mode: 0644]
lib/RT/Interface/Web/QueryBuilder/Tree.pm [new file with mode: 0644]
lib/RT/Interface/Web/QueryBuilder/Tree.pm.orig [new file with mode: 0644]
lib/RT/Interface/Web/QueryBuilder/Tree.pm.rej [new file with mode: 0644]
lib/RT/Interface/Web/Request.pm [new file with mode: 0644]
lib/RT/Interface/Web/Session.pm [new file with mode: 0644]
lib/RT/Lifecycle.pm [new file with mode: 0644]
lib/RT/Link.pm [new file with mode: 0644]
lib/RT/Links.pm [new file with mode: 0644]
lib/RT/ObjectClass.pm [new file with mode: 0644]
lib/RT/ObjectClasses.pm [new file with mode: 0644]
lib/RT/ObjectCustomField.pm [new file with mode: 0644]
lib/RT/ObjectCustomFieldValue.pm [new file with mode: 0644]
lib/RT/ObjectCustomFieldValues.pm [new file with mode: 0644]
lib/RT/ObjectCustomFields.pm [new file with mode: 0644]
lib/RT/ObjectTopic.pm [new file with mode: 0644]
lib/RT/ObjectTopics.pm [new file with mode: 0644]
lib/RT/Plugin.pm [new file with mode: 0644]
lib/RT/Principal.pm [new file with mode: 0644]
lib/RT/Principals.pm [new file with mode: 0644]
lib/RT/Queue.pm [new file with mode: 0644]
lib/RT/Queues.pm [new file with mode: 0644]
lib/RT/Record.pm [new file with mode: 0644]
lib/RT/Reminders.pm [new file with mode: 0644]
lib/RT/Report/Tickets.pm [new file with mode: 0644]
lib/RT/Report/Tickets/Entry.pm [new file with mode: 0644]
lib/RT/Rule.pm [new file with mode: 0644]
lib/RT/Ruleset.pm [new file with mode: 0644]
lib/RT/SQL.pm [new file with mode: 0644]
lib/RT/SavedSearch.pm [new file with mode: 0644]
lib/RT/SavedSearches.pm [new file with mode: 0644]
lib/RT/Scrip.pm [new file with mode: 0644]
lib/RT/ScripAction.pm [new file with mode: 0644]
lib/RT/ScripActions.pm [new file with mode: 0644]
lib/RT/ScripCondition.pm [new file with mode: 0644]
lib/RT/ScripConditions.pm [new file with mode: 0644]
lib/RT/Scrips.pm [new file with mode: 0644]
lib/RT/Search.pm [new file with mode: 0644]
lib/RT/Search/ActiveTicketsInQueue.pm [new file with mode: 0644]
lib/RT/Search/FromSQL.pm [new file with mode: 0644]
lib/RT/Search/Googleish.pm [new file with mode: 0644]
lib/RT/SearchBuilder.pm [new file with mode: 0644]
lib/RT/SearchBuilder.pm.orig [new file with mode: 0644]
lib/RT/SharedSetting.pm [new file with mode: 0644]
lib/RT/SharedSettings.pm [new file with mode: 0644]
lib/RT/Shredder.pm [new file with mode: 0644]
lib/RT/Shredder/ACE.pm [new file with mode: 0644]
lib/RT/Shredder/Attachment.pm [new file with mode: 0644]
lib/RT/Shredder/CachedGroupMember.pm [new file with mode: 0644]
lib/RT/Shredder/Constants.pm [new file with mode: 0644]
lib/RT/Shredder/CustomField.pm [new file with mode: 0644]
lib/RT/Shredder/CustomFieldValue.pm [new file with mode: 0644]
lib/RT/Shredder/Dependencies.pm [new file with mode: 0644]
lib/RT/Shredder/Dependency.pm [new file with mode: 0644]
lib/RT/Shredder/Exceptions.pm [new file with mode: 0644]
lib/RT/Shredder/Group.pm [new file with mode: 0644]
lib/RT/Shredder/GroupMember.pm [new file with mode: 0644]
lib/RT/Shredder/Link.pm [new file with mode: 0644]
lib/RT/Shredder/ObjectCustomFieldValue.pm [new file with mode: 0644]
lib/RT/Shredder/POD.pm [new file with mode: 0644]
lib/RT/Shredder/Plugin.pm [new file with mode: 0644]
lib/RT/Shredder/Plugin/Attachments.pm [new file with mode: 0644]
lib/RT/Shredder/Plugin/Base.pm [new file with mode: 0644]
lib/RT/Shredder/Plugin/Base/Dump.pm [new file with mode: 0644]
lib/RT/Shredder/Plugin/Base/Search.pm [new file with mode: 0644]
lib/RT/Shredder/Plugin/Objects.pm [new file with mode: 0644]
lib/RT/Shredder/Plugin/SQLDump.pm [new file with mode: 0644]
lib/RT/Shredder/Plugin/Summary.pm [new file with mode: 0644]
lib/RT/Shredder/Plugin/Tickets.pm [new file with mode: 0644]
lib/RT/Shredder/Plugin/Users.pm [new file with mode: 0644]
lib/RT/Shredder/Principal.pm [new file with mode: 0644]
lib/RT/Shredder/Queue.pm [new file with mode: 0644]
lib/RT/Shredder/Record.pm [new file with mode: 0644]
lib/RT/Shredder/Scrip.pm [new file with mode: 0644]
lib/RT/Shredder/ScripAction.pm [new file with mode: 0644]
lib/RT/Shredder/ScripCondition.pm [new file with mode: 0644]
lib/RT/Shredder/Template.pm [new file with mode: 0644]
lib/RT/Shredder/Ticket.pm [new file with mode: 0644]
lib/RT/Shredder/Transaction.pm [new file with mode: 0644]
lib/RT/Shredder/User.pm [new file with mode: 0644]
lib/RT/Squish.pm [new file with mode: 0644]
lib/RT/Squish/CSS.pm [new file with mode: 0644]
lib/RT/Squish/JS.pm [new file with mode: 0644]
lib/RT/StyleGuide.pod [new file with mode: 0644]
lib/RT/System.pm [new file with mode: 0644]
lib/RT/Template.pm [new file with mode: 0644]
lib/RT/Templates.pm [new file with mode: 0644]
lib/RT/Test.pm [new file with mode: 0644]
lib/RT/Test/Apache.pm [new file with mode: 0644]
lib/RT/Test/Email.pm [new file with mode: 0644]
lib/RT/Test/GnuPG.pm [new file with mode: 0644]
lib/RT/Test/Web.pm [new file with mode: 0644]
lib/RT/Ticket.pm [new file with mode: 0644]
lib/RT/Tickets.pm [new file with mode: 0644]
lib/RT/Tickets_SQL.pm [new file with mode: 0644]
lib/RT/Topic.pm [new file with mode: 0644]
lib/RT/Topics.pm [new file with mode: 0644]
lib/RT/Transaction.pm [new file with mode: 0644]
lib/RT/Transactions.pm [new file with mode: 0644]
lib/RT/URI.pm [new file with mode: 0644]
lib/RT/URI/a.pm [new file with mode: 0644]
lib/RT/URI/base.pm [new file with mode: 0644]
lib/RT/URI/fsck_com_article.pm [new file with mode: 0644]
lib/RT/URI/fsck_com_rt.pm [new file with mode: 0644]
lib/RT/URI/t.pm [new file with mode: 0644]
lib/RT/User.pm [new file with mode: 0644]
lib/RT/Users.pm [new file with mode: 0644]
lib/RT/Util.pm [new file with mode: 0644]
local/bin/cron-escalate [new file with mode: 0755]
local/bin/rt-delete.pl [new file with mode: 0755]
local/bin/rt-get-messages [new file with mode: 0755]
local/bin/rt-get-messages-test [new file with mode: 0755]
local/bin/rt-remind [new file with mode: 0755]
local/bin/rt-update-groups [new file with mode: 0755]
local/html/Admin/Tools/BecomeUser.html [new file with mode: 0644]
local/html/Callbacks/UiOCallbacks/Elements/ColumnMap/Once [new file with mode: 0644]
local/html/Callbacks/UiOCallbacks/Elements/Header/Head [new file with mode: 0644]
local/html/Callbacks/UiOCallbacks/Elements/Login/AfterForm [new file with mode: 0644]
local/html/Callbacks/UiOCallbacks/Elements/Login/BeforeForm [new file with mode: 0644]
local/html/Callbacks/UiOCallbacks/Elements/ShowUserConcise [new file with mode: 0644]
local/html/Callbacks/UiOCallbacks/Elements/Tabs/Privileged [new file with mode: 0644]
local/html/Callbacks/UiOCallbacks/Elements/Tabs/TicketMenu [new file with mode: 0644]
local/html/Callbacks/UiOCallbacks/Ticket/Display.html/BeforeActionList [new file with mode: 0644]
local/html/Callbacks/UiOCallbacks/Ticket/Elements/Tabs/Default [new file with mode: 0644]
local/html/Elements/ShowUserConcise [new file with mode: 0644]
local/html/Helpers/Autocomplete/Users [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/InHeader [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/base.css [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/boxes.css [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/images/dhandler [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/images/source/background-gradient.png [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/layout.css [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/main.css [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/misc.css [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/msie-pie.css [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/msie.css [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/msie6.css [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/nav.css [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/ticket-lists.css [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/ticket-search.css [new file with mode: 0644]
local/html/NoAuth/css/3.4-compat/ticket.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/InHeader [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/base.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/boxes.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/images/dhandler [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/images/source/background-gradient.png [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/layout.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/main.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/misc.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/msie-pie.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/msie.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/msie6.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/nav.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/ticket-lists.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/ticket-search.css [new file with mode: 0644]
local/html/NoAuth/css/3.5-default/ticket.css [new file with mode: 0644]
local/html/NoAuth/css/web2/layout.css [new file with mode: 0644]
local/html/NoAuth/images/so_logo.gif [new file with mode: 0644]
local/html/NoAuth/images/uio-name.gif [new file with mode: 0644]
local/html/NoAuth/images/uio_logo.gif [new file with mode: 0755]
local/html/Ticket/Export.html [new file with mode: 0644]
local/html/Ticket/ForkAskQueue.html [new file with mode: 0644]
local/lib/RT/Interface/Email/Filter/SpamHeader.pm [new file with mode: 0755]
local/lib/RT/Interface/Email/Filter/TakeAction.pm [new file with mode: 0644]
local/lib/RT/Transaction_Local.pm [new file with mode: 0755]
local/lib/RT/User_Local.not-pm [new file with mode: 0755]
local/man/auto/RT/Authen/ExternalAuth/.packlist [new file with mode: 0644]
local/man/auto/RT/Extension/Drafts/.packlist [new file with mode: 0644]
local/man/man3/RT::Authen::ExternalAuth.3pm [new file with mode: 0644]
local/man/man3/RT::Extension::Drafts.3pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.mikal-fixx/etc/RT_SiteConfig.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.mikal-fixx/html/Callbacks/ExternalAuth/Elements/Header/Head [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.mikal-fixx/html/Callbacks/ExternalAuth/autohandler/Auth [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.mikal-fixx/html/Callbacks/ExternalAuth/autohandler/Session [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.mikal-fixx/html/Elements/DoAuth [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.mikal-fixx/lib/RT/Authen/ExternalAuth.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.mikal-fixx/lib/RT/Authen/ExternalAuth/DBI.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.mikal-fixx/lib/RT/Authen/ExternalAuth/DBI/Cookie.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.mikal-fixx/lib/RT/Authen/ExternalAuth/LDAP.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.mikal-fixx/lib/perllocal.pod [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.multiple-emails/etc/RT_SiteConfig.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.multiple-emails/html/Callbacks/ExternalAuth/Elements/Header/Head [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.multiple-emails/html/Callbacks/ExternalAuth/autohandler/Auth [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.multiple-emails/html/Callbacks/ExternalAuth/autohandler/Session [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.multiple-emails/html/Elements/DoAuth [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.multiple-emails/lib/RT/Authen/ExternalAuth.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.multiple-emails/lib/RT/Authen/ExternalAuth/DBI.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.multiple-emails/lib/RT/Authen/ExternalAuth/DBI/Cookie.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.multiple-emails/lib/RT/Authen/ExternalAuth/LDAP.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.multiple-emails/lib/RT/Authen/ExternalAuth/Test.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth.multiple-emails/lib/perllocal.pod [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth/etc/RT_SiteConfig.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth/html/Callbacks/ExternalAuth/Elements/Header/Head [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth/html/Callbacks/ExternalAuth/autohandler/Auth [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth/html/Callbacks/ExternalAuth/autohandler/Session [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth/html/Elements/DoAuth [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth/DBI.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth/DBI/Cookie.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth/LDAP.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth/lib/RT/Authen/ExternalAuth/Test.pm [new file with mode: 0644]
local/plugins/RT-Authen-ExternalAuth/lib/perllocal.pod [new file with mode: 0644]
local/plugins/RT-Extension-Drafts/html/Callbacks/Drafts/Ticket/Display.html/BeforeDisplay [new file with mode: 0644]
local/plugins/RT-Extension-Drafts/html/Callbacks/Drafts/Ticket/Update.html/AfterMessageBox [new file with mode: 0644]
local/plugins/RT-Extension-Drafts/html/Callbacks/Drafts/Ticket/Update.html/Initial [new file with mode: 0644]
local/plugins/RT-Extension-Drafts/lib/RT/Extension/Drafts.pm [new file with mode: 0644]
local/plugins/RT-Extension-Drafts/lib/perllocal.pod [new file with mode: 0644]
local/plugins/RT-Extension-Drafts/po/fr.po [new file with mode: 0644]
sbin/rt-attributes-viewer [new file with mode: 0755]
sbin/rt-clean-sessions [new file with mode: 0755]
sbin/rt-dump-metadata [new file with mode: 0755]
sbin/rt-email-dashboards [new file with mode: 0755]
sbin/rt-email-digest [new file with mode: 0755]
sbin/rt-email-group-admin [new file with mode: 0755]
sbin/rt-fulltext-indexer [new file with mode: 0755]
sbin/rt-preferences-viewer [new file with mode: 0755]
sbin/rt-server [new file with mode: 0755]
sbin/rt-server.fcgi [new file with mode: 0755]
sbin/rt-session-viewer [new file with mode: 0755]
sbin/rt-setup-database [new file with mode: 0755]
sbin/rt-setup-fulltext-index [new file with mode: 0755]
sbin/rt-shredder [new file with mode: 0755]
sbin/rt-test-dependencies [new file with mode: 0755]
sbin/rt-validator [new file with mode: 0755]
sbin/standalone_httpd [new file with mode: 0755]
share/doc/README [new file with mode: 0644]
share/fonts/Droid.README [new file with mode: 0644]
share/fonts/DroidSans.ttf [new file with mode: 0644]
share/fonts/DroidSansFallback.ttf [new file with mode: 0644]
share/html/Admin/Articles/Classes/CustomFields.html [new file with mode: 0644]
share/html/Admin/Articles/Classes/GroupRights.html [new file with mode: 0644]
share/html/Admin/Articles/Classes/Modify.html [new file with mode: 0644]
share/html/Admin/Articles/Classes/Objects.html [new file with mode: 0644]
share/html/Admin/Articles/Classes/Topics.html [new file with mode: 0644]
share/html/Admin/Articles/Classes/UserRights.html [new file with mode: 0644]
share/html/Admin/Articles/Classes/index.html [new file with mode: 0644]
share/html/Admin/Articles/Elements/Topics [new file with mode: 0644]
share/html/Admin/Articles/index.html [new file with mode: 0644]
share/html/Admin/CustomFields/GroupRights.html [new file with mode: 0644]
share/html/Admin/CustomFields/Modify.html [new file with mode: 0644]
share/html/Admin/CustomFields/Objects.html [new file with mode: 0644]
share/html/Admin/CustomFields/UserRights.html [new file with mode: 0644]
share/html/Admin/CustomFields/index.html [new file with mode: 0644]
share/html/Admin/Elements/AddCustomFieldValue [new file with mode: 0644]
share/html/Admin/Elements/ConfigureMyRT [new file with mode: 0644]
share/html/Admin/Elements/CreateUserCalled [new file with mode: 0644]
share/html/Admin/Elements/EditCustomField [new file with mode: 0644]
share/html/Admin/Elements/EditCustomFieldValues [new file with mode: 0644]
share/html/Admin/Elements/EditCustomFieldValuesSource [new file with mode: 0644]
share/html/Admin/Elements/EditCustomFields [new file with mode: 0644]
share/html/Admin/Elements/EditQueueWatcherGroup [new file with mode: 0644]
share/html/Admin/Elements/EditQueueWatchers [new file with mode: 0644]
share/html/Admin/Elements/EditRights [new file with mode: 0644]
share/html/Admin/Elements/EditRightsCategoryTabs [new file with mode: 0644]
share/html/Admin/Elements/EditScrip [new file with mode: 0644]
share/html/Admin/Elements/EditScrips [new file with mode: 0644]
share/html/Admin/Elements/EditTemplates [new file with mode: 0644]
share/html/Admin/Elements/EditUserComments [new file with mode: 0644]
share/html/Admin/Elements/Header [new file with mode: 0644]
share/html/Admin/Elements/ListGlobalCustomFields [new file with mode: 0644]
share/html/Admin/Elements/ListGlobalScrips [new file with mode: 0644]
share/html/Admin/Elements/ModifyTemplate [new file with mode: 0644]
share/html/Admin/Elements/PickCustomFields [new file with mode: 0644]
share/html/Admin/Elements/PickObjects [new file with mode: 0644]
share/html/Admin/Elements/Portal [new file with mode: 0644]
share/html/Admin/Elements/QueueRightsForUser [new file with mode: 0644]
share/html/Admin/Elements/SelectCustomField [new file with mode: 0644]
share/html/Admin/Elements/SelectCustomFieldLookupType [new file with mode: 0644]
share/html/Admin/Elements/SelectCustomFieldRenderType [new file with mode: 0644]
share/html/Admin/Elements/SelectCustomFieldType [new file with mode: 0644]
share/html/Admin/Elements/SelectGroups [new file with mode: 0644]
share/html/Admin/Elements/SelectModifyGroup [new file with mode: 0644]
share/html/Admin/Elements/SelectModifyQueue [new file with mode: 0644]
share/html/Admin/Elements/SelectModifyUser [new file with mode: 0644]
share/html/Admin/Elements/SelectNewGroupMembers [new file with mode: 0644]
share/html/Admin/Elements/SelectRights [new file with mode: 0644]
share/html/Admin/Elements/SelectScrip [new file with mode: 0644]
share/html/Admin/Elements/SelectScripAction [new file with mode: 0644]
share/html/Admin/Elements/SelectScripCondition [new file with mode: 0644]
share/html/Admin/Elements/SelectSingleOrMultiple [new file with mode: 0644]
share/html/Admin/Elements/SelectStage [new file with mode: 0644]
share/html/Admin/Elements/SelectTemplate [new file with mode: 0644]
share/html/Admin/Elements/SelectUsers [new file with mode: 0644]
share/html/Admin/Elements/ShowKeyInfo [new file with mode: 0644]
share/html/Admin/Global/CustomFields/Class-Article.html [new file with mode: 0644]
share/html/Admin/Global/CustomFields/Groups.html [new file with mode: 0644]
share/html/Admin/Global/CustomFields/Queue-Tickets.html [new file with mode: 0644]
share/html/Admin/Global/CustomFields/Queue-Transactions.html [new file with mode: 0644]
share/html/Admin/Global/CustomFields/Queues.html [new file with mode: 0644]
share/html/Admin/Global/CustomFields/Users.html [new file with mode: 0644]
share/html/Admin/Global/CustomFields/index.html [new file with mode: 0644]
share/html/Admin/Global/GroupRights.html [new file with mode: 0644]
share/html/Admin/Global/MyRT.html [new file with mode: 0644]
share/html/Admin/Global/Scrip.html [new file with mode: 0644]
share/html/Admin/Global/Scrips.html [new file with mode: 0644]
share/html/Admin/Global/Template.html [new file with mode: 0644]
share/html/Admin/Global/Templates.html [new file with mode: 0644]
share/html/Admin/Global/Topics.html [new file with mode: 0644]
share/html/Admin/Global/UserRights.html [new file with mode: 0644]
share/html/Admin/Global/index.html [new file with mode: 0644]
share/html/Admin/Groups/GroupRights.html [new file with mode: 0644]
share/html/Admin/Groups/History.html [new file with mode: 0644]
share/html/Admin/Groups/Members.html [new file with mode: 0644]
share/html/Admin/Groups/Modify.html [new file with mode: 0644]
share/html/Admin/Groups/UserRights.html [new file with mode: 0644]
share/html/Admin/Groups/index.html [new file with mode: 0644]
share/html/Admin/Queues/CustomField.html [new file with mode: 0644]
share/html/Admin/Queues/CustomFields.html [new file with mode: 0644]
share/html/Admin/Queues/GroupRights.html [new file with mode: 0644]
share/html/Admin/Queues/History.html [new file with mode: 0644]
share/html/Admin/Queues/Modify.html [new file with mode: 0644]
share/html/Admin/Queues/People.html [new file with mode: 0644]
share/html/Admin/Queues/Scrip.html [new file with mode: 0644]
share/html/Admin/Queues/Scrips.html [new file with mode: 0644]
share/html/Admin/Queues/Template.html [new file with mode: 0644]
share/html/Admin/Queues/Templates.html [new file with mode: 0644]
share/html/Admin/Queues/UserRights.html [new file with mode: 0644]
share/html/Admin/Queues/index.html [new file with mode: 0644]
share/html/Admin/Tools/Configuration.html [new file with mode: 0644]
share/html/Admin/Tools/Queries.html [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Dumps/dhandler [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Elements/DumpFileLink [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Elements/Error/NoRights [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Elements/Error/NoStorage [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Elements/Object/RT--User [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Elements/ObjectCheckBox [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Elements/PluginArguments [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Elements/PluginHelp [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Elements/SelectObjects [new file with mode: 0644]
share/html/Admin/Tools/Shredder/Elements/SelectPlugin [new file with mode: 0644]
share/html/Admin/Tools/Shredder/autohandler [new file with mode: 0644]
share/html/Admin/Tools/Shredder/index.html [new file with mode: 0644]
share/html/Admin/Tools/Theme.html [new file with mode: 0644]
share/html/Admin/Tools/index.html [new file with mode: 0644]
share/html/Admin/Users/CustomFields.html [new file with mode: 0644]
share/html/Admin/Users/GnuPG.html [new file with mode: 0644]
share/html/Admin/Users/History.html [new file with mode: 0644]
share/html/Admin/Users/Memberships.html [new file with mode: 0644]
share/html/Admin/Users/Modify.html [new file with mode: 0644]
share/html/Admin/Users/MyRT.html [new file with mode: 0644]
share/html/Admin/Users/index.html [new file with mode: 0644]
share/html/Admin/autohandler [new file with mode: 0644]
share/html/Admin/index.html [new file with mode: 0644]
share/html/Approvals/Display.html [new file with mode: 0644]
share/html/Approvals/Elements/Approve [new file with mode: 0644]
share/html/Approvals/Elements/PendingMyApproval [new file with mode: 0644]
share/html/Approvals/Elements/ShowDependency [new file with mode: 0644]
share/html/Approvals/autohandler [new file with mode: 0644]
share/html/Approvals/index.html [new file with mode: 0644]
share/html/Articles/Article/Delete.html [new file with mode: 0644]
share/html/Articles/Article/Display.html [new file with mode: 0644]
share/html/Articles/Article/Edit.html [new file with mode: 0644]
share/html/Articles/Article/Elements/EditBasics [new file with mode: 0644]
share/html/Articles/Article/Elements/EditCustomFields [new file with mode: 0644]
share/html/Articles/Article/Elements/EditLinks [new file with mode: 0644]
share/html/Articles/Article/Elements/EditTopics [new file with mode: 0644]
share/html/Articles/Article/Elements/LinkEntryInstructions [new file with mode: 0644]
share/html/Articles/Article/Elements/Preformatted [new file with mode: 0644]
share/html/Articles/Article/Elements/SearchByCustomField [new file with mode: 0644]
share/html/Articles/Article/Elements/SelectSavedSearches [new file with mode: 0644]
share/html/Articles/Article/Elements/SelectSearchPrivacy [new file with mode: 0644]
share/html/Articles/Article/Elements/ShowHistory [new file with mode: 0644]
share/html/Articles/Article/Elements/ShowLinks [new file with mode: 0644]
share/html/Articles/Article/Elements/ShowSavedSearches [new file with mode: 0644]
share/html/Articles/Article/Elements/ShowSearchCriteria [new file with mode: 0644]
share/html/Articles/Article/Elements/ShowTopics [new file with mode: 0644]
share/html/Articles/Article/ExtractFromTicket.html [new file with mode: 0644]
share/html/Articles/Article/ExtractIntoClass.html [new file with mode: 0644]
share/html/Articles/Article/ExtractIntoTopic.html [new file with mode: 0644]
share/html/Articles/Article/History.html [new file with mode: 0644]
share/html/Articles/Article/PreCreate.html [new file with mode: 0644]
share/html/Articles/Article/Search.html [new file with mode: 0644]
share/html/Articles/Elements/BeforeMessageBox [new file with mode: 0644]
share/html/Articles/Elements/CheckSkipCreate [new file with mode: 0644]
share/html/Articles/Elements/CreateArticle [new file with mode: 0644]
share/html/Articles/Elements/GotoArticle [new file with mode: 0644]
share/html/Articles/Elements/Header [new file with mode: 0644]
share/html/Articles/Elements/IncludeArticle [new file with mode: 0644]
share/html/Articles/Elements/NewestArticles [new file with mode: 0644]
share/html/Articles/Elements/QuickSearch [new file with mode: 0644]
share/html/Articles/Elements/SelectClass [new file with mode: 0644]
share/html/Articles/Elements/ShowTopic [new file with mode: 0644]
share/html/Articles/Elements/ShowTopicLink [new file with mode: 0644]
share/html/Articles/Elements/UpdatedArticles [new file with mode: 0644]
share/html/Articles/Topics.html [new file with mode: 0644]
share/html/Articles/index.html [new file with mode: 0644]
share/html/Dashboards/Elements/DashboardsForObject [new file with mode: 0644]
share/html/Dashboards/Elements/Deleted [new file with mode: 0644]
share/html/Dashboards/Elements/HiddenSearches [new file with mode: 0644]
share/html/Dashboards/Elements/ListOfDashboards [new file with mode: 0644]
share/html/Dashboards/Elements/SelectPrivacy [new file with mode: 0644]
share/html/Dashboards/Elements/ShowDashboards [new file with mode: 0644]
share/html/Dashboards/Elements/ShowPortlet/component [new file with mode: 0644]
share/html/Dashboards/Elements/ShowPortlet/dashboard [new file with mode: 0644]
share/html/Dashboards/Elements/ShowPortlet/search [new file with mode: 0644]
share/html/Dashboards/Modify.html [new file with mode: 0644]
share/html/Dashboards/Queries.html [new file with mode: 0644]
share/html/Dashboards/Render.html [new file with mode: 0644]
share/html/Dashboards/Subscription.html [new file with mode: 0644]
share/html/Dashboards/dhandler [new file with mode: 0644]
share/html/Dashboards/index.html [new file with mode: 0644]
share/html/Download/CustomFieldValue/dhandler [new file with mode: 0644]
share/html/Elements/BevelBoxRaisedEnd [new file with mode: 0644]
share/html/Elements/BevelBoxRaisedStart [new file with mode: 0644]
share/html/Elements/CSRF [new file with mode: 0644]
share/html/Elements/Callback [new file with mode: 0644]
share/html/Elements/Checkbox [new file with mode: 0644]
share/html/Elements/CollectionAsTable/Header [new file with mode: 0644]
share/html/Elements/CollectionAsTable/ParseFormat [new file with mode: 0644]
share/html/Elements/CollectionAsTable/Row [new file with mode: 0644]
share/html/Elements/CollectionList [new file with mode: 0644]
share/html/Elements/CollectionListPaging [new file with mode: 0644]
share/html/Elements/ColumnMap [new file with mode: 0644]
share/html/Elements/CreateTicket [new file with mode: 0644]
share/html/Elements/Dashboards [new file with mode: 0644]
share/html/Elements/EditCustomField [new file with mode: 0644]
share/html/Elements/EditCustomFieldAutocomplete [new file with mode: 0644]
share/html/Elements/EditCustomFieldBinary [new file with mode: 0644]
share/html/Elements/EditCustomFieldCombobox [new file with mode: 0644]
share/html/Elements/EditCustomFieldDate [new file with mode: 0644]
share/html/Elements/EditCustomFieldDateTime [new file with mode: 0644]
share/html/Elements/EditCustomFieldFreeform [new file with mode: 0644]
share/html/Elements/EditCustomFieldIPAddress [new file with mode: 0644]
share/html/Elements/EditCustomFieldIPAddressRange [new file with mode: 0644]
share/html/Elements/EditCustomFieldImage [new file with mode: 0644]
share/html/Elements/EditCustomFieldSelect [new file with mode: 0644]
share/html/Elements/EditCustomFieldText [new file with mode: 0644]
share/html/Elements/EditCustomFieldWikitext [new file with mode: 0644]
share/html/Elements/EditLinks [new file with mode: 0644]
share/html/Elements/EditPassword [new file with mode: 0644]
share/html/Elements/EditTimeValue [new file with mode: 0644]
share/html/Elements/EmailInput [new file with mode: 0644]
share/html/Elements/Error [new file with mode: 0644]
share/html/Elements/Footer [new file with mode: 0644]
share/html/Elements/Framekiller [new file with mode: 0644]
share/html/Elements/GnuPG/KeyIssues [new file with mode: 0644]
share/html/Elements/GnuPG/SelectKeyForEncryption [new file with mode: 0644]
share/html/Elements/GnuPG/SelectKeyForSigning [new file with mode: 0644]
share/html/Elements/GnuPG/SignEncryptWidget [new file with mode: 0644]
share/html/Elements/GotoTicket [new file with mode: 0644]
share/html/Elements/Header [new file with mode: 0644]
share/html/Elements/HeaderJavascript [new file with mode: 0644]
share/html/Elements/ListActions [new file with mode: 0644]
share/html/Elements/ListMenu [new file with mode: 0644]
share/html/Elements/Login [new file with mode: 0644]
share/html/Elements/Logo [new file with mode: 0644]
share/html/Elements/MakeClicky [new file with mode: 0644]
share/html/Elements/Menu [new file with mode: 0644]
share/html/Elements/MessageBox [new file with mode: 0644]
share/html/Elements/MyAdminQueues [new file with mode: 0644]
share/html/Elements/MyRT [new file with mode: 0644]
share/html/Elements/MyReminders [new file with mode: 0644]
share/html/Elements/MyRequests [new file with mode: 0644]
share/html/Elements/MySupportQueues [new file with mode: 0644]
share/html/Elements/MyTickets [new file with mode: 0644]
share/html/Elements/PageLayout [new file with mode: 0644]
share/html/Elements/PersonalQuickbar [new file with mode: 0644]
share/html/Elements/QueriesAsComment [new file with mode: 0644]
share/html/Elements/QueryString [new file with mode: 0644]
share/html/Elements/QueueSummaryByLifecycle [new file with mode: 0644]
share/html/Elements/QueueSummaryByStatus [new file with mode: 0644]
share/html/Elements/QuickCreate [new file with mode: 0644]
share/html/Elements/Quicksearch [new file with mode: 0644]
share/html/Elements/RT__Article/ColumnMap [new file with mode: 0644]
share/html/Elements/RT__Class/ColumnMap [new file with mode: 0644]
share/html/Elements/RT__CustomField/ColumnMap [new file with mode: 0644]
share/html/Elements/RT__Dashboard/ColumnMap [new file with mode: 0644]
share/html/Elements/RT__Group/ColumnMap [new file with mode: 0644]
share/html/Elements/RT__Queue/ColumnMap [new file with mode: 0644]
share/html/Elements/RT__SavedSearch/ColumnMap [new file with mode: 0644]
share/html/Elements/RT__Scrip/ColumnMap [new file with mode: 0644]
share/html/Elements/RT__Template/ColumnMap [new file with mode: 0644]
share/html/Elements/RT__Ticket/ColumnMap [new file with mode: 0644]
share/html/Elements/RT__User/ColumnMap [new file with mode: 0644]
share/html/Elements/Refresh [new file with mode: 0644]
share/html/Elements/RefreshHomepage [new file with mode: 0644]
share/html/Elements/SavedSearches [new file with mode: 0644]
share/html/Elements/ScrubHTML [new file with mode: 0644]
share/html/Elements/Section [new file with mode: 0644]
share/html/Elements/SelectAttachmentField [new file with mode: 0644]
share/html/Elements/SelectBoolean [new file with mode: 0644]
share/html/Elements/SelectCustomFieldOperator [new file with mode: 0644]
share/html/Elements/SelectCustomFieldValue [new file with mode: 0644]
share/html/Elements/SelectDate [new file with mode: 0644]
share/html/Elements/SelectDateRelation [new file with mode: 0644]
share/html/Elements/SelectDateType [new file with mode: 0644]
share/html/Elements/SelectEqualityOperator [new file with mode: 0644]
share/html/Elements/SelectGroups [new file with mode: 0644]
share/html/Elements/SelectIPRelation [new file with mode: 0644]
share/html/Elements/SelectLang [new file with mode: 0644]
share/html/Elements/SelectLinkType [new file with mode: 0644]
share/html/Elements/SelectMatch [new file with mode: 0644]
share/html/Elements/SelectNewTicketQueue [new file with mode: 0644]
share/html/Elements/SelectOwner [new file with mode: 0644]
share/html/Elements/SelectOwnerAutocomplete [new file with mode: 0644]
share/html/Elements/SelectOwnerDropdown [new file with mode: 0644]
share/html/Elements/SelectPriority [new file with mode: 0644]
share/html/Elements/SelectQueue [new file with mode: 0644]
share/html/Elements/SelectResultsPerPage [new file with mode: 0644]
share/html/Elements/SelectSortOrder [new file with mode: 0644]
share/html/Elements/SelectStatus [new file with mode: 0644]
share/html/Elements/SelectTicketSortBy [new file with mode: 0644]
share/html/Elements/SelectTicketTypes [new file with mode: 0644]
share/html/Elements/SelectTimeUnits [new file with mode: 0644]
share/html/Elements/SelectTimezone [new file with mode: 0644]
share/html/Elements/SelectUsers [new file with mode: 0644]
share/html/Elements/SelectWatcherType [new file with mode: 0644]
share/html/Elements/SetupSessionCookie [new file with mode: 0644]
share/html/Elements/ShowCustomFieldBinary [new file with mode: 0644]
share/html/Elements/ShowCustomFieldDate [new file with mode: 0644]
share/html/Elements/ShowCustomFieldDateTime [new file with mode: 0644]
share/html/Elements/ShowCustomFieldImage [new file with mode: 0644]
share/html/Elements/ShowCustomFieldText [new file with mode: 0644]
share/html/Elements/ShowCustomFieldWikitext [new file with mode: 0644]
share/html/Elements/ShowCustomFields [new file with mode: 0644]
share/html/Elements/ShowLink [new file with mode: 0644]
share/html/Elements/ShowLinks [new file with mode: 0644]
share/html/Elements/ShowMemberships [new file with mode: 0644]
share/html/Elements/ShowRelationLabel [new file with mode: 0644]
share/html/Elements/ShowReminders [new file with mode: 0644]
share/html/Elements/ShowSearch [new file with mode: 0644]
share/html/Elements/ShowUser [new file with mode: 0644]
share/html/Elements/ShowUserConcise [new file with mode: 0644]
share/html/Elements/ShowUserEmailFrequency [new file with mode: 0644]
share/html/Elements/ShowUserVerbose [new file with mode: 0644]
share/html/Elements/SimpleSearch [new file with mode: 0644]
share/html/Elements/Submit [new file with mode: 0644]
share/html/Elements/Tabs [new file with mode: 0644]
share/html/Elements/TicketList [new file with mode: 0644]
share/html/Elements/TitleBox [new file with mode: 0644]
share/html/Elements/TitleBoxEnd [new file with mode: 0644]
share/html/Elements/TitleBoxStart [new file with mode: 0644]
share/html/Elements/ValidateCustomFields [new file with mode: 0644]
share/html/Elements/WidgetBar [new file with mode: 0644]
share/html/Helpers/Autocomplete/CustomFieldValues [new file with mode: 0644]
share/html/Helpers/Autocomplete/Groups [new file with mode: 0644]
share/html/Helpers/Autocomplete/Owners [new file with mode: 0644]
share/html/Helpers/Autocomplete/Users [new file with mode: 0644]
share/html/Helpers/TicketHistory [new file with mode: 0644]
share/html/Helpers/Toggle/ShowRequestor [new file with mode: 0644]
share/html/Helpers/Toggle/TicketBookmark [new file with mode: 0644]
share/html/Install/Basics.html [new file with mode: 0644]
share/html/Install/DatabaseDetails.html [new file with mode: 0644]
share/html/Install/DatabaseType.html [new file with mode: 0644]
share/html/Install/Elements/Errors [new file with mode: 0644]
share/html/Install/Elements/Wrapper [new file with mode: 0644]
share/html/Install/Finish.html [new file with mode: 0644]
share/html/Install/Global.html [new file with mode: 0644]
share/html/Install/Initialize.html [new file with mode: 0644]
share/html/Install/Sendmail.html [new file with mode: 0644]
share/html/Install/autohandler [new file with mode: 0644]
share/html/Install/index.html [new file with mode: 0644]
share/html/NoAuth/Helpers/CustomLogo/dhandler [new file with mode: 0644]
share/html/NoAuth/Login.html [new file with mode: 0644]
share/html/NoAuth/Logout.html [new file with mode: 0644]
share/html/NoAuth/Reminder.html [new file with mode: 0644]
share/html/NoAuth/RichText/autohandler [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/LICENSE.html [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/adapters/jquery.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/ckeditor.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/config.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/contents.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/images/spacer.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/_languages.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/_translationstatus.txt [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/af.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/ar.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/bg.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/bn.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/bs.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/ca.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/cs.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/cy.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/da.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/de.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/el.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/en-au.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/en-ca.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/en-gb.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/en.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/eo.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/es.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/et.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/eu.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/fa.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/fi.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/fo.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/fr-ca.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/fr.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/gl.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/gu.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/he.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/hi.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/hr.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/hu.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/is.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/it.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/ja.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/km.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/ko.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/lt.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/lv.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/mn.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/ms.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/nb.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/nl.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/no.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/pl.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/pt-br.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/pt.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/ro.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/ru.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/sk.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/sl.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/sr-latn.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/sr.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/sv.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/th.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/tr.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/uk.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/vi.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/zh-cn.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/lang/zh.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/en.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/he.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/about/dialogs/about.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/about/dialogs/logo_ckeditor.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/autogrow/plugin.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/clipboard/dialogs/paste.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/colordialog/dialogs/colordialog.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/dialog/dialogDefinition.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/div/dialogs/div.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/find/dialogs/find.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/flash/dialogs/flash.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/flash/images/placeholder.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/button.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/checkbox.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/form.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/hiddenfield.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/radio.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/select.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/textarea.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/textfield.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/forms/images/hiddenfield.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/iframedialog/plugin.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/image/dialogs/image.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/link/dialogs/anchor.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/link/dialogs/link.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/link/images/anchor.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/liststyle/dialogs/liststyle.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/pagebreak/images/pagebreak.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/pastefromword/filter/default.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/pastetext/dialogs/pastetext.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/scayt/dialogs/options.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/scayt/dialogs/toolbar.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/showblocks/images/block_address.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/showblocks/images/block_blockquote.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/showblocks/images/block_div.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/showblocks/images/block_h1.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/showblocks/images/block_h2.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/showblocks/images/block_h3.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/showblocks/images/block_h4.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/showblocks/images/block_h5.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/showblocks/images/block_h6.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/showblocks/images/block_p.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/showblocks/images/block_pre.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/dialogs/smiley.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/angel_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/angry_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/broken_heart.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/confused_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/cry_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/devil_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/embaressed_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/envelope.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/heart.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/kiss.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/lightbulb.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/omg_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/regular_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/sad_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/shades_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/teeth_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/thumbs_down.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/thumbs_up.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/tounge_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/smiley/images/wink_smile.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/specialchar/dialogs/specialchar.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/styles/styles/default.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/table/dialogs/table.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/tableresize/plugin.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/tabletools/dialogs/tableCell.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/templates/dialogs/templates.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/templates/templates/default.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/templates/templates/images/template1.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/templates/templates/images/template2.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/templates/templates/images/template3.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/uicolor/dialogs/uicolor.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/en.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/uicolor/plugin.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/uicolor/uicolor.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/assets/hue_bg.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/assets/picker_mask.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/assets/yui.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/yui.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/ciframe.html [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/tmpFrameset.html [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/wsc.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/wsc.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/dialog.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/editor.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/icons.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/icons_rtl.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/images/dialog_sides.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/images/dialog_sides.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/images/dialog_sides_rtl.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/images/mini.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/images/noimage.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/images/sprites.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/images/sprites_ie6.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/images/toolbar_start.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/skin.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/kama/templates.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/dialog.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/editor.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/icons.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/icons_rtl.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/images/dialog_sides.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/images/dialog_sides.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/images/dialog_sides_rtl.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/images/mini.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/images/noimage.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/images/sprites.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/images/sprites_ie6.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/skin.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/office2003/templates.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/dialog.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/editor.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/icons.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/icons_rtl.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/images/dialog_sides.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/images/dialog_sides.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/images/dialog_sides_rtl.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/images/mini.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/images/noimage.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/images/sprites.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/images/sprites_ie6.png [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/images/toolbar_start.gif [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/skin.js [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/skins/v2/templates.css [new file with mode: 0644]
share/html/NoAuth/RichText/ckeditor/themes/default/theme.js [new file with mode: 0644]
share/html/NoAuth/RichText/dhandler [new file with mode: 0644]
share/html/NoAuth/css/aileron/InHeader [new file with mode: 0644]
share/html/NoAuth/css/aileron/base.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/boxes.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/forms.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/images/dhandler [new file with mode: 0644]
share/html/NoAuth/css/aileron/images/source/background-gradient.png [new file with mode: 0644]
share/html/NoAuth/css/aileron/layout.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/login.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/main.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/misc.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/msie.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/msie6.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/nav.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/ticket-lists.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/ticket-search.css [new file with mode: 0644]
share/html/NoAuth/css/aileron/ticket.css [new file with mode: 0644]
share/html/NoAuth/css/autohandler [new file with mode: 0644]
share/html/NoAuth/css/ballard/InHeader [new file with mode: 0644]
share/html/NoAuth/css/ballard/base.css [new file with mode: 0644]
share/html/NoAuth/css/ballard/boxes.css [new file with mode: 0644]
share/html/NoAuth/css/ballard/images/dhandler [new file with mode: 0644]
share/html/NoAuth/css/ballard/images/source/background-gradient.png [new file with mode: 0644]
share/html/NoAuth/css/ballard/layout.css [new file with mode: 0644]
share/html/NoAuth/css/ballard/main.css [new file with mode: 0644]
share/html/NoAuth/css/ballard/misc.css [new file with mode: 0644]
share/html/NoAuth/css/ballard/msie.css [new file with mode: 0644]
share/html/NoAuth/css/ballard/msie6.css [new file with mode: 0644]
share/html/NoAuth/css/ballard/nav.css [new file with mode: 0644]
share/html/NoAuth/css/ballard/ticket-lists.css [new file with mode: 0644]
share/html/NoAuth/css/ballard/ticket-search.css [new file with mode: 0644]
share/html/NoAuth/css/ballard/ticket.css [new file with mode: 0644]
share/html/NoAuth/css/base/admin.css [new file with mode: 0644]
share/html/NoAuth/css/base/articles.css [new file with mode: 0644]
share/html/NoAuth/css/base/collection.css [new file with mode: 0644]
share/html/NoAuth/css/base/farbtastic.css [new file with mode: 0644]
share/html/NoAuth/css/base/forms.css [new file with mode: 0644]
share/html/NoAuth/css/base/history-folding.css [new file with mode: 0644]
share/html/NoAuth/css/base/jquery-ui.css [new file with mode: 0644]
share/html/NoAuth/css/base/jquery-ui.custom.modified.css [new file with mode: 0644]
share/html/NoAuth/css/base/login.css [new file with mode: 0644]
share/html/NoAuth/css/base/main.css [new file with mode: 0644]
share/html/NoAuth/css/base/misc.css [new file with mode: 0644]
share/html/NoAuth/css/base/nav.css [new file with mode: 0644]
share/html/NoAuth/css/base/portlets.css [new file with mode: 0644]
share/html/NoAuth/css/base/rights-editor.css [new file with mode: 0644]
share/html/NoAuth/css/base/superfish-navbar.css [new file with mode: 0644]
share/html/NoAuth/css/base/superfish-vertical.css [new file with mode: 0644]
share/html/NoAuth/css/base/superfish.css [new file with mode: 0644]
share/html/NoAuth/css/base/tablesorter.css [new file with mode: 0644]
share/html/NoAuth/css/base/theme-editor.css [new file with mode: 0644]
share/html/NoAuth/css/base/ticket-form.css [new file with mode: 0644]
share/html/NoAuth/css/base/ticket.css [new file with mode: 0644]
share/html/NoAuth/css/base/tools.css [new file with mode: 0644]
share/html/NoAuth/css/base/ui.timepickr.css [new file with mode: 0644]
share/html/NoAuth/css/base/ui.timepickr.custom.css [new file with mode: 0644]
share/html/NoAuth/css/base/yui-fonts.css [new file with mode: 0644]
share/html/NoAuth/css/dhandler [new file with mode: 0644]
share/html/NoAuth/css/images/arrows-ffffff.gif [new file with mode: 0644]
share/html/NoAuth/css/images/arrows-ffffff.png [new file with mode: 0644]
share/html/NoAuth/css/images/arrows-grey.gif [new file with mode: 0644]
share/html/NoAuth/css/images/arrows-grey.png [new file with mode: 0644]
share/html/NoAuth/css/images/shadow.gif [new file with mode: 0644]
share/html/NoAuth/css/images/shadow.png [new file with mode: 0644]
share/html/NoAuth/css/print.css [new file with mode: 0644]
share/html/NoAuth/css/web2/InHeader [new file with mode: 0644]
share/html/NoAuth/css/web2/base.css [new file with mode: 0644]
share/html/NoAuth/css/web2/boxes.css [new file with mode: 0644]
share/html/NoAuth/css/web2/images/dhandler [new file with mode: 0644]
share/html/NoAuth/css/web2/images/source/background-gradient.png [new file with mode: 0644]
share/html/NoAuth/css/web2/layout.css [new file with mode: 0644]
share/html/NoAuth/css/web2/main.css [new file with mode: 0644]
share/html/NoAuth/css/web2/misc.css [new file with mode: 0644]
share/html/NoAuth/css/web2/msie.css [new file with mode: 0644]
share/html/NoAuth/css/web2/msie6.css [new file with mode: 0644]
share/html/NoAuth/css/web2/nav.css [new file with mode: 0644]
share/html/NoAuth/css/web2/ticket-lists.css [new file with mode: 0644]
share/html/NoAuth/css/web2/ticket-search.css [new file with mode: 0644]
share/html/NoAuth/css/web2/ticket.css [new file with mode: 0644]
share/html/NoAuth/iCal/dhandler [new file with mode: 0644]
share/html/NoAuth/images/autohandler [new file with mode: 0644]
share/html/NoAuth/images/bpslogo.png [new file with mode: 0644]
share/html/NoAuth/images/css/cb-light.gif [new file with mode: 0644]
share/html/NoAuth/images/css/cb.gif [new file with mode: 0644]
share/html/NoAuth/images/css/cbr-b2g.gif [new file with mode: 0644]
share/html/NoAuth/images/css/cbr-b2lb.gif [new file with mode: 0644]
share/html/NoAuth/images/css/cbr-gray.gif [new file with mode: 0644]
share/html/NoAuth/images/css/cbr-trans.gif [new file with mode: 0644]
share/html/NoAuth/images/css/cbr.gif [new file with mode: 0644]
share/html/NoAuth/images/css/ct-light.gif [new file with mode: 0644]
share/html/NoAuth/images/css/ct.gif [new file with mode: 0644]
share/html/NoAuth/images/css/ctr-b2g.gif [new file with mode: 0644]
share/html/NoAuth/images/css/ctr-b2lb.gif [new file with mode: 0644]
share/html/NoAuth/images/css/ctr-gray.gif [new file with mode: 0644]
share/html/NoAuth/images/css/ctr-trans.gif [new file with mode: 0644]
share/html/NoAuth/images/css/ctr.gif [new file with mode: 0644]
share/html/NoAuth/images/css/dark-arrow-up.png [new file with mode: 0644]
share/html/NoAuth/images/css/dark-arrow.png [new file with mode: 0644]
share/html/NoAuth/images/css/fieldbg-autocomplete.gif [new file with mode: 0644]
share/html/NoAuth/images/css/light-arrow-up.png [new file with mode: 0644]
share/html/NoAuth/images/css/light-arrow.png [new file with mode: 0644]
share/html/NoAuth/images/css/rolldown-arrow.gif [new file with mode: 0644]
share/html/NoAuth/images/css/rolldown-arrow.png [new file with mode: 0644]
share/html/NoAuth/images/css/rollup-arrow.gif [new file with mode: 0644]
share/html/NoAuth/images/empty_star.gif [new file with mode: 0644]
share/html/NoAuth/images/farbtastic/marker.png [new file with mode: 0644]
share/html/NoAuth/images/farbtastic/mask.png [new file with mode: 0644]
share/html/NoAuth/images/farbtastic/wheel.png [new file with mode: 0644]
share/html/NoAuth/images/favicon.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-anim_basic_16x16.gif [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_diagonals-thick_18_b81900_40x40.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_diagonals-thick_20_666666_40x40.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_flat_0_aaaaaa_40x100.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_flat_10_000000_40x100.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_flat_75_ffffff_40x100.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_glass_100_f6f6f6_1x400.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_glass_100_fdf5ce_1x400.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_glass_55_fbf9ee_1x400.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_glass_65_ffffff_1x400.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_glass_75_dadada_1x400.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_glass_75_e6e6e6_1x400.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_glass_95_fef1ec_1x400.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_gloss-wave_35_f6a828_500x100.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_highlight-soft_100_eeeeee_1x100.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_highlight-soft_75_cccccc_1x100.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-bg_highlight-soft_75_ffe45c_1x100.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-icons_222222_256x240.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-icons_228ef1_256x240.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-icons_2e83ff_256x240.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-icons_4488cc_256x240.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-icons_454545_256x240.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-icons_888888_256x240.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-icons_cd0a0a_256x240.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-icons_ef8c08_256x240.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-icons_ffd27a_256x240.png [new file with mode: 0644]
share/html/NoAuth/images/jquery_ui/ui-icons_ffffff_256x240.png [new file with mode: 0644]
share/html/NoAuth/images/star.gif [new file with mode: 0644]
share/html/NoAuth/images/tablesorter/asc.gif [new file with mode: 0644]
share/html/NoAuth/images/tablesorter/bg.gif [new file with mode: 0644]
share/html/NoAuth/images/tablesorter/desc.gif [new file with mode: 0644]
share/html/NoAuth/images/test.png [new file with mode: 0644]
share/html/NoAuth/js/IE7/IE7.js [new file with mode: 0644]
share/html/NoAuth/js/IE7/IE8.js [new file with mode: 0644]
share/html/NoAuth/js/IE7/blank.gif [new file with mode: 0644]
share/html/NoAuth/js/IE7/ie7-recalc.js [new file with mode: 0644]
share/html/NoAuth/js/IE7/ie7-squish.js [new file with mode: 0644]
share/html/NoAuth/js/autohandler [new file with mode: 0644]
share/html/NoAuth/js/cascaded.js [new file with mode: 0644]
share/html/NoAuth/js/class.js [new file with mode: 0644]
share/html/NoAuth/js/combobox.js [new file with mode: 0644]
share/html/NoAuth/js/dhandler [new file with mode: 0644]
share/html/NoAuth/js/farbtastic.js [new file with mode: 0644]
share/html/NoAuth/js/history-folding.js [new file with mode: 0644]
share/html/NoAuth/js/jquery-1.4.2.min.js [new file with mode: 0644]
share/html/NoAuth/js/jquery-ui-1.8.4.custom.min.js [new file with mode: 0644]
share/html/NoAuth/js/jquery-ui-patch-datepicker.js [new file with mode: 0644]
share/html/NoAuth/js/jquery.event.hover-1.0.js [new file with mode: 0644]
share/html/NoAuth/js/jquery.supposition.js [new file with mode: 0644]
share/html/NoAuth/js/jquery.tablesorter.min.js [new file with mode: 0644]
share/html/NoAuth/js/jquery_noconflict.js [new file with mode: 0644]
share/html/NoAuth/js/late.js [new file with mode: 0644]
share/html/NoAuth/js/list.js [new file with mode: 0644]
share/html/NoAuth/js/superfish.js [new file with mode: 0644]
share/html/NoAuth/js/supersubs.js [new file with mode: 0644]
share/html/NoAuth/js/titlebox-state.js [new file with mode: 0644]
share/html/NoAuth/js/ui.timepickr.js [new file with mode: 0644]
share/html/NoAuth/js/userautocomplete.js [new file with mode: 0644]
share/html/NoAuth/js/util.js [new file with mode: 0644]
share/html/NoAuth/rss/dhandler [new file with mode: 0644]
share/html/Prefs/MyRT.html [new file with mode: 0644]
share/html/Prefs/Other.html [new file with mode: 0644]
share/html/Prefs/Quicksearch.html [new file with mode: 0644]
share/html/Prefs/Search.html [new file with mode: 0644]
share/html/Prefs/SearchOptions.html [new file with mode: 0644]
share/html/REST/1.0/Forms/attachment/default [new file with mode: 0644]
share/html/REST/1.0/Forms/group/customfields [new file with mode: 0644]
share/html/REST/1.0/Forms/group/default [new file with mode: 0644]
share/html/REST/1.0/Forms/group/ns [new file with mode: 0644]
share/html/REST/1.0/Forms/queue/customfields [new file with mode: 0644]
share/html/REST/1.0/Forms/queue/default [new file with mode: 0644]
share/html/REST/1.0/Forms/queue/ns [new file with mode: 0644]
share/html/REST/1.0/Forms/queue/ticketcustomfields [new file with mode: 0644]
share/html/REST/1.0/Forms/ticket/attachments [new file with mode: 0644]
share/html/REST/1.0/Forms/ticket/comment [new file with mode: 0644]
share/html/REST/1.0/Forms/ticket/default [new file with mode: 0644]
share/html/REST/1.0/Forms/ticket/history [new file with mode: 0644]
share/html/REST/1.0/Forms/ticket/links [new file with mode: 0644]
share/html/REST/1.0/Forms/ticket/merge [new file with mode: 0644]
share/html/REST/1.0/Forms/ticket/take [new file with mode: 0644]
share/html/REST/1.0/Forms/transaction/default [new file with mode: 0644]
share/html/REST/1.0/Forms/user/default [new file with mode: 0644]
share/html/REST/1.0/Forms/user/ns [new file with mode: 0644]
share/html/REST/1.0/NoAuth/mail-gateway [new file with mode: 0644]
share/html/REST/1.0/autohandler [new file with mode: 0644]
share/html/REST/1.0/dhandler [new file with mode: 0644]
share/html/REST/1.0/logout [new file with mode: 0644]
share/html/REST/1.0/search/dhandler [new file with mode: 0644]
share/html/REST/1.0/search/ticket [new file with mode: 0644]
share/html/REST/1.0/ticket/comment [new file with mode: 0644]
share/html/REST/1.0/ticket/link [new file with mode: 0644]
share/html/REST/1.0/ticket/merge [new file with mode: 0644]
share/html/Search/Article.html [new file with mode: 0644]
share/html/Search/Build.html [new file with mode: 0644]
share/html/Search/Bulk.html [new file with mode: 0644]
share/html/Search/Chart [new file with mode: 0644]
share/html/Search/Chart.html [new file with mode: 0644]
share/html/Search/Edit.html [new file with mode: 0644]
share/html/Search/Elements/Article [new file with mode: 0644]
share/html/Search/Elements/BuildFormatString [new file with mode: 0644]
share/html/Search/Elements/Chart [new file with mode: 0644]
share/html/Search/Elements/ConditionRow [new file with mode: 0644]
share/html/Search/Elements/DisplayOptions [new file with mode: 0644]
share/html/Search/Elements/EditFormat [new file with mode: 0644]
share/html/Search/Elements/EditQuery [new file with mode: 0644]
share/html/Search/Elements/EditSearches [new file with mode: 0644]
share/html/Search/Elements/EditSort [new file with mode: 0644]
share/html/Search/Elements/Graph [new file with mode: 0644]
share/html/Search/Elements/NewListActions [new file with mode: 0644]
share/html/Search/Elements/PickBasics [new file with mode: 0644]
share/html/Search/Elements/PickCFs [new file with mode: 0644]
share/html/Search/Elements/PickCriteria [new file with mode: 0644]
share/html/Search/Elements/ResultsRSSView [new file with mode: 0644]
share/html/Search/Elements/SearchPrivacy [new file with mode: 0644]
share/html/Search/Elements/SearchesForObject [new file with mode: 0644]
share/html/Search/Elements/SelectAndOr [new file with mode: 0644]
share/html/Search/Elements/SelectChartType [new file with mode: 0644]
share/html/Search/Elements/SelectGroup [new file with mode: 0644]
share/html/Search/Elements/SelectGroupBy [new file with mode: 0644]
share/html/Search/Elements/SelectLinks [new file with mode: 0644]
share/html/Search/Elements/SelectPersonType [new file with mode: 0644]
share/html/Search/Elements/SelectSearchObject [new file with mode: 0644]
share/html/Search/Elements/SelectSearchesForObjects [new file with mode: 0644]
share/html/Search/Graph.html [new file with mode: 0644]
share/html/Search/Results.html [new file with mode: 0644]
share/html/Search/Results.rdf [new file with mode: 0644]
share/html/Search/Results.tsv [new file with mode: 0644]
share/html/Search/Simple.html [new file with mode: 0644]
share/html/SelfService/Article/Display.html [new file with mode: 0644]
share/html/SelfService/Article/Search.html [new file with mode: 0644]
share/html/SelfService/Article/autohandler [new file with mode: 0644]
share/html/SelfService/Attachment/dhandler [new file with mode: 0644]
share/html/SelfService/Closed.html [new file with mode: 0644]
share/html/SelfService/Create.html [new file with mode: 0644]
share/html/SelfService/CreateTicketInQueue.html [new file with mode: 0644]
share/html/SelfService/Display.html [new file with mode: 0644]
share/html/SelfService/Elements/GotoTicket [new file with mode: 0644]
share/html/SelfService/Elements/Header [new file with mode: 0644]
share/html/SelfService/Elements/MyRequests [new file with mode: 0644]
share/html/SelfService/Elements/SearchArticle [new file with mode: 0644]
share/html/SelfService/Error.html [new file with mode: 0644]
share/html/SelfService/Prefs.html [new file with mode: 0644]
share/html/SelfService/Update.html [new file with mode: 0644]
share/html/SelfService/index.html [new file with mode: 0644]
share/html/Ticket/Attachment/WithHeaders/dhandler [new file with mode: 0644]
share/html/Ticket/Attachment/dhandler [new file with mode: 0644]
share/html/Ticket/Create.html [new file with mode: 0644]
share/html/Ticket/Display.html [new file with mode: 0644]
share/html/Ticket/Elements/AddAttachments [new file with mode: 0644]
share/html/Ticket/Elements/AddWatchers [new file with mode: 0644]
share/html/Ticket/Elements/Bookmark [new file with mode: 0644]
share/html/Ticket/Elements/BulkLinks [new file with mode: 0644]
share/html/Ticket/Elements/ClickToShowHistory [new file with mode: 0644]
share/html/Ticket/Elements/EditBasics [new file with mode: 0644]
share/html/Ticket/Elements/EditCustomFields [new file with mode: 0644]
share/html/Ticket/Elements/EditDates [new file with mode: 0644]
share/html/Ticket/Elements/EditPeople [new file with mode: 0644]
share/html/Ticket/Elements/EditTransactionCustomFields [new file with mode: 0644]
share/html/Ticket/Elements/EditWatchers [new file with mode: 0644]
share/html/Ticket/Elements/FindAttachments [new file with mode: 0644]
share/html/Ticket/Elements/FindTransactions [new file with mode: 0644]
share/html/Ticket/Elements/FoldStanzaJS [new file with mode: 0644]
share/html/Ticket/Elements/LoadTextAttachments [new file with mode: 0644]
share/html/Ticket/Elements/PreviewScrips [new file with mode: 0644]
share/html/Ticket/Elements/Reminders [new file with mode: 0644]
share/html/Ticket/Elements/ShowAttachments [new file with mode: 0644]
share/html/Ticket/Elements/ShowBasics [new file with mode: 0644]
share/html/Ticket/Elements/ShowCustomFields [new file with mode: 0644]
share/html/Ticket/Elements/ShowDates [new file with mode: 0644]
share/html/Ticket/Elements/ShowDependencies [new file with mode: 0644]
share/html/Ticket/Elements/ShowGnuPGStatus [new file with mode: 0644]
share/html/Ticket/Elements/ShowGroupMembers [new file with mode: 0644]
share/html/Ticket/Elements/ShowHistory [new file with mode: 0644]
share/html/Ticket/Elements/ShowMembers [new file with mode: 0644]
share/html/Ticket/Elements/ShowMessageHeaders [new file with mode: 0644]
share/html/Ticket/Elements/ShowMessageStanza [new file with mode: 0644]
share/html/Ticket/Elements/ShowParents [new file with mode: 0644]
share/html/Ticket/Elements/ShowPeople [new file with mode: 0644]
share/html/Ticket/Elements/ShowPriority [new file with mode: 0644]
share/html/Ticket/Elements/ShowQueue [new file with mode: 0644]
share/html/Ticket/Elements/ShowRequestor [new file with mode: 0644]
share/html/Ticket/Elements/ShowRequestorExtraInfo [new file with mode: 0644]
share/html/Ticket/Elements/ShowRequestorTickets [new file with mode: 0644]
share/html/Ticket/Elements/ShowRequestorTicketsActive [new file with mode: 0644]
share/html/Ticket/Elements/ShowRequestorTicketsAll [new file with mode: 0644]
share/html/Ticket/Elements/ShowRequestorTicketsInactive [new file with mode: 0644]
share/html/Ticket/Elements/ShowSimplifiedRecipients [new file with mode: 0644]
share/html/Ticket/Elements/ShowSummary [new file with mode: 0644]
share/html/Ticket/Elements/ShowTime [new file with mode: 0644]
share/html/Ticket/Elements/ShowTransaction [new file with mode: 0644]
share/html/Ticket/Elements/ShowTransactionAttachments [new file with mode: 0644]
share/html/Ticket/Elements/ShowUpdateStatus [new file with mode: 0644]
share/html/Ticket/Elements/ShowUserEntry [new file with mode: 0644]
share/html/Ticket/Elements/UpdateCc [new file with mode: 0644]
share/html/Ticket/Forward.html [new file with mode: 0644]
share/html/Ticket/GnuPG.html [new file with mode: 0644]
share/html/Ticket/Graphs/Elements/EditGraphProperties [new file with mode: 0644]
share/html/Ticket/Graphs/Elements/ShowGraph [new file with mode: 0644]
share/html/Ticket/Graphs/Elements/ShowLegends [new file with mode: 0644]
share/html/Ticket/Graphs/dhandler [new file with mode: 0644]
share/html/Ticket/Graphs/index.html [new file with mode: 0644]
share/html/Ticket/History.html [new file with mode: 0644]
share/html/Ticket/Modify.html [new file with mode: 0644]
share/html/Ticket/ModifyAll.html [new file with mode: 0644]
share/html/Ticket/ModifyDates.html [new file with mode: 0644]
share/html/Ticket/ModifyLinks.html [new file with mode: 0644]
share/html/Ticket/ModifyPeople.html [new file with mode: 0644]
share/html/Ticket/Reminders.html [new file with mode: 0644]
share/html/Ticket/ShowEmailRecord.html [new file with mode: 0644]
share/html/Ticket/Update.html [new file with mode: 0644]
share/html/Ticket/Update.html.rej [new file with mode: 0644]
share/html/Ticket/autohandler [new file with mode: 0644]
share/html/Tools/MyDay.html [new file with mode: 0644]
share/html/Tools/MyReminders.html [new file with mode: 0644]
share/html/Tools/Offline.html [new file with mode: 0644]
share/html/Tools/index.html [new file with mode: 0644]
share/html/User/Prefs.html [new file with mode: 0644]
share/html/Widgets/BulkEdit [new file with mode: 0644]
share/html/Widgets/BulkProcess [new file with mode: 0644]
share/html/Widgets/ComboBox [new file with mode: 0644]
share/html/Widgets/FinalizeWidgetArguments [new file with mode: 0644]
share/html/Widgets/Form/Boolean [new file with mode: 0644]
share/html/Widgets/Form/Integer [new file with mode: 0644]
share/html/Widgets/Form/Select [new file with mode: 0644]
share/html/Widgets/Form/String [new file with mode: 0644]
share/html/Widgets/SavedSearch [new file with mode: 0644]
share/html/Widgets/SelectionBox [new file with mode: 0644]
share/html/Widgets/TitleBox [new file with mode: 0644]
share/html/Widgets/TitleBoxEnd [new file with mode: 0644]
share/html/Widgets/TitleBoxStart [new file with mode: 0644]
share/html/autohandler [new file with mode: 0644]
share/html/dhandler [new file with mode: 0644]
share/html/index.html [new file with mode: 0644]
share/html/l [new file with mode: 0644]
share/html/l_unsafe [new file with mode: 0644]
share/html/m/_elements/footer [new file with mode: 0644]
share/html/m/_elements/full_site_link [new file with mode: 0644]
share/html/m/_elements/header [new file with mode: 0644]
share/html/m/_elements/menu [new file with mode: 0644]
share/html/m/_elements/raw_style [new file with mode: 0644]
share/html/m/_elements/ticket_list [new file with mode: 0644]
share/html/m/_elements/ticket_menu [new file with mode: 0644]
share/html/m/_elements/wrapper [new file with mode: 0644]
share/html/m/dhandler [new file with mode: 0644]
share/html/m/index.html [new file with mode: 0644]
share/html/m/login [new file with mode: 0644]
share/html/m/logout [new file with mode: 0644]
share/html/m/style.css [new file with mode: 0644]
share/html/m/ticket/autohandler [new file with mode: 0644]
share/html/m/ticket/create [new file with mode: 0644]
share/html/m/ticket/create.orig [new file with mode: 0644]
share/html/m/ticket/history [new file with mode: 0644]
share/html/m/ticket/modify [new file with mode: 0644]
share/html/m/ticket/reply [new file with mode: 0644]
share/html/m/ticket/select_create_queue [new file with mode: 0644]
share/html/m/ticket/show [new file with mode: 0644]
share/html/m/tickets/search [new file with mode: 0644]
share/po/bg.po [new file with mode: 0644]
share/po/cs.po [new file with mode: 0644]
share/po/da.po [new file with mode: 0644]
share/po/de.po [new file with mode: 0644]
share/po/el.po [new file with mode: 0644]
share/po/en.po [new file with mode: 0644]
share/po/en_GB.po [new file with mode: 0644]
share/po/es.po [new file with mode: 0644]
share/po/et.po [new file with mode: 0644]
share/po/fi.po [new file with mode: 0644]
share/po/fr.po [new file with mode: 0644]
share/po/he.po [new file with mode: 0644]
share/po/hr.po [new file with mode: 0644]
share/po/hu.po [new file with mode: 0644]
share/po/id.po [new file with mode: 0644]
share/po/is.po [new file with mode: 0644]
share/po/it.po [new file with mode: 0644]
share/po/ja.po [new file with mode: 0644]
share/po/lt.po [new file with mode: 0644]
share/po/lv.po [new file with mode: 0644]
share/po/mk.po [new file with mode: 0644]
share/po/nb.po [new file with mode: 0644]
share/po/nl.po [new file with mode: 0644]
share/po/nn.po [new file with mode: 0644]
share/po/pl.po [new file with mode: 0644]
share/po/pt.po [new file with mode: 0644]
share/po/pt_BR.po [new file with mode: 0644]
share/po/pt_PT.po [new file with mode: 0644]
share/po/rt.pot [new file with mode: 0644]
share/po/ru.po [new file with mode: 0644]
share/po/sl.po [new file with mode: 0644]
share/po/sv.po [new file with mode: 0644]
share/po/tr.po [new file with mode: 0644]
share/po/zh_CN.po [new file with mode: 0644]
share/po/zh_TW.po [new file with mode: 0644]

diff --git a/bin/jsmin b/bin/jsmin
new file mode 100755 (executable)
index 0000000..6bf8f2c
Binary files /dev/null and b/bin/jsmin differ
diff --git a/bin/rt b/bin/rt
new file mode 100755 (executable)
index 0000000..683f8f8
--- /dev/null
+++ b/bin/rt
@@ -0,0 +1,2616 @@
+#!/usr/bin/perl -w
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
+#                                          <sales@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+# Designed and implemented for Best Practical Solutions, LLC by
+# Abhijit Menon-Sen <ams@wiw.org>
+
+use strict;
+
+if ( $ARGV[0] && $ARGV[0] =~ /^(?:--help|-h)$/ ) {
+    require Pod::Usage;
+    print Pod::Usage::pod2usage( { verbose => 2 } );
+    exit;
+}
+
+# This program is intentionally written to have as few non-core module
+# dependencies as possible. It should stay that way.
+
+use Cwd;
+use LWP;
+use Text::ParseWords;
+use HTTP::Request::Common;
+use HTTP::Headers;
+use Term::ReadLine;
+use Time::Local; # used in prettyshow
+
+# strong (GSSAPI based) authentication is supported if the server does provide
+# it and the perl modules GSSAPI and LWP::Authen::Negotiate are installed
+# it can be suppressed by setting externalauth=0 (default is undef)
+eval { require GSSAPI };
+my $no_strong_auth = 'missing perl module GSSAPI';
+if ( ! $@ ) {
+    eval {require LWP::Authen::Negotiate};
+    $no_strong_auth = $@ ? 'missing perl module LWP::Authen::Negotiate' : 0;
+}
+
+# We derive configuration information from hardwired defaults, dotfiles,
+# and the RT* environment variables (in increasing order of precedence).
+# Session information is stored in ~/.rt_sessions.
+
+my $VERSION = 0.02;
+my $HOME = eval{(getpwuid($<))[7]}
+           || $ENV{HOME} || $ENV{LOGDIR} || $ENV{HOMEPATH}
+           || ".";
+my %config = (
+    (
+        debug        => 0,
+        user         => eval{(getpwuid($<))[0]} || $ENV{USER} || $ENV{USERNAME},
+        passwd       => undef,
+        server       => 'http://localhost/',
+        query        => "Status!='resolved' and Status!='rejected'",
+        orderby      => 'id',
+        queue        => undef,
+# to protect against unlimited searches a better choice would be
+#       queue        => 'Unknown_Queue',
+# setting externalauth => undef will try GSSAPI auth if the corresponding perl
+# modules are installed, externalauth => 0 is the backward compatible choice 
+        externalauth => 0,
+    ),
+    config_from_file($ENV{RTCONFIG} || ".rtrc"),
+    config_from_env()
+);
+my $session = Session->new("$HOME/.rt_sessions");
+my $REST = "$config{server}/REST/1.0";
+$no_strong_auth = 'switched off by externalauth=0'
+    if defined $config{externalauth};
+
+
+my $prompt = 'rt> ';
+
+sub whine;
+sub DEBUG { warn @_ if $config{debug} >= shift }
+
+# These regexes are used by command handlers to parse arguments.
+# (XXX: Ask Autrijus how i18n changes these definitions.)
+
+my $name    = '[\w.-]+';
+my $CF_name = '[\sa-z0-9_ :()/-]+';
+my $field   = '(?i:[a-z][a-z0-9_-]*|C(?:ustom)?F(?:ield)?-'.$CF_name.'|CF\.\{'.$CF_name.'\})';
+my $label   = '[a-zA-Z0-9@_.+-]+';
+my $labels  = "(?:$label,)*$label";
+my $idlist  = '(?:(?:\d+-)?\d+,)*(?:\d+-)?\d+';
+
+# Our command line looks like this:
+#
+#     rt <action> [options] [arguments]
+#
+# We'll parse just enough of it to decide upon an action to perform, and
+# leave the rest to per-action handlers to interpret appropriately.
+
+my %handlers = (
+#   handler     => [ ...aliases... ],
+    version     => ["version", "ver"],
+    shell       => ["shell"],
+    logout      => ["logout"],
+    help        => ["help", "man"],
+    show        => ["show", "cat"],
+    edit        => ["create", "edit", "new", "ed"],
+    list        => ["search", "list", "ls"],
+    comment     => ["comment", "correspond"],
+    link        => ["link", "ln"],
+    merge       => ["merge"],
+    grant       => ["grant", "revoke"],
+    take        => ["take", "steal", "untake"],
+    quit        => ["quit", "exit"],
+    setcommand  => ["del", "delete", "give", "res", "resolve",
+                    "subject"],
+);
+
+my %actions;
+foreach my $fn (keys %handlers) {
+    foreach my $alias (@{ $handlers{$fn} }) {
+        $actions{$alias} = \&{"$fn"};
+    }
+}
+
+# Once we find and call an appropriate handler, we're done.
+
+sub handler {
+    my $action;
+
+    push @ARGV, 'shell' if (!@ARGV);    # default to shell mode
+    shift @ARGV if ($ARGV[0] eq 'rt');    # ignore a leading 'rt'
+    if (@ARGV && exists $actions{$ARGV[0]}) {
+        $action = shift @ARGV;
+        return $actions{$action}->($action);
+    }
+    else {
+        print STDERR "rt: Unknown command '@ARGV'.\n";
+        print STDERR "rt: For help, run 'rt help'.\n";
+        return 1;
+    }
+}
+
+exit handler();
+
+# Handler functions.
+# ------------------
+#
+# The following subs are handlers for each entry in %actions.
+
+sub shell {
+    $|=1;
+    my $term = Term::ReadLine->new('RT CLI');
+    while ( defined ($_ = $term->readline($prompt)) ) {
+        next if /^#/ || /^\s*$/;
+
+        @ARGV = shellwords($_);
+        handler();
+    }
+}
+
+sub version {
+    print "rt $VERSION\n";
+    return 0;
+}
+
+sub logout {
+    submit("$REST/logout") if defined $session->cookie;
+    return 0;
+}
+
+sub quit {
+    logout();
+    exit;
+}
+
+my %help;
+sub help {
+    my ($action, $type, $rv) = @_;
+    $rv = defined $rv ? $rv : 0;
+    my $key;
+
+    # What help topics do we know about?
+    if (!%help) {
+        local $/ = undef;
+        foreach my $item (@{ Form::parse(<DATA>) }) {
+            my $title = $item->[2]{Title};
+            my @titles = ref $title eq 'ARRAY' ? @$title : $title;
+
+            foreach $title (grep $_, @titles) {
+                $help{$title} = $item->[2]{Text};
+            }
+        }
+    }
+
+    # What does the user want help with?
+    undef $action if ($action && $actions{$action} eq \&help);
+    unless ($action || $type) {
+        # If we don't know, we'll look for clues in @ARGV.
+        foreach (@ARGV) {
+            if (exists $help{$_}) { $key = $_; last; }
+        }
+        unless ($key) {
+            # Tolerate possibly plural words.
+            foreach (@ARGV) {
+                if ($_ =~ s/s$// && exists $help{$_}) { $key = $_; last; }
+            }
+        }
+    }
+
+    if ($type && $action) {
+        $key = "$type.$action";
+    }
+    $key ||= $type || $action || "introduction";
+
+    # Find a suitable topic to display.
+    while (!exists $help{$key}) {
+        if ($type && $action) {
+            if ($key eq "$type.$action") { $key = $action;        }
+            elsif ($key eq $action)      { $key = $type;          }
+            else                         { $key = "introduction"; }
+        }
+        else {
+            $key = "introduction";
+        }
+    }
+
+    print STDERR $help{$key}, "\n\n";
+    return $rv;
+}
+
+# Displays a list of objects that match some specified condition.
+
+sub list {
+    my ($q, $type, %data);
+    my $orderby = $config{orderby};
+    
+    if ($config{orderby}) {
+         $data{orderby} = $config{orderby};
+    } 
+    my $bad = 0;
+    my $rawprint = 0;
+    my $reverse_sort = 0;
+    my $queue = $config{queue};
+
+    while (@ARGV) {
+        $_ = shift @ARGV;
+
+        if (/^-t$/) {
+            $bad = 1, last unless defined($type = get_type_argument());
+        }
+        elsif (/^-S$/) {
+            $bad = 1, last unless get_var_argument(\%data);
+        }
+        elsif (/^-o$/) {
+            $data{'orderby'} = shift @ARGV;
+        }
+        elsif (/^-([isl])$/) {
+            $data{format} = $1;
+            $rawprint = 1;
+        }
+        elsif (/^-q$/) {
+            $queue = shift @ARGV;
+        }
+        elsif (/^-r$/) {
+            $reverse_sort = 1;
+        }
+        elsif (/^-f$/) {
+            if ($ARGV[0] !~ /^(?:(?:$field,)*$field)$/) {
+                whine "No valid field list in '-f $ARGV[0]'.";
+                $bad = 1; last;
+            }
+            $data{fields} = shift @ARGV;
+            $data{format} = 's' if ! $data{format};
+            $rawprint = 1;
+        }
+        elsif (!defined $q && !/^-/) {
+            $q = $_;
+        }
+        else {
+            my $datum = /^-/ ? "option" : "argument";
+            whine "Unrecognised $datum '$_'.";
+            $bad = 1; last;
+        }
+    }
+    if ( ! $rawprint and ! exists $data{format} ) {
+        $data{format} = 'l';
+    }
+    if ( $reverse_sort and $data{orderby} =~ /^-/ ) {
+        $data{orderby} =~ s/^-/+/;
+    } elsif ($reverse_sort) {
+        $data{orderby} =~ s/^\+?(.*)/-$1/;
+    }
+
+    if (!defined $q) {
+        $q = $config{query}; 
+    }
+    
+    $q =~ s/^#//; # get rid of leading hash
+    if ($q =~ /^\d+$/) {
+        # only digits, must be an id, formulate a correct query
+        $q = "id=$q" if $q =~ /^\d+$/;
+    } else {
+        # a string only, take it as an owner or requestor (quoting done later)
+        $q = "(Owner=$q or Requestor like $q) and $config{query}"
+             if $q =~ /^[\w\-]+$/;
+        # always add a query for a specific queue or (comma separated) queues
+        $queue =~ s/,/ or Queue=/g if $queue;
+        $q .= " and (Queue=$queue)" if $queue and $q and $q !~ /Queue\s*=/i
+            and $q !~ /id\s*=/i;
+    }
+    # correctly quote strings in a query
+    $q =~ s/(=|like\s)\s*([^'\d\s]\S*)\b/$1\'$2\'/g;
+
+    $type ||= "ticket";
+    unless ($type && defined $q) {
+        my $item = $type ? "query string" : "object type";
+        whine "No $item specified.";
+        $bad = 1;
+    }
+    #return help("list", $type) if $bad;
+    return suggest_help("list", $type, $bad) if $bad;
+
+    print "Query:$q\n" if ! $rawprint;
+    my $r = submit("$REST/search/$type", { query => $q, %data });
+    if ( $rawprint ) {
+        print $r->content;
+    } else {
+        my $forms = Form::parse($r->content);
+        prettylist ($forms);
+    }
+    return 0;
+}
+
+# Displays selected information about a single object.
+
+sub show {
+    my ($type, @objects, %data);
+    my $slurped = 0;
+    my $bad = 0;
+    my $rawprint = 0;
+    my $histspec;
+
+    while (@ARGV) {
+        $_ = shift @ARGV;
+        s/^#// if /^#\d+/; # get rid of leading hash
+        if (/^-t$/) {
+            $bad = 1, last unless defined($type = get_type_argument());
+        }
+        elsif (/^-S$/) {
+            $bad = 1, last unless get_var_argument(\%data);
+        }
+        elsif (/^-([isl])$/) {
+            $data{format} = $1;
+            $rawprint = 1;
+        }
+        elsif (/^-$/ && !$slurped) {
+            chomp(my @lines = <STDIN>);
+            foreach (@lines) {
+                unless (is_object_spec($_, $type)) {
+                    whine "Invalid object on STDIN: '$_'.";
+                    $bad = 1; last;
+                }
+                push @objects, $_;
+            }
+            $slurped = 1;
+        }
+        elsif (/^-f$/) {
+            if ($ARGV[0] !~ /^(?:(?:$field,)*$field)$/) {
+                whine "No valid field list in '-f $ARGV[0]'.";
+                $bad = 1; last;
+            }
+            $data{fields} = shift @ARGV;
+            # option f requires short raw listing format
+            $data{format} = 's';
+            $rawprint = 1;
+        }
+        elsif (/^\d+$/ and my $spc2 = is_object_spec("ticket/$_", $type)) {
+            push @objects, $spc2;
+            $histspec = is_object_spec("ticket/$_/history", $type);
+        }
+        elsif (/^\d+\// and my $spc3 = is_object_spec("ticket/$_", $type)) {
+            push @objects, $spc3;
+            $rawprint = 1 if $_ =~ /\/content$/;
+        }
+        elsif (my $spec = is_object_spec($_, $type)) {
+            push @objects, $spec;
+            $rawprint = 1 if $_ =~ /\/content$/ or $_ !~ /^ticket/;
+        }
+        else {
+            my $datum = /^-/ ? "option" : "argument";
+            whine "Unrecognised $datum '$_'.";
+            $bad = 1; last;
+        }
+    }
+    if ( ! $rawprint ) {
+        push @objects, $histspec if $histspec;
+        $data{format} = 'l' if ! exists $data{format};
+    }
+
+    unless (@objects) {
+        whine "No objects specified.";
+        $bad = 1;
+    }
+    #return help("show", $type) if $bad;
+    return suggest_help("show", $type, $bad) if $bad;
+
+    my $r = submit("$REST/show", { id => \@objects, %data });
+    my $c = $r->content;
+    # if this isn't a text reply, remove the trailing newline so we
+    # don't corrupt things like tarballs when people do
+    # show ticket/id/attachments/id/content > foo.tar.gz
+    if ($r->content_type !~ /^text\//) {
+        chomp($c);
+        $rawprint = 1;
+    }
+    if ( $rawprint ) {
+        print $c;
+    } else {
+        # I do not know how to get more than one form correctly returned
+        $c =~ s!^RT/[\d\.]+ 200 Ok$!--!mg;
+        my $forms = Form::parse($c);
+        prettyshow ($forms);
+    }
+    return 0;
+}
+
+# To create a new object, we ask the server for a form with the defaults
+# filled in, allow the user to edit it, and send the form back.
+#
+# To edit an object, we must ask the server for a form representing that
+# object, make changes requested by the user (either on the command line
+# or interactively via $EDITOR), and send the form back.
+
+sub edit {
+    my ($action) = @_;
+    my (%data, $type, @objects);
+    my ($cl, $text, $edit, $input, $output);
+
+    use vars qw(%set %add %del);
+    %set = %add = %del = ();
+    my $slurped = 0;
+    my $bad = 0;
+    
+    while (@ARGV) {
+        $_ = shift @ARGV;
+        s/^#// if /^#\d+/; # get rid of leading hash
+
+        if    (/^-e$/) { $edit = 1 }
+        elsif (/^-i$/) { $input = 1 }
+        elsif (/^-o$/) { $output = 1 }
+        elsif (/^-t$/) {
+            $bad = 1, last unless defined($type = get_type_argument());
+        }
+        elsif (/^-S$/) {
+            $bad = 1, last unless get_var_argument(\%data);
+        }
+        elsif (/^-$/ && !($slurped || $input)) {
+            chomp(my @lines = <STDIN>);
+            foreach (@lines) {
+                unless (is_object_spec($_, $type)) {
+                    whine "Invalid object on STDIN: '$_'.";
+                    $bad = 1; last;
+                }
+                push @objects, $_;
+            }
+            $slurped = 1;
+        }
+        elsif (/^set$/i) {
+            my $vars = 0;
+
+            while (@ARGV && $ARGV[0] =~ /^($field)([+-]?=)(.*)$/s) {
+                my ($key, $op, $val) = ($1, $2, $3);
+                my $hash = ($op eq '=') ? \%set : ($op =~ /^\+/) ? \%add : \%del;
+
+                vpush($hash, lc $key, $val);
+                shift @ARGV;
+                $vars++;
+            }
+            unless ($vars) {
+                whine "No variables to set.";
+                $bad = 1; last;
+            }
+            $cl = $vars;
+        }
+        elsif (/^(?:add|del)$/i) {
+            my $vars = 0;
+            my $hash = ($_ eq "add") ? \%add : \%del;
+
+            while (@ARGV && $ARGV[0] =~ /^($field)=(.*)$/s) {
+                my ($key, $val) = ($1, $2);
+
+                vpush($hash, lc $key, $val);
+                shift @ARGV;
+                $vars++;
+            }
+            unless ($vars) {
+                whine "No variables to set.";
+                $bad = 1; last;
+            }
+            $cl = $vars;
+        }
+        elsif (/^\d+$/ and my $spc2 = is_object_spec("ticket/$_", $type)) {
+            push @objects, $spc2;
+        }
+        elsif (my $spec = is_object_spec($_, $type)) {
+            push @objects, $spec;
+        }
+        else {
+            my $datum = /^-/ ? "option" : "argument";
+            whine "Unrecognised $datum '$_'.";
+            $bad = 1; last;
+        }
+    }
+
+    if ($action =~ /^ed(?:it)?$/) {
+        unless (@objects) {
+            whine "No objects specified.";
+            $bad = 1;
+        }
+    }
+    else {
+        if (@objects) {
+            whine "You shouldn't specify objects as arguments to $action.";
+            $bad = 1;
+        }
+        unless ($type) {
+            whine "What type of object do you want to create?";
+            $bad = 1;
+        }
+        @objects = ("$type/new") if defined($type);
+    }
+    #return help($action, $type) if $bad;
+    return suggest_help($action, $type, $bad) if $bad;
+
+    # We need a form to make changes to. We usually ask the server for
+    # one, but we can avoid that if we are fed one on STDIN, or if the
+    # user doesn't want to edit the form by hand, and the command line
+    # specifies only simple variable assignments.  We *should* get a
+    # form if we're creating a new ticket, so that the default values
+    # get filled in properly.
+
+    my @new_objects = grep /\/new$/, @objects;
+
+    if ($input) {
+        local $/ = undef;
+        $text = <STDIN>;
+    }
+    elsif ($edit || %add || %del || !$cl || @new_objects) {
+        my $r = submit("$REST/show", { id => \@objects, format => 'l' });
+        $text = $r->content;
+    }
+
+    # If any changes were specified on the command line, apply them.
+    if ($cl) {
+        if ($text) {
+            # We're updating forms from the server.
+            my $forms = Form::parse($text);
+
+            foreach my $form (@$forms) {
+                my ($c, $o, $k, $e) = @$form;
+                my ($key, $val);
+
+                next if ($e || !@$o);
+
+                local %add = %add;
+                local %del = %del;
+                local %set = %set;
+
+                # Make changes to existing fields.
+                foreach $key (@$o) {
+                    if (exists $add{lc $key}) {
+                        $val = delete $add{lc $key};
+                        vpush($k, $key, $val);
+                        $k->{$key} = vsplit($k->{$key}) if $val =~ /[,\n]/;
+                    }
+                    if (exists $del{lc $key}) {
+                        $val = delete $del{lc $key};
+                        my %val = map {$_=>1} @{ vsplit($val) };
+                        $k->{$key} = vsplit($k->{$key});
+                        @{$k->{$key}} = grep {!exists $val{$_}} @{$k->{$key}};
+                    }
+                    if (exists $set{lc $key}) {
+                        $k->{$key} = delete $set{lc $key};
+                    }
+                }
+                
+                # Then update the others.
+                foreach $key (keys %set) { vpush($k, $key, $set{$key}) }
+                foreach $key (keys %add) {
+                    vpush($k, $key, $add{$key});
+                    $k->{$key} = vsplit($k->{$key});
+                }
+                push @$o, (keys %add, keys %set);
+            }
+
+            $text = Form::compose($forms);
+        }
+        else {
+            # We're rolling our own set of forms.
+            my @forms;
+            foreach (@objects) {
+                my ($type, $ids, $args) =
+                    m{^($name)/($idlist|$labels)(?:(/.*))?$}o;
+
+                $args ||= "";
+                foreach my $obj (expand_list($ids)) {
+                    my %set = (%set, id => "$type/$obj$args");
+                    push @forms, ["", [keys %set], \%set];
+                }
+            }
+            $text = Form::compose(\@forms);
+        }
+    }
+
+    if ($output) {
+        print $text;
+        return 0;
+    }
+
+    my $synerr = 0;
+
+EDIT:
+    # We'll let the user edit the form before sending it to the server,
+    # unless we have enough information to submit it non-interactively.
+    if ($edit || (!$input && !$cl)) {
+        my $newtext = vi($text);
+        # We won't resubmit a bad form unless it was changed.
+        $text = ($synerr && $newtext eq $text) ? undef : $newtext;
+    }
+
+    if ($text) {
+        my $r = submit("$REST/edit", {content => $text, %data});
+        if ($r->code == 409) {
+            # If we submitted a bad form, we'll give the user a chance
+            # to correct it and resubmit.
+            if ($edit || (!$input && !$cl)) {
+                $text = $r->content;
+                $synerr = 1;
+                goto EDIT;
+            }
+            else {
+                print $r->content;
+                return 0;
+            }
+        }
+        print $r->content;
+    }
+    return 0;
+}
+
+# handler for special edit commands. A valid edit command is constructed and
+# further work is delegated to the edit handler
+
+sub setcommand {
+    my ($action) = @_;
+    my ($id, $bad, $what);
+    if ( @ARGV ) {
+        $_ = shift @ARGV;
+        $id = $1 if (m|^(?:ticket/)?($idlist)$|);
+    }
+    if ( ! $id ) {
+        $bad = 1;
+        whine "No ticket number specified.";
+    }
+    if ( @ARGV ) {
+        if ($action eq 'subject') {
+            my $subject = '"'.join (" ", @ARGV).'"';
+            @ARGV = ();
+            $what = "subject=$subject";
+        } elsif ($action eq 'give') {
+            my $owner = shift @ARGV;
+            $what = "owner=$owner";
+        }
+    } else {
+        if ( $action eq 'delete' or $action eq 'del' ) {
+            $what = "status=deleted";
+        } elsif ($action eq 'resolve' or $action eq 'res' ) {
+            $what = "status=resolved";
+        } elsif ($action eq 'take' ) {
+            $what = "owner=$config{user}";
+        } elsif ($action eq 'untake') {
+            $what = "owner=Nobody";
+        }
+    }
+    if (@ARGV) {
+        $bad = 1;
+        whine "Extraneous arguments for action $action: @ARGV.";
+    }
+    if ( ! $what ) {
+        $bad = 1;
+        whine "unrecognized action $action.";
+    }
+    return help("edit", undef, $bad) if $bad;
+    @ARGV = ( $id, "set", $what );
+    print "Executing: rt edit @ARGV\n";
+    return edit("edit");
+}
+
+# We roll "comment" and "correspond" into the same handler.
+
+sub comment {
+    my ($action) = @_;
+    my (%data, $id, @files, @bcc, @cc, $msg, $wtime, $edit);
+    my $bad = 0;
+
+    while (@ARGV) {
+        $_ = shift @ARGV;
+
+        if (/^-e$/) {
+            $edit = 1;
+        }
+        elsif (/^-[abcmw]$/) {
+            unless (@ARGV) {
+                whine "No argument specified with $_.";
+                $bad = 1; last;
+            }
+
+            if (/-a/) {
+                unless (-f $ARGV[0] && -r $ARGV[0]) {
+                    whine "Cannot read attachment: '$ARGV[0]'.";
+                    return 0;
+                }
+                push @files, shift @ARGV;
+            }
+            elsif (/-([bc])/) {
+                my $a = $_ eq "-b" ? \@bcc : \@cc;
+                @$a = split /\s*,\s*/, shift @ARGV;
+            }
+            elsif (/-m/) {
+                $msg = shift @ARGV;
+                if ( $msg =~ /^-$/ ) {
+                    undef $msg;
+                    while (<STDIN>) { $msg .= $_ }
+                }
+            }
+
+            elsif (/-w/) { $wtime = shift @ARGV }
+        }
+        elsif (!$id && m|^(?:ticket/)?($idlist)$|) {
+            $id = $1;
+        }
+        else {
+            my $datum = /^-/ ? "option" : "argument";
+            whine "Unrecognised $datum '$_'.";
+            $bad = 1; last;
+        }
+    }
+
+    unless ($id) {
+        whine "No object specified.";
+        $bad = 1;
+    }
+    #return help($action, "ticket") if $bad;
+    return suggest_help($action, "ticket") if $bad;
+
+    my $form = [
+        "",
+        [ "Ticket", "Action", "Cc", "Bcc", "Attachment", "TimeWorked", "Text" ],
+        {
+            Ticket     => $id,
+            Action     => $action,
+            Cc         => [ @cc ],
+            Bcc        => [ @bcc ],
+            Attachment => [ @files ],
+            TimeWorked => $wtime || '',
+            Text       => $msg || '',
+            Status => ''
+        }
+    ];
+
+    my $text = Form::compose([ $form ]);
+
+    if ($edit || !$msg) {
+        my $error = 0;
+        my ($c, $o, $k, $e);
+
+        do {
+            my $ntext = vi($text);
+            return if ($error && $ntext eq $text);
+            $text = $ntext;
+            $form = Form::parse($text);
+            $error = 0;
+
+            ($c, $o, $k, $e) = @{ $form->[0] };
+            if ($e) {
+                $error = 1;
+                $c = "# Syntax error.";
+                goto NEXT;
+            }
+            elsif (!@$o) {
+                return 0;
+            }
+            @files = @{ vsplit($k->{Attachment}) };
+
+        NEXT:
+            $text = Form::compose([[$c, $o, $k, $e]]);
+        } while ($error);
+    }
+
+    my $i = 1;
+    foreach my $file (@files) {
+        $data{"attachment_$i"} = bless([ $file ], "Attachment");
+        $i++;
+    }
+    $data{content} = $text;
+
+    my $r = submit("$REST/ticket/$id/comment", \%data);
+    print $r->content;
+    return 0;
+}
+
+# Merge one ticket into another.
+
+sub merge {
+    my @id;
+    my $bad = 0;
+
+    while (@ARGV) {
+        $_ = shift @ARGV;
+        s/^#// if /^#\d+/; # get rid of leading hash
+
+        if (/^\d+$/) {
+            push @id, $_;
+        }
+        else {
+            whine "Unrecognised argument: '$_'.";
+            $bad = 1; last;
+        }
+    }
+
+    unless (@id == 2) {
+        my $evil = @id > 2 ? "many" : "few";
+        whine "Too $evil arguments specified.";
+        $bad = 1;
+    }
+    #return help("merge", "ticket") if $bad;
+    return suggest_help("merge", "ticket", $bad) if $bad;
+
+    my $r = submit("$REST/ticket/$id[0]/merge/$id[1]");
+    print $r->content;
+    return 0;
+}
+
+# Link one ticket to another.
+
+sub link {
+    my ($bad, $del, %data) = (0, 0, ());
+    my $type;
+
+    my %ltypes = map { lc $_ => $_ } qw(DependsOn DependedOnBy RefersTo
+                                        ReferredToBy HasMember MemberOf);
+
+    while (@ARGV && $ARGV[0] =~ /^-/) {
+        $_ = shift @ARGV;
+
+        if (/^-d$/) {
+            $del = 1;
+        }
+        elsif (/^-t$/) {
+            $bad = 1, last unless defined($type = get_type_argument());
+        }
+        else {
+            whine "Unrecognised option: '$_'.";
+            $bad = 1; last;
+        }
+    }
+    
+    $type = "ticket" unless $type; # default type to tickets
+    
+    if (@ARGV == 3) {
+        my ($from, $rel, $to) = @ARGV;
+        if ($from !~ /^\d+$/ || $to !~ /^\d+$/) {
+            my $bad = $from =~ /^\d+$/ ? $to : $from;
+            whine "Invalid $type ID '$bad' specified.";
+            $bad = 1;
+        }
+        if (($type eq "ticket") && ( ! exists $ltypes{lc $rel})) {
+            whine "Invalid link '$rel' for type $type specified.";
+            $bad = 1;
+        }
+        %data = (id => $from, rel => $rel, to => $to, del => $del);
+    }
+    else {
+        my $bad = @ARGV < 3 ? "few" : "many";
+        whine "Too $bad arguments specified.";
+        $bad = 1;
+    }
+    return suggest_help("link", $type, $bad) if $bad;
+    my $r = submit("$REST/$type/link", \%data);
+    print $r->content;
+    return 0;
+}
+
+# Take/steal a ticket
+sub take {
+    my ($cmd) = @_;
+    my ($bad, %data) = (0, ());
+
+    my $id;
+
+    # get the ticket id
+    if (@ARGV == 1) {
+        ($id) = @ARGV;
+        unless ($id =~ /^\d+$/) {
+            whine "Invalid ticket ID $id specified.";
+            $bad = 1;
+        }
+        my $form = [
+            "",
+            [ "Ticket", "Action" ],
+            {
+                Ticket => $id,
+                Action => $cmd,
+                Status => '',
+            }
+        ];
+
+        my $text = Form::compose([ $form ]);
+        $data{content} = $text;
+    }
+    else {
+        $bad = @ARGV < 1 ? "few" : "many";
+        whine "Too $bad arguments specified.";
+        $bad = 1;
+    }
+    return suggest_help("take", "ticket", $bad) if $bad;
+
+    my $r = submit("$REST/ticket/$id/take", \%data);
+    print $r->content;
+    return 0;
+}
+
+# Grant/revoke a user's rights.
+
+sub grant {
+    my ($cmd) = @_;
+
+    my $revoke = 0;
+    while (@ARGV) {
+    }
+
+    $revoke = 1 if $cmd->{action} eq 'revoke';
+    return 0;
+}
+
+# Client <-> Server communication.
+# --------------------------------
+#
+# This function composes and sends an HTTP request to the RT server, and
+# interprets the response. It takes a request URI, and optional request
+# data (a string, or a reference to a set of key-value pairs).
+
+sub submit {
+    my ($uri, $content) = @_;
+    my ($req, $data);
+    my $ua = LWP::UserAgent->new(agent => "RT/3.0b", env_proxy => 1);
+    my $h = HTTP::Headers->new;
+
+    # Did the caller specify any data to send with the request?
+    $data = [];
+    if (defined $content) {
+        unless (ref $content) {
+            # If it's just a string, make sure LWP handles it properly.
+            # (By pretending that it's a file!)
+            $content = [ content => [undef, "", Content => $content] ];
+        }
+        elsif (ref $content eq 'HASH') {
+            my @data;
+            foreach my $k (keys %$content) {
+                if (ref $content->{$k} eq 'ARRAY') {
+                    foreach my $v (@{ $content->{$k} }) {
+                        push @data, $k, $v;
+                    }
+                }
+                else { push @data, $k, $content->{$k} }
+            }
+            $content = \@data;
+        }
+        $data = $content;
+    }
+
+    # Should we send authentication information to start a new session?
+    my $how = $config{server} =~ /^https/ ? 'over SSL' : 'unencrypted';
+    (my $server = $config{server}) =~ s/^.*\/\/([^\/]+)\/?/$1/;
+    if ($config{externalauth}) {
+        $h->authorization_basic($config{user}, $config{passwd} || read_passwd() );
+        print "   Password will be sent to $server $how\n",
+              "   Press CTRL-C now if you do not want to continue\n"
+            if ! $config{passwd};
+    } elsif ( $no_strong_auth ) {
+        if (!defined $session->cookie) {
+            print "   Strong encryption not available, $no_strong_auth\n",
+                  "   Password will be sent to $server $how\n",
+                  "   Press CTRL-C now if you do not want to continue\n"
+                if ! $config{passwd};
+            push @$data, ( user => $config{user} );
+            push @$data, ( pass => $config{passwd} || read_passwd() );
+        }
+    }
+
+    # Now, we construct the request.
+    if (@$data) {
+        $req = POST($uri, $data, Content_Type => 'form-data');
+    }
+    else {
+        $req = GET($uri);
+    }
+    $session->add_cookie_header($req);
+    if ($config{externalauth}) {
+        $req->header(%$h);
+    }
+
+    # Then we send the request and parse the response.
+    DEBUG(3, $req->as_string);
+    my $res = $ua->request($req);
+    DEBUG(3, $res->as_string);
+
+    if ($res->is_success) {
+        # The content of the response we get from the RT server consists
+        # of an HTTP-like status line followed by optional header lines,
+        # a blank line, and arbitrary text.
+
+        my ($head, $text) = split /\n\n/, $res->content, 2;
+        my ($status, @headers) = split /\n/, $head;
+        $text =~ s/\n*$/\n/ if ($text);
+
+        # "RT/3.0.1 401 Credentials required"
+        if ($status !~ m#^RT/\d+(?:\S+) (\d+) ([\w\s]+)$#) {
+            warn "rt: Malformed RT response from $config{server}.\n";
+            warn "(Rerun with RTDEBUG=3 for details.)\n" if $config{debug} < 3;
+            exit -1;
+        }
+
+        # Our caller can pretend that the server returned a custom HTTP
+        # response code and message. (Doing that directly is apparently
+        # not sufficiently portable and uncomplicated.)
+        $res->code($1);
+        $res->message($2);
+        $res->content($text);
+        $session->update($res) if ($res->is_success || $res->code != 401);
+
+        if (!$res->is_success) {
+            # We can deal with authentication failures ourselves. Either
+            # we sent invalid credentials, or our session has expired.
+            if ($res->code == 401) {
+                my %d = @$data;
+                if (exists $d{user}) {
+                    warn "rt: Incorrect username or password.\n";
+                    exit -1;
+                }
+                elsif ($req->header("Cookie")) {
+                    # We'll retry the request with credentials, unless
+                    # we only wanted to logout in the first place.
+                    $session->delete;
+                    return submit(@_) unless $uri eq "$REST/logout";
+                }
+            }
+            # Conflicts should be dealt with by the handler and user.
+            # For anything else, we just die.
+            elsif ($res->code != 409) {
+                warn "rt: ", $res->content;
+                #exit;
+            }
+        }
+    }
+    else {
+        warn "rt: Server error: ", $res->message, " (", $res->code, ")\n";
+        exit -1;
+    }
+
+    return $res;
+}
+
+# Session management.
+# -------------------
+#
+# Maintains a list of active sessions in the ~/.rt_sessions file.
+{
+    package Session;
+    my ($s, $u);
+
+    # Initialises the session cache.
+    sub new {
+        my ($class, $file) = @_;
+        my $self = {
+            file => $file || "$HOME/.rt_sessions",
+            sids => { }
+        };
+       
+        # The current session is identified by the currently configured
+        # server and user.
+        ($s, $u) = @config{"server", "user"};
+
+        bless $self, $class;
+        $self->load();
+
+        return $self;
+    }
+
+    # Returns the current session cookie.
+    sub cookie {
+        my ($self) = @_;
+        my $cookie = $self->{sids}{$s}{$u};
+        return defined $cookie ? "RT_SID_$cookie" : undef;
+    }
+
+    # Deletes the current session cookie.
+    sub delete {
+        my ($self) = @_;
+        delete $self->{sids}{$s}{$u};
+    }
+
+    # Adds a Cookie header to an outgoing HTTP request.
+    sub add_cookie_header {
+        my ($self, $request) = @_;
+        my $cookie = $self->cookie();
+
+        $request->header(Cookie => $cookie) if defined $cookie;
+    }
+
+    # Extracts the Set-Cookie header from an HTTP response, and updates
+    # session information accordingly.
+    sub update {
+        my ($self, $response) = @_;
+        my $cookie = $response->header("Set-Cookie");
+
+        if (defined $cookie && $cookie =~ /^RT_SID_(.[^;,\s]+=[0-9A-Fa-f]+);/) {
+            $self->{sids}{$s}{$u} = $1;
+        }
+    }
+
+    # Loads the session cache from the specified file.
+    sub load {
+        my ($self, $file) = @_;
+        $file ||= $self->{file};
+
+        open( my $handle, '<', $file ) or return 0;
+
+        $self->{file} = $file;
+        my $sids = $self->{sids} = {};
+        while (<$handle>) {
+            chomp;
+            next if /^$/ || /^#/;
+            next unless m#^https?://[^ ]+ \w+ [^;,\s]+=[0-9A-Fa-f]+$#;
+            my ($server, $user, $cookie) = split / /, $_;
+            $sids->{$server}{$user} = $cookie;
+        }
+        return 1;
+    }
+
+    # Writes the current session cache to the specified file.
+    sub save {
+        my ($self, $file) = shift;
+        $file ||= $self->{file};
+
+        open( my $handle, '>', "$file" ) or return 0;
+
+        my $sids = $self->{sids};
+        foreach my $server (keys %$sids) {
+            foreach my $user (keys %{ $sids->{$server} }) {
+                my $sid = $sids->{$server}{$user};
+                if (defined $sid) {
+                    print $handle "$server $user $sid\n";
+                }
+            }
+        }
+        close($handle);
+        chmod 0600, $file;
+        return 1;
+    }
+
+    sub DESTROY {
+        my $self = shift;
+        $self->save;
+    }
+}
+
+# Form handling.
+# --------------
+#
+# Forms are RFC822-style sets of (field, value) specifications with some
+# initial comments and interspersed blank lines allowed for convenience.
+# Sets of forms are separated by --\n (in a cheap parody of MIME).
+#
+# Each form is parsed into an array with four elements: commented text
+# at the start of the form, an array with the order of keys, a hash with
+# key/value pairs, and optional error text if the form syntax was wrong.
+
+# Returns a reference to an array of parsed forms.
+sub Form::parse {
+    my $state = 0;
+    my @forms = ();
+    my @lines = split /\n/, $_[0] if $_[0];
+    my ($c, $o, $k, $e) = ("", [], {}, "");
+
+    LINE:
+    while (@lines) {
+        my $line = shift @lines;
+
+        next LINE if $line eq '';
+
+        if ($line eq '--') {
+            # We reached the end of one form. We'll ignore it if it was
+            # empty, and store it otherwise, errors and all.
+            if ($e || $c || @$o) {
+                push @forms, [ $c, $o, $k, $e ];
+                $c = ""; $o = []; $k = {}; $e = "";
+            }
+            $state = 0;
+        }
+        elsif ($state != -1) {
+            if ($state == 0 && $line =~ /^#/) {
+                # Read an optional block of comments (only) at the start
+                # of the form.
+                $state = 1;
+                $c = $line;
+                while (@lines && $lines[0] =~ /^#/) {
+                    $c .= "\n".shift @lines;
+                }
+                $c .= "\n";
+            }
+            elsif ($state <= 1 && $line =~ /^($field):(?:\s+(.*))?$/) {
+                # Read a field: value specification.
+                my $f  = $1;
+                my @v  = ($2 || ());
+
+                # Read continuation lines, if any.
+                while (@lines && ($lines[0] eq '' || $lines[0] =~ /^\s+/)) {
+                    push @v, shift @lines;
+                }
+                pop @v while (@v && $v[-1] eq '');
+
+                # Strip longest common leading indent from text.
+                my $ws = "";
+                foreach my $ls (map {/^(\s+)/} @v[1..$#v]) {
+                    $ws = $ls if (!$ws || length($ls) < length($ws));
+                }
+                s/^$ws// foreach @v;
+
+                push(@$o, $f) unless exists $k->{$f};
+                vpush($k, $f, join("\n", @v));
+
+                $state = 1;
+            }
+            elsif ($line !~ /^#/) {
+                # We've found a syntax error, so we'll reconstruct the
+                # form parsed thus far, and add an error marker. (>>)
+                $state = -1;
+                $e = Form::compose([[ "", $o, $k, "" ]]);
+                $e.= $line =~ /^>>/ ? "$line\n" : ">> $line\n";
+            }
+        }
+        else {
+            # We saw a syntax error earlier, so we'll accumulate the
+            # contents of this form until the end.
+            $e .= "$line\n";
+        }
+    }
+    push(@forms, [ $c, $o, $k, $e ]) if ($e || $c || @$o);
+
+    foreach my $l (keys %$k) {
+        $k->{$l} = vsplit($k->{$l}) if (ref $k->{$l} eq 'ARRAY');
+    }
+
+    return \@forms;
+}
+
+# Returns text representing a set of forms.
+sub Form::compose {
+    my ($forms) = @_;
+    my @text;
+
+    foreach my $form (@$forms) {
+        my ($c, $o, $k, $e) = @$form;
+        my $text = "";
+
+        if ($c) {
+            $c =~ s/\n*$/\n/;
+            $text = "$c\n";
+        }
+        if ($e) {
+            $text .= $e;
+        }
+        elsif ($o) {
+            my @lines;
+
+            foreach my $key (@$o) {
+                my ($line, $sp);
+                my $v = $k->{$key};
+                my @values = ref $v eq 'ARRAY' ? @$v : $v;
+
+                $sp = " "x(length("$key: "));
+                $sp = " "x4 if length($sp) > 16;
+
+                foreach $v (@values) {
+                    if ($v =~ /\n/) {
+                        $v =~ s/^/$sp/gm;
+                        $v =~ s/^$sp//;
+
+                        if ($line) {
+                            push @lines, "$line\n\n";
+                            $line = "";
+                        }
+                        elsif (@lines && $lines[-1] !~ /\n\n$/) {
+                            $lines[-1] .= "\n";
+                        }
+                        push @lines, "$key: $v\n\n";
+                    }
+                    elsif ($line &&
+                           length($line)+length($v)-rindex($line, "\n") >= 70)
+                    {
+                        $line .= ",\n$sp$v";
+                    }
+                    else {
+                        $line = $line ? "$line,$v" : "$key: $v";
+                    }
+                }
+
+                $line = "$key:" unless @values;
+                if ($line) {
+                    if ($line =~ /\n/) {
+                        if (@lines && $lines[-1] !~ /\n\n$/) {
+                            $lines[-1] .= "\n";
+                        }
+                        $line .= "\n";
+                    }
+                    push @lines, "$line\n";
+                }
+            }
+
+            $text .= join "", @lines;
+        }
+        else {
+            chomp $text;
+        }
+        push @text, $text;
+    }
+
+    return join "\n--\n\n", @text;
+}
+
+# Configuration.
+# --------------
+
+# Returns configuration information from the environment.
+sub config_from_env {
+    my %env;
+
+    foreach my $k (qw(EXTERNALAUTH DEBUG USER PASSWD SERVER QUERY ORDERBY)) {
+
+        if (exists $ENV{"RT$k"}) {
+            $env{lc $k} = $ENV{"RT$k"};
+        }
+    }
+
+    return %env;
+}
+
+# Finds a suitable configuration file and returns information from it.
+sub config_from_file {
+    my ($rc) = @_;
+
+    if ($rc =~ m#^/#) {
+        # We'll use an absolute path if we were given one.
+        return parse_config_file($rc);
+    }
+    else {
+        # Otherwise we'll use the first file we can find in the current
+        # directory, or in one of its (increasingly distant) ancestors.
+
+        my @dirs = split /\//, cwd;
+        while (@dirs) {
+            my $file = join('/', @dirs, $rc);
+            if (-r $file) {
+                return parse_config_file($file);
+            }
+
+            # Remove the last directory component each time.
+            pop @dirs;
+        }
+
+        # Still nothing? We'll fall back to some likely defaults.
+        for ("$HOME/$rc", "local/etc/rt.conf", "/etc/rt.conf") {
+            return parse_config_file($_) if (-r $_);
+        }
+    }
+
+    return ();
+}
+
+# Makes a hash of the specified configuration file.
+sub parse_config_file {
+    my %cfg;
+    my ($file) = @_;
+    local $_; # $_ may be aliased to a constant, from line 1163
+
+    open( my $handle, '<', $file ) or return;
+
+    while (<$handle>) {
+        chomp;
+        next if (/^#/ || /^\s*$/);
+
+        if (/^(externalauth|user|passwd|server|query|orderby|queue)\s+(.*)\s?$/) {
+            $cfg{$1} = $2;
+        }
+        else {
+            die "rt: $file:$.: unknown configuration directive.\n";
+        }
+    }
+
+    return %cfg;
+}
+
+# Helper functions.
+# -----------------
+
+sub whine {
+    my $sub = (caller(1))[3];
+    $sub =~ s/^main:://;
+    warn "rt: $sub: @_\n";
+    return 0;
+}
+
+sub read_passwd {
+    eval 'require Term::ReadKey';
+    if ($@) {
+        die "No password specified (and Term::ReadKey not installed).\n";
+    }
+
+    print "Password: ";
+    Term::ReadKey::ReadMode('noecho');
+    chomp(my $passwd = Term::ReadKey::ReadLine(0));
+    Term::ReadKey::ReadMode('restore');
+    print "\n";
+
+    return $passwd;
+}
+
+sub vi {
+    my ($text) = @_;
+    my $file = "/tmp/rt.form.$$";
+    my $editor = $ENV{EDITOR} || $ENV{VISUAL} || "vi";
+
+    local $/ = undef;
+
+    open( my $handle, '>', $file ) or die "$file: $!\n";
+    print $handle $text;
+    close($handle);
+
+    system($editor, $file) && die "Couldn't run $editor.\n";
+
+    open( $handle, '<', $file ) or die "$file: $!\n";
+    $text = <$handle>;
+    close($handle);
+
+    unlink($file);
+
+    return $text;
+}
+
+# Add a value to a (possibly multi-valued) hash key.
+sub vpush {
+    my ($hash, $key, $val) = @_;
+    my @val = ref $val eq 'ARRAY' ? @$val : $val;
+
+    if (exists $hash->{$key}) {
+        unless (ref $hash->{$key} eq 'ARRAY') {
+            my @v = $hash->{$key} ne '' ? $hash->{$key} : ();
+            $hash->{$key} = \@v;
+        }
+        push @{ $hash->{$key} }, @val;
+    }
+    else {
+        $hash->{$key} = $val;
+    }
+}
+
+# "Normalise" a hash key that's known to be multi-valued.
+sub vsplit {
+    my ($val) = @_;
+    my ($word, @words);
+    my @values = ref $val eq 'ARRAY' ? @$val : $val;
+
+    foreach my $line (map {split /\n/} @values) {
+        # XXX: This should become a real parser, à la Text::ParseWords.
+        $line =~ s/^\s+//;
+        $line =~ s/\s+$//;
+        my ( $a, $b ) = split /\s*,\s*/, $line, 2;
+
+        while ($a) {
+            no warnings 'uninitialized';
+            if ( $a =~ /^'/ ) {
+                my $s = $a;
+                while ( $a !~ /'$/ || (   $a !~ /(\\\\)+'$/
+                            && $a =~ /(\\)+'$/ )) {
+                    ( $a, $b ) = split /\s*,\s*/, $b, 2;
+                    $s .= ',' . $a;
+                }
+                push @words, $s;
+            }
+            elsif ( $a =~ /^q{/ ) {
+                my $s = $a;
+                while ( $a !~ /}$/ ) {
+                    ( $a, $b ) =
+                      split /\s*,\s*/, $b, 2;
+                    $s .= ',' . $a;
+                }
+                $s =~ s/^q{/'/;
+                $s =~ s/}/'/;
+                push @words, $s;
+            }
+            else {
+                push @words, $a;
+            }
+            ( $a, $b ) = split /\s*,\s*/, $b, 2;
+        }
+
+
+    }
+
+    return \@words;
+}
+
+# WARN: this code is duplicated in lib/RT/Interface/REST.pm
+# change both functions at once
+sub expand_list {
+    my ($list) = @_;
+
+    my @elts;
+    foreach (split /\s*,\s*/, $list) {
+        push @elts, /^(\d+)-(\d+)$/? ($1..$2): $_;
+    }
+
+    return map $_->[0], # schwartzian transform
+        sort {
+            defined $a->[1] && defined $b->[1]?
+                # both numbers
+                $a->[1] <=> $b->[1]
+                :!defined $a->[1] && !defined $b->[1]?
+                    # both letters
+                    $a->[2] cmp $b->[2]
+                    # mix, number must be first
+                    :defined $a->[1]? -1: 1
+        }
+        map [ $_, (defined( /^(\d+)$/ )? $1: undef), lc($_) ],
+        @elts;
+}
+
+sub get_type_argument {
+    my $type;
+
+    if (@ARGV) {
+        $type = shift @ARGV;
+        unless ($type =~ /^[A-Za-z0-9_.-]+$/) {
+            # We want whine to mention our caller, not us.
+            @_ = ("Invalid type '$type' specified.");
+            goto &whine;
+        }
+    }
+    else {
+        @_ = ("No type argument specified with -t.");
+        goto &whine;
+    }
+
+    $type =~ s/s$//; # "Plural". Ugh.
+    return $type;
+}
+
+sub get_var_argument {
+    my ($data) = @_;
+
+    if (@ARGV) {
+        my $kv = shift @ARGV;
+        if (my ($k, $v) = $kv =~ /^($field)=(.*)$/) {
+            push @{ $data->{$k} }, $v;
+        }
+        else {
+            @_ = ("Invalid variable specification: '$kv'.");
+            goto &whine;
+        }
+    }
+    else {
+        @_ = ("No variable argument specified with -S.");
+        goto &whine;
+    }
+}
+
+sub is_object_spec {
+    my ($spec, $type) = @_;
+
+    $spec =~ s|^(?:$type/)?|$type/| if defined $type;
+    return $spec if ($spec =~ m{^$name/(?:$idlist|$labels)(?:/.*)?$}o);
+    return 0;
+}
+
+sub suggest_help {
+    my ($action, $type, $rv) = @_;
+
+    print STDERR "rt: For help, run 'rt help $action'.\n" if defined $action;
+    print STDERR "rt: For help, run 'rt help $type'.\n" if defined $type;
+    return $rv;
+}
+
+sub str2time {
+    # simplified procedure for parsing date, avoid loading Date::Parse
+    my %month = (Jan => 0, Feb => 1, Mar => 2, Apr => 3, May =>  4, Jun =>  5,
+                 Jul => 6, Aug => 7, Sep => 8, Oct => 9, Nov => 10, Dec => 11);
+    $_ = shift;
+    my ($mon, $day, $hr, $min, $sec, $yr, $monstr);
+    if ( /(\w{3})\s+(\d\d?)\s+(\d\d):(\d\d):(\d\d)\s+(\d{4})/ ) {
+        ($monstr, $day, $hr, $min, $sec, $yr) = ($1, $2, $3, $4, $5, $6);
+        $mon = $month{$monstr} if exists $month{$monstr};
+    } elsif ( /(\d{4})-(\d\d)-(\d\d)\s+(\d\d):(\d\d):(\d\d)/ ) {
+        ($yr, $mon, $day, $hr, $min, $sec) = ($1, $2-1, $3, $4, $5, $6);
+    }
+    if ( $yr and defined $mon and $day and defined $hr and defined $sec ) {
+        return timelocal($sec,$min,$hr,$day,$mon,$yr);
+    } else {
+        print "Unknown date format in parsedate: $_\n";
+        return undef;
+    }
+}
+
+sub date_diff {
+    my ($old, $new) = @_;
+    $new = time() if ! $new;
+    $old = str2time($old) if $old !~ /^\d+$/;
+    $new = str2time($new) if $new !~ /^\d+$/;
+    return "???" if ! $old or ! $new;
+
+    my %seconds = (min => 60,
+                   hr  => 60*60,
+                   day => 60*60*24,
+                   wk  => 60*60*24*7,
+                   mth => 60*60*24*30,
+                   yr  => 60*60*24*365);
+
+    my $diff = $new - $old;
+    my $what = 'sec';
+    my $howmuch = $diff;
+    for ( sort {$seconds{$a} <=> $seconds{$b}} keys %seconds) {
+        last if $diff < $seconds{$_};
+        $what = $_;
+        $howmuch = int($diff/$seconds{$_});
+    }
+    return "$howmuch $what";
+}
+
+sub prettyshow {
+    my $forms = shift;
+    my ($form) = grep { exists $_->[2]->{Queue} } @$forms;
+    my $k = $form->[2];
+    # dates are in local time zone
+    if ( $k ) {
+        print "Date: $k->{Created}\n";
+        print "From: $k->{Requestors}\n";
+        print "Cc: $k->{Cc}\n" if $k->{Cc};
+        print "X-AdminCc: $k->{AdminCc}\n" if $k->{AdminCc};
+        print "X-Queue: $k->{Queue}\n";
+        print "Subject: [rt #$k->{id}] $k->{Subject}\n\n";
+    }
+    # dates in these attributes are in GMT and will be converted
+    foreach my $form (@$forms) {
+        my ($c, $o, $k, $e) = @$form;
+        next if ! $k->{id} or exists $k->{Queue};
+        if ( exists $k->{Created} ) {
+            my ($y,$m,$d,$hh,$mm,$ss) = ($k->{Created} =~ /(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/);
+            $m--;
+            my $created = localtime(timegm($ss,$mm,$hh,$d,$m,$y));
+            if ( exists $k->{Description} ) {
+                print "===> $k->{Description} on $created\n";
+            }
+        }
+        print "$k->{Content}\n" if exists $k->{Content} and
+                                   $k->{Content} !~ /to have no content$/ and
+                                   $k->{Type} ne 'EmailRecord';
+        print "$k->{Attachments}\n" if exists $k->{Attachments} and
+                                   $k->{Attachments};
+    }
+}
+
+sub prettylist {
+    my $forms = shift;
+    my $heading = "Ticket Owner Queue    Age   Told Status Requestor Subject\n";
+    $heading .= '-' x 80 . "\n";
+    my (@open, @me);
+    foreach my $form (@$forms) {
+        my ($c, $o, $k, $e) = @$form;
+        next if ! $k->{id};
+        print $heading if $heading;
+        $heading = '';
+        my $id = $k->{id};
+        $id =~ s!^ticket/!!;
+        my $owner = $k->{Owner} eq 'Nobody' ? '' : $k->{Owner};
+        $owner = substr($owner, 0, 5);
+        my $queue = substr($k->{Queue}, 0, 5);
+        my $subject = substr($k->{Subject}, 0, 30);
+        my $age = date_diff($k->{Created});
+        my $told = $k->{Told} eq 'Not set' ? '' : date_diff($k->{Told});
+        my $status = substr($k->{Status}, 0, 6);
+        my $requestor = substr($k->{Requestors}, 0, 9);
+        my $line = sprintf "%6s %5s %5s %6s %6s %-6s %-9s %-30s\n",
+            $id, $owner, $queue, $age, $told, $status, $requestor, $subject;
+        if ( $k->{Owner} eq 'Nobody' ) {
+            push @open, $line;
+        } elsif ($k->{Owner} eq $config{user} ) {
+            push @me, $line;
+        } else {
+            print $line;
+        }
+    }
+    print "No matches found\n" if $heading;
+    printf "========== my %2d open tickets ==========\n", scalar @me if @me;
+    print @me if @me;
+    printf "========== %2d unowned tickets ==========\n", scalar @open if @open;
+    print @open if @open;
+}
+
+__DATA__
+
+Title: intro
+Title: introduction
+Text:
+
+    This is a command-line interface to RT 3.0 or newer.
+
+    It allows you to interact with an RT server over HTTP, and offers an
+    interface to RT's functionality that is better-suited to automation
+    and integration with other tools.
+
+    In general, each invocation of this program should specify an action
+    to perform on one or more objects, and any other arguments required
+    to complete the desired action.
+
+    For more information:
+
+        - rt help usage         (syntax information)
+        - rt help objects       (how to specify objects)
+        - rt help actions       (a list of possible actions)
+        - rt help types         (a list of object types)
+
+        - rt help config        (configuration details)
+        - rt help examples      (a few useful examples)
+        - rt help topics        (a list of help topics)
+
+--
+
+Title: usage
+Title: syntax
+Text:
+
+    Syntax:
+
+        rt <action> [options] [arguments]
+      or
+        rt shell
+
+    Each invocation of this program must specify an action (e.g. "edit",
+    "create"), options to modify behaviour, and other arguments required
+    by the specified action. (For example, most actions expect a list of
+    numeric object IDs to act upon.)
+
+    The details of the syntax and arguments for each action are given by
+    "rt help <action>". Some actions may be referred to by more than one
+    name ("create" is the same as "new", for example).  
+
+    You may also call "rt shell", which will give you an 'rt>' prompt at
+    which you can issue commands of the form "<action> [options] 
+    [arguments]".  See "rt help shell" for details.
+
+    Objects are identified by a type and an ID (which can be a name or a
+    number, depending on the type). For some actions, the object type is
+    implied (you can only comment on tickets); for others, the user must
+    specify it explicitly. See "rt help objects" for details.
+
+    In syntax descriptions, mandatory arguments that must be replaced by
+    appropriate value are enclosed in <>, and optional arguments are
+    indicated by [] (for example, <action> and [options] above).
+
+    For more information:
+
+        - rt help objects       (how to specify objects)
+        - rt help actions       (a list of actions)
+        - rt help types         (a list of object types)
+        - rt help shell         (how to use the shell)
+
+--
+
+Title: conf
+Title: config
+Title: configuration
+Text:
+
+    This program has two major sources of configuration information: its
+    configuration files, and the environment.
+
+    The program looks for configuration directives in a file named .rtrc
+    (or $RTCONFIG; see below) in the current directory, and then in more
+    distant ancestors, until it reaches /. If no suitable configuration
+    files are found, it will also check for ~/.rtrc, local/etc/rt.conf
+    and /etc/rt.conf.
+
+    Configuration directives:
+
+        The following directives may occur, one per line:
+
+        - server <URL>          URL to RT server.
+        - user <username>       RT username.
+        - passwd <passwd>       RT user's password.
+        - query <RT Query>      Default RT Query for list action
+        - orderby <order>       Default RT order for list action
+        - queue <queuename>     Default RT Queue for list action
+        - externalauth <0|1>    Use HTTP Basic authentication
+         explicitely setting externalauth to 0 inhibits also GSSAPI based
+         authentication, if LWP::Authen::Negotiate (and GSSAPI) is installed
+
+        Blank and #-commented lines are ignored.
+
+    Sample configuration file contents:
+
+         server  https://rt.somewhere.com/
+         # more than one queue can be given (by adding a query expression)
+         queue helpdesk or queue=support
+         query Status != resolved and Owner=myaccount
+
+
+    Environment variables:
+
+        The following environment variables override any corresponding
+        values defined in configuration files:
+
+        - RTUSER
+        - RTPASSWD
+        - RTEXTERNALAUTH
+        - RTSERVER
+        - RTDEBUG       Numeric debug level. (Set to 3 for full logs.)
+        - RTCONFIG      Specifies a name other than ".rtrc" for the
+                        configuration file.
+        - RTQUERY       Default RT Query for rt list
+        - RTORDERBY     Default order for rt list
+
+--
+
+Title: objects
+Text:
+
+    Syntax:
+
+        <type>/<id>[/<attributes>]
+
+    Every object in RT has a type (e.g. "ticket", "queue") and a numeric
+    ID. Some types of objects can also be identified by name (like users
+    and queues). Furthermore, objects may have named attributes (such as
+    "ticket/1/history").
+
+    An object specification is like a path in a virtual filesystem, with
+    object types as top-level directories, object IDs as subdirectories,
+    and named attributes as further subdirectories.
+
+    A comma-separated list of names, numeric IDs, or numeric ranges can
+    be used to specify more than one object of the same type. Note that
+    the list must be a single argument (i.e., no spaces). For example,
+    "user/root,1-3,5,7-10,ams" is a list of ten users; the same list
+    can also be written as "user/ams,root,1,2,3,5,7,8-10".
+    
+    If just a number is given as object specification it will be
+    interpreted as ticket/<number>
+
+    Examples:
+
+        1                   # the same as ticket/1
+        ticket/1
+        ticket/1/attachments
+        ticket/1/attachments/3
+        ticket/1/attachments/3/content
+        ticket/1-3/links
+        ticket/1-3,5-7/history
+
+        user/ams
+        user/ams/rights
+        user/ams,rai,1/rights
+
+    For more information:
+
+        - rt help <action>      (action-specific details)
+        - rt help <type>        (type-specific details)
+
+--
+
+Title: actions
+Title: commands
+Text:
+
+    You can currently perform the following actions on all objects:
+
+        - list          (list objects matching some condition)
+        - show          (display object details)
+        - edit          (edit object details)
+        - create        (create a new object)
+
+    Each type may define actions specific to itself; these are listed in
+    the help item about that type.
+
+    For more information:
+
+        - rt help <action>      (action-specific details)
+        - rt help types         (a list of possible types)
+
+    The following actions on tickets are also possible:
+
+        - comment       Add comments to a ticket
+        - correspond    Add comments to a ticket
+        - merge         Merge one ticket into another
+        - link          Link one ticket to another
+        - take          Take a ticket (steal and untake are possible as well)
+
+    For several edit set subcommands that are frequently used abbreviations
+    have been introduced. These abbreviations are:
+
+        - delete or del  delete a ticket           (edit set status=deleted)
+        - resolve or res resolve a ticket          (edit set status=resolved)
+        - subject        change subject of ticket  (edit set subject=string)
+        - give           give a ticket to somebody (edit set owner=user)
+
+--
+
+Title: types
+Text:
+
+    You can currently operate on the following types of objects:
+
+        - tickets
+        - users
+        - groups
+        - queues
+
+    For more information:
+
+        - rt help <type>        (type-specific details)
+        - rt help objects       (how to specify objects)
+        - rt help actions       (a list of possible actions)
+
+--
+
+Title: ticket
+Text:
+
+    Tickets are identified by a numeric ID.
+
+    The following generic operations may be performed upon tickets:
+
+        - list
+        - show
+        - edit
+        - create
+
+    In addition, the following ticket-specific actions exist:
+
+        - link
+        - merge
+        - comment
+        - correspond
+        - take
+        - steal
+        - untake
+        - give
+        - resolve
+        - delete
+        - subject
+
+    Attributes:
+
+        The following attributes can be used with "rt show" or "rt edit"
+        to retrieve or edit other information associated with tickets:
+
+        links                      A ticket's relationships with others.
+        history                    All of a ticket's transactions.
+        history/type/<type>        Only a particular type of transaction.
+        history/id/<id>            Only the transaction of the specified id.
+        attachments                A list of attachments.
+        attachments/<id>           The metadata for an individual attachment.
+        attachments/<id>/content   The content of an individual attachment.
+
+--
+
+Title: user
+Title: group
+Text:
+
+    Users and groups are identified by name or numeric ID.
+
+    The following generic operations may be performed upon them:
+
+        - list
+        - show
+        - edit
+        - create
+
+    In addition, the following type-specific actions exist:
+
+        - grant
+        - revoke
+
+    Attributes:
+
+        The following attributes can be used with "rt show" or "rt edit"
+        to retrieve or edit other information associated with users and
+        groups:
+
+        rights                  Global rights granted to this user.
+        rights/<queue>          Queue rights for this user.
+
+--
+
+Title: queue
+Text:
+
+    Queues are identified by name or numeric ID.
+
+    Currently, they can be subjected to the following actions:
+
+        - show
+        - edit
+        - create
+
+--
+
+Title: subject
+Text:
+
+    Syntax:
+
+        rt subject <id> <new subject text>
+
+    Change the subject of a ticket whose ticket id is given.
+
+--
+
+Title: give
+Text:
+
+    Syntax:
+
+        rt give <id> <accountname>
+
+    Give a ticket whose ticket id is given to another user.
+
+--
+
+Title: steal
+Text:
+
+        rt steal <id> 
+
+    Steal a ticket whose ticket id is given, i.e. set the owner to myself.
+
+--
+
+Title: take
+Text:
+
+    Syntax:
+
+        rt take <id>
+
+    Take a ticket whose ticket id is given, i.e. set the owner to myself.
+
+--
+
+Title: untake
+Text:
+
+    Syntax:
+
+        rt untake <id>
+
+    Untake a ticket whose ticket id is given, i.e. set the owner to Nobody.
+
+--
+
+Title: resolve
+Title: res
+Text:
+
+    Syntax:
+
+        rt resolve <id>
+
+    Resolves a ticket whose ticket id is given.
+
+--
+
+Title: delete
+Title: del
+Text:
+
+    Syntax:
+
+        rt delete <id>
+
+    Deletes a ticket whose ticket id is given.
+
+--
+
+Title: logout
+Text:
+
+    Syntax:
+
+        rt logout
+
+    Terminates the currently established login session. You will need to
+    provide authentication credentials before you can continue using the
+    server. (See "rt help config" for details about authentication.)
+
+--
+
+Title: ls
+Title: list
+Title: search
+Text:
+
+    Syntax:
+
+        rt <ls|list|search> [options] "query string"
+
+    Displays a list of objects matching the specified conditions.
+    ("ls", "list", and "search" are synonyms.)
+
+    Conditions are expressed in the SQL-like syntax used internally by
+    RT. (For more information, see "rt help query".) The query string
+    must be supplied as one argument.
+
+    (Right now, the server doesn't support listing anything but tickets.
+    Other types will be supported in future; this client will be able to
+    take advantage of that support without any changes.)
+
+    Options:
+
+        The following options control how much information is displayed
+        about each matching object:
+
+        -i             Numeric IDs only. (Useful for |rt edit -; see examples.)
+        -s             Short description.
+        -l             Longer description.
+        -f <field[s]   Display only the fields listed and the ticket id
+
+        In addition,
+        
+        -o +/-<field>  Orders the returned list by the specified field.
+        -r             reversed order (useful if a default was given)
+        -q queue[s]    restricts the query to the queue[s] given
+                       multiple queues are separated by comma
+        -S var=val     Submits the specified variable with the request.
+        -t type        Specifies the type of object to look for. (The
+                       default is "ticket".)
+
+    Examples:
+
+        rt ls "Priority > 5 and Status=new"
+        rt ls -o +Subject "Priority > 5 and Status=new"
+        rt ls -o -Created "Priority > 5 and Status=new"
+        rt ls -i "Priority > 5"|rt edit - set status=resolved
+        rt ls -t ticket "Subject like '[PATCH]%'"
+        rt ls -q systems
+        rt ls -f owner,subject
+
+--
+
+Title: show
+Text:
+
+    Syntax:
+
+        rt show [options] <object-ids>
+
+    Displays details of the specified objects.
+
+    For some types, object information is further classified into named
+    attributes (for example, "1-3/links" is a valid ticket specification
+    that refers to the links for tickets 1-3). Consult "rt help <type>"
+    and "rt help objects" for further details.
+
+    If only a number is given it will be interpreted as the objects
+    ticket/number and ticket/number/history
+
+    This command writes a set of forms representing the requested object
+    data to STDOUT.
+
+    Options:
+
+        The following options control how much information is displayed
+        about each matching object:
+
+        Without any formatting options prettyprinted output is generated.
+        Giving any of the two options below reverts to raw output.
+        -s      Short description (history and attachments only).
+        -l      Longer description (history and attachments only).
+
+        In addition,
+        -               Read IDs from STDIN instead of the command-line.
+        -t type         Specifies object type.
+        -f a,b,c        Restrict the display to the specified fields.
+        -S var=val      Submits the specified variable with the request.
+
+    Examples:
+
+        rt show -t ticket -f id,subject,status 1-3
+        rt show ticket/3/attachments/29
+        rt show ticket/3/attachments/29/content
+        rt show ticket/1-3/links
+        rt show ticket/3/history
+        rt show -l ticket/3/history
+        rt show -t user 2
+        rt show 2
+
+--
+
+Title: new
+Title: edit
+Title: create
+Text:
+
+    Syntax:
+
+        rt edit [options] <object-ids> set field=value [field=value] ...
+                                       add field=value [field=value] ...
+                                       del field=value [field=value] ...
+
+    Edits information corresponding to the specified objects.
+
+    A purely numeric object id nnn is translated into ticket/nnn
+
+    If, instead of "edit", an action of "new" or "create" is specified,
+    then a new object is created. In this case, no numeric object IDs
+    may be specified, but the syntax and behaviour remain otherwise
+    unchanged.
+
+    This command typically starts an editor to allow you to edit object
+    data in a form for submission. If you specified enough information
+    on the command-line, however, it will make the submission directly.
+
+    The command line may specify field-values in three different ways.
+    "set" sets the named field to the given value, "add" adds a value
+    to a multi-valued field, and "del" deletes the corresponding value.
+    Each "field=value" specification must be given as a single argument.
+
+    For some types, object information is further classified into named
+    attributes (for example, "1-3/links" is a valid ticket specification
+    that refers to the links for tickets 1-3). These attributes may also
+    be edited. Consult "rt help <type>" and "rt help object" for further
+    details.
+
+    Options:
+
+        -       Read numeric IDs from STDIN instead of the command-line.
+                (Useful with rt ls ... | rt edit -; see examples below.)
+        -i      Read a completed form from STDIN before submitting.
+        -o      Dump the completed form to STDOUT instead of submitting.
+        -e      Allows you to edit the form even if the command-line has
+                enough information to make a submission directly.
+        -S var=val
+                Submits the specified variable with the request.
+        -t type Specifies object type.
+
+    Examples:
+
+        # Interactive (starts $EDITOR with a form).
+        rt edit ticket/3
+        rt create -t ticket
+
+        # Non-interactive.
+        rt edit ticket/1-3 add cc=foo@example.com set priority=3 due=tomorrow
+        rt ls -t tickets -i 'Priority > 5' | rt edit - set status=resolved
+        rt edit ticket/4 set priority=3 owner=bar@example.com \
+                         add cc=foo@example.com bcc=quux@example.net
+        rt create -t ticket set subject='new ticket' priority=10 \
+                            add cc=foo@example.com
+
+--
+
+Title: comment
+Title: correspond
+Text:
+
+    Syntax:
+
+        rt <comment|correspond> [options] <ticket-id>
+
+    Adds a comment (or correspondence) to the specified ticket (the only
+    difference being that comments aren't sent to the requestors.)
+
+    This command will typically start an editor and allow you to type a
+    comment into a form. If, however, you specified all the necessary
+    information on the command line, it submits the comment directly.
+
+    (See "rt help forms" for more information about forms.)
+
+    Options:
+
+        -m <text>       Specify comment text.
+        -a <file>       Attach a file to the comment. (May be used more
+                        than once to attach multiple files.)
+        -c <addrs>      A comma-separated list of Cc addresses.
+        -b <addrs>      A comma-separated list of Bcc addresses.
+        -w <time>       Specify the time spent working on this ticket.
+        -e              Starts an editor before the submission, even if
+                        arguments from the command line were sufficient.
+
+    Examples:
+
+        rt comment -m 'Not worth fixing.' -a stddisclaimer.h 23
+
+--
+
+Title: merge
+Text:
+
+    Syntax:
+
+        rt merge <from-id> <to-id>
+
+    Merges the first ticket specified into the second ticket specified.
+
+--
+
+Title: link
+Text:
+
+    Syntax:
+
+        rt link [-d] <id-A> <link> <id-B>
+
+    Creates (or, with -d, deletes) a link between the specified tickets.
+    The link can (irrespective of case) be any of:
+
+        DependsOn/DependedOnBy:     A depends upon B (or vice versa).
+        RefersTo/ReferredToBy:      A refers to B (or vice versa).
+        MemberOf/HasMember:         A is a member of B (or vice versa).
+
+    To view a ticket's links, use "rt show ticket/3/links". (See
+    "rt help ticket" and "rt help show".)
+
+    Options:
+
+        -d      Deletes the specified link.
+
+    Examples:
+
+        rt link 2 dependson 3
+        rt link -d 4 referredtoby 6     # 6 no longer refers to 4
+
+--
+
+Title: grant
+Title: revoke
+Text:
+
+--
+
+Title: query
+Text:
+
+    RT uses an SQL-like syntax to specify object selection constraints.
+    See the <RT:...> documentation for details.
+    
+    (XXX: I'm going to have to write it, aren't I?)
+
+    Until it exists here a short description of important constructs:
+
+    The two simple forms of query expressions are the constructs
+    Attribute like Value and
+    Attribute = Value or Attribute != Value
+
+    Whether attributes can be matched using like or using = is built into RT.
+    The attributes id, Queue, Owner Priority and Status require the = or !=
+    tests.
+
+    If Value is a string it must be quoted and may contain the wildcard
+    character %. If the string does not contain white space, the quoting
+    may however be omitted, it will be added automatically when parsing
+    the input.
+
+    Simple query expressions can be combined using and, or and parentheses
+    can be used to group expressions.
+
+    As a special case a standalone string (which would not form a correct
+    query) is transformed into (Owner='string' or Requestor like 'string%')
+    and added to the default query, i.e. the query is narrowed down.
+
+    If no Queue=name clause is contained in the query, a default clause
+    Queue=$config{queue} is added.
+
+    Examples:
+    Status!='resolved' and Status!='rejected'
+    (Owner='myaccount' or Requestor like 'myaccount%') and Status!='resolved'
+
+--
+
+Title: form
+Title: forms
+Text:
+
+    This program uses RFC822 header-style forms to represent object data
+    in a form that's suitable for processing both by humans and scripts.
+
+    A form is a set of (field, value) specifications, with some initial
+    commented text and interspersed blank lines allowed for convenience.
+    Field names may appear more than once in a form; a comma-separated
+    list of multiple field values may also be specified directly.
+    
+    Field values can be wrapped as in RFC822, with leading whitespace.
+    The longest sequence of leading whitespace common to all the lines
+    is removed (preserving further indentation). There is no limit on
+    the length of a value.
+
+    Multiple forms are separated by a line containing only "--\n".
+
+    (XXX: A more detailed specification will be provided soon. For now,
+    the server-side syntax checking will suffice.)
+
+--
+
+Title: topics
+Text:
+
+    Syntax:
+
+        rt help <topic>
+
+    Get help on any of the following subjects:
+
+        - tickets, users, groups, queues.
+        - show, edit, ls/list/search, new/create.
+
+        - query                                 (search query syntax)
+        - forms                                 (form specification)
+
+        - objects                               (how to specify objects)
+        - types                                 (a list of object types)
+        - actions/commands                      (a list of actions)
+        - usage/syntax                          (syntax details)
+        - conf/config/configuration             (configuration details)
+        - examples                              (a few useful examples)
+
+--
+
+Title: example
+Title: examples
+Text:
+
+    some useful examples
+
+    All the following list requests will be restricted to the default queue.
+    That can be changed by adding the option -q queuename
+
+    List all tickets that are not rejected/resolved
+        rt ls
+    List all tickets that are new and do not have an owner
+        rt ls "status=new and owner=nobody"
+    List all tickets which I have sent or of which I am the owner
+        rt ls myaccount
+    List all attributes for the ticket 6977 (ls -l instead of ls)
+        rt ls -l 6977
+    Show the content of ticket 6977
+        rt show 6977
+    Show all attributes in the ticket and in the history of the ticket
+        rt show -l 6977
+    Comment a ticket (mail is sent to all queue watchers, i.e. AdminCc's)
+        rt comment 6977
+        This will open an editor and lets you add text (attribute Text:)
+        Other attributes may be changed as well, but usually don't do that.
+    Correspond a ticket (like comment, but mail is also sent to requestors)
+        rt correspond 6977
+    Edit a ticket (generic change, interactive using the editor)
+        rt edit 6977
+    Change the owner of a ticket non interactively
+        rt edit 6977 set owner=myaccount
+        or
+        rt give 6977 account
+        or
+        rt take 6977
+    Change the status of a ticket
+        rt edit 6977 set status=resolved
+        or
+        rt resolve 6977
+    Change the status of all tickets I own to resolved !!!
+        rt ls -i owner=myaccount | rt edit - set status=resolved
+
+--
+
+Title: shell
+Text:
+
+    Syntax:
+
+        rt shell
+
+    Opens an interactive shell, at which you can issue commands of 
+    the form "<action> [options] [arguments]".
+
+    To exit the shell, type "quit" or "exit".
+
+    Commands can be given at the shell in the same form as they would 
+    be given at the command line without the leading 'rt' invocation.
+
+    Example:
+        $ rt shell
+        rt> create -t ticket set subject='new' add cc=foo@example.com
+        # Ticket 8 created.
+        rt> quit
+        $
+
+--
+
+Title: take
+Title: untake
+Title: steal
+Text:
+
+    Syntax:
+
+        rt <take|untake|steal> <ticket-id>
+
+    Sets the owner of the specified ticket to the current user, 
+    assuming said user has the bits to do so, or releases the 
+    ticket.  
+    
+    'Take' is used on tickets which are not currently owned 
+    (Owner: Nobody), 'steal' is used on tickets which *are* 
+    currently owned, and 'untake' is used to "release" a ticket 
+    (reset its Owner to Nobody).  'Take' cannot be used on
+    tickets which are currently owned.
+
+    Example:
+        alice$ rt create -t ticket set subject="New ticket"
+        # Ticket 7 created.
+        alice$ rt take 7
+        # Owner changed from Nobody to alice
+        alice$ su bob
+        bob$ rt steal 7
+        # Owner changed from alice to bob
+        bob$ rt untake 7
+        # Owner changed from bob to Nobody
+
+--
+
+Title: quit
+Title: exit
+Text:
+
+    Use "quit" or "exit" to leave the shell.  Only valid within shell 
+    mode.
+
+    Example:
+        $ rt shell
+        rt> quit
+        $
+
+__END__
+
+=head1 NAME
+
+rt - command-line interface to RT 3.0 or newer
+
+=head1 SYNOPSIS
+
+    rt help
+
+=head1 DESCRIPTION
+
+This script allows you to interact with an RT server over HTTP, and offers an
+interface to RT's functionality that is better-suited to automation and
+integration with other tools.
+
+In general, each invocation of this program should specify an action to
+perform on one or more objects, and any other arguments required to complete
+the desired action.
+
diff --git a/bin/rt-crontool b/bin/rt-crontool
new file mode 100755 (executable)
index 0000000..b6a5b14
--- /dev/null
@@ -0,0 +1,487 @@
+#!/usr/bin/perl
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
+#                                          <sales@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+use strict;
+use Carp;
+
+use lib '/www/data/rt/rt-perl/current-perl10/share/perl5';
+use lib '/www/data/rt/rt-perl/current-perl10/lib/perl5';
+use lib '/www/data/rt/rt-perl/current-perl10/lib64/perl5';
+
+# fix lib paths, some may be relative
+BEGIN {
+    require File::Spec;
+    my @libs = ("lib", "local/lib");
+    my $bin_path;
+
+    for my $lib (@libs) {
+        unless ( File::Spec->file_name_is_absolute($lib) ) {
+            unless ($bin_path) {
+                if ( File::Spec->file_name_is_absolute(__FILE__) ) {
+                    $bin_path = ( File::Spec->splitpath(__FILE__) )[1];
+                }
+                else {
+                    require FindBin;
+                    no warnings "once";
+                    $bin_path = $FindBin::Bin;
+                }
+            }
+            $lib = File::Spec->catfile( $bin_path, File::Spec->updir, $lib );
+        }
+        unshift @INC, $lib;
+    }
+
+}
+
+use RT;
+
+use Getopt::Long;
+
+use RT::Interface::CLI qw(CleanEnv GetCurrentUser GetMessageContent loc);
+
+#Clean out all the nasties from the environment
+CleanEnv();
+
+my ( $search, $condition, $action, $search_arg, $condition_arg, $action_arg,
+     $template, $template_id, $transaction, $transaction_type, $help, $log, $verbose );
+GetOptions(
+    "search=s"           => \$search,
+    "search-arg=s"       => \$search_arg,
+    "condition=s"        => \$condition,
+    "condition-arg=s"    => \$condition_arg,
+    "action-arg=s"       => \$action_arg,
+    "action=s"           => \$action,
+    "template=s"         => \$template,
+    "template-id=s"      => \$template_id,
+    "transaction=s"      => \$transaction,
+    "transaction-type=s" => \$transaction_type,
+    "log=s"              => \$log,
+    "verbose|v"          => \$verbose,
+    "help"               => \$help,
+);
+
+# Load the config file
+RT::LoadConfig();
+
+# adjust logging to the screen according to options
+RT->Config->Set( LogToScreen => $log ) if $log;
+
+#Connect to the database and get RT::SystemUser and RT::Nobody loaded
+RT::Init();
+
+require RT::Tickets;
+require RT::Template;
+
+#Get the current user all loaded
+my $CurrentUser = GetCurrentUser();
+
+# show help even if there is no current user
+help() if $help;
+
+unless ( $CurrentUser->Id ) {
+    print loc("No RT user found. Please consult your RT administrator.");
+    exit(1);
+}
+
+help() unless $search && $action;
+
+$transaction = lc( $transaction||'' );
+if ( $transaction && $transaction !~ /^(first|all|last)$/i ) {
+    print STDERR loc("--transaction argument could be only 'first', 'last' or 'all'");
+    exit 1;
+}
+
+if ( $template && $template_id ) {
+    print STDERR loc("--template-id is deprecated argument and can not be used with --template");
+    exit 1;
+}
+elsif ( $template_id ) {
+# don't warn
+    $template = $template_id;
+}
+
+# We _must_ have a search object
+load_module($search);
+load_module($action)    if ($action);
+load_module($condition) if ($condition);
+
+my $void_scrip = RT::Scrip->new( $CurrentUser );
+my $void_scrip_action = RT::ScripAction->new( $CurrentUser );
+
+#At the appointed time:
+
+#find a bunch of tickets
+my $tickets = RT::Tickets->new($CurrentUser);
+my $search  = $search->new(
+    TicketsObj  => $tickets,
+    Argument    => $search_arg,
+    CurrentUser => $CurrentUser
+);
+
+$search->Prepare();
+
+# TicketsFound is an RT::Tickets object
+my $tickets = $search->TicketsObj;
+
+#for each ticket we've found
+while ( my $ticket = $tickets->Next() ) {
+    print $ticket->Id() . ":\n" if ($verbose);
+
+    my $template_obj = get_template( $ticket );
+
+    if ( $transaction ) {
+        my $txns = get_transactions($ticket);
+        my $found = 0;
+        while ( my $txn = $txns->Next ) {
+            print "\t".loc("Using transaction #[_1]...", $txn->id)."\n"
+                if $verbose;
+            process($ticket, $txn, $template_obj);
+            $found = 1;
+        }
+        print "\t".loc("Couldn't find suitable transaction, skipping")."\n"
+            if $verbose && !$found;
+    } else {
+        print "\t".loc("Processing without transaction, some conditions and actions may fail. Consider using --transaction argument")."\n"
+            if $verbose;
+
+        process($ticket, undef, $template_obj);
+    }
+}
+
+sub process {
+    my $ticket = shift;
+    my $transaction = shift;
+    my $template_obj = shift;
+
+    # perform some more advanced check
+    if ($condition) {
+        my $condition_obj = $condition->new(
+            TransactionObj => $transaction,
+            TicketObj      => $ticket,
+            ScripObj       => $void_scrip,
+            TemplateObj    => $template_obj,
+            Argument       => $condition_arg,
+            CurrentUser    => $CurrentUser,
+        );
+
+        # if the condition doesn't apply, get out of here
+
+        return unless $condition_obj->IsApplicable;
+        print "\t".loc("Condition matches...")."\n" if $verbose;
+    }
+
+    #prepare our action
+    my $action_obj = $action->new(
+        TicketObj      => $ticket,
+        TransactionObj => $transaction,
+        TemplateObj    => $template_obj,
+        Argument       => $action_arg,
+        ScripObj       => $void_scrip,
+        ScripActionObj => $void_scrip_action,
+        CurrentUser    => $CurrentUser,
+    );
+
+    #if our preparation, move onto the next ticket
+    return unless $action_obj->Prepare;
+    print "\t".loc("Action prepared...")."\n" if $verbose;
+
+    #commit our action.
+    return unless $action_obj->Commit;
+    print "\t".loc("Action committed.")."\n" if $verbose;
+}
+
+# =head2 get_transactions
+# 
+# Takes ticket and returns L<RT::Transactions> object with transactions
+# of the ticket according to command line arguments C<--transaction>
+# and <--transaction-type>.
+# 
+# =cut
+
+sub get_transactions {
+    my $ticket = shift;
+    my $txns = $ticket->Transactions;
+    my $order = $transaction eq 'last'? 'DESC': 'ASC';
+    $txns->OrderByCols(
+        { FIELD => 'Created', ORDER => $order },
+        { FIELD => 'id', ORDER => $order },
+    );
+    if ( $transaction_type ) {
+        $transaction_type =~ s/^\s+//;
+        $transaction_type =~ s/\s+$//;
+        foreach my $type ( split /\s*,\s*/, $transaction_type ) {
+            $txns->Limit( FIELD => 'Type', VALUE => $type, ENTRYAGGREGATOR => 'OR' );
+        }
+    }
+    $txns->RowsPerPage(1) unless $transaction eq 'all';
+    return $txns;
+}
+
+# =head2 get_template
+# 
+# Takes a ticket and returns a template according to command line options.
+# 
+# =cut
+
+{ my $cache = undef;
+sub get_template {
+    my $ticket = shift;
+    return undef unless $template;
+
+    unless ( $template =~ /\D/ ) {
+        # by id
+        return $cache if $cache;
+
+        my $cache = RT::Template->new( RT->SystemUser );
+        $cache->Load( $template );
+        die "Failed to load template '$template'"
+            unless $cache->id;
+        return $cache;
+    }
+
+    my $queue = $ticket->Queue;
+    return $cache->{ $queue } if $cache->{ $queue };
+
+    my $res = RT::Template->new( RT->SystemUser );
+    $res->LoadQueueTemplate( Queue => $queue, Name => $template );
+    unless ( $res->id ) {
+        $res->LoadGlobalTemplate( $template );
+        die "Failed to load template '$template', either for queue #$queue or global"
+            unless $res->id;
+    }
+    return $cache->{ $queue } = $res;
+} }
+
+
+# =head2 load_module
+# 
+# Loads a perl module, dying nicely if it can't find it.
+# 
+# =cut
+
+sub load_module {
+    my $modname = shift;
+    eval "require $modname";
+    if ($@) {
+        die loc( "Failed to load module [_1]. ([_2])", $modname, $@ );
+    }
+
+}
+
+
+
+# =head2 loc LIST
+# 
+# Localize this string, with the current user's currentuser object
+# 
+# =cut
+
+sub loc {
+    $CurrentUser->loc(@_);
+}
+
+
+sub help {
+
+    print loc( "[_1] is a tool to act on tickets from an external scheduling tool, such as cron.", $0 )
+      . "\n";
+    print loc("It takes several arguments:") . "\n\n";
+
+    print "    "
+      . loc( "[_1] - Specify the search module you want to use", "--search" )
+      . "\n";
+    print "    "
+      . loc( "[_1] - An argument to pass to [_2]", "--search-arg", "--search" )
+      . "\n";
+
+    print "    "
+      . loc( "[_1] - Specify the condition module you want to use", "--condition" )
+      . "\n";
+    print "    "
+      . loc( "[_1] - An argument to pass to [_2]", "--condition-arg", "--condition" )
+      . "\n";
+    print "    "
+      . loc( "[_1] - Specify the action module you want to use", "--action" )
+      . "\n";
+    print "    "
+      . loc( "[_1] - An argument to pass to [_2]", "--action-arg", "--action" )
+      . "\n";
+    print "    "
+      . loc( "[_1] - Specify name or id of template(s) you want to use", "--template" )
+      . "\n";
+    print "    "
+      . loc( "[_1] - Specify if you want to use either 'first', 'last' or 'all' transactions", "--transaction" )
+      . "\n";
+    print "    "
+      . loc( "[_1] - Specify the comma separated list of transactions' types you want to use", "--transaction-type" )
+      . "\n";
+    print "    "
+      . loc( "[_1] - Adjust LogToScreen config option", "--log" ) . "\n";
+    print "    "
+      . loc( "[_1] - Output status updates to STDOUT", "--verbose" ) . "\n";
+    print "\n";
+    print "\n";
+    print loc("Security:")."\n";
+    print loc("This tool allows the user to run arbitrary perl modules from within RT.")." ". 
+        loc("If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT.")." ".
+        loc("It is incredibly important that nonprivileged users not be allowed to run this tool."). " " . 
+        loc("It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool.")."\n";
+    print "\n";
+    print loc("Example:");
+    print "\n";
+    print " "
+      . loc( "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they are overdue:"
+      )
+      . "\n\n";
+
+    print " bin/rt-crontool \\\n";
+    print "  --search RT::Search::ActiveTicketsInQueue  --search-arg general \\\n";
+    print "  --condition RT::Condition::Overdue \\\n";
+    print "  --action RT::Action::SetPriority --action-arg 99 \\\n";
+    print "  --verbose\n";
+
+    print "\n";
+    print loc("Escalate tickets"). "\n";
+    print " bin/rt-crontool \\\n";
+    print "  --search RT::Search::ActiveTicketsInQueue  --search-arg general \\\n";
+    print"  --action RT::Action::EscalatePriority\n";
+
+
+
+    exit(0);
+}
+
+__END__
+
+=head1 NAME
+
+rt-crontool - a tool to act on tickets from an external scheduling tool
+
+=head1 SYNOPSIS
+
+    # find all active tickets in the queue 'general' and set their priority to 99 if they are overdue:
+    rt-crontool \
+      --search RT::Search::ActiveTicketsInQueue  --search-arg general \
+      --condition RT::Condition::Overdue \
+      --action RT::Action::SetPriority --action-arg 99 \
+      --verbose
+
+    # Escalate tickets
+      rt-crontool \
+        --search RT::Search::ActiveTicketsInQueue  --search-arg general \
+        --action RT::Action::EscalatePriority
+
+=head1 DESCRIPTION