summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManoj Srivastava <srivasta@debian.org>2014-05-26 16:16:43 -0700
committerManoj Srivastava <srivasta@debian.org>2014-05-26 16:16:43 -0700
commit773de339676ee789c45741a195e1005bdbc8595e (patch)
treecc6b650a76b717b20a829e373819df1bb805cf27
ucf (3.0030) unstable; urgency=low
* Updated german translations. (Closes: #748975). * Bug fix: #748975: "[L10N,DE] ucf: updated german debconf translation", thanks to Holger Wansing # imported from the archive
-rw-r--r--COPYING340
-rw-r--r--ChangeLog211
-rw-r--r--Makefile72
-rw-r--r--debian/ChangeLog84
-rw-r--r--debian/changelog1316
-rw-r--r--debian/compat1
-rw-r--r--debian/control40
-rw-r--r--debian/copyright24
-rw-r--r--debian/po/ChangeLog10
-rw-r--r--debian/po/POTFILES.in1
-rw-r--r--debian/po/ca.po146
-rw-r--r--debian/po/cs.po149
-rw-r--r--debian/po/da.po141
-rw-r--r--debian/po/de.po145
-rw-r--r--debian/po/es.po176
-rw-r--r--debian/po/eu.po151
-rw-r--r--debian/po/fi.po139
-rw-r--r--debian/po/fr.po152
-rw-r--r--debian/po/gl.po152
-rw-r--r--debian/po/it.po142
-rw-r--r--debian/po/ja.po140
-rw-r--r--debian/po/nl.po146
-rw-r--r--debian/po/pl.po164
-rw-r--r--debian/po/pt.po143
-rw-r--r--debian/po/pt_BR.po151
-rw-r--r--debian/po/ru.po145
-rw-r--r--debian/po/sk.po144
-rw-r--r--debian/po/sv.po143
-rw-r--r--debian/po/templates.pot129
-rw-r--r--debian/po/vi.po152
-rwxr-xr-xdebian/rules3
-rw-r--r--debian/source/format1
-rw-r--r--debian/templates46
-rw-r--r--debian/ucf.lintian-overrides7
-rwxr-xr-xdebian/ucf.postinst232
-rwxr-xr-xdebian/ucf.postrm185
-rwxr-xr-xdebian/ucf.preinst105
-rw-r--r--examples/ChangeLog6
-rw-r--r--examples/postinst153
-rw-r--r--examples/postrm115
-rwxr-xr-xlcf260
-rw-r--r--lcf.185
-rwxr-xr-xucf1076
-rw-r--r--ucf.1384
-rw-r--r--ucf.conf39
-rw-r--r--ucf.conf.5120
-rwxr-xr-xucfq851
-rw-r--r--ucfq.1235
-rwxr-xr-xucfr336
-rw-r--r--ucfr.1157
50 files changed, 9445 insertions, 0 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..a3f6b12
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..982c380
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,211 @@
+2008-02-21 Manoj Srivastava <srivasta@debian.org>
+
+ * ucfq (process):
+ srivasta@debian.org--lenny/ucf--devel--3.0--patch-2 Niko
+ Tyni says ucfq /path/to/file never gives any output. It
+ looks like the problem is that ^/ is matched twice with
+ the global option (m//g) on the filename in
+ ucf::process(), so the second one fails looking for the
+ next match. I don't see the need for global match here,
+ and removing the /g fixesthis for me.
+ (report): srivasta@debian.org--lenny/ucf--devel--3.0--patch-2
+ Major changes to ensure that the modified column
+ actually contains a valid value. This whole script needs
+ a rewrite.
+
+2007-11-30 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf (newsum):
+ srivasta@debian.org--lenny/ucf--devel--3.0--patch-1 For
+ "keep current" and "threeway merge", ucf expects answers
+ from debconf which differ from what is specified in the
+ template master. Frans Pop suggested using the Choices-C
+ feature of debconf, which is relatively new, but defines
+ a fixed alias for each option which Debconf will then
+ use in db_get and db_set operations -- so no more
+ matching the template in the code.
+
+2007-09-19 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf (choice_keep_current):
+ srivasta@debian.org--lenny/ucf--devel--3.0--base-0
+ Change the name to fit the changed template
+
+2007-05-05 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf (show_diff):
+ srivasta@debian.org--lenny/ucf--devel--2.0--patch-1
+ Users using a Graphical frontend are surprised when the
+ display apparently just blocks when they ask to see a
+ diff (or 3-way diff) of the configuration file being
+ handled, when actually the diff is displayed on the
+ terminal window ucf was run on. Until the debconf-escape
+ utility and the escape CAPB support, db_subst ran into
+ newline and line length issues. Patch from Michael Vogt.
+
+2007-04-17 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf.1: srivasta@debian.org--lenny/ucf--devel--2.0--base-0
+ Document that ucf now tries to preserve owner/permission
+ bits for the file.
+
+ * ucf: srivasta@debian.org--lenny/ucf--devel--2.0--base-0 As far
+ as possible, preserve file attributes like ownership and
+ permission by using cp -pf instead of just cp -f.
+
+2007-02-25 Manoj Srivastava <srivasta@debian.org>
+
+ * ucfr (safe_conf_file):
+ srivasta@debian.org--etch/ucf--devel--2.0--versionfix-4
+ Reincorporate the fix from the NMU. Add a space before
+ the echo.
+
+2007-02-24 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--versionfix-3
+ Add documentation clarifying the primary use for ucf.
+
+ * ucfr (safe_conf_file):
+ srivasta@debian.org--etch/ucf--devel--2.0--versionfix-2
+ Add $progname: prefix to all error messages.
+
+2007-01-18 Manoj Srivastava <srivasta@debian.org>
+
+ * ucfr.1: srivasta@debian.org--etch/ucf--devel--2.0--versionfix-1
+ Emphasize that the full path to the configuration file
+ is expected.
+
+ * ucfq.1: srivasta@debian.org--etch/ucf--devel--2.0--versionfix-1
+ Ditto.
+
+ * ucfr (safe_conf_file):
+ srivasta@debian.org--etch/ucf--devel--2.0--versionfix-1
+ Issue a diagnostic, and exit gracefully if the
+ registration request has not provided a full path to the
+ configuration file. For lenny, the graceful exit shall
+ be changed into die with a error message.
+
+ * ucfq (process):
+ srivasta@debian.org--etch/ucf--devel--2.0--versionfix-1
+ Issue a diagnostic, and exit gracefully if the query has
+ not provided a full path to the configuration file. For
+ lenny, the graceful exit shall be changed into die with
+ a error message.
+
+ * ucf: srivasta@debian.org--etch/ucf--devel--2.0--patch-20 Typo
+ fix.
+
+ * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-20 Typo
+ fix.
+
+2006-11-16 Manoj Srivastava <srivasta@debian.org>
+
+ * ucfr.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-18 Typo
+ fixes: cofiguration -> configuration, asociating ->
+ associating, mutiple -> multiple
+
+ * ucfq.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-18 Typo
+ Fix: modfied -> modified
+
+ * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-18 Typo
+ fix: "witht he" -> "with the"
+
+2006-10-23 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf (TEMP): srivasta@debian.org--etch/ucf--devel--2.0--patch-17
+ Use readlink to canonicalize the path names presented to
+ ucf. This ensures that we keep track of information
+ about the correct file in ucf, even if it is referred to
+ differently (like, multiple ///s, or a/../a/)
+
+ * ucfq: srivasta@debian.org--etch/ucf--devel--2.0--patch-16 The
+ package name is ucf, not Ucf. Fixes the usage help
+ output.
+
+2006-09-11 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf.1 (needed):
+ srivasta@debian.org--etch/ucf--devel--2.0--patch-15 Typo fix.
+
+2006-08-20 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-14
+ Document various extensions optionally used by ucf to
+ store copies of versions of configuration files ucf is
+ working with.
+
+2006-06-16 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf (safe_dest_file):
+ srivasta@debian.org--etch/ucf--devel--2.0--patch-12
+ Improve the handling of finding a sensible pager. This
+ now handles a messed up /etc/alternatives/paper
+ setting. Also included sensible pager as an
+ alternative, and fall back to /bin/more if
+ needed. Also, allow for readlink failures.
+
+2006-04-11 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-8 Added
+ documentation for the --state-dir option.
+
+ * ucfr.1: Documentation for the new command ucfr
+
+ * ucfr: New file. Associates, and disassociates, a package name
+ with configuration files.
+
+ * Makefile (check):
+ srivasta@debian.org--etch/ucf--devel--2.0--patch-8 Added
+ a check for ucfr
+ (install):
+ srivasta@debian.org--etch/ucf--devel--2.0--patch-8
+ Install ucfr and manual page as well
+
+ * ucf (NEW_SUFFIX):
+ srivasta@debian.org--etch/ucf--devel--2.0--patch-7 Added
+ new variables to hold the suffix we use todenote the
+ {maintainers, old, new} versions of a file. Used to be
+ dpkg-{dist,old,new}, now it is ucf-{dist,old,new}.
+
+2005-09-20 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf (newsum): srivasta@debian.org--etch/ucf--devel--2.0--patch-4
+ Added support for side-by-side diffs, This is very
+ similar to doing a standard diff, apart from calling
+ sdiff instead (and change the option switches around as
+ needed.
+
+2005-09-01 Manoj Srivastava <srivasta@debian.org>
+
+ * examples/postrm:
+ srivasta@debian.org--etch/ucf--devel--2.0--patch-2 only
+ use ucf if it is available
+
+2005-08-08 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf: srivasta@debian.org--etch/ucf--devel--2.0--patch-1 Add code
+ to determine the value of UCF_FORCE_CONFFMISS, looking
+ at the command line, env variable, config file, or
+ default (the default being unset). No command line
+ option is currently available, but the underpinning are
+ there. Replace the destination file, if missing, and iff
+ the variable is set.
+
+ * ucf.1: srivasta@debian.org--etch/ucf--devel--2.0--patch-1
+ Document UCF_FORCE_CONFFMISS. This environment variable
+ is only applicable when the installed destination file
+ does not exist (perhaps due to user removal),and forces
+ ucf to recreate the missing file (the default behaviour
+ is to honor the users wishes and not recreate the
+ locally deleted file).
+
+2005-06-25 Manoj Srivastava <srivasta@debian.org>
+
+ * ucf (safe_dest_file):
+ srivasta@debian.org--etch/ucf--devel--0.1--base-0 Well,
+ setting VERBOSE to 0 is the same as being quiet,
+ according to the man page. Unfortunately, the code
+ actually looked to see if VERBOSE was set (even if set
+ to 0). Now, we unset VERBOSE if the user had set it to
+ 0, making everyone happy.
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..0c8723a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,72 @@
+############################ -*- Mode: Makefile -*- ###########################
+## Makefile<ucf> ---
+## Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com )
+## Created On : Tue Nov 18 22:00:27 2003
+## Created On Node : glaurung.green-gryphon.com
+## Last Modified By : Manoj Srivastava
+## Last Modified On : Sun Apr 16 16:32:23 2006
+## Last Machine Used: glaurung.internal.golden-gryphon.com
+## Update Count : 6
+## Status : Unknown, Use with caution!
+## HISTORY :
+## Description :
+##
+###############################################################################
+prefix = $(DESTDIR)
+package = ucf
+
+ETCDIR = $(prefix)/etc
+BINDIR = $(prefix)/usr/bin
+DEBLIBDIR = $(prefix)/var/lib/$(package)
+DEBDOCDIR = $(prefix)/usr/share/doc/$(package)
+MANDIR = $(prefix)/usr/share/man/
+MAN1DIR = $(MANDIR)/man1
+MAN5DIR = $(MANDIR)/man5
+
+# install commands
+install_file := /usr/bin/install -p -o root -g root -m 644
+install_program := /usr/bin/install -p -o root -g root -m 755
+make_directory := /usr/bin/install -p -d -o root -g root -m 755
+
+all build: check
+
+check:
+ bash -n ucf
+ bash -n ucfr
+ perl -wc ucfq
+ bash -n debian/ucf.preinst
+ bash -n debian/ucf.postinst
+ bash -n debian/ucf.postrm
+
+install:
+ $(make_directory) $(BINDIR)
+ $(make_directory) $(ETCDIR)
+ $(make_directory) $(MAN1DIR)
+ $(make_directory) $(MAN5DIR)
+ $(make_directory) $(DEBLIBDIR)
+ $(make_directory) $(DEBDOCDIR)/examples
+ $(install_program) ucf $(BINDIR)
+ $(install_file) ucf.1 $(MAN1DIR)
+ gzip -9fq $(MAN1DIR)/ucf.1
+ $(install_program) ucfr $(BINDIR)
+ $(install_file) ucfr.1 $(MAN1DIR)
+ gzip -9fq $(MAN1DIR)/ucfr.1
+ $(install_program) ucfq $(BINDIR)
+ $(install_file) ucfq.1 $(MAN1DIR)
+ gzip -9fq $(MAN1DIR)/ucfq.1
+ $(install_program) lcf $(BINDIR)
+ $(install_file) lcf.1 $(MAN1DIR)
+ gzip -9fq $(MAN1DIR)/lcf.1
+ $(install_file) ucf.conf.5 $(MAN5DIR)
+ gzip -9fq $(MAN5DIR)/ucf.conf.5
+ $(install_file) ucf.conf $(ETCDIR)
+ $(install_file) debian/changelog $(DEBDOCDIR)/changelog
+ gzip -9frq $(DEBDOCDIR)
+# make sure the copyright file is not compressed
+ $(install_file) debian/copyright $(DEBDOCDIR)/copyright
+ $(install_file) examples/postinst $(DEBDOCDIR)/examples/
+ $(install_file) examples/postrm $(DEBDOCDIR)/examples/
+
+clean distclean:
+ @echo nothing to do for clean
+
diff --git a/debian/ChangeLog b/debian/ChangeLog
new file mode 100644
index 0000000..05ca07f
--- /dev/null
+++ b/debian/ChangeLog
@@ -0,0 +1,84 @@
+2007-11-30 Manoj Srivastava <srivasta@debian.org>
+
+ * control (Depends):
+ srivasta@debian.org--lenny/debian-dir--ucf--2.0--patch-5
+ Update the dependency on debconf version, since we use
+ the Choices-C feature.
+
+2007-05-05 Manoj Srivastava <srivasta@debian.org>
+
+ * templates.master (Template):
+ srivasta@debian.org--lenny/debian-dir--ucf--2.0--patch-1
+ Added a note (ucf/show_diff) to help showthe diff
+ between files.
+
+ * templates (Template):
+ srivasta@debian.org--lenny/debian-dir--ucf--2.0--patch-1
+ Added Russian translation
+
+ * control (Depends):
+ srivasta@debian.org--lenny/debian-dir--ucf--2.0--patch-1
+ Updated the version of the debconf dependency, since we
+ now use CAPB escape. Left in the debconf-2.0 as is,
+ since I am assuming anything that provides debconf-2.0
+ should be a drop in replacement, or that should be
+ considered a bug.
+
+2006-11-16 Manoj Srivastava <srivasta@debian.org>
+
+ * postrm (package_name):
+ srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-30
+ Only remove /var/lib/ucf/cache and stuff when it exists
+ during purge
+
+2006-04-11 Manoj Srivastava <srivasta@debian.org>
+
+ * copyright:
+ srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-18
+ Updated the years for copyright.
+
+2006-03-12 Manoj Srivastava <srivasta@debian.org>
+
+ * postrm (package_name):
+ srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-16
+ it is -type f, not -type -f
+
+2006-03-05 Manoj Srivastava <srivasta@debian.org>
+
+ * postrm (package_name):
+ srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-15
+ Make sure we get rid of all cached files also when
+ purged
+
+2006-01-23 Manoj Srivastava <srivasta@debian.org>
+
+ * postrm (package_name):
+ srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-14
+ Also remove backups of hash files on purge
+
+2005-08-31 Manoj Srivastava <srivasta@debian.org>
+
+ * templates (Template):
+ srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-5
+ Added Vietnamese translation.
+
+ * po/vi.po:
+ srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-5
+ Added new Vietnamese translation for UCF.
+
+2005-06-25 Manoj Srivastava <srivasta@debian.org>
+
+ * templates (Template):
+ srivasta@debian.org--etch/debian-dir--ucf--1.0--base-0
+ Added polish translation
+
+ * po/pl.po: srivasta@debian.org--etch/debian-dir--ucf--1.0--base-0
+ New translation
+
+ * debian/postrm (package_name):
+ srivasta@debian.org--etch/debian-dir--ucf--1.0--base-0
+ Also remove /var/lib/ucf/cache if it is empty. The
+ problem was that since the cache directory existed, ucf
+ was leaving /var/lib/ucf behind on purge, which was
+ bad. Thanks to Lars Wirzenius for noticing.
+
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..2ed5083
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,1316 @@
+ucf (3.0030) unstable; urgency=low
+
+ * Updated german translations. (Closes: #748975).
+ * Bug fix: #748975: "[L10N,DE] ucf: updated german debconf translation",
+ thanks to Holger Wansing
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 26 May 2014 16:16:43 -0700
+
+ucf (3.0029) unstable; urgency=medium
+
+ * When asking how to handle an upodate to a locally modified
+ configuration file, ucf does not tell the user where the new version
+ of the configuration file lives. This makes it hard to take action
+ when opening a new shell. This commit updates the debconf templates to
+ include that information. (Closes: #616486, #747295, #747299)
+ (Closes: #747310, #747312, #747335, #747346, #747371, #747450)
+ (Closes: #747533, #748148, #748178, #748371).
+ * ucf uses getopt(1) to process command line arguments. The debug
+ options take a an optional level. For short options, If the option has
+ an optional argument, it must be written directly after the option
+ character if present. For long options, the optional argument must be
+ written directly after the long option name, separated by `=', if
+ present. This is now documented in the manual page.
+ * Document that ucf --purge can be used to make ucf forget about the
+ state of the previous decisions for a configuration file, so that when
+ the package is updated or reinstalled, ucf will ask again about
+ disposition, (Closes: #566277).
+ * Bug fix #616486: "The start a shell option gives user no clue about
+ the location of maintainer version of config file", thanks to Robert
+ Luberda
+ * Bug fix #747295: "[INTL:sv] Swedish strings for ucf debconf", thanks
+ to Martin Bagge
+ * Bug fix #747299: "[l10n:eu] ucf 3.0028: updated Basque translation",
+ thanks to Iñaki Larrañaga Murgoitio
+ * Bug fix #747310: "[INTL:fr] French debconf templates translation
+ update", thanks to Christian Perrier
+ * Bug fix #747312: "[INTL:pt] Portuguese translation for debconf
+ messages (update)", thanks to Américo Monteiro
+ * Bug fix #747335: "[INTL:ru] Russian debconf templates translation
+ update", thanks to Yuri Kozlov
+ * Bug fix #747346: "[INTL:fi] Updated Finnish translation of the debconf
+ templates", thanks to Esko Arajärvivim Portuguese
+ * Bug fix #747371: "[INTL:ja] update Japanese debconf translation",
+ thanks to Kenshi Muto.
+ * Bug fix #747450: "[INTL:da] Danish translation of the debconf
+ templates ucf", thanks to Joe Dalton
+ * Bug fix #747533: "[INTL:sk] Slovak po-debconf translation", thanks to
+ Slavko
+ * Bug fix #566277: "no renewed question b/c changed config files",
+ thanks to arne anka
+ * Bug fix #748148: "[INTL:pl] Updated Polish debconf translation",
+ thanks to Michał Kułach
+ * Bug fix #748178: "[INTL:pt_BR] Brazilian Portuguese debconf templates
+ translation", thanks to Adriano Rafael Gomes
+ * Bug fix #748371: "[l10n] Updated Czech translation of ucf debconf
+ messages", thanks to Miroslav Kure
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 17 May 2014 16:00:42 -0700
+
+ucf (3.0028) unstable; urgency=medium
+
+ * Ack the NMU.
+ * Bug fix: "Should not claim files differ if $newsum and $destsum are
+ identical", thanks to Frank Küster (Closes: #633391).
+ * Differentiate between the file being registered in the registry and
+ the RE used to look it up. Account for the fact that the file being
+ registered might be a s symlink, so follow links for the
+ registry. Since registering symlinks is broken already, and we should
+ be registering files and not symlinks anyway. ucf already did follow
+ the symbolic links, it is only ucfr that needed changing.
+ * Bug fix: "database corruption if ucfr is used on symlinks instead of
+ files", thanks to Andreas Beckmann (Closes: #724457).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 26 Apr 2014 15:45:35 -0700
+
+ucf (3.0027+nmu1) unstable; urgency=medium
+
+ [ Andreas Beckmann ]
+ * Non-maintainer upload.
+ * Set urgency to medium for RC bugfix.
+ * Fix VCS-Git URL to not point to an outdated repository.
+
+ [ Mathieu Parent ]
+ * Put the Cwd at the right place. (Closes: #711055)
+
+ -- Andreas Beckmann <anbe@debian.org> Mon, 01 Jul 2013 02:59:15 +0200
+
+ucf (3.0027) unstable; urgency=low
+
+ * Use dpkg-query --control-path instead of hard-coding a path to our
+ debconf templates file, for compatibility with multiarch. The patch
+ had apparently gotten reverted somewhere.
+ * Now that wheezy has been released, moving to unstable.
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 18 May 2013 16:26:58 -0700
+
+ucf (3.0026) experimental; urgency=low
+
+ * Acknowledge NMUs. Thanks, bubulle.
+ * Bug fix: "starting a new shell fails from console", thanks to EmaRsk
+ (Closes: #574266). The fix was provided by Aaron Hope <asbestos@xemed.com>
+ * Bug fix: "$PAGER ignored", thanks to David Fries (Closes: #596452).
+ * Bug fix: "ucf fails when VERBOSE is set to 1 in /etc/ucf.conf", thanks
+ to Aljoscha Lautenbach (Closes: #577127). The same bug was also
+ repprted as "--verbose option changes return code", thanks to Frank
+ Küster (Closes: #631231).
+ * Bug fix: "Small typo in ucf help", thanks to Tomasz Muras
+ (Closes: #577582).
+ * Bug fix: "ucfr exits successfully despite syntax error", thanks to
+ Sven Joachim (Closes: #573455).
+ * Bug fix: "ucfr should collapse duplicate slashes in paths", thanks to
+ Olivier Berger (Closes: #638187).
+ * Bug fix: "should be tagged Multi-Arch: foreign", thanks to
+ hriase1@post-ist-da.de (Closes: #670711).
+
+ -- Manoj Srivastava <srivasta@debian.org> Wed, 24 Apr 2013 03:10:05 -0700
+
+ucf (3.0025+nmu3) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * No longer hardcode debconf templates file location
+ Closes: #615931
+ * Fix pending l10n issues. Debconf translations:
+ - Slovak (Slavko). Closes: #639443
+ - Polish (Michał Kułach). Closes: #661480
+
+ -- Christian Perrier <bubulle@debian.org> Thu, 05 Apr 2012 08:25:42 +0200
+
+ucf (3.0025+nmu2) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Fix pending l10n issues. Debconf translations:
+ - Brazilian Portuguese (Flamarion Jorge). Closes: #594786
+ - Dutch; (Jeroen Schot). Closes: #622789
+
+ -- Christian Perrier <bubulle@debian.org> Fri, 15 Apr 2011 08:27:12 +0200
+
+ucf (3.0025+nmu1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Fix pending l10n issues. Debconf translations:
+ - Italian (Luca Bruno). Closes: #559554
+ - Catalan (Jordi Mallach). Closes: #588304
+ - Danish (Joe Hansen). Closes: #588369
+ - Portuguese (Américo Monteiro). Closes: #588980
+ - Spanish (Javier Fernandez-Sanguino). Closes: #592174
+
+ -- Christian Perrier <bubulle@debian.org> Sat, 28 Aug 2010 08:55:44 +0200
+
+ucf (3.0025) unstable; urgency=low
+
+ * [ucf 39603a0] Added russian translation.
+ Bug fix: "[INTL:ru] Russian debconf templates translation update",
+ thanks to Yuri Kozlov (Closes: #551163).
+ * Bug fix: "[INTL:fr] French debconf templates translation update",
+ thanks to Christian Perrier (Closes: #551650).
+ * Bug fix: "[INTL:eu] ucf Basque translation", thanks to Piarres Beobide
+ (Closes: #552804).
+ * Bug fix: "[INTL:de] German translation for ucf (debconf)", thanks to
+ Erik Schanze (Closes: #553398).
+ * Bug fix: "[INTL:gl] ucf debconf translation update", thanks to marce
+ (Closes: #554630).
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 20 Nov 2009 14:48:08 -0600
+
+ucf (3.0024) unstable; urgency=low
+
+ * Bug fix: "[INTL:ja] updated Japanese debconf translation", thanks to
+ Kenshi Muto (Closes: #551080).
+ * Bug fix: "[INTL:sv] Swedish strings for ucf3 debconf", thanks to
+ Martin Bagge (Closes: #550869).
+ * Bug fix: "[l10n] Updated Czech translation of ucf debconf messages",
+ thanks to Miroslav Kure (Closes: #550870).
+ * Bug fix: "[INTL:fi] Updated Finnish translation of the debconf
+ templates", thanks to Esko Arajärvi (Closes: #550878).
+ * Bug fix: "[INTL:vi] Vietnamese debconf templates translation update",
+ thanks to Clytie Siddall (Closes: #550944).
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 15 Oct 2009 13:40:46 -0500
+
+ucf (3.0023) unstable; urgency=low
+
+ * Bug fix: "[INTL:vi] Vietnamese debconf templates translation update",
+ thanks to Clytie Siddall (Closes: #548014).
+ * Bug fix: "Missleading dialogue text", thanks to Christian Meyer
+ (Closes: #546711).
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 13 Oct 2009 01:42:27 -0500
+
+ucf (3.0022) unstable; urgency=low
+
+ * Bug fix: "[INTL:ja] updated Japanese debconf translation", thanks to
+ Kenshi Muto (Closes: #544048).
+ * Bug fix: "[INTL:eu] ucf debconf templates Basque translation update",
+ thanks to Piarres Beobide (Closes: #544142).
+ * Bug fix: "[l10n] Updated Czech translation of ucf debconf messages",
+ thanks to Miroslav Kure (Closes: #544326).
+ * Bug fix: "[INTL:sv] Swedish strings for ucf debconf", thanks to Martin
+ Bagge (Closes: #544595).
+ * Bug fix: "[INTL:ru] Russian debconf templates translation update",
+ thanks to Yuri Kozlov (Closes: #544735).
+ * Updated Catalan translation, thanks to Jordi Mallach Pérez
+ * Bug fix: "[INTL:de] German translation for ucf (debconf)", thanks to
+ Erik Schanze (Closes: #546243).
+ * Bug fix: "[INTL:fr] French debconf templates translation update",
+ thanks to Christian Perrier (Closes: #546309).
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 14 Sep 2009 10:35:59 -0500
+
+ucf (3.0021) unstable; urgency=low
+
+ * [f70b2c6]: Handle errors in three way merges This fix is one that
+ was first implemented in Ubuntu, and has only been lightly modified.
+ The problem was the handling of merge failures in three way merges,
+ ucf used to just pass the error through to the maintainer script,
+ and so a merge failure resulted in a maintainer script failure,
+ which could cascade in a upgrade. However, trapping the error, and
+ showing it via debconf, and then returning to the ucf debconf menu
+ allows users to resolve this issue as they please. This patch
+ implements that.
+ Bug fix: "three-way-merge errors cause upgrade pains", thanks to Steve
+ Langasek (Closes: #543593).
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 27 Aug 2009 00:23:16 -0500
+
+ucf (3.0020) unstable; urgency=low
+
+ * [cdeb86b]: Sleep for 3 seconds after emitting warning
+ When there is no tty present (which means we cannot attach to the
+ keyboard), and there is no DISPLAY set, which means we cannopt fire
+ off another window, we cannot fork off a shell. This is not a bug,
+ really, but merely a reality. This patch sleeps for a couple of
+ seconds so that the error message we dump on STDERR can be read.
+ Bug fix: "ucf can't start subshell", thanks to Matthew Gabeler-Lee
+ (Closes: #543367).
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 24 Aug 2009 13:47:48 -0500
+
+ucf (3.0019) unstable; urgency=low
+
+ * Disable invalid Italian translation that collides with the translation
+ for another string, thanks to Steve Langasek. This was pointed out by
+ an Ubuntu user, and the fix comes from Ubuntu.
+ Bug fix: "Italian translation fails to distinguish between two
+ options", thanks to Steve Langasek (Closes: #543161).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 22 Aug 2009 23:08:03 -0500
+
+ucf (3.0018) unstable; urgency=low
+
+ * Update the package priority, it is now standard, not optional.
+ * [d984e79]: Do not restore $@ until after sanity checks.
+ Bug fix: "Need exactly two arguments, got 3", thanks to Kurt Roeckx
+ (Closes: #520626).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 21 Mar 2009 23:39:48 -0500
+
+ucf (3.0017) unstable; urgency=low
+
+ * [989de4e]: No longer use a non debconf method to prompt the user
+ Also, only run bash directly is the script has a terminal backend.
+ Failing that, if DISPLAY is set, try to start a terminal emulator.
+ If there is no tty and no DISPLAY, gibber and do nothing.
+ * [6e5ba1b]: Save and restore command line arguments after parsing
+ This way, when the script is called again under debconf, the command
+ line arguments are still around, and have not been eliminated during
+ parsing. And no, getopt was not to blame, ucf was nuking the
+ commandline itself.
+ Bug fix: "ucf was run from a maintainer script that uses debconf
+ [...]", thanks to Michael Prokop (Closes: #512832).
+ * [ea1c15d]: Stash any configuration file less than 25KB in size
+ Also, allow the three way merge options whenever there is a stashed
+ version of the file, whether or not the package maintainer has
+ explicitly asked for a three way capability. This way, are closer to
+ making three way capabilities the default, except for large
+ configuration files, where large is defined as 25 KB.
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 21 Mar 2009 00:02:03 -0500
+
+ucf (3.0016) unstable; urgency=low
+
+ * [bd1dfcb]: Substitute the ucf/show_diff DIFF variable contents to
+ protect sensitive data. The previous fix said "reset diff question
+ after use so contents are not written to disk". Unfortunately this is
+ not enough (or even needed): the sensitive data is not stored in the
+ value of ucf/show_diff, but in the DIFF variable associated with it.
+ Bug fix: "ucf stores diff (of private files) in debconf (world readable)"
+ Closes: Bug#511893 Author: Niko Tyni <ntyni@debian.org>
+ * [f5cbbdf]: Show the differences on the first try
+ Until 3.0012, ucf/show_diff was reset just before showing it to the
+ user. This would unset the 'seen' flag properly. However, moving the
+ db_reset call after db_input made the latter skip the note on the
+ first time if the 'seen' flag was already set. To make things worse,
+ Debconf::ConfModule::finish() sets the 'seen' flag for all the
+ questions it has handled before exiting, so the flag was always true
+ after debconf exited. Simply unsetting the flag before db_input fixes
+ this.
+ Bug fix: "skips differences on the first try", thanks to Niko Tyni
+ (Closes: #514071).
+ * [debiandir:dce60af]: Update the location of the copyright file
+ Since I have not elected to license this under later versions of the
+ GPL, the license link in the copyright fle must change.
+ * Updated lintian overrides to shut lintian up.
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 06 Feb 2009 13:48:44 -0600
+
+ucf (3.0015) unstable; urgency=low
+
+ * [e63973f]: Use which, not type -a -p
+
+ Although the 'type' command is used by /usr/bin/ucf, a 'type' built-in
+ command cannot be used by posh. It is safer to use '/bin/which'
+ contained in debianutils.
+
+ Bug fix: "Shell which cannot use the type command", thanks to Jonny
+ Closes: Bug#513755
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 03 Feb 2009 10:13:20 -0600
+
+ucf (3.0014) unstable; urgency=low
+
+ * [bd4d0af]: Short circuit if we are purging (no need to invoke debconf)
+ Also, since we do not have two arguments when we are purging, move the
+ new file processing to after the point where we exit in purge
+ mode.
+ Bug fix: "subprocess post-removal script returned error exit status
+ 20", thanks to Bastian Blank (Closes: #512903).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 25 Jan 2009 11:05:52 -0600
+
+ucf (3.0013) unstable; urgency=low
+
+ * [99736cc]: Move the debconf stuff _after_ command line parsing
+ If it is done earlier, the DEBCONF_OK flag is not set yet. This is
+ majorly bad. Closes: Bug#512905
+ Bug fix: "ucf was run from a maintainer script that uses debconf
+ [...]", thanks to Michael Prokop (Closes: #512832).
+ * [67e17f1]: Load confmodule to define db_* commands even when !DEBCONF_OK
+ It is OK to load confmodule, which allows db_* commands to be defined,
+ since this is not what was causing the previous failure. We should
+ not, however, try to load the template files, which _did_ actually
+ cause the failure.
+ Bug fix: "command not found", thanks to Michael Prokop (Closes: #512833).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 25 Jan 2009 01:48:09 -0600
+
+ucf (3.0012) unstable; urgency=low
+
+ * [29fbb69]: reset diff question after use so contents are not written to disk
+ Debconf does not use world readable "temporary internal
+ files" as Manoj hypothesises. Data is only written to disk if it is
+ left in the debconf database when the frontend (ucf) exits.
+ Tightening the permissions on the debconf database would break
+ several things including use of debconf-show in reportbug.
+
+ From 27b3c41c531016ffa506987bf4a856345992a204
+ Mon Sep 17 00:00:00 2001
+ From: Joey Hess <joey@gnu.kitenet.net>
+ Date: Wed, 21 Jan 2009 13:03:55 -0500
+ Subject: [PATCH] reset diff question after use so contents are not
+ written to disk
+ Closes: Bug#511893
+ * [9eb5118]: ucf uses debconf even if called without --debconf-ok and hangs
+ ucf, even if is called without --debconf-ok, uses debconf and
+ hangs if db_stop had been already called, since it tries to load
+ /usr/share/debconf/confmodule and loads the ucf debconf templates.
+ This is a minimal change, and just moves the test of DEBCONF_OK
+ earlier. Thanks to Robert Luberda for the report and suggested fix.
+ Closes: Bug#511031
+ * [26a61b8]: Start issueing a diagnostic if ucf is forced to not use debconf
+ If ucf is called without the --debconf-ok switch, and
+ debconf is started, issue a diagnostic, and use old style promping
+ on the command line. This is a policy violation, and soon the non-
+ debconf prompting shall be removed.
+ * [3ce2104]: Rearrange code for readability, and add comment blocks
+ Signed-off-by: Manoj Srivastava <srivasta@debian.org>
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 23 Jan 2009 11:48:09 -0600
+
+ucf (3.0011) unstable; urgency=low
+
+ * [debiandir:8949365] Fix VCS-Browser URL
+ * [debiandir:ede9c73] Do not depend on cdebconf as an alternative
+ ucf relies heavily on debconf to do its job, and thus depends on it. Way
+ back when, it was told to me that we arte going to move to cdebconf,
+ which at some point will be the preferred way. In the meantime, to
+ facilitate the future transition, we should all depend on
+ debconf | cdebconf
+ to make life in the future easier.
+
+ Now, as of version 3.005, ucf started using a feaure that has long been a
+ part of cdebconf, but was only ported to debconf in version 1.5.19, so
+ now ucf started depending on:
+ debconf (>= 1.5.19) | cdebconf
+ and this is where trouble beings.
+
+ Suppose a machine running stable has cdebconf installed. It also has an
+ old version of debconf installed, say, one that is older than
+ 1.5.19. Since cdebconf was installed, the dependency requirements are
+ fully satisfied, so debconf was not updated.
+
+ Now, ucf follows the instructions in debconf-devel(7) -- and that just
+ uses debconf, the older version which does nothave support for the
+ feature ucf needs. Boom, there goes the update.
+
+ This is a grave bug.
+
+ Bug fix: "ucf fails on db_x_loadtemplatefile", thanks to Wichert
+ Akkerman (Closes: #507043).
+ * Bug fix: "typo in changelog.gz ucf ", thanks to Paul Menzel (Closes: #497762).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 29 Nov 2008 11:43:53 -0600
+
+ucf (3.0010) unstable; urgency=low
+
+ * Fix a typo in the fix for the important bug in the last release, so
+ arguably this too is an important fix. This is a one character patch,
+ thanks to Niko Tyni. Closes: #497658
+
+ -- Manoj Srivastava <srivasta@debian.org> Wed, 03 Sep 2008 09:17:58 -0500
+
+ucf (3.009) unstable; urgency=low
+
+ * There was an issue that using the sdiff or diff options of ucf would
+ either error out, or would hang due to a communication snafu with
+ debconf. This fix handles exceptional sizes of diff output, correcting
+ both issues. This is an important bug fix meant for Lenny.
+ Closes: #486702, #490034
+ * The current Catalan translation of UCF has a few usability problems,
+ namely the same translation for all 3 different diff options. The
+ result is that you are presented with the same option twice in many
+ cases, and can't tell the difference between them. This i18n update
+ fixes that issue. Closes: #497391
+ * Updated Standards-Version: No changes.
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 02 Sep 2008 21:24:53 -0500
+
+ucf (3.008) unstable; urgency=low
+
+ * Updated ucf man page. Fixes: "ucf(1) incorrectly claims that ucf has
+ bug". Documentation bug. Closes: #496489
+ * ucf: [INTL:fi] Updated Finnish translation of the debconf templates
+ Closes: #489174
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 30 Aug 2008 03:19:44 -0500
+
+ucf (3.007) unstable; urgency=low
+
+ * Move to the new make -j friendly targets in debian/rules
+ * Bug fix: "man ucf typo: the times interaction", thanks to A. Costa
+ (Closes: #480064).
+ * Recorded the new VCS repository location for this package (moved to a
+ public git repository)
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 30 May 2008 10:47:51 -0500
+
+ucf (3.006) unstable; urgency=low
+
+ * Bug fix: "ucf: fails to catch conflicts on three-way merging", thanks
+ to Niko Tyni. Closes: #473473
+
+ -- Manoj Srivastava <srivasta@debian.org> Wed, 02 Apr 2008 22:13:21 -0500
+
+ucf (3.005) unstable; urgency=low
+
+ * Bug fix: "ucfq /path/to/file is broken", thanks to Niko Tyni. Applied
+ the patch provided in the report. Closes: #460868
+ * Of course, this did not mean that the modified column was actually
+ filled with valid values: A number of places we were not using the
+ proper accessor methods, which added to the confusion. Fixed.
+ Closes: #464238
+ * Add a new --debconf-template option to specify an alternate
+ caller-provided debconf template for the user prompt. Heavy lifting
+ done by Steve Langasek. This was apparently done to allow grub in
+ Ubuntu to manage partial file fragments. Closes: #456241.
+ * Use db_x_loadtemplatefile instead of debconf-loadtemplates for template
+ loading, and depend on debconf (>= 1.5.19) | cdebconf for the
+ implementation. Thanks to Steve Langasek. Closes: #424926
+ * Drop the Recommends: debconf-utils now that it's no longer used.
+ * Instead of proceeding merrily on our way if the three way merge fails,
+ we now leave the dest file unchanged, leave the mess in the new file
+ (foo.ucf-new), tell the user about it, and abort the upgrade by
+ exiting with exit 3. We still psit out an error about conflicts.
+ Hopefully, this adequately resolves the bug. Closes: #456245
+
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 21 Feb 2008 01:10:57 -0600
+
+ucf (3.004) unstable; urgency=high
+
+ * For "keep current" and "threeway merge", ucf expects answers from
+ debconf which differ from what is specified in the template
+ master. Frans Pop suggested using the Choices-C feature of debconf,
+ which is relatively new, but defines a fixed alias for each option
+ which Debconf will then use in db_get and db_set operations -- so no
+ more matching the template in the code. He also kindly provided a
+ working patch. Updated versioned dependency on debconf to reflect the
+ need for a new version. Closes: #443179, #449274, #453084
+ * Bug fix: "[INTL:fi] Finnish translation of the debconf templates",
+ thanks to Esko Arajärvi . Closes: Bug#448634
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 30 Nov 2007 03:29:24 -0600
+
+ucf (3.004~fjp) UNRELEASED; urgency=low
+
+ * Use Choices-C in changeprompt templates to simplify interaction with
+ debconf.
+
+ -- Frans Pop <fjp@debian.org> Mon, 01 Oct 2007 17:56:54 +0200
+
+ucf (3.003) unstable; urgency=low
+
+ * Bug fix: "ucf: expects the wrong answers from debconf", thanks to
+ Björn Steinbrink. For "keep current" and "threeway merge", ucf expects
+ answers from debconf which differ from what is specified in the
+ template master, which had been changed in the review process. This
+ fixes that bug; which made ucf mostly useless. (Closes: #443179).
+
+ -- Manoj Srivastava <srivasta@debian.org> Wed, 19 Sep 2007 09:58:39 -0500
+
+ucf (3.002) unstable; urgency=low
+
+ * Bug fix: "Polish translation for ucf", thanks to Wojciech Zareba
+ (Closes: #430834).
+ * Bug fix: "ucf : [INTL:pt] Updated Portuguese translation for debconf
+ messages", thanks to Traduz - Portuguese Translation Team
+ (Closes: #439691).
+ * Bug fix: "ucf: [INTL:fr] French debconf templates translation update",
+ thanks to Christian Perrier (Closes: #432286).
+ * Bug fix: "Fwd: PACOTE: [INTL:pt] Updated Portuguese translation for
+ debconf messages", thanks to Miguel Figueiredo (Closes: #431621).
+ * Bug fix: "[INTL:ru] Russian debconf templates translation update",
+ thanks to Yuri Kozlov (Closes: #431261).
+ * Bug fix: "ucf: [INTL:sv] Swedish debconf templates translation
+ update", thanks to Daniel Nylander (Closes: #430540).
+ * Bug fix: "[l10n] Updated Czech translation of ucf debconf messages",
+ thanks to Miroslav Kure (Closes: #430344).
+ * Bug fix: "ucf: [INTL:es] Updated spanish translation", thanks to
+ Javier Fernández-Sanguino Peña (Closes: #429942).
+ * Bug fix: "ucf: [INTL:ja] updated Japanese debconf translation", thanks
+ to Kenshi Muto (Closes: #429892).
+ * Bug fix: "[INTL:gl] Galician debconf template translation for ucf",
+ thanks to Jacobo Tarrio (Closes: #429831).
+ * Bug fix: "[INTL:eu] ucf debconf basque translation", thanks to Piarres
+ Beobide (Closes: #429816).
+ * Bug fix: "ucf: [INTL:da] Updated Danish debconf translation", thanks
+ to Claus Hindsgaul (Closes: #426787).
+ * Bug fix: "[INTL:de] German translation for ucf (debconf)", thanks to
+ Erik Schanze (Closes: #431342).
+ * Bug fix: "[INTL:de] German translation for ucf (debconf)", thanks to
+ Erik Schanze. I actually used th translations from the bug 431342
+ (Closes: #428717).
+ * Bug fix: "ucf: [INTL:vi] Vietnamese debconf templates translation
+ update", thanks to Clytie Siddall (Closes: #429909).
+ * Bug fix: "ucf: [INTL:vi] Vietnamese debconf templates translation
+ update", thanks to Clytie Siddall (Closes: #426998).
+ * Bug fix: "ucf: [debconf_rewrite] Debconf templates review", thanks to
+ Christian Perrier (Closes: #426491).
+
+ -- Manoj Srivastava <srivasta@debian.org> Wed, 19 Sep 2007 00:26:58 -0500
+
+ucf (3.001) unstable; urgency=low
+
+ * Bug fix: "ucf: [INTL:ru] Russian debconf template translation", thanks
+ to Yuri Kozlov (Closes: #421141).
+ * Bug fix: "ucf: should use debconf to display the diff results", thanks
+ to Gustavo Noronha Silva. Users using a Graphical frontend are
+ surprised when the display apparently just blocks when they ask to see
+ a diff (or 3-way diff) of the configuration file being handled, when
+ actually the diff is displayed on the terminal window ucf was run
+ on. Until the debconf-escape utility and the escape CAPB support,
+ db_subst ran into newline and line length issues. Patch from Michael
+ Vogt. (Closes: #325576).
+ * From Michael Vogt's patch: use a debconf note for the diff. updated
+ dependency of debconf to 1.4.72 (this is the version that supports the
+ "escape" capability)
+ * Left in the debconf-2.0 as is, since I am assuming anything that
+ provides debconf-2.0 should be a drop in replacement, or that should
+ be considered a bug. This is a change from Michael Vogt's patch.
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 5 May 2007 11:59:20 -0500
+
+ucf (2.0021) unstable; urgency=low
+
+ * Bug fix: "ucf: does not transfer mode changes to conffile", thanks to
+ Marc Haber. We now use cp -pf to preserve ownership and permissions.
+ (Closes: #406476).
+ * Bug fix: "shouldn't .ucf-dist and .ucf-old be included in example
+ code?", thanks to Marc Haber (Closes: #418240).
+ * Bug fix: "possible typo in ucfq(1)", thanks to Marc Haber
+ (Closes: #418241).
+ * Bug fix: "ucf : [INTL:pt] Updated Portuguese translation for debconf
+ messages", thanks to Traduz - Portuguese Translation Team
+ (Closes: #418280).
+ * Added XS-VCS-Arch and XS-VCS-Browse to debian/control
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 17 Apr 2007 18:56:32 -0500
+
+ucf (2.0020) unstable; urgency=low
+
+ * Bug fix: "Syntax error in /usr/bin/ucfr", thanks to Emmanuel Bouthenot
+ Aaargh. Reincorporate change from the NMU. I thought I had done this,
+ but I apparently did not. (Closes: #407963).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 25 Feb 2007 13:27:36 -0600
+
+ucf (2.0019) unstable; urgency=medium
+
+ * Bug fix: "&quot;ucfr: should prepend it's name to error
+ messages/warnings&quot;", thanks to Vincent Lönngren. This was already
+ the case, for the most part, but a few places had been missed.
+ (Closes: #408540).
+ * Bug fix: "ucf : [INTL:pt] Portuguese translation for debconf
+ messages", thanks to Traduz ML (Closes: #410266).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 24 Feb 2007 20:02:07 -0600
+
+ucf (2.0018) unstable; urgency=high
+
+ * Bug fix: "ucf: [INTL:pt_BR] Please consider updating the Brazilian
+ Portuguese debconf template translation", thanks to André Luís Lopes
+ (Closes: #403817).
+ * Bug fix: "ucf: Typo in man page: packagr should be package", thanks to
+ per.bojsen@bojsen.us. Simple typo fix. (Closes: #400839).
+ * Bug fix: "ucf: Duplicated phrase in ucf message", thanks to Robert
+ Luberda. Simple typo fix. (Closes: #406053).
+ * Bug fix: "ucf: [ucfq] strange behavior when querying filenames",
+ thanks to Frank Küster. Modified ucfq/ucfr man pages to emphasize that
+ the scripts need a *full* path name to the file. Added sanity checks
+ such that not providing a full path would result in a diagnostic, but
+ for etch just exit gracefully. For lenny, these scripts shall die
+ with an error. Clarify all over that <path to configuration file>
+ means a full path. (Closes: #401899).
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 18 Jan 2007 16:09:18 -0600
+
+ucf (2.0017) unstable; urgency=low
+
+ * Bug fix: "ucf: spelling errors", thanks to Matt Taggart (Closes: #395444).
+ * Bug fix: "ucf: should be silent when it's being purged", thanks to
+ Santiago Vila (Closes: #397112).
+ * Bug fix: "please document package registry better", thanks to Frank
+ Küster. The package registry is documented in a manual page. Any
+ enhancements to the manual page would be gratefully accepted. The ucf
+ manual page now has a reference to ucfr and ucfq. I d not think,
+ however, that this merits a NEWS file: the vast majority of users who
+ install ucf do so since it is pulled in as a dependency, and they
+ don't care a white about ucfr being added. The only people who might
+ care are people who use ucf to manage configuration files, and that is
+ a very small number. NEWS items should be relegated to important
+ information that may affect the majority of installations; and this
+ does not fit the bill.
+ (Closes: #395011).
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 16 Nov 2006 12:00:03 -0600
+
+ucf (2.0016) unstable; urgency=low
+
+ * Bug fix: "ucfq --help does not work", thanks to arno. The package name
+ is ucf, not Ucf, fixed. (Closes: #394269).
+ * Bug fix: "ucf: Does not handle pathnames with '//' properly", thanks
+ to Frank Küster. We now use readlink -q -m to canonicalize the path
+ names presented to ucf. (Closes: #392070).
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 23 Oct 2006 11:17:50 -0500
+
+ucf (2.0015) unstable; urgency=low
+
+ * Bug fix: "ucf: Man page path error: /usr/share/doc/examples", thanks
+ to Thijs Kinkhorst (Closes: #384126).
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 11 Sep 2006 14:27:35 -0500
+
+ucf (2.0014) unstable; urgency=low
+
+ * Bug fix: "ucf: please document the files that should be removed",
+ thanks to Torsten Werner (Closes: #381736).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 20 Aug 2006 13:26:29 -0500
+
+ucf (2.0013) unstable; urgency=low
+
+ * Bug fix: "ucf: missing versioned dependency on coreutils", thanks to
+ Steinar H. Gunderson (Closes: #378334).
+ * Bug fix: "ucf: Broken manpage for ucfq", thanks to Benjamin A. Okopnik
+ (Closes: #377980).
+
+ -- Manoj Srivastava <srivasta@debian.org> Wed, 9 Aug 2006 02:13:38 -0500
+
+ucf (2.0012) unstable; urgency=low
+
+ * Bug fix: "ucf takes not enough care using readlink -f", thanks to
+ Matthew Vernon. While this is not a grave bug (emitting better
+ diagnostics is nice, but hardly critical), I did go through and fixed
+ all readlink failing issues. I also improved the pager determination
+ code, while I was at it, so ucf is more likely to find a sensible
+ pager. The new code should also handle a messed up /etc/alternatives
+ setup now. (Closes: #372303).
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 16 Jun 2006 12:53:50 -0500
+
+ucf (2.0011) unstable; urgency=low
+
+ * Bug fix: "ucf: [INTL:ja] Japanese debconf translation ", thanks to
+ Kenshi Muto (Closes: #369187).
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 6 Jun 2006 09:58:22 -0500
+
+ucf (2.0010) unstable; urgency=low
+
+ * Bug fix: "[INTL:gl] Galician debconf templates translation", thanks to
+ Jacobo Tarrio (Closes: #362135).
+ * Bug fix: "[INTL:nl] (new|updated) dutch po-debconf translation",
+ thanks to Kurt De Bree (Closes: #363037).
+ * Bug fix: "ucf can not handle files with regex ex characters", thanks
+ to Sean Finney. Well. We now protect against perl's regexp syntax,
+ which ought to be good enough for grep. (Closes: #364668).
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 2 May 2006 22:15:58 -0500
+
+ucf (2.009) unstable; urgency=low
+
+ * Added a new script to query the data kept by ucf, including the
+ package registry that ucfr maintains.
+ * Bug fix: "ucf: Could provide a method to query changed state", thanks
+ to Frank Küster (Closes: #342252).
+ * Bug fix: "please add an option to list all ucf-managed files
+ associated with a package", thanks to Marc Haber (Closes: #357837).
+ * Bug fix: "ucf: please provide infrastructure to remove deleted
+ conffiles", thanks to Marc Haber (Closes: #358552).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 16 Apr 2006 16:40:13 -0500
+
+ucf (2.008) unstable; urgency=low
+
+ * Bug fix: "ucf: Could use ucf-{old,dist} instead of dpkg-{old,dist}",
+ thanks to Frank Küster (Closes: #336055).
+ * Bug fix: "ucf: Please register information about the package that
+ installed a configuration file", thanks to Frank K (Closes: #296598).
+ * Bug fix: "[l10n] Updated Czech translation of ucf debconf messages",
+ thanks to Miroslav Kure (Closes: #356534).
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 11 Apr 2006 15:03:25 -0500
+
+ucf (2.007) unstable; urgency=low
+
+ * Bug fix: "wrong call to find: invalid argument `-f' to `-type'",
+ thanks to Martin Michlmayr (Closes: #356498).
+ * Bug fix: "ucf: [INTL:pl] Update of the Polish debconf template
+ translation", thanks to Robert Luberda (Closes: #356119).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 12 Mar 2006 08:52:58 -0600
+
+ucf (2.006) unstable; urgency=low
+
+ * Make sure we get rid of all cached files also when purged.
+ * Bug fix: "does not purge cached configuration files in
+ /var/lib/ucf/cache", thanks to Bart Martens (Closes: #354441).
+ * Bug fix: "tetex-base: purge incomplete", thanks to Bart Martens
+ (Closes: #354442).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 5 Mar 2006 10:32:20 -0600
+
+ucf (2.005) unstable; urgency=low
+
+ * Bug fix: "[l10n:de] Updated German translation of the debconf
+ templates", thanks to Erik Schanze (Closes: #346293).
+ * Bug fix: "ucf: Leaves files behind after remove/purge", thanks to JP
+ Sugarbroad (Closes: #348415).
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 23 Jan 2006 11:46:20 -0600
+
+ucf (2.004) unstable; urgency=low
+
+ * Bug fix: "ucf: [INTL:da] Danish debconf template translation", thanks
+ to Claus Hindsgaul (Closes: #337038).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 3 Dec 2005 20:23:50 -0600
+
+ucf (2.003) unstable; urgency=low
+
+ * Bug fix: "ucf: Update of the french translation of the debconf
+ templates", thanks to Eric (Closes: #331290).
+ * Bug fix: "ucf: [INTL:sv] Swedish debconf templates translation",
+ thanks to Daniel Nylander (Closes: #334800).
+ * Bug fix: "ucf: Needs root access to display the help message", thanks
+ to Frédéric Bothamy. Allow ucf to be run as non-root. This entailed
+ not loading debconf related stuff, since that seems to require root
+ privileges. Instead, we just emit a diagnostic and go on. Hopefully
+ this is enough to let the user know when debconf does not work as
+ expected. Also, if ucf is not running as root, automatically
+ transition into the no-action mode, so a non-root user can still be
+ able run ucf in diagnostic mode. (Closes: #332239).
+ * Added a note to the man page that --purge does not touch the
+ configuration file on disk -- cleaning that up is still the calling
+ package's responsibility.
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 20 Oct 2005 15:12:58 -0500
+
+ucf (2.002) unstable; urgency=low
+
+ * Bug fix: "INTL:vi Vietnamese translation for ucf", thanks to Clytie
+ Siddall (Closes: #323951).
+ * Bug fix: "Please document that ucf may not exist when the postrm
+ script is called" (Closes: #326085).
+ * Bug fix: "Please include sdiff in the menu options", thanks to Tobias
+ Toedter (Closes: #323989).
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 20 Sep 2005 14:52:26 -0500
+
+ucf (2.001) unstable; urgency=low
+
+ * Bug fix: "ucf: missing UCF_FORCE_CONFFMISS option", thanks to Goswin
+ Brederlow (Closes: #321702).
+ * Add a dependency on debconf.
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 8 Aug 2005 15:17:13 -0500
+
+ucf (2.000) unstable; urgency=low
+
+ * Also remove /var/lib/ucf/cache if it is empty. The problem was that
+ since the cache directory existed, ucf was leaving /var/lib/ucf
+ behind on purge, which was bad. Thanks to Lars Wirzenius for noticing.
+ * Bug fix: "ucf: [INTL:pl] Polish translation of debconf templates",
+ thanks to Robert Luberda (Closes: #312716).
+ * Bug fix: "ucf: prints verbose info even with VERBOSE=0 set in the
+ config file", thanks to Robert Luberda (Closes: #312727).
+ * Bug fix: "ucf: [INTL:it] Italian debconf translation", thanks to Luca
+ Bruno (Closes: #316913).
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 7 Jul 2005 12:25:13 -0500
+
+ucf (1.18) unstable; urgency=low
+
+ * Bug fix: "ucf: [INTL:ja] initial debconf Japanese translation", thanks
+ to Kenshi Muto (Closes: #307007).
+ * Bug fix: "'man ucf' typo: &quot;awlays&quot;", thanks to A Costa
+ (Closes: #306736).
+ * Bug fix: "'man lcf' typos: &quot;algoriothm&quot; and
+ &quot;directrory&quot;", thanks to A Costa (Closes: #306735).
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 2 May 2005 01:27:15 -0500
+
+ucf (1.17) unstable; urgency=low
+
+ * Bug fix: "ucf: assumes that debconf-loadtemplates is always there",
+ thanks to Miles Bader (Closes: #300159).
+ * Added a recommendation for debconf-utils for debconf-loadtemplate (not
+ templates).
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 18 Mar 2005 18:26:01 -0600
+
+ucf (1.16) unstable; urgency=low
+
+ * Bug fix: "Typo on line 55 of /usr/bin/ucf", thanks to Troy Arnold
+ (Closes: #300136).
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 17 Mar 2005 16:55:42 -0600
+
+ucf (1.15) unstable; urgency=low
+
+ * Bug fix: "ucf: spelling error in manpage", thanks to Sean Finney
+ (Closes: #296088).
+ * Bug fix: "ucf: new configuration file appear two times", thanks to
+ Martin Lohmeier. In three way merges, remove the generated .dpkg-new
+ file created during the merge (Closes: #296186).
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 17 Mar 2005 02:46:36 -0600
+
+ucf (1.14) unstable; urgency=low
+
+ * Bug fix: "/usr/share/doc/ucf/examples/postinst refers /usr/man",
+ thanks to Marc Haber (Closes: #294558).
+ * Bug fix: "[l10n] Initial Czech translation of ucf debconf messages",
+ thanks to Miroslav Kure (Closes: #287302).
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 11 Feb 2005 01:36:25 -0600
+
+ucf (1.13) unstable; urgency=low
+
+ * Bug fix: "&quot;The cache file is $cached_file&quot; should be printed
+ only in verbose mode", thanks to Florent Rougon (Closes: #279350).
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 2 Nov 2004 11:24:13 -0600
+
+ucf (1.12) unstable; urgency=medium
+
+ * Bug fix: "ucf creates Destination on "registration" if it
+ does not exist", thanks to Florent Rougon (Closes: #279259).
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 1 Nov 2004 19:44:00 -0600
+
+ucf (1.11) unstable; urgency=medium
+
+ * Bug fix: "ucf creates Destination on &quot;registration&quot; if it
+ does not exist", thanks to Florent Rougon. Now, even if there are no
+ mentions of the file in the database, and there is no destination
+ file, as long as historical md5sum dirs of files exist, the
+ destination is not recreated. (Closes: #279259).
+ * Bug fix: "ucf leaves files in the cache after --purge", thanks to
+ Florent Rougon. The purge action is now moved to a point after the
+ cache file name is canclulated. (Closes: #279262).
+ * Bug fix: "Error messages when ucf-managed files are deleted", thanks
+ to Florent Rougon (Closes: #279261).
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 1 Nov 2004 15:22:51 -0600
+
+ucf (1.10) unstable; urgency=high
+
+ * Urgency high since the package was mostly useless when used with
+ command line arguments and debconf.
+ * Bug fix: "--three-way does not put the file into the cache", thanks to
+ Florent Rougon . This is because the threeway option was lost when ucf
+ was re-executed under debconf. (Closes: #278089).
+ * Bug fix: "Typos in the manual pages and default configuration file",
+ thanks to Florent Rougon. Much appreciated. (Closes: #278091).
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 28 Oct 2004 13:52:22 -0500
+
+ucf (1.09) unstable; urgency=medium
+
+ * Urgency medium since it does close an important bug that made
+ prompting, err, bork for German users
+ * Bug fix: "ucf: German translation of the debconf templates is borked",
+ thanks to Michael Piefel (Closes: #269031).
+ * Bug fix: "Please document that "--debconf-ok"; works also if
+ debconf is not running", thanks to Frank Küster (Closes: #266807).
+
+ -- Manoj Srivastava <srivasta@debian.org> Wed, 22 Sep 2004 13:05:01 -0500
+
+ucf (1.08) unstable; urgency=low
+
+ * Bug fix: "ucf file dest is buggy if dest contains egrep metachars",
+ thanks to Hagen von Eitzen (Closes: #262134).
+ * Bug fix: "ucf: Please add German translation of the debconf
+ templates", thanks to Erik Schanze (Closes: #264432).
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 13 Aug 2004 21:07:45 -0500
+
+ucf (1.07) unstable; urgency=low
+
+ * Bug fix: "[l10:ca] orville-write catalan debconf templates", thanks to
+ Aleix Badia i Bosch (Closes: #248754).
+ * Bug fix: "ucf: debconf spanish translation", thanks to Lucas Wall
+ (Closes: #253244).
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 22 Jun 2004 17:51:35 -0500
+
+ucf (1.06) unstable; urgency=low
+
+ * Bug fix: "ucf tries to show diff of non-existent file", thanks to
+ Frank Küster. Darn. Applied the fix to the three way merge the last
+ time, not to the simple diff stanza. (Closes: #243953).
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 26 Apr 2004 16:28:39 -0500
+
+ucf (1.05) unstable; urgency=low
+
+ * The patch for the optiopn added in the last version was provided by
+ Matthew Palmer <mpalmer@debian.org>. Much appreciated.
+ * Bug fix: "manpage incorrect for --sum-file", thanks to Matthew Palmer
+ Also fixed a typo in ucf reported in the same report, and, while I was
+ at it, I escaped all hyphens in ucf.1. (Closes: #244853).
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 20 Apr 2004 15:18:02 -0500
+
+ucf (1.04) unstable; urgency=low
+
+ * Bug fix: "ucf tries to show diff of non-existent file", thanks to
+ Frank Küster. This is still the correct behaviour, as long as a
+ diff is show, which should be the case now. (Closes: #243953).
+ * Added an option to specify where the old md5sum can be found for
+ historical versions.
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 19 Apr 2004 12:17:19 -0500
+
+ucf (1.03) unstable; urgency=low
+
+ * Bug fix: "Hangs on waiting for user input _sometimes_", thanks to
+ Peter Gervai (Closes: #242445).
+ * Bug fix: "ucf: Minor description typo", thanks to Jeroen van
+ Wolffelaar (Closes: #243482).
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 19 Apr 2004 02:37:52 -0500
+
+ucf (1.02) unstable; urgency=low
+
+ * Bug fix: "ucf: --debconf-ok option useless", thanks to Roger So
+ Applied patch; we should only set DEBCONF_OK if it is not set.
+ (Closes: #242434).
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 6 Apr 2004 13:20:12 -0500
+
+ucf (1.01) unstable; urgency=low
+
+ * Bug fix: "fontconfig: postinst script fails (2)", thanks to Frederic
+ Briere (Closes: #241846).
+ * Bug fix: "Does not handle invalid PAGER gracefully", thanks to
+ J.H.M. Dassen (Ray) (Closes: #241890).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 4 Apr 2004 16:09:58 -0500
+
+ucf (1.00) unstable; urgency=low
+
+ * Shut off withecho, since we should be fairly stable now. Bump version
+ number to reflect that.
+ * Bug fix: "ucf creates superfluous dpkg-dist files", thanks to Frank
+ Küster (Closes: #238730).
+ * Bug fix: "ucf: diff is not displayed with DEBIAN_FRONTEND=dialog and
+ more as sensible-pager", thanks to Frank Küster. This was nasty. Now
+ ucf thinks like sensible-pager, looking at $PAGER,
+ /etc/alternatives/pager, and, failing that, ensuring /bin/more exists
+ -- and then, if the pager is more, it pauses after displaying the
+ diff, so that the diff is not whisked away by debconf looping back to
+ ask for what's next. (Closes: #239319).
+ * Thanks to extensive patches from Fabio Massimo Di Nitto
+ <fabbione@fabbione.net>, ucf should now be able to handle file names
+ with spaces in them. Touch wood.
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 2 Apr 2004 02:10:48 -0600
+
+ucf (0.33) unstable; urgency=low
+
+ * Bug fix: "ucf: Variable errors in ucf script breaks lm-sensors
+ installation", thanks to Frédéric Bothamy (Closes: #237944).
+ * Bug fix: "apache-common: /etc/apache/modules.conf is not modified",
+ thanks to Oliver Zimmermann (Closes: #237946).
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 14 Mar 2004 11:14:21 -0600
+
+ucf (0.32) unstable; urgency=low
+
+ * Fixed debconf handling -- POTFILES.in needs t9o have the master
+ template, not the generated one.
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 13 Mar 2004 12:22:11 -0600
+
+ucf (0.31) unstable; urgency=low
+
+ * Moved to the new debconf mechanism is skeleton-make-rules, which shall
+ allow ucf to be backported to older debconf versions.
+ * Bug fix: "ucf: Please add the attached Brazilian Portuguese debconf
+ template translation", thanks to Andre Luis Lopes (Closes: #235489).
+ * Bug fix: "ucf: French debconf templates translation", thanks to Eric
+ (Closes: #236715).
+ * Bug fix: "ucf: Option --debug exists only in manpage, but is not
+ recognized", thanks to Frank KKüster (Closes: #237114).
+ * Bug fix: "ucf: please consider adding symlink support", thanks to Marc
+ Haber. Actually, Fabio Massimo Di Nitto <fabbione@fabbione.net> did
+ the heavy lifting on this one and sent in a tested, working patch.
+ (Closes: #213080).
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 12 Mar 2004 14:48:31 -0600
+
+ucf (0.30) unstable; urgency=low
+
+ * Convert to po-debconf, also thanks to Joey Hess.
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 22 Feb 2004 15:22:29 -0600
+
+ucf (0.29) unstable; urgency=low
+
+ * Thanks to Joey Hess for noticing that the debconf support in ucf was
+ not complete. Added the template to the control archive, source the
+ confmodule in postinst, and purge debconf db on purge.
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 22 Feb 2004 09:49:20 -0600
+
+ucf (0.28) unstable; urgency=low
+
+ Joey Hess <joeyh@debian.org>
+ * Added debconf support to ucf. It will use debconf for prompting.
+ * Since some badly behaved maintainer scripts use debconf, then cripple it
+ (by calling STOP, redirecting stdio, etc), and then call ucf, ucf must
+ take care to not use debconf if called from such a script. In this case it
+ will fall back to prompting without using debconf, unless a --debconf-ok
+ parameter is given, to let ucf know that the maintainer script
+ promises it has not screwed up debconf.
+ * Update ucf.1
+ * Since the above hack means that ucf retains the ability to prompt
+ on its own, I made it not depend on debconf at all; if debconf is not
+ present then ucf will fall back to its internal prompter. closes: Bug#234151
+ Manoj:
+ * Changed the rules file to handle permissions better in face of strange
+ umasks. Many thanks to Joey Hess, who essentially did all the work for
+ this update in functionality.
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 21 Feb 2004 23:35:01 -0600
+
+ucf (0.27) unstable; urgency=low
+
+ * Bug fix: "minor typo in /etc/ucf.conf comment", thanks to Leonardo
+ Rochael Almeida (Closes: #225633).
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 6 Feb 2004 01:53:24 -0600
+
+ucf (0.26) unstable; urgency=low
+
+ * When ucf replaces a configuration file, it always leaves the old
+ version behind as "conffile.dpkg-old", and then installed the
+ "distributed" file as "conffile", just *like dpkg* does. Now, also made
+ it so that when ucf asks the user a question, and they respond by
+ opting not to replace the configuration file, ucf creates
+ "conffile.dpkg-dist", as dpkg would have created.
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 13 Nov 2003 03:02:32 -0600
+
+ucf (0.25) unstable; urgency=low
+
+ * when the old md5sum is not found in the file, the return value of the
+ grep is non-zero and the program exits. closes: Bug#216115
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 18 Oct 2003 21:31:28 -0500
+
+ucf (0.24) unstable; urgency=low
+
+ * Fix a series of typos that prevented old md5sums from working. Thanks
+ to Josselin Mouette for the patch. closes: Bug#215244
+
+ -- Manoj Srivastava <srivasta@debian.org> Wed, 15 Oct 2003 13:53:50 -0500
+
+ucf (0.23) unstable; urgency=low
+
+ * Fix a corner case when ucf is reinstalled after being removed, but not
+ purged, for a while, in this case all the data is out of
+ date. Rotating the dataset would have ucf asking questions all over,
+ but that is better than silently ignoring files of packages that were
+ purged while ucf was removed, and are being reinstalled. Correct
+ behaviour trumps the user being asked questions again. closes: Bug#215077
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 10 Oct 2003 12:44:19 -0500
+
+ucf (0.22) unstable; urgency=low
+
+ * .TT in the man page did not produce tt font. Use .I instead.
+ closes: Bug#213077
+ * se -> see. ofered -> offered in man page. closes: Bug#213079, Bug#213083
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 28 Sep 2003 18:28:52 -0500
+
+ucf (0.21) unstable; urgency=low
+
+ * the --state-dir option to ucf had no effect, since it set the wrong
+ internal variable. Thanks to Colin Watson for noticing, and providing
+ a patch. closes: Bug#210788
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 13 Sep 2003 16:13:09 -0500
+
+ucf (0.20) unstable; urgency=high
+
+ * Fixed usage of chown root.root in the rules files.
+ * The 3 way merge support was broekn; it kept track of the md5sum of the
+ wrong version. Thanks Nicolas Boullis for noticing this. closes: Bug#20706
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 24 Aug 2003 20:26:06 -0500
+
+ucf (0.19) unstable; urgency=low
+
+ * Added some examples to the doc directory. Added examples to man
+ pages. Clarified man page.
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 7 Aug 2003 18:48:35 -0500
+
+ucf (0.18) unstable; urgency=low
+
+ * No longer save conffiler.dpkg-old unless conffile had been
+ modified. This should prevent the buildup of .dpkg-old cruft over
+ time. closes: Bug#189520
+ * Document the fact that --three-way first appeared in version 0.8 of
+ ucf, which was the first version to hit sarge. The woody version of
+ ucf shall not understand the --thre-way option. closes: Bug#202431
+
+ -- Manoj Srivastava <srivasta@debian.org> Thu, 31 Jul 2003 12:02:17 -0500
+
+ucf (0.17) unstable; urgency=low
+
+ * Fixed a typo. closes: Bug#191833
+ * Fixed eiher -> either in the man page. closes: Bug#200048
+ * If the file that is already in place has the same md5sum as the new
+ file created by the maintainer, nothing needs be done. closes: Bug#199233
+ * Fix prompting for actoin such that we offer choices for 3 way merging
+ or diffs where appropriate closes: Bug#199162
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 13 Jul 2003 15:28:46 -0500
+
+ucf (0.16) unstable; urgency=high
+
+ * A thinko in the logic for moving a old, locally modified configuration
+ file to ucf could cause data loss.
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 2 May 2003 21:47:48 -0500
+
+ucf (0.15) unstable; urgency=medium
+
+ * Clean up some of the new file handling to pave the way for
+ /etc/conffiles/blah functionality
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 25 Apr 2003 14:55:17 -0500
+
+ucf (0.14) unstable; urgency=low
+
+ * Another occurence of the missing \. Additional patches from Tore
+ Anderson to fix a flaw in the md5sum storage. closes: Bug#189517
+ * patch from Tore Anderson to fix problems with diff3 closes: Bug#189617
+ * Finally get all the miising \. closes: Bug#189514
+
+ -- Manoj Srivastava <srivasta@debian.org> Sat, 19 Apr 2003 23:11:36 -0500
+
+ucf (0.13) unstable; urgency=medium
+
+ * A missing \ at the ned of the line caused a syntax error.closes: Bug#189514
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 18 Apr 2003 13:27:29 -0500
+
+ucf (0.12) unstable; urgency=low
+
+ * Finally document the --three-way option. This has been in the code for
+ a while now, and seems to be working, but was not documented so far.
+
+ -- Manoj Srivastava <srivasta@debian.org> Fri, 18 Apr 2003 02:42:56 -0500
+
+ucf (0.11) unstable; urgency=low
+
+ * Test for a old file before trying to copy it as backup.
+ closes: Bug#168727, Bug#168729
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 11 Nov 2002 18:55:48 -0600
+
+ucf (0.10) unstable; urgency=low
+
+ * Urk. Major breakage in ucf on upgrade; one loses
+ /var/lib/ucf/hashfile, due to a major thinko. The downside is that the
+ currently installed file shall be trated as the old version, and a
+ wquestion shall be asked if the upstream file is different. This bad,
+ but there is no real data loss; only a potential question asked on the
+ next upgrade of packages using ucf.
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 10 Nov 2002 23:09:22 -0600
+
+ucf (0.09) unstable; urgency=low
+
+ * Umm. use egrep when you mean egrep.
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 10 Nov 2002 22:57:57 -0600
+
+ucf (0.08) unstable; urgency=high
+
+ * Add a --purge option to ucf, to remove all hints about a configuration
+ file from the hashfile. This fixes what happened if a package was
+ purged, and reinstalled -- on purge the configuration file was
+ removed, but it was still in ucf's database. On reinstall, since the
+ upstream file had not changed, ucf did not copy it to the destination
+ -- even though the destination file no longer existed. This is a major
+ bugfix. closes: Bug#159015
+ * Fix use of md5sum files, and manpage typo, thanks to a patch from
+ Henrique de Moraes Holschuh <hmh@debian.org>. closes: Bug#163229
+ * ucf now has a rudimentary, experimental, and undocumented diff3
+ capability. So, optionally, people can see a diff3 diff between the
+ current file, the old file, and the new upstream version. Also, they
+ can have the changes made in the upstream versions merged into the
+ current file. This can be dangerous.
+
+ -- Manoj Srivastava <srivasta@debian.org> Sun, 10 Nov 2002 21:22:00 -0600
+
+ucf (0.07) unstable; urgency=low
+
+ * Fix a few missing grep trigger set -e failures.
+
+ -- Manoj Srivastava <srivasta@debian.org> Wed, 6 Mar 2002 01:14:57 -0600
+
+ucf (0.06) unstable; urgency=high
+
+ * Added the ionformational script lcf and the associated man page.
+ * Fixed a major thinko in ucf that could potentially trash the hashfile
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 26 Feb 2002 14:30:59 -0600
+
+ucf (0.05) unstable; urgency=low
+
+ * /etc/ucf.conf and ucf.conf(5) disagreed due to a typo in the man
+ page. Fixed. closes: Bug#135691
+ * Added the ability for the developer to specify a single file with
+ historical md5sums, instead of having to ship a directory populated
+ with single line files for every configuration file in the
+ package. This is now beginning to get reasonably complex ;-)
+
+ -- Manoj Srivastava <srivasta@debian.org> Mon, 25 Feb 2002 12:03:43 -0600
+
+ucf (0.04) unstable; urgency=high
+
+ * Hmm. Failed to replace the configuration file if the old file was a
+ symbolic link to the new file (happened for gnus users). Thanks go to
+ wsheets@sbcglobal.net for pointing this out.
+
+ -- Manoj Srivastava <srivasta@debian.org> Wed, 20 Feb 2002 20:21:42 -0600
+
+ucf (0.03) unstable; urgency=low
+
+ * Fixed typo in the long description
+ * Fixed the fact that the script was always verbose
+ * Fixed a spelling error in a diagnostic
+
+ -- Manoj Srivastava <srivasta@debian.org> Wed, 13 Feb 2002 23:02:29 -0600
+
+ucf (0.02) unstable; urgency=low
+
+ * Fixed typo in long desc.
+ * Changed section to utils.
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 12 Feb 2002 04:17:38 -0600
+
+ucf (0.01) unstable; urgency=low
+
+ * New version of the package.
+
+ -- Manoj Srivastava <srivasta@debian.org> Tue, 5 Feb 2002 22:25:42 -0600
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..9fc175f
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,40 @@
+Source: ucf
+VCS-Git: git://anonscm.debian.org/users/srivasta/debian/ucf.git
+VCS-Browser: http://anonscm.debian.org/gitweb/?p=users/srivasta/debian/ucf.git
+Section: utils
+Priority: standard
+Maintainer: Manoj Srivastava <srivasta@debian.org>
+Build-Depends-Indep: po-debconf, gettext, debhelper (>= 9.0.0)
+Standards-Version: 3.9.5
+
+Package: ucf
+Architecture: all
+Multi-Arch: foreign
+Depends: debconf (>= 1.5.19), coreutils (>= 5.91), ${misc:Depends}
+Description: Update Configuration File(s): preserve user changes to config files
+ Debian policy mandates that user changes to configuration files must be
+ preserved during package upgrades. The easy way to achieve this behavior
+ is to make the configuration file a 'conffile', in which case dpkg
+ handles the file specially during upgrades, prompting the user as
+ needed.
+ .
+ This is appropriate only if it is possible to distribute a default
+ version that will work for most installations, although some system
+ administrators may choose to modify it. This implies that the
+ default version will be part of the package distribution, and must
+ not be modified by the maintainer scripts during installation (or at
+ any other time).
+ .
+ This script attempts to provide conffile-like handling for files that
+ may not be labelled conffiles, and are not shipped in a Debian package,
+ but handled by the postinst instead. This script allows one to
+ maintain files in /etc, preserving user changes and in general
+ offering the same facilities while upgrading that dpkg normally
+ provides for 'conffiles'.
+ .
+ Additionally, this script provides facilities for transitioning a
+ file that had not been provided with conffile-like protection to come
+ under this schema, and attempts to minimize questions asked at
+ installation time. Indeed, the transitioning facility is better than the
+ one offered by dpkg while transitioning a file from a non-conffile to
+ conffile status.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..047ada6
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,24 @@
+This is the Debian GNU/Linux packa for ucf.
+
+ucf is Copyright (C) 2002, 2003, 2003, 2004, 2005, 2006 Manoj
+Srivastava <srivasta@debian.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 dated June, 1991.
+
+ This program 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.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL-2'.
+
+ A copy of the GNU General Public License is also available at
+ <URL:http://www.gnu.org/copyleft/gpl.html>. You may also obtain
+ it by writing to the Free Software Foundation, Inc., 51 Franklin
+ St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Manoj Srivastava <srivasta@debian.org>
+arch-tag: d4250e44-a0e0-4ee0-adb9-2bd74f6eeb27
diff --git a/debian/po/ChangeLog b/debian/po/ChangeLog
new file mode 100644
index 0000000..c317e8a
--- /dev/null
+++ b/debian/po/ChangeLog
@@ -0,0 +1,10 @@
+2006-04-11 Manoj Srivastava <srivasta@debian.org>
+
+ * cs.po: srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-18
+ New translation
+
+2006-01-23 Manoj Srivastava <srivasta@debian.org>
+
+ * de.po: srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-14
+ New translation
+
diff --git a/debian/po/POTFILES.in b/debian/po/POTFILES.in
new file mode 100644
index 0000000..cef83a3
--- /dev/null
+++ b/debian/po/POTFILES.in
@@ -0,0 +1 @@
+[type: gettext/rfc822deb] templates
diff --git a/debian/po/ca.po b/debian/po/ca.po
new file mode 100644
index 0000000..5f63ff3
--- /dev/null
+++ b/debian/po/ca.po
@@ -0,0 +1,146 @@
+# ucf (debconf) translation to Catalan.
+# Copyright © 2004, 2008, 2009, 2010 Free Software Foundation, Inc.
+# Aleix Badia i Bosch <abadia@ica.es>, 2004.
+# Jordi Mallach <jordi@debian.org>, 2008, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf 3.0025+nmu1\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2010-07-07 09:53+0200\n"
+"Last-Translator: Jordi Mallach <jordi@debian.org>\n"
+"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Fitxer de configuració modificat"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "instal·la la versió del mantenidor del paquet"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "mantín la versió instal·lada actualment"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "mostra les diferències entre les versions"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "mostra les diferències en paral·lel entre les versions"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "mostra les diferències a 3 bandes entre les versions"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "fes una fusió a 3 bandes entre les versions disponibles (experimental)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "inicia un nou intèrpret d'ordres per examinar la situació"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr ""
+"Què voleu fer respecte al fitxer de configuració modificat ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+#, fuzzy
+#| msgid ""
+#| "A new version of configuration file ${FILE} is available, but the version "
+#| "installed currently has been locally modified."
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Hi ha una nova versió del fitxer de configuració ${FILE}, però la vostra "
+"versió s'ha modificat localment."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Diferències línia a línia entre les versions"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "S'han trobat conflictes en la fusió a tres bandes"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"S'han trobat conflictes durant la fusió a tres bandes! Editeu «${dest_file}» "
+"i solucioneu-los manualment."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"El fitxer «${dest_file}.${ERR_SUFFIX}» té un registre de la fusió fallida "
+"del fitxer de configuració."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Hi ha una nova versió del fitxer de configuració ${FILE}, però la vostra "
+#~ "versió s'ha modificat localment."
diff --git a/debian/po/cs.po b/debian/po/cs.po
new file mode 100644
index 0000000..707db1e
--- /dev/null
+++ b/debian/po/cs.po
@@ -0,0 +1,149 @@
+#
+# Translators, if you are not familiar with the PO format, gettext
+# documentation is worth reading, especially sections dedicated to
+# this format, e.g. by running:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+#
+# Some information specific to po-debconf are available at
+# /usr/share/doc/po-debconf/README-trans
+# or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+# Developers do not need to manually edit POT or PO files.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-16 17:47+0200\n"
+"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
+"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Změněný konfigurační soubor"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "instalovat verzi od správce balíku"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "ponechat aktuálně instalovanou lokální verzi"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "zobrazit rozdíly mezi verzemi"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "zobrazit rozdíly mezi verzemi vedle sebe"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "zobrazit třícestný rozdíl mezi dostupnými verzemi"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "provést třícestné sloučení dostupných verzí (experimentální)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "spustit nový shell a prozkoumat situaci"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr "Co chcete provést se změněným konfiguračním souborem ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"K dispozici je novější verze (${NEW}) konfiguračního souboru ${FILE}, avšak "
+"nainstalovaná verze obsahuje lokální úpravy."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Rozdíly mezi verzemi řádek po řádku"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Co chcete udělat s ${BASENAME}?"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Během třícestného sloučení byly nalezeny konflikty! Upravte prosím soubor "
+"„${dest_file}“ a opravte je ručně."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Soubor „${dest_file}.${ERR_SUFFIX}“ obsahuje záznam nepodařeného sloučení "
+"konfiguračního souboru."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "K dispozici je novější verze konfiguračního souboru ${FILE}, avšak "
+#~ "nainstalovaná verze obsahuje lokální úpravy."
diff --git a/debian/po/da.po b/debian/po/da.po
new file mode 100644
index 0000000..403ca0b
--- /dev/null
+++ b/debian/po/da.po
@@ -0,0 +1,141 @@
+# Danish translation ucf.
+# This file is distributed under the same license as the ucf package.
+# Copyright (C) 2014 ucf & nedenstående oversættere.
+# Claus Hindsgaul <claus.hindsgaul@gmail.com>, 2005, 2007.
+# Joe Hansen <joedalton2@yahoo.dk>, 2010, 2014.
+#
+# configuration file -> opsætningsfil (normalt konfigurationsfil, men tidligere
+# havde opsætningsfil så har beholdt den).
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf debconf template\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-08 17:34+0000\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <debian-l10n-danish@lists.debian.org>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Ændret opsætningsfil"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "installer pakkevedligeholderens udgave"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "bevar din aktuelt installerede udgave"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "vis forskellene mellem udgaverne"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "vis forskellene mellem versionerne overfor hinanden"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "vis 3-vejs forskelle mellem de tilgængelige udgaver af filen"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr ""
+"udfør en 3-vejs fletning mellem tilgængelige versioner (eksperimentelt)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "start en ny skal for at undersøge situationen"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr "Hvad vil du gøre med ændret opsætningsfil ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"En ny version (${NEW}) af opsætningsfilen ${FILE} er tilgængelig, men den "
+"installerede version er blevet ændret lokalt."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "vis forskellene mellem udgaverne"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Konflikter fundet i trevejssammenføjning"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Konflikter fundet under trevejssammenføjning! Rediger venligst `"
+"${dest_file}' og ret dem manuelt."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Filen `${dest_file}.${ERR_SUFFIX}' har en post over den mislykkede "
+"sammenføjning af opsætningsfilen."
+
+
diff --git a/debian/po/de.po b/debian/po/de.po
new file mode 100644
index 0000000..6ee3d22
--- /dev/null
+++ b/debian/po/de.po
@@ -0,0 +1,145 @@
+# translation of ucf debconf templates to German
+#
+# Translators, if you are not familiar with the PO format, gettext
+# documentation is worth reading, especially sections dedicated to
+# this format, e.g. by running:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+# Some information specific to po-debconf are available at
+# /usr/share/doc/po-debconf/README-trans
+# or http://www.debian.org/intl/l10n/po-debconf/README-trans#
+# Developers do not need to manually edit POT or PO files.
+#
+# Erik Schanze <eriks@debian.org>, 2004-2009.
+# Holger Wansing <linux@wansing-online.de>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf 3.0028\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-22 20:42+0200\n"
+"Last-Translator: Holger Wansing <linux@wansing-online.de>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Geänderte Konfigurationsdatei"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "Version des Paketbetreuers installieren"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "aktuell lokal installierte Version beibehalten"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "Unterschiede zwischen den Versionen anzeigen"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "Unterschiede zwischen den Versionen nebeneinander anzeigen"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "3-Wege-Unterschiede verfügbarer Versionen anzeigen"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "3-Wege-Vereinigung verfügbarer Versionen [experimentell]"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "die Angelegenheit in einer neu gestarteten Shell untersuchen"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr ""
+"Wie wollen Sie mit der geänderten Konfigurationsdatei ${BASENAME} verfahren?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Eine neue Version (${NEW}) der Konfigurationsdatei ${FILE} ist verfügbar, "
+"aber die installierte Version wurde verändert."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Unterschiede zwischen den Versionen zeilenweise anzeigen"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Konflikte bei der 3-Wege-Vereinigung"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Es wurden Konflikte bei der 3-Wege-Vereinigung festgestellt! Bitte passen "
+"Sie die Datei »${dest_file}« selbst an, um die Konflikte zu beseitigen."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Die Datei »${dest_file}.${ERR_SUFFIX}« enthält eine Aufzeichnung der "
+"fehlgeschlagenen Vereinigung der Konfigurationsdateien."
+
diff --git a/debian/po/es.po b/debian/po/es.po
new file mode 100644
index 0000000..8452bf6
--- /dev/null
+++ b/debian/po/es.po
@@ -0,0 +1,176 @@
+# ucf translation to spanish
+# Copyright (C) 2004-2007 Software in the Public Interest
+# This file is distributed under the same license as the ucf package.
+#
+# Changes:
+# - Initial translation
+# Lucas Wall <kthulhu@usa.net>, 2004
+# - Updated
+# Javier Fernandez-Sanguino <jfs@debian.org>, 2007, 2010
+#
+#
+# Traductores, si no conoce el formato PO, merece la pena leer la
+# documentación de gettext, especialmente las secciones dedicadas a este
+# formato, por ejemplo ejecutando:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+#
+# Equipo de traducción al español, por favor lean antes de traducir
+# los siguientes documentos:
+#
+# - El proyecto de traducción de Debian al español
+# http://www.debian.org/intl/spanish/coordinacion
+# especialmente las notas de traducción en
+# http://www.debian.org/intl/spanish/notas
+#
+# - La guía de traducción de po's de debconf:
+# /usr/share/doc/po-debconf/README-trans
+# o http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf 3.0025\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2010-08-08 01:53+0200\n"
+"Last-Translator: Javier Fernandez-Sanguino <jfs@debian.org>\n"
+"Language-Team: Debian Spanish <debian-l10n-spanish@lists.debian.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POFile-SpellExtra: BASENAME destfile ERRSUFFIX\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Fichero de configuración modificado"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "instalar la versión del responsable del paquete"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "conservar la versión local actualmente instalada"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "mostrar las diferencias entre las versiones"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "mostrar las diferencias entre las versiones lado a lado"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "mostrar las diferencias entre las tres versiones"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "fusionar las tres versiones disponibles (experimental)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "ejecutar un nuevo intérprete para examinar la situación"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr ""
+"¿Qué desea hacer con el fichero de configuración modificado ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+#, fuzzy
+#| msgid ""
+#| "A new version of configuration file ${FILE} is available, but the version "
+#| "installed currently has been locally modified."
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Hay una nueva versión del fichero de configuración ${FILE}, pero la versión "
+"que está instalada ha sido modificada localmente."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Mostrar las diferencias línea a línea entre las versiones"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Se encontraron conflictos al intentar integrar a tres bandas"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"¡Se encontraron conflictos al intentar la integración a tres bandas! Por "
+"favor, edite «${dest_file}» y ordénelos manualmente."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"El fichero «${dest_file}.${ERR_SUFFIX}» tiene el registro del fallo de "
+"integración del fichero de configuración."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Hay una nueva versión del fichero de configuración ${FILE}, pero la "
+#~ "versión que está instalada ha sido modificada localmente."
+
+#, fuzzy
+#~| msgid "What would you like to do about ${BASENAME}?"
+#~ msgid "What do you want to do about modified configration file ${BASENAME}?"
+#~ msgstr "¿Qué desea hacer con ${BASENAME}?"
diff --git a/debian/po/eu.po b/debian/po/eu.po
new file mode 100644
index 0000000..16da34f
--- /dev/null
+++ b/debian/po/eu.po
@@ -0,0 +1,151 @@
+# Basque translation for ucf_3.0024_eu.po
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Piarres Beobide <pi@beobide.net>, 2007, 2009.
+# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2009, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf_3.0024_eu\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-07 12:11+0200\n"
+"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@zundan.com>\n"
+"Language-Team: Basque <debian-l10n-basque@lists.debian.org>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.4\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Aldatutako konfigurazio-fitxategia"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "instalatu mantentzailearen bertsioaren paketea"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "mantendu lokalean unean instalatutako bertsioa"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "erakutsi bertsioen arteko desberdintasunak"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "erakutsi bertsioen arteko desberdintasunak aldez-alde"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "erakutsi bertsioen arteko desberdintasunak 3-moduan"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "egin bertsio eskuragarrien 3-moduko batura (esperimentala)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "abiarazi shell berri bat egoera aztertzeko"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr ""
+"Zer egitea nahi duzu aldatutako ${BASENAME} konfigurazioko fitxategiarekin?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"${FILE} konfigurazioko fitxategiaren bertsio berri bat (${NEW}) dago "
+"eskuragarri, baina instalatutako bertsioa lokalki aldatua izan da."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Bertsioen arteko desberdintasunak lerroz lerro"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Gatazkak aurkitu dira 3-moduko baturan"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Gatazkak aurkitu dira 3-moduko baturan. Editatu '${dest_file}' eta ordenatu "
+"eskuz."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"'${dest_file}.${ERR_SUFFIX}' fitxategiak erregistro bat du konfigurazioko "
+"fitxategiak batzean huts egin duten sarrerekin."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "${FILE} konfigurazioko fitxategiaren bertsio berri bat dago eskuragarri, "
+#~ "baina instalatutako bertsioa lokalki aldatua izan da."
+
+#~| msgid "What would you like to do about ${BASENAME}?"
+#~ msgid "What do you want to do about modified configration file ${BASENAME}?"
+#~ msgstr ""
+#~ "Zer egitea nahi duzu aldatutako ${BASENAME} konfigurazioko "
+#~ "fitxategiarekin?"
diff --git a/debian/po/fi.po b/debian/po/fi.po
new file mode 100644
index 0000000..00efd65
--- /dev/null
+++ b/debian/po/fi.po
@@ -0,0 +1,139 @@
+# Esko Arajärvi <edu@iki.fi>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf_3.003\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-07 18:38+0200\n"
+"Last-Translator: Esko Arajärvi <edu@iki.fi>\n"
+"Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Muokattu asetustiedosto"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "Asenna paketin ylläpitäjän versio"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "Säilytä tämän hetkinen paikallinen versio"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "Näytä versioiden väliset erot"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "Näytä versioiden väliset erot rinnakkain"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "Näytä versioiden välinen kolmisuuntainen erotus"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "Tee kolmisuuntainen versioiden yhdistys (kokeellinen)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "Käynnistä uusi komentotulkki tilanteen tutkimiseksi"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr "Miten muokattu asetustiedosto ${BASENAME} käsitellään?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Asetustiedostosta ${FILE} on tarjolla uusi versio (${NEW}), mutta nykyistä "
+"versiota on muokattu paikallisesti."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Versioiden väliset erot rivi riviltä"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Kolmisuuntaisessa yhdistyksessä ilmeni ristiriitoja"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Kolmesta yhdistettävästä tiedostosta löytyi ristiriitoja. Muokkaa tiedostoa "
+"”${dest_file}” ja ratkaise ne käsin."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Tiedostossa ”${dest_file}.${ERR_SUFFIX}” on tiedot asetustiedoston "
+"epäonnistuneesta yhdistämisestä."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Asetustiedostosta ${FILE} on tarjolla uusi versio, mutta nykyistä "
+#~ "versiota on muokattu paikallisesti."
diff --git a/debian/po/fr.po b/debian/po/fr.po
new file mode 100644
index 0000000..19d3f21
--- /dev/null
+++ b/debian/po/fr.po
@@ -0,0 +1,152 @@
+# Translation of ucf debconf templates to French
+# Copyright (C) 2007-2009 Debian French l10n team <debian-l10n-french@lists.debian.org>
+# This file is distributed under the same license as the ucf package.
+#
+# Translators:
+#
+# Eric Madesclair <eric-m@wanadoo.fr>, 2007.
+# Christian Perrier <bubulle@debian.org>, 2009, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: fr\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-07 13:44+0200\n"
+"Last-Translator: Christian Perrier <bubulle@debian.org>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Fichier de configuration modifié"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "Installer la version du responsable du paquet"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "Garder la version actuellement installée"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "Montrer les différences entre les versions"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "Montrer côte à côte les différences entre les versions"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "Montrer les différences entre les trois versions du fichier"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "Fusionner les trois versions (« 3-way merge » : expérimental)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "Lancer un shell pour examiner la situation"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr ""
+"Action souhaitée pour le fichier de configuration modifié ${BASENAME} :"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Une nouvelle version (${NEW}) du fichier de configuration ${FILE} est "
+"disponible mais la version actuellement utilisée a été modifiée localement."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Montrer, ligne par ligne, les différences entre les versions"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Conflits pendant la fusion des 3 versions"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Des conflits ont été trouvés pendant la fusion des trois versions (« 3-way "
+"merge »). Veuillez ouvrir « ${dest_file} » et les corriger vous-même."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Le fichier « ${dest_file}.${ERR_SUFFIX} » contient une trace de la fusion "
+"qui a échoué."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Une nouvelle version du fichier de configuration ${FILE} est disponible "
+#~ "mais la version actuellement utilisée a été modifiée localement."
+
+#, fuzzy
+#~| msgid "What would you like to do about ${BASENAME}?"
+#~ msgid "What do you want to do about modified configration file ${BASENAME}?"
+#~ msgstr "Action souhaitée pour ${BASENAME} :"
diff --git a/debian/po/gl.po b/debian/po/gl.po
new file mode 100644
index 0000000..bb7e1de
--- /dev/null
+++ b/debian/po/gl.po
@@ -0,0 +1,152 @@
+# Galician translation of ucf's debconf templates.
+# This file is distributed under the same license as the ucf package.
+#
+# Jacobo Tarrio <jtarrio@debian.org>, 2006, 2007.
+# Marce Villarino <mvillarino@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2009-11-05 20:38+0100\n"
+"Last-Translator: Marce Villarino <mvillarino@gmail.com>\n"
+"Language-Team: Galician <proxecto@trasno.net>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Ficheiro de configuración modificado"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "instalar a versión do mantenedor do paquete"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "conservar a versión local instalada actualmente"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "mostrar as diferenzas entre as versións"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "mostrar unha comparación entre as versións"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "mostrar unha diferenza a tres entre as versións dispoñíbeis"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "fusionar a tres as versións dispoñibles (experimental)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "iniciar unha shell para examinar a situación"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr "Que desexa facer co ficheiro de configuración modificado ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+#, fuzzy
+#| msgid ""
+#| "A new version of configuration file ${FILE} is available, but the version "
+#| "installed currently has been locally modified."
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Hai dispoñíbel unha nova versión do ficheiro de configuración ${FILE}, pero "
+"a versión actualmente instalada ten modificacións locais."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Diferenzas liña por liña entre as versións"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Atopáronse conflitos na fusión a tres bandas"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Atopáronse conflitos durante a fusión a tres bandas! Edite «${dest_file}» e "
+"ordéneos manualmente."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"O ficheiro «${dest_file}.{ERR_SUFFIX}» contén un rexistro da fusión "
+"fracasada do ficheiro de configuración."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Hai dispoñíbel unha nova versión do ficheiro de configuración ${FILE}, "
+#~ "pero a versión actualmente instalada ten modificacións locais."
+
+#, fuzzy
+#~| msgid "What would you like to do about ${BASENAME}?"
+#~ msgid "What do you want to do about modified configration file ${BASENAME}?"
+#~ msgstr "¿Que quere facer con ${BASENAME}?"
diff --git a/debian/po/it.po b/debian/po/it.po
new file mode 100644
index 0000000..3a45a26
--- /dev/null
+++ b/debian/po/it.po
@@ -0,0 +1,142 @@
+# translation of ucf_1.18_templates.po to italian
+# Copyright Luca Bruno <lucab@debian.org>, 2005-2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf_1.18_templates\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2007-09-19 01:10-0500\n"
+"Last-Translator: Luca Bruno <lucab@debian.org>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "File di configurazione modificato"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "installare la versione del manutentore del pacchetto"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "mantenere la propria versione attualmente installata"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "mostrare le differenze tra le versioni"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "mostrare affiancate le differenze tra le versioni"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "mostrare le differenze tra le 3 versioni del file disponibili"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "integrare le differenze tra le 3 versioni (sperimentale)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "eseguire una nuova shell per esaminare la situazione"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr "Cosa si vuol fare del file di configurazione modificato ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+#, fuzzy
+#| msgid ""
+#| "A new version of configuration file ${FILE} is available, but the version "
+#| "installed currently has been locally modified."
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Una nuova versione del file di configurazione ${FILE} è disponibile, ma la "
+"propria versione è stata modificata localmente."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Differenze riga per riga tra le versioni"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Conflitto nell'integrazione delle 3 versioni"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Si sono verificati conflitti nell'integrazione delle 3 versioni! Modificare "
+"il file «${dest_file}» e risolvere manualmente la situazione."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Il file «${dest_file}.${ERR_SUFFIX}» contiene il resoconto della tentata "
+"integrazione del file di configurazione."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Una nuova versione del file di configurazione ${FILE} è disponibile, ma "
+#~ "la propria versione è stata modificata localmente."
diff --git a/debian/po/ja.po b/debian/po/ja.po
new file mode 100644
index 0000000..d64171e
--- /dev/null
+++ b/debian/po/ja.po
@@ -0,0 +1,140 @@
+#
+# Translators, if you are not familiar with the PO format, gettext
+# documentation is worth reading, especially sections dedicated to
+# this format, e.g. by running:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+#
+# Some information specific to po-debconf are available at
+# /usr/share/doc/po-debconf/README-trans
+# or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+# Developers do not need to manually edit POT or PO files.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-08 08:47+0900\n"
+"Last-Translator: Kenshi Muto <kmuto@debian.org>\n"
+"Language-Team: Japanese <debian-japanese@lists.debian.org>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "変更された設定ファイル"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "パッケージメンテナのバージョンをインストール"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "現在インストールされているローカルバージョンを保持"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "バージョン間の差異を表示"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "バージョン間の差異を並行表示"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "利用可能なバージョン間の 3 ウェイ差分を表示"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "利用可能なバージョン間での 3 ウェイマージを行う (実験的)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "状況を検討するための新しいシェルを起動"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr "変更された設定ファイル ${BASENAME} について何を行いたいですか?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr "設定ファイル ${FILE} の新しいバージョン (${NEW}) が利用可能ですが、現在インストールされているバージョンは、ローカルで変更されています。"
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "バージョン間の行ごとの差異"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "3 ウェイマージ中に競合を発見しました"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"3 ウェイマージ中に競合を発見しました! `${dest_file}' を編集して手動でそれらを"
+"整理してください。"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"ファイル `${dest_file}.${ERR_SUFFIX}' に設定ファイルのマージに失敗した記録が"
+"保持されています。"
diff --git a/debian/po/nl.po b/debian/po/nl.po
new file mode 100644
index 0000000..91be9d8
--- /dev/null
+++ b/debian/po/nl.po
@@ -0,0 +1,146 @@
+# Dutch translation of ucf debconf templates.
+# Copyright (C) 2006-2011 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the ucf package.
+# Kurt De Bree <kdebree@telenet.be>, 2006.
+# Jeroen Schot <schot@a-eskwadraat.nl>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf_3.0025\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2011-04-14 11:43+0200\n"
+"Last-Translator: Jeroen Schot <schot@a-eskwadraat.nl>\n"
+"Language-Team: Debian l10n Dutch <debian-l10n-dutch@lists.debian.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Gewijzigd configuratiebestand"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "installeer de versie van de pakketbeheerder"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "behoud de reeds geïnstalleerde versie"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "toon de verschillen tussen de versies"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "toon de verschillende versies zij-aan-zij"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "toon een 3-voudig verschil tussen de beschikbare versies"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "doe een 3-voudige samenvoeging tussen beschikbare versies (test)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "start een nieuwe shell om de situatie te onderzoeken"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr "Wat wilt u met het aangepaste configuratiebestand ${BASENAME} doen?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+#, fuzzy
+#| msgid ""
+#| "A new version of configuration file ${FILE} is available, but the version "
+#| "installed currently has been locally modified."
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Een nieuwe versie van het configuratiebestand ${FILE} is beschikbaar, maar "
+"de geïnstalleerde versie is lokaal gewijzigd."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Toon de verschillen tussen de versies"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Conflicten gevonden in de drievoudige samenvoeging"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Conflicten gevonden tijdens de drievoudige samenvoeging! Wijzig alstublieft `"
+"${dest_file}` handmatig om dit op te lossen."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Het bestand `${dest_file}.${ERR_SUFFIX}' bevat een verslag van de mislukte "
+"samenvoeging van het configuratiebestand."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Een nieuwe versie van het configuratiebestand ${FILE} is beschikbaar, "
+#~ "maar de geïnstalleerde versie is lokaal gewijzigd."
diff --git a/debian/po/pl.po b/debian/po/pl.po
new file mode 100644
index 0000000..08dab0c
--- /dev/null
+++ b/debian/po/pl.po
@@ -0,0 +1,164 @@
+# translation of ucf3002.po to Polish
+#
+# Translators, if you are not familiar with the PO format, gettext
+# documentation is worth reading, especially sections dedicated to
+# this format, e.g. by running:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+#
+# Some information specific to po-debconf are available at
+# /usr/share/doc/po-debconf/README-trans
+# or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+# Developers do not need to manually edit POT or PO files.
+#
+# Wojciech Zaręba <wojtekz@comp.waw.pl>, 2007.
+# Michał Kułach <michal.kulach@gmail.com>, 2012, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf3002\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-10 16:20+0200\n"
+"Last-Translator: Michał Kułach <michal.kulach@gmail.com>\n"
+"Language-Team: Polish <debian-l10n-polish@lists.debian.org>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 1.4\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Zmodyfikowany plik konfiguracyjny"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "zainstalowanie wersji przygotowanej przez opiekuna pakietu"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "zachowanie lokalnie zainstalowanej wersji"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "pokazanie różnic pomiędzy wersjami"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "pokazanie różnic - obok siebie - pomiędzy wersjami"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "pokazanie różnic pomiędzy trzema dostępnymi wersjami"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "scalenie zmian pomiędzy 3 dostępnymi wersjami (eksperymentalne)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "uruchomienie powłoki w celu zbadania sytuacji"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr ""
+"Jakie działanie ma zostać wykonane w związku z modyfikacją pliku ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+#| msgid ""
+#| "A new version of configuration file ${FILE} is available, but the version "
+#| "installed currently has been locally modified."
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Dostępna jest nowa wersja (${NEW}) pliku konfiguracyjnego ${FILE}, ale obecna "
+"wersja "
+"została lokalnie zmodyfikowana."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Różnice pomiędzy wersjami - wiersz po wierszu"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Znaleziono konflikt podczas scalania pomiędzy trzema wersjami"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Wystąpił konflikt podczas scalania pomiędzy trzema wersjami! Proszę dokonać "
+"edycji \"${dest_file}\" i rozwiązać problem samodzielnie."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Plik \"${dest_file}.${ERR_SUFFIX}\" posiada wpis o niepoprawnym scalaniu "
+"pliku konfiguracyjnego."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Dostępna jest nowa wersja pliku konfiguracyjnego ${FILE}, ale obecna "
+#~ "wersja została lokalnie zmodyfikowana."
+
+#, fuzzy
+#~| msgid "What would you like to do about ${BASENAME}?"
+#~ msgid "What do you want to do about modified configration file ${BASENAME}?"
+#~ msgstr "Proszę wybrać akcję do wykonania na pliku ${BASENAME}:"
diff --git a/debian/po/pt.po b/debian/po/pt.po
new file mode 100644
index 0000000..85de385
--- /dev/null
+++ b/debian/po/pt.po
@@ -0,0 +1,143 @@
+# Portuguese translation of ucf's debconf messages.
+# Copyright (C) 2007 the ucf's copyright holder
+# This file is distributed under the same license as the ucf package.
+#
+# 2007, Pedro Ribeiro <p.m42.ribeiro@gmail.com>
+#
+# Bruno Queiros <brunomiguelqueiros@sapo.pt>, 2007.
+# Américo Monteiro <a_monteiro@gmx.com>, 2010, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf 3.0028\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-07 13:06+0100\n"
+"Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n"
+"Language-Team: Portuguese <traduz@debianpt.org>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Ficheiro de configuração modificado"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "instalar a versão do criador do pacote"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "manter a versão actualmente instalada"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "mostrar a diferença entre as versões"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "mostrar uma diferença lado-a-lado entre as versões"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "mostrar uma diferença em 3 vias entre as versões disponíveis"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr ""
+"fazer uma fusão em 3 vias entre versões disponíveis do ficheiro "
+"(experimental)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "iniciar uma nova consola para examinar a situação"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr ""
+"O que deseja fazer acerca do ficheiro de configuração modificado ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Está disponível nova versão (${NEW}) do ficheiro de configuração ${FILE}, "
+"mas a versão actualmente instalada foi modificada localmente."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Diferenças entre as versões linha por linha"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Conflitos encontrados na fusão de três vias"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Conflitos encontrados na fusão de três vias! Por favor edite '${dest_file}' "
+"e organize-os manualmente."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"O ficheiro '${dest_file}.${ERR_SUFFIX}' tem um registo da fusão falhada do "
+"ficheiro de configuração."
+
diff --git a/debian/po/pt_BR.po b/debian/po/pt_BR.po
new file mode 100644
index 0000000..33440b4
--- /dev/null
+++ b/debian/po/pt_BR.po
@@ -0,0 +1,151 @@
+# Debconf translations for ucf.
+# Copyright (C) 2014 THE ucf'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the ucf package.
+# Flamarion Jorge <jorge.flamarion@gmail.com>, 2010.
+# Adriano Rafael Gomes <adrianorg@arg.eti.br>, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-14 23:25-0300\n"
+"Last-Translator: Adriano Rafael Gomes <adrianorg@arg.eti.br>\n"
+"Language-Team: Brazilian Portuguese <debian-l10n-portuguese@lists.debian."
+"org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Arquivo de configuração modificado"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "instalar a versão do mantenedor do pacote"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "manter a versão local atualmente instalada"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "exibir as diferenças entre as versões"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "exibir as diferenças entre as versões lado-a-lado"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "exibir as diferenças entre as 3 versões disponíveis"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "juntar as 3 versões disponíveis (experimental)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "iniciar um novo shell para examinar a situação"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr ""
+"O que você quer fazer sobre o arquivo de configuração modificado ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+#| msgid ""
+#| "A new version of configuration file ${FILE} is available, but the version "
+#| "installed currently has been locally modified."
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Uma nova versão (${NEW}) do arquivo de configuração ${FILE} está disponível, "
+"mas a versão atualmente instalada foi modificada localmente."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Diferenças entre as versões linha por linha"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Conflitos encontrados na junção das três versões"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Foram encontrados conflitos durante a junção das três versões! Por favor "
+"edite '${dest_file}' e os corrija manualmente."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"O arquivo '${dest_file}.${ERR_SUFFIX}' contém um registro da falha na junção "
+"do arquivo de configuração."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Uma nova versão do arquivo de configuração ${FILE} está disponível, mas a "
+#~ "versão atualmente instalada foi modificada localmente."
+
+#~| msgid "What would you like to do about ${BASENAME}?"
+#~ msgid "What do you want to do about modified configration file ${BASENAME}?"
+#~ msgstr "O que você gostaria de fazer em relação a ${BASENAME}?"
diff --git a/debian/po/ru.po b/debian/po/ru.po
new file mode 100644
index 0000000..45bb625
--- /dev/null
+++ b/debian/po/ru.po
@@ -0,0 +1,145 @@
+# translation of ru.po to Russian
+# This file is distributed under the same license as the ucf package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Yuri Kozlov <kozlov.y@gmail.com>, 2006, 2007.
+# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf 3.0028\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-07 19:10+0400\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.5\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Изменён файл настройки"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "установить версию из пакета"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "сохранить установленную локальную версию"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "показать различия между версиями"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "показать различия между версиями параллельно"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "показать 3-x стороннее различие между доступными версиями"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "3-x стороннее слияние доступных версий (эксперимен. режим)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "запустить новую оболочку для прояснения ситуации"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr "Что нужно сделать с изменённым файлом настройки ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Доступна новая версия (${NEW}) файла настройки ${FILE}, но версия файла, "
+"находящаяся в системе, была изменёна локально."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Различия между версиями построчно"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Проблемы при 3-x стороннем слиянии"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Обнаружены конфликты при 3-x стороннем слиянии! Отредактируйте `"
+"${dest_file}' и сопоставьте их вручную."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Файл `${dest_file}.${ERR_SUFFIX}' содержит элементы, которые не дают "
+"объединить файлы настройки."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Доступна новая версия файла настройки ${FILE}, но версия файла, "
+#~ "находящаяся в системе, была изменёна локально."
diff --git a/debian/po/sk.po b/debian/po/sk.po
new file mode 100644
index 0000000..852dc0b
--- /dev/null
+++ b/debian/po/sk.po
@@ -0,0 +1,144 @@
+# Slovak translations for ucf package
+# Slovenské preklady pre balík ucf.
+# Copyright (C) 2011 THE ucf'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the ucf package.
+# Slavko <linux@slavino.sk>, 2011, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf 3.0028\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-09 18:58+0200\n"
+"Last-Translator: Slavko <linux@slavino.sk>\n"
+"Language-Team: slovenčina <linux@slavino.sk>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Gtranslator 2.91.6\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Zmenený konfiguračný súbor"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "nainštalovať verziu správcu balíka"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "zachovať aktuálne nainštalovanú lokálnu verziu"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "zobraziť rozdiely medzi verziami"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "zobraziť rozdiely medzi verziami vedľa seba"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "zobraziť trojcestný rozdiel medzi dostupnými verziami"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "urobiť trojcestné zlúčenie dostupných verzií (experimentálne)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "spustiť nový shell na preverenie situácie"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr "Čo chcete urobiť so zmeneným konfiguračným súborom ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Je dostupná nová verzia (${NEW}) konfiguračného súboru ${FILE}, ale aktuálne "
+"nainštalovaná verzia bola lokálne upravená."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Rozdiely medzi verziami, riadok po riadku"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Zistené konflikty pri trojcestnom zlúčení"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Zistené konflikty pri trojcestnom zlúčení! Prosím upravte „${dest_file}” a "
+"opravte ich manuálne."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Súbor „${dest_file}.${ERR_SUFFIX}” má záznam o neúspešnom zlúčení "
+"konfiguračného súboru."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Je dostupná nová verzia konfiguračného súboru ${FILE}, ale aktuálne "
+#~ "nainštalovaná verzia bola lokálne upravená."
diff --git a/debian/po/sv.po b/debian/po/sv.po
new file mode 100644
index 0000000..4ca5fc6
--- /dev/null
+++ b/debian/po/sv.po
@@ -0,0 +1,143 @@
+# Swedish translation for ucf.
+# Copyright (C) 2009, 2014 Martin Bagge <brother@bsnet.se>
+# This file is distributed under the same license as the ucf package.
+#
+# Martin Bagge <brother@bsnet.se>, 2009, 2014.
+# Daniel Nylander <po@danielnylander.se>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf 2.002\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2014-05-07 11:12+0100\n"
+"Last-Translator: Martin Bagge / brother <brother@bsnet.se>\n"
+"Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n"
+"Language: Swedish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Ändrad konfigurationsfil"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "installera paketansvariges version"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "behåll den lokalt installerade version"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "visa skillnaderna mellan versionerna"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "visa skillnaderna sida vid sida mellan versionerna"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "visa en 3-vägs skillnad mellan tillgängliga versioner"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "gör en 3-vägs sammanslagning mellan versionerna (experimentell)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "starta ett nytt skal för att undersöka situationen"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr "Vad vill du göra med den uppdaterade filen ${BASENAME}?"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"En ny version (${NEW}) av konfigurationsfilen ${FILE} finns tillgänglig, men "
+"versionen som är installerad har ändrats lokalt."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Visa skillnaderna rad för rad mellan versionerna"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Konflikter i trevägssammanslagning"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"En eller flera konflikter uppstod vid trevägssammanslagningen! Redigera "
+"\"${dest_file}\" och lös konflikterna manuellt."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Filen \"${dest_file}.${ERR_SUFFIX}\" innehåller en notering av den "
+"misslyckade sammanslagningen av inställningsfilerna."
+
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "En ny version av konfigurationsfilen ${FILE} finns tillgänglig, men "
+#~ "versionen som är installerad har ändrats lokalt."
diff --git a/debian/po/templates.pot b/debian/po/templates.pot
new file mode 100644
index 0000000..f53c455
--- /dev/null
+++ b/debian/po/templates.pot
@@ -0,0 +1,129 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr ""
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr ""
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr ""
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr ""
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr ""
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr ""
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr ""
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr ""
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr ""
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
diff --git a/debian/po/vi.po b/debian/po/vi.po
new file mode 100644
index 0000000..02e8742
--- /dev/null
+++ b/debian/po/vi.po
@@ -0,0 +1,152 @@
+# Vietnamese translation for UCF.
+# Copyright © 2009 Free Software Foundation, Inc.
+# Clytie Siddall <clytie@riverland.net.au>, 2005-2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ucf 3.0023\n"
+"Report-Msgid-Bugs-To: ucf@packages.debian.org\n"
+"POT-Creation-Date: 2014-05-07 01:28-0700\n"
+"PO-Revision-Date: 2009-10-14 19:51+0930\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.8\n"
+
+#. Type: title
+#. Description
+#: ../templates:2001
+msgid "Modified configuration file"
+msgstr "Tập tin cấu hình đã sửa đổi"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "install the package maintainer's version"
+msgstr "cài đặt phiên bản của nhà duy trì gói"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "keep the local version currently installed"
+msgstr "giữ phiên bản cục bộ được cài đặt hiện thời"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show the differences between the versions"
+msgstr "hiển thị khác biệt giữa những phiên bản"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "show a side-by-side difference between the versions"
+msgstr "hiển thị khác biệt cạnh nhau giữa những phiên bản"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "show a 3-way difference between available versions"
+msgstr "hiển thị khác biệt ba hướng giữa những phiên bản sẵn sàng"
+
+# do a 3 way merge between available versions of the file [Very
+# Experimental]
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#: ../templates:3001
+msgid "do a 3-way merge between available versions (experimental)"
+msgstr "hoà trộn ba hướng những phiên bản sẵn sàng (vẫn thực nghiệm)"
+
+#. Type: select
+#. Choices
+#. Translators, please keep translations *short* (less than 65 columns)
+#. Type: select
+#. Choices
+#: ../templates:3001 ../templates:4001
+msgid "start a new shell to examine the situation"
+msgstr "khởi chạy trình bao mới để khám xét trường hợp"
+
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+msgid "What do you want to do about modified configuration file ${BASENAME}?"
+msgstr "Đối với tập tin cấu hình bị sửa đổi ${BASENAME} muốn làm gì vậy?"
+
+# A new version of configuration file ${FILE} is available, but your
+# version has been locally modified.
+#. Type: select
+#. Description
+#. Type: select
+#. Description
+#: ../templates:3002 ../templates:4002
+#, fuzzy
+#| msgid ""
+#| "A new version of configuration file ${FILE} is available, but the version "
+#| "installed currently has been locally modified."
+msgid ""
+"A new version (${NEW}) of configuration file ${FILE} is available, but the "
+"version installed currently has been locally modified."
+msgstr ""
+"Có sẵn một phiên bản mới của tập tin cấu hình ${FILE}, nhưng phiên bản được "
+"cài đặt hiện thời đã bị sửa đổi cục bộ."
+
+#. Type: note
+#. Description
+#: ../templates:5001
+msgid "Line by line differences between versions"
+msgstr "Khác biệt từng dòng giữa những phiên bản"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid "Conflicts found in three-way merge"
+msgstr "Xung đột được tìm trong sự hoà trộn ba hướng"
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"Conflicts found during three-way merge! Please edit `${dest_file}' and sort "
+"them out manually."
+msgstr ""
+"Tìm thấy sự xung đột trong khi hoà trộn về ba hướng. Hãy sửa đổi tập tin "
+"đích « ${dest_file} » và giải quyết bằng tay."
+
+#. Type: error
+#. Description
+#: ../templates:6001
+msgid ""
+"The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of "
+"the configuration file."
+msgstr ""
+"Tập tin đích « ${dest_file}.${ERR_SUFFIX} » đã ghi lưu tiến trình hoà trộn "
+"bị lỗi của tập tin cấu hình."
+
+# A new version of configuration file ${FILE} is available, but your
+# version has been locally modified.
+#~ msgid ""
+#~ "A new version of configuration file ${FILE} is available, but the version "
+#~ "installed currently has been locally modified."
+#~ msgstr ""
+#~ "Có sẵn một phiên bản mới của tập tin cấu hình ${FILE}, nhưng phiên bản "
+#~ "được cài đặt hiện thời đã bị sửa đổi cục bộ."
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..cbe925d
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,3 @@
+#!/usr/bin/make -f
+%:
+ dh $@
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..89ae9db
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)
diff --git a/debian/templates b/debian/templates
new file mode 100644
index 0000000..5653cf3
--- /dev/null
+++ b/debian/templates
@@ -0,0 +1,46 @@
+# These templates have been reviewed by the debian-l10n-english
+# team
+#
+# If modifications/additions/rewording are needed, please ask
+# for an advice to debian-l10n-english@lists.debian.org
+#
+# Even minor modifications require translation updates and such
+# changes should be coordinated with translators and reviewers.
+
+Template: ucf/title
+Type: title
+_Description: Modified configuration file
+
+Template: ucf/changeprompt_threeway
+Type: select
+# Translators, please keep translations *short* (less than 65 columns)
+__Choices: install the package maintainer's version, keep the local version currently installed, show the differences between the versions, show a side-by-side difference between the versions, show a 3-way difference between available versions, do a 3-way merge between available versions (experimental), start a new shell to examine the situation
+Choices-C: install_new, keep_current, diff, sdiff, diff_threeway, merge_threeway, shell
+Default: keep_current
+_Description: What do you want to do about modified configuration file ${BASENAME}?
+ A new version (${NEW}) of configuration file ${FILE} is available, but the version installed
+ currently has been locally modified.
+
+Template: ucf/changeprompt
+Type: select
+__Choices: install the package maintainer's version, keep the local version currently installed, show the differences between the versions, show a side-by-side difference between the versions, start a new shell to examine the situation
+Choices-C: install_new, keep_current, diff, sdiff, shell
+Default: keep_current
+_Description: What do you want to do about modified configuration file ${BASENAME}?
+ A new version (${NEW}) of configuration file ${FILE} is available, but the version installed
+ currently has been locally modified.
+
+Template: ucf/show_diff
+Type: note
+#flag:translate!:2
+_Description: Line by line differences between versions
+ ${DIFF}
+
+Template: ucf/conflicts_found
+Type: error
+_Description: Conflicts found in three-way merge
+ Conflicts found during three-way merge! Please edit `${dest_file}' and sort
+ them out manually.
+ .
+ The file `${dest_file}.${ERR_SUFFIX}' has a record of the failed merge of
+ the configuration file.
diff --git a/debian/ucf.lintian-overrides b/debian/ucf.lintian-overrides
new file mode 100644
index 0000000..3ec2530
--- /dev/null
+++ b/debian/ucf.lintian-overrides
@@ -0,0 +1,7 @@
+ucf: no-debconf-config
+ucf: debconf-is-not-a-registry usr/bin/ucf
+ucf: unused-debconf-template ucf/title
+ucf: unused-debconf-template ucf/changeprompt_threeway
+ucf: unused-debconf-template ucf/changeprompt
+ucf: unused-debconf-template ucf/show_diff
+ucf: unused-debconf-template ucf/conflicts_found
diff --git a/debian/ucf.postinst b/debian/ucf.postinst
new file mode 100755
index 0000000..47e9d47
--- /dev/null
+++ b/debian/ucf.postinst
@@ -0,0 +1,232 @@
+#! /bin/sh
+# -*- Mode: Sh -*-
+# postinst ---
+# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com )
+# Created On : Fri Nov 14 11:25:07 2003
+# Created On Node : glaurung.green-gryphon.com
+# Last Modified By : Manoj Srivastava
+# Last Modified On : Tue Apr 11 13:20:53 2006
+# Last Machine Used: glaurung.internal.golden-gryphon.com
+# Update Count : 14
+# Status : Unknown, Use with caution!
+# HISTORY :
+# Description :
+#
+# arch-tag: 5401e9ef-39cc-4aee-96a4-61dfb8f32cf7
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+#
+
+# Abort if any command returns an error value
+set -e
+
+package_name=ucf
+
+if [ -z "$package_name" ]; then
+ print >&2 "Internal Error. Please report a bug."
+ exit 1;
+fi
+
+# This script is called as the last step of the installation of the
+# package. All the package's files are in place, dpkg has already done
+# its automatic conffile handling, and all the packages we depend of
+# are already fully installed and configured.
+# summary of how this script can be called:
+# * <postinst> `configure' <most-recently-configured-version>
+# * <old-postinst> `abort-upgrade' <new version>
+# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
+# <new-version>
+# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
+# <failed-install-package> <version> `removing'
+# <conflicting-package> <version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+#
+# quoting from the policy:
+# Any necessary prompting should almost always be confined to the
+# post-installation script, and should be protected with a conditional
+# so that unnecessary prompting doesn't happen if a package's
+# installation fails and the `postinst' is called with `abort-upgrade',
+# `abort-remove' or `abort-deconfigure'.
+
+# The following idempotent stuff doesn't generally need protecting
+# against being run in the abort-* cases.
+
+# Install info files into the dir file
+# install-info --quiet --section "section pattern" "Section Title" \
+# --description="Name of the document" /usr/info/${package_name}.info
+
+# Create stub directories under /usr/local
+# if test ! -d /usr/local/lib/${package_name}; then
+# if test ! -d /usr/local/lib; then
+# if mkdir /usr/local/lib; then
+# chown root.staff /usr/local/lib || true
+# chmod 2775 /usr/local/lib || true
+# fi
+# fi
+# if mkdir /usr/local/lib/${package_name}; then
+# chown root.staff /usr/local/lib/${package_name} || true
+# chmod 2775 /usr/local/lib/${package_name} || true
+# fi
+# fi
+
+# Ensure the menu system is updated
+# [ ! -x /usr/bin/update-menus ] || /usr/bin/update-menus
+
+# Arrange for a daemon to be started at system boot time
+# update-rc.d ${package_name} default >/dev/null
+
+case "$1" in
+ configure)
+ # Configure this package. If the package must prompt the user for
+ # information, do it here.
+ # Install emacs lisp files
+ #if [ -x /usr/lib/emacsen-common/emacs-package-install ]; then
+ # /usr/lib/emacsen-common/emacs-package-install $package_name
+ #fi
+
+
+ # Activate menu-methods script
+ # chmod a+x /etc/menu-methods/${package_name}
+
+ # Update ld.so cache
+ # ldconfig
+
+ # Make our version of a program available
+ # update-alternatives \
+ # --install /usr/bin/program program /usr/bin/alternative 50 \
+ # --slave /usr/man/man1/program.1.gz program.1.gz \
+ # /usr/man/man1/alternative.1.gz
+
+ # Tell ucf that the file in /usr/share/foo is the latest
+ # maintainer version, and let it handle how to manage the real
+ # confuguration file in /etc. This is how a static configuration
+ # file can be handled:
+ #if which ucf >/dev/null 2>&1; then
+ # ucf /usr/share/${package_name}/configuration /etc/${package_name}.conf
+ #fi
+
+ touch /var/lib/ucf/hashfile
+ touch /var/lib/ucf/registry
+
+ ### We could also do this on the fly. The following is from Tore
+ ### Anderson:
+
+ # This package uses debconf to ask a question, so source the debconf
+ # confmodule as early as possible. However, it does not depend on debconf,
+ # so debconf may not be installed.
+ if [ -e /usr/share/debconf/confmodule ]; then
+ . /usr/share/debconf/confmodule
+ db_capb
+ fi
+
+
+ ### find out what the user answered.
+ # db_get foo/run_on_boot
+ # run_on_boot=$RET
+ # db_stop
+
+ ### safely create a temporary file to generate our suggested
+ ### configuration file.
+ # tempfile=`tempfile`
+ # cat << _eof > $tempfile
+ ### Configuration file for Foo.
+
+ ### this was answered by you, the user in a debconf dialogue
+ # RUNONBOOT=$run_on_boot
+
+ ### this was not, as it has a sane default value.
+ # COLOUROFSKY=blue
+
+ #_eof
+
+ ### Note that some versions of debconf do not release stdin, so
+ ### the following invocation of ucf may not work, since the stdin
+ ### is never coneected to ucfr.
+
+ ### now, invoke ucf, which will take care of the rest, and ask
+ ### the user if he wants to update his file, if it is modified.
+ #ucf $tempfile /etc/foo.conf
+
+ ### done! now we'll just clear up our cruft.
+ #rm -f $tempfile
+
+
+
+ # There are three sub-cases:
+ if test "${2+set}" != set; then
+ # We're being installed by an ancient dpkg which doesn't remember
+ # which version was most recently configured, or even whether
+ # there is a most recently configured version.
+ :
+
+ elif test -z "$2" || test "$2" = "<unknown>"; then
+ # The package has not ever been configured on this system, or was
+ # purged since it was last configured.
+ :
+
+ else
+ # Version $2 is the most recently configured version of this
+ # package.
+ :
+
+ fi ;;
+ abort-upgrade)
+ # Back out of an attempt to upgrade this package FROM THIS VERSION
+ # to version $2. Undo the effects of "prerm upgrade $2".
+ :
+
+ ;;
+ abort-remove)
+ if test "$2" != in-favour; then
+ echo "$0: undocumented call to \`postinst $*'" 1>&2
+ exit 0
+ fi
+ # Back out of an attempt to remove this package, which was due to
+ # a conflict with package $3 (version $4). Undo the effects of
+ # "prerm remove in-favour $3 $4".
+ :
+
+ ;;
+ abort-deconfigure)
+ if test "$2" != in-favour || test "$5" != removing; then
+ echo "$0: undocumented call to \`postinst $*'" 1>&2
+ exit 0
+ fi
+ # Back out of an attempt to deconfigure this package, which was
+ # due to package $6 (version $7) which we depend on being removed
+ # to make way for package $3 (version $4). Undo the effects of
+ # "prerm deconfigure in-favour $3 $4 removing $6 $7".
+ :
+
+ ;;
+ *) echo "$0: didn't understand being called with \`$1'" 1>&2
+ exit 0;;
+esac
+
+# Install doc base documentation
+#if which install-docs >/dev/null 2>&1; then
+# if [ -e /usr/share/doc-base/${package_name} ]; then
+# install-docs -i /usr/share/doc-base/${package_name}
+# fi
+#fi
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/ucf.postrm b/debian/ucf.postrm
new file mode 100755
index 0000000..437d6d3
--- /dev/null
+++ b/debian/ucf.postrm
@@ -0,0 +1,185 @@
+#! /bin/sh
+# -*- Mode: Sh -*-
+# postrm ---
+# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com )
+# Created On : Fri Nov 14 12:22:20 2003
+# Created On Node : glaurung.green-gryphon.com
+# Last Modified By : Manoj Srivastava
+# Last Modified On : Tue Apr 11 13:20:24 2006
+# Last Machine Used: glaurung.internal.golden-gryphon.com
+# Update Count : 12
+# Status : Unknown, Use with caution!
+# HISTORY :
+# Description :
+#
+# arch-tag: 56802d51-d980-4822-85c0-28fce19ed430
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+
+# Abort if any command returns an error value
+set -e
+
+package_name=ucf
+
+if [ -z "$package_name" ]; then
+ print >&2 "Internal Error. Please report a bug."
+ exit 1;
+fi
+
+# This script is called twice during the removal of the package; once
+# after the removal of the package's files from the system, and as
+# the final step in the removal of this package, after the package's
+# conffiles have been removed.
+# summary of how this script can be called:
+# * <postrm> `remove'
+# * <postrm> `purge'
+# * <old-postrm> `upgrade' <new-version>
+# * <new-postrm> `failed-upgrade' <old-version>
+# * <new-postrm> `abort-install'
+# * <new-postrm> `abort-install' <old-version>
+# * <new-postrm> `abort-upgrade' <old-version>
+# * <disappearer's-postrm> `disappear' <r>overwrit>r> <new-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+# Ensure the menu system is updated
+# [ ! -x /usr/bin/update-menus ] || /usr/bin/update-menus
+
+case "$1" in
+ remove)
+ # This package is being removed, but its configuration has not yet
+ # been purged.
+ :
+
+ # Remove diversion
+ # dpkg-divert --package ${package_name} --remove --rename \
+ # --divert /usr/bin/other.real /usr/bin/other
+
+ # ldconfig is NOT needed during removal of a library, only during
+ # installation
+
+ ;;
+ purge)
+ # This package has previously been removed and is now having
+ # its configuration purged from the system.
+
+ # we mimic dpkg as closely as possible, so we remove configuration
+ # files with dpkg backup extensions too:
+ ### Some of the following is from Tore Anderson:
+ # for ext in '~' '%' .bak .dpkg-tmp .dpkg-new .dpkg-old .dpkg-dist; do
+ # rm -f /etc/${package_name}.conf$ext
+ # done
+
+ # remove the configuration file itself
+ # rm -f /etc/${package_name}.conf
+
+ rm -f /var/lib/ucf/hashfile
+ rm -f /var/lib/ucf/hashfile.*
+ rm -f /var/lib/ucf/registry
+ rm -f /var/lib/ucf/registry.*
+ if [ -d /var/lib/ucf/cache ]; then
+ find /var/lib/ucf/cache -type f -print0 | xargs -0r /bin/rm -f
+ rmdir /var/lib/ucf/cache 1>&2 || true
+ fi
+
+ # and finally clear it out from the ucf database
+ # ucf --purge /etc/${package_name}.conf
+
+ # Remove symlinks from /etc/rc?.d
+ # update-rc.d ${package_name} remove >/dev/null
+
+ if [ -e /usr/share/debconf/confmodule ]; then
+ # Purge this package's data from the debconf database.
+ . /usr/share/debconf/confmodule
+ db_purge
+ fi
+
+ # This package has previously been removed and is now having
+ # its configuration purged from the system.
+ # for flavour in emacs20 emacs21; do
+ # STARTDIR=/etc/$flavour/site-start.d;
+ # STARTFILE="${package_name}-init.el";
+ # if [ -e "$STARTDIR/20$STARTFILE" ]; then
+ # rm -f "$STARTDIR/20$STARTFILE"
+ # fi
+ # done
+
+ ;;
+ disappear)
+ if test "$2" != overwriter; then
+ echo "$0: undocumented call to \`postrm $*'" 1>&2
+ exit 0
+ fi
+ # This package has been completely overwritten by package $3
+ # (version $4). All our files are already gone from the system.
+ # This is a special case: neither "prerm remove" nor "postrm remove"
+ # have been called, because dpkg didn't know that this package would
+ # disappear until this stage.
+ :
+
+ ;;
+ upgrade)
+ # About to upgrade FROM THIS VERSION to version $2 of this package.
+ # "prerm upgrade" has been called for this version, and "preinst
+ # upgrade" has been called for the new version. Last chance to
+ # clean up.
+ :
+
+ ;;
+ failed-upgrade)
+ # About to upgrade from version $2 of this package TO THIS VERSION.
+ # "prerm upgrade" has been called for the old version, and "preinst
+ # upgrade" has been called for this version. This is only used if
+ # the previous version's "postrm upgrade" couldn't handle it and
+ # returned non-zero. (Fix old postrm bugs here.)
+ :
+
+ ;;
+ abort-install)
+ # Back out of an attempt to install this package. Undo the effects of
+ # "preinst install...". There are two sub-cases.
+ :
+
+ if test "${2+set}" = set; then
+ # When the install was attempted, version $2's configuration
+ # files were still on the system. Undo the effects of "preinst
+ # install $2".
+ :
+
+ else
+ # We were being installed from scratch. Undo the effects of
+ # "preinst install".
+ :
+
+ fi ;;
+ abort-upgrade)
+ # Back out of an attempt to upgrade this package from version $2
+ # TO THIS VERSION. Undo the effects of "preinst upgrade $2".
+ :
+
+ ;;
+ *) echo "$0: didn't understand being called with \`$1'" 1>&2
+ exit 0;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+
+exit 0
diff --git a/debian/ucf.preinst b/debian/ucf.preinst
new file mode 100755
index 0000000..846e31a
--- /dev/null
+++ b/debian/ucf.preinst
@@ -0,0 +1,105 @@
+#! /bin/sh
+# -*- Mode: Sh -*-
+# preinst ---
+# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com )
+# Created On : Fri Nov 14 12:12:04 2003
+# Created On Node : glaurung.green-gryphon.com
+# Last Modified By : Manoj Srivastava
+# Last Modified On : Tue Nov 18 22:35:57 2003
+# Last Machine Used: glaurung.green-gryphon.com
+# Update Count : 4
+# Status : Unknown, Use with caution!
+# HISTORY :
+# Description :
+#
+# arch-tag: d6a3672d-acb3-4f6c-9984-bad17d8ce0aa
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+#
+
+
+# Abort if any command returns an error value
+set -e
+
+package_name=ucf
+
+if [ -z "$package_name" ]; then
+ print >&2 "Internal Error. Please report a bug."
+ exit 1;
+fi
+
+
+statedir='/var/lib/ucf';
+
+# This script is called before this version of this package is installed.
+# When this script is called, the package's files have not been unpacked
+# yet.
+
+case "$1" in
+ install)
+ # About to install this package.
+ :
+
+ # Add a diversion. This is one of the few things which may be done
+ # before installing any files from the package.
+ # dpkg-divert --package foo --add --rename \
+ # --divert /usr/bin/other.real /usr/bin/other
+
+ echo >&2 "Moving old data out of the way"
+ for i in $(seq 6 -1 0); do
+ if [ -e "${statedir}/hashfile.${i}" ]; then
+ cp -f "${statedir}/hashfile.${i}" \
+ "${statedir}/hashfile.$(($i+1))"
+ fi
+ done
+ if [ -e "$statedir/hashfile" ]; then
+ cp -f "$statedir/hashfile" "$statedir/hashfile.0"
+ fi
+
+ # There are two sub-cases:
+ if test "${2+set}" = set; then
+ # The configuration files from version $2 of this package are
+ # still on the system.
+ :
+
+ else
+ # There is no existing configuration; install from scratch.
+ :
+
+ fi ;;
+ upgrade)
+ # About to upgrade this package from version $2 TO THIS VERSION.
+ # "prerm upgrade" has already been called for the old version of
+ # this package.
+ :
+
+ ;;
+ abort-upgrade)
+ # Back out of an attempt to upgrade this package FROM THIS VERSION to
+ # version $2. Undo the effects of "postrm upgrade $2".
+ :
+
+ ;;
+ *) echo "$0: didn't understand being called with \`$1'" 1>&2
+ exit 0;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/examples/ChangeLog b/examples/ChangeLog
new file mode 100644
index 0000000..3208477
--- /dev/null
+++ b/examples/ChangeLog
@@ -0,0 +1,6 @@
+2007-04-17 Manoj Srivastava <srivasta@debian.org>
+
+ * postrm: srivasta@debian.org--lenny/ucf--devel--2.0--base-0 Now
+ ucf creates .ucf-new, .ucf-old, and .ucf-dist suffixes,
+ so the example is updated to clean the new names.
+
diff --git a/examples/postinst b/examples/postinst
new file mode 100644
index 0000000..7977233
--- /dev/null
+++ b/examples/postinst
@@ -0,0 +1,153 @@
+#! /bin/sh
+# postinst.skeleton
+# Skeleton maintainer script showing all the possible cases.
+# Written by Charles Briscoe-Smith, March-June 1998. Public Domain.
+
+# Abort if any command returns an error value
+set -e
+
+# This script is called as the last step of the installation of the
+# package. All the package's files are in place, dpkg has already done
+# its automatic conffile handling, and all the packages we depend of
+# are already fully installed and configured.
+
+# The following idempotent stuff doesn't generally need protecting
+# against being run in the abort-* cases.
+
+# Install info files into the dir file
+: install-info --quiet --section "section pattern" "Section Title" \
+: --description="Name of the document" /usr/info/foo.info
+
+# Create stub directories under /usr/local
+: if test ! -d /usr/local/lib/foo; then
+: if test ! -d /usr/local/lib; then
+: if mkdir /usr/local/lib; then
+: chown root.staff /usr/local/lib || true
+: chmod 2775 /usr/local/lib || true
+: fi
+: fi
+: if mkdir /usr/local/lib/foo; then
+: chown root.staff /usr/local/lib/foo || true
+: chmod 2775 /usr/local/lib/foo || true
+: fi
+: fi
+
+# Ensure the menu system is updated
+: [ ! -x /usr/bin/update-menus ] || /usr/bin/update-menus
+
+# Arrange for a daemon to be started at system boot time
+: update-rc.d foo default >/dev/null
+
+case "$1" in
+ configure)
+ # Configure this package. If the package must prompt the user for
+ # information, do it here.
+ :
+
+ # Activate menu-methods script
+ : chmod a+x /etc/menu-methods/foo
+
+ # Update ld.so cache
+ : ldconfig
+
+ # Make our version of a program available
+ : update-alternatives \
+ : --install /usr/bin/program program /usr/bin/alternative 50 \
+ : --slave /usr/share/man/man1/program.1.gz program.1.gz \
+ : /usr/share/man/man1/alternative.1.gz
+
+ # Tell ucf that the file in /usr/share/foo is the latest
+ # maintainer version, and let it handle how to manage the real
+ # confuguration file in /etc. This is how a static configuration
+ # file can be handled:
+ ucf /usr/share/foo/configuration /etc/foo.conf
+ ucfr foo /etc/foo.conf
+
+ ### We could also do this on the fly. The following is from Tore
+ ### Anderson:
+
+ #. /usr/share/debconf/confmodule
+
+ ### find out what the user answered.
+ # db_get foo/run_on_boot
+ # run_on_boot=$RET
+ # db_stop
+
+ ### safely create a temporary file to generate our suggested
+ ### configuration file.
+ # tempfile=`tempfile`
+ # cat << _eof > $tempfile
+ ### Configuration file for Foo.
+
+ ### this was answered by you, the user in a debconf dialogue
+ # RUNONBOOT=$run_on_boot
+
+ ### this was not, as it has a sane default value.
+ # COLOUROFSKY=blue
+
+ #_eof
+
+ ### Note that some versions of debconf do not release stdin, so
+ ### the following invocation of ucf may not work, since the stdin
+ ### is never coneected to ucfr.
+
+ ### now, invoke ucf, which will take care of the rest, and ask
+ ### the user if he wants to update his file, if it is modified.
+ #ucf $tempfile /etc/foo.conf
+
+ ### done! now we'll just clear up our cruft.
+ #rm -f $tempfile
+
+
+ # There are three sub-cases:
+ if test "${2+set}" != set; then
+ # We're being installed by an ancient dpkg which doesn't remember
+ # which version was most recently configured, or even whether
+ # there is a most recently configured version.
+ :
+
+ elif test -z "$2" -o "$2" = "<unknown>"; then
+ # The package has not ever been configured on this system, or was
+ # purged since it was last configured.
+ :
+
+ else
+ # Version $2 is the most recently configured version of this
+ # package.
+ :
+
+ fi ;;
+ abort-upgrade)
+ # Back out of an attempt to upgrade this package FROM THIS VERSION
+ # to version $2. Undo the effects of "prerm upgrade $2".
+ :
+
+ ;;
+ abort-remove)
+ if test "$2" != in-favour; then
+ echo "$0: undocumented call to \`postinst $*'" 1>&2
+ exit 0
+ fi
+ # Back out of an attempt to remove this package, which was due to
+ # a conflict with package $3 (version $4). Undo the effects of
+ # "prerm remove in-favour $3 $4".
+ :
+
+ ;;
+ abort-deconfigure)
+ if test "$2" != in-favour -o "$5" != removing; then
+ echo "$0: undocumented call to \`postinst $*'" 1>&2
+ exit 0
+ fi
+ # Back out of an attempt to deconfigure this package, which was
+ # due to package $6 (version $7) which we depend on being removed
+ # to make way for package $3 (version $4). Undo the effects of
+ # "prerm deconfigure in-favour $3 $4 removing $6 $7".
+ :
+
+ ;;
+ *) echo "$0: didn't understand being called with \`$1'" 1>&2
+ exit 0;;
+esac
+
+exit 0
diff --git a/examples/postrm b/examples/postrm
new file mode 100644
index 0000000..cfcfe00
--- /dev/null
+++ b/examples/postrm
@@ -0,0 +1,115 @@
+#! /bin/sh
+# postrm.skeleton
+# Skeleton maintainer script showing all the possible cases.
+# Written by Charles Briscoe-Smith, March-June 1998. Public Domain.
+
+# Abort if any command returns an error value
+set -e
+
+# This script is called twice during the removal of the package; once
+# after the removal of the package's files from the system, and as
+# the final step in the removal of this package, after the package's
+# conffiles have been removed.
+
+# Ensure the menu system is updated
+: [ ! -x /usr/bin/update-menus ] || /usr/bin/update-menus
+
+case "$1" in
+ remove)
+ # This package is being removed, but its configuration has not yet
+ # been purged.
+ :
+
+ # Remove diversion
+ : dpkg-divert --package foo --remove --rename \
+ : --divert /usr/bin/other.real /usr/bin/other
+
+ # ldconfig is NOT needed during removal of a library, only during
+ # installation
+
+ ;;
+ purge)
+ # This package has previously been removed and is now having
+ # its configuration purged from the system.
+ :
+
+ # we mimic dpkg as closely as possible, so we remove configuration
+ # files with dpkg backup extensions too:
+ ### Some of the following is from Tore Anderson:
+ for ext in '~' '%' .bak .ucf-new .ucf-old .ucf-dist; do
+ rm -f /etc/foo.conf$ext
+ done
+
+ # remove the configuration file itself
+ rm -f /etc/foo.conf
+
+ # and finally clear it out from the ucf database
+ if which ucf >/dev/null; then
+ ucf --purge /etc/foo.conf
+ fi
+ if which ucfr >/dev/null; then
+ ucfr --purge foo /etc/foo.conf
+ fi
+
+ # Remove symlinks from /etc/rc?.d
+ : update-rc.d foo remove >/dev/null
+
+ ;;
+ disappear)
+ if test "$2" != overwriter; then
+ echo "$0: undocumented call to \`postrm $*'" 1>&2
+ exit 0
+ fi
+ # This package has been completely overwritten by package $3
+ # (version $4). All our files are already gone from the system.
+ # This is a special case: neither "prerm remove" nor "postrm remove"
+ # have been called, because dpkg didn't know that this package would
+ # disappear until this stage.
+ :
+
+ ;;
+ upgrade)
+ # About to upgrade FROM THIS VERSION to version $2 of this package.
+ # "prerm upgrade" has been called for this version, and "preinst
+ # upgrade" has been called for the new version. Last chance to
+ # clean up.
+ :
+
+ ;;
+ failed-upgrade)
+ # About to upgrade from version $2 of this package TO THIS VERSION.
+ # "prerm upgrade" has been called for the old version, and "preinst
+ # upgrade" has been called for this version. This is only used if
+ # the previous version's "postrm upgrade" couldn't handle it and
+ # returned non-zero. (Fix old postrm bugs here.)
+ :
+
+ ;;
+ abort-install)
+ # Back out of an attempt to install this package. Undo the effects of
+ # "preinst install...". There are two sub-cases.
+ :
+
+ if test "${2+set}" = set; then
+ # When the install was attempted, version $2's configuration
+ # files were still on the system. Undo the effects of "preinst
+ # install $2".
+ :
+
+ else
+ # We were being installed from scratch. Undo the effects of
+ # "preinst install".
+ :
+
+ fi ;;
+ abort-upgrade)
+ # Back out of an attempt to upgrade this package from version $2
+ # TO THIS VERSION. Undo the effects of "preinst upgrade $2".
+ :
+
+ ;;
+ *) echo "$0: didn't understand being called with \`$1'" 1>&2
+ exit 0;;
+esac
+
+exit 0
diff --git a/lcf b/lcf
new file mode 100755
index 0000000..4b83cfc
--- /dev/null
+++ b/lcf
@@ -0,0 +1,260 @@
+#!/bin/bash
+# -*- Mode: Sh -*-
+# lcf ---
+# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com )
+# Created On : Mon Feb 25 12:04:52 2002
+# Created On Node : glaurung.green-gryphon.com
+# Last Modified By : Manoj Srivastava
+# Last Modified On : Mon Feb 25 12:06:54 2002
+# Last Machine Used: glaurung.green-gryphon.com
+# Update Count : 2
+# Status : Unknown, Use with caution!
+# HISTORY :
+# Description :
+#
+#
+
+# make sure we exit on error
+set -e
+
+# set the version and revision
+progname="`basename \"$0\"`"
+pversion='$Revision: 1.1 $'
+
+######################################################################
+######## #########
+######## Utility functions #########
+######## #########
+######################################################################
+setq() {
+ # Variable Value Doc_string
+ if [ "x$2" = "x" ]; then
+ echo >&2 "$progname: Unable to determine $3"
+ exit 1;
+ else
+ if [ "x$VERBOSE" != "x" ]; then
+ echo "$progname: $3 is $2";
+ fi
+ eval "$1=\"\$2\"";
+ fi
+}
+
+withecho () {
+ echo " $@" >&2
+ "$@"
+}
+
+usageversion () {
+ cat >&2 <<END
+Debian GNU/Linux $progname $pversion.
+ Copyright (C) 2002 Manoj Srivastava.
+This is free software; see the GNU General Public Licence for copying
+conditions. There is NO warranty.
+
+Usage: $progname [options] dest_file src_dir
+Options:
+ -h, --help print this message
+ -s foo, --src-dir foo Set the src dir (historical md5sums live here)
+ -d [n], --debug [n] Set the Debug level to N
+ -n, --no-action Dry run. No action is actually taken.
+ -v, --verbose Make the script verbose
+
+By default, the directory the new_file lives in is assumed to be the src-dir,
+which is where we look for any historical md5sums.
+
+END
+}
+
+######################################################################
+######## #########
+######## Command line args #########
+######## #########
+######################################################################
+#
+# Long term variables#
+#
+docmd='YES'
+action='withecho'
+DEBUG=0
+VERBOSE=''
+statedir='/var/lib/ucf';
+
+
+# Note that we use `"$@"' to let each command-line parameter expand to a
+# separate word. The quotes around `$@' are essential!
+# We need TEMP as the `eval set --' would nuke the return value of getopt.
+TEMP=`getopt -o hs:d:D::nv -n "$progname" \
+ --long help,src-dir:,dest-dir:DEBUG::,no-action,verbose \
+ -- "$@"`
+
+if [ $? != 0 ] ; then
+ echo "Error handling options.Terminating..." >&2 ;
+ exit 1 ;
+fi
+
+# Note the quotes around `$TEMP': they are essential!
+eval set -- "$TEMP"
+
+while true ; do
+ case "$1" in
+ -h|--help) usageversion; exit 0 ;;
+ -n|--no-action) action='echo'; docmd='NO'; shift ;;
+ -v|--verbose) VERBOSE=1; shift ;;
+ -s|--src-dir)
+ opt_source_dir="$2"; shift 2 ;;
+ -d|--debug)
+ # d has an optional argument. As we are in quoted mode,
+ # an empty parameter will be generated if its optional
+ # argument is not found.
+ case "$2" in
+ "") setq DEBUG 1 "The Debug value"; shift 2 ;;
+ *) setq DEBUG "$2" "The Debug value"; shift 2 ;;
+ esac ;;
+ --) shift ; break ;;
+ *) echo "Internal error!" ; exit 1 ;;
+ esac
+done
+
+if [ $# != 2 ]; then
+ echo >&2 "*** ERROR: Need exactly two arguments, got $#";
+ echo >&2 ""
+ usageversion;
+ exit 0 ;
+fi
+
+setq dest_file "$1" "The Destination file";
+setq source_dir "$2" "The source directory";
+
+
+# Load site defaults and over rides.
+if [ -f /etc/ucf.conf ]; then
+ . /etc/ucf.conf
+fi
+
+# Command line, env variable, config file, or default
+if [ "X$source_dir" = "X" ]; then
+ if [ ! "x$opt_source_dir" = "x" ]; then
+ setq source_dir "$opt_source_dir" "The Source directory"
+ elif [ ! "x$UCF_SOURCE_DIR" = "x" ]; then
+ setq source_dir "$UCF_SOURCE_DIR" "The Source directory"
+ elif [ ! "x$conf_source_dir" = "x" ]; then
+ setq source_dir "$conf_source_dir" "The Source directory"
+ fi
+fi
+
+if [ ! -d "$source_dir" ]; then
+ echo >&2 "The source dir does not exist. Stopping now."
+ exit 2;
+fi
+
+if [ "X$dest_file" = "X" ]; then
+ echo >&2 "Uknown file to search for. Stopping now."
+ exit 2;
+fi
+
+old_mdsum_dir="$source_dir/"$(basename "${new_file}")".md5sum.d";
+old_mdsum_file="$source_dir/"$(basename "${new_file}")".md5sum";
+
+
+if [ -e "$statedir/hashfile" -a ! -r "$statedir/hashfile" ]; then
+ echo >&2 "$progname: do not have read privilege to the state data"
+ if [ "X$docmd" = "XYES" ]; then
+ exit 1;
+ fi
+fi
+
+# test and see if this file exists in the database
+if [ -e "$statedir/hashfile" ]; then
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "The hash file exists";
+ echo grep "[[:space:]]${dest_file}$" "$statedir/hashfile";
+ grep "[[:space:]]${dest_file}$" "$statedir/hashfile" ;
+ fi
+ lastsum=$(grep "[[:space:]]${dest_file}$" "$statedir/hashfile" | \
+ awk '{print $1;}' );
+fi
+
+if [ "X$lastsum" = "X" ]; then
+ echo >&2 "$progname: No record of file in databse. Stopping now."
+ exit 2;
+fi
+
+if [ $DEBUG -gt 0 ]; then
+ cat <<EOF
+The new start file is \`$new_file\'
+The destination is \`$dest_file\'
+The history is kept under \'$source_dir\'
+EOF
+ if [ -s "$dest_file" ]; then
+ echo "The destination file exists, and has md5sum:"
+ md5sum "$dest_file"
+ else
+ echo "The destination file does not exist."
+ fi
+ if [ "X$lastsum" != "X" ]; then
+ echo "The old md5sum exists, and is:"
+ echo $lastsum
+ else
+ echo "The old md5sum does not exist."
+ fi
+ if [ -e "$new_file" ]; then
+ echo "The new file exists, and has md5sum:"
+ md5sum "$new_file"
+ else
+ echo "The new file does not exist."
+ fi
+ if [ -d "$old_mdsum_dir" ]; then
+ echo "The historical md5sum dir $old_mdsum_dir exists"
+ elif [ -f "$old_mdsum_file" ]; then
+ echo "The histotical md5sum file $old_mdsum_file exists"
+ else
+ echo "Historical md5sums are not available"
+ fi
+fi
+
+if [ -d "$old_mdsum_dir" -o -f "$old_mdsum_file" ]; then
+ if [ -d "$old_mdsum_dir" ]; then
+ for file in ${old_mdsum_dir}/*; do
+ oldsum=$(cat "$file" | awk '{print $1}');
+ if [ "$oldsum" = "$destsum" ]; then
+# Bingo!
+ echo $(cat "$file" | awk '{print $2}');
+ exit 0;
+ fi
+ done
+ elif [ -f "$old_mdsum_file" ]; then
+ oldsum=$(grep "^${destsum}" "$old_mdsum_file")
+ if [ "X$oldsum" != "X" ]; then
+# Bingo
+ echo $(grep "^${destsum}" "$old_mdsum_file" | awk '{print $2}')
+ exit 0;
+ fi
+ fi
+# Well, nothing matched. We now check to see if the
+# maintainer has an opinion on how to set the ``md5sum of the
+# previously installed version'', since we have no way of
+# determining that automatically. Please note that unless
+# there are limited number of previously released packages
+# (like just one), the maintainer is also making a guess at
+# this point by supplying a historical md5sum default file.
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "Histotical md5sums did not match."
+ fi
+ if [ -d "$old_mdsum_dir" ]; then
+ if [ -e "${old_mdsum_dir}/default" ]; then
+ echo default;
+ exit 0;
+ fi
+ elif [ -f "$old_mdsum_file" ]; then
+ oldsum=$(grep "[[:space:]]default$" "$old_mdsum_file" | \
+ awk '{print $1;}')
+ if [ "X$oldsum" != "X" ]; then
+# Bingo
+ echo default;
+ exit 0;
+ fi
+ fi
+fi
+
+
+exit 0;
diff --git a/lcf.1 b/lcf.1
new file mode 100644
index 0000000..0e6f408
--- /dev/null
+++ b/lcf.1
@@ -0,0 +1,85 @@
+.\" -*- Mode: Nroff -*-
+.\" lcf.1 ---
+.\" Author : Manoj Srivastava ( srivasta@green-gryphon.com )
+.\" Created On : Fri Feb 1 11:17:32 2002
+.\" Created On Node : glaurung.green-gryphon.com
+.\" Last Modified By : Manoj Srivastava
+.\" Last Modified On : Mon May 2 01:09:42 2005
+.\" Last Machine Used: glaurung.internal.golden-gryphon.com
+.\" Update Count : 28
+.\" Status : Unknown, Use with caution!
+.\" HISTORY :
+.\" Description :
+.\"
+.\" Copyright (c) 2002 Manoj Srivastava <srivasta@debian.org>
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+.\" 02111-1307, USA.
+.\"
+.\" $Id: lcf.1,v 1.1 2002/02/26 20:12:06 srivasta Exp $
+.TH LCF 1 "Feb 1 2002" "Debian" "Debian GNU/Linux manual"
+.SH NAME
+lcf \- Determine which of the historical versions of a config is installed
+.SH SYNOPSIS
+.B lcf
+.I [options]
+.I <Destination File Name>
+.I <Historical MD5SUM source directory>
+.SH DESCRIPTION
+This script, given a destination file name, and a directory containing
+md5sums of historical versions of the file, attempts to determine if
+the installed version corresponds to a historical version. lcf uses
+the same algorithm that ucf uses, and should exhibit the same
+behaviour.
+.PP
+The source directory is the place where historical md5sums are
+expected to live. Specifically, the historical md5sums are looked for
+in either the file
+.I ${filename}.md5sum,
+or the subdirectory
+.I ${filename}.md5sum.d/
+.SH OPTIONS
+.TP
+.B "-h, --help"
+Print a short usage message
+.TP
+.B "-n, --no-action"
+Dry run. Print the actions that would be taken if the script is
+invoked, but take no action.
+.TP
+.B "-d [n], --debug [n]"
+Set the debug level to the (optional) level
+.I n
+(n defaults to 1). This turns on copious debugging information.
+.TP
+.B "-v, --verbose"
+Make the script be very verbose about setting internal variables.
+.SH FILES
+.PP
+.I /var/lib/ucf/hashfile,
+.I /etc/ucf.conf
+.SH "SEE ALSO"
+ucf(1)
+ucf.conf(5).
+.SH BUGS
+There are no bugs. Any resemblance thereof is delirium. Really.
+.SH AUTHOR
+This manual page was written Manoj Srivastava <srivasta@debian.org>,
+for the Debian GNU/Linux system.
diff --git a/ucf b/ucf
new file mode 100755
index 0000000..17e3528
--- /dev/null
+++ b/ucf
@@ -0,0 +1,1076 @@
+#!/bin/bash
+# -*- Mode: Sh -*-
+# updateConfFile.sh ---
+# Author : Manoj Srivastava ( srivasta@glaurung.green-gryphon.com )
+# Created On : Fri Feb 1 03:41:47 2002
+# Created On Node : glaurung.green-gryphon.com
+# Last Modified By : Manoj Srivastava
+# Last Modified On : Tue Jun 6 09:48:22 2006
+# Last Machine Used: glaurung.internal.golden-gryphon.com
+# Update Count : 186
+# Status : Unknown, Use with caution!
+# HISTORY :
+# Description :
+#
+# This script attempts to provide conffile like handling for files not
+# shipped in a Debian package, but handled by the postinst. Using this
+# script, one may ship a bunch of default cofiguration files somewhere
+# in /usr (/usr/share/<pkg> is a good location), and maintain files in
+# /etc.
+#
+# The motivation for this script was to provide conffile like handling
+# for start files for emacs lisp packages (for example,
+# /etc/emacs21/site-stard.d/50psgml-init.el) These start files are not
+# shipped with the package, instead, they are installed during the
+# post installation configuration phase by the script
+# /usr/lib/emacsen-common/emacs-package-install $package_name.
+#
+# This script is meant to be invoked by the packages install script at
+# /usr/lib/emacsen-common/packages/install/$package_name for each
+# flavour of installed emacsen by calling it with the proper values of
+# new file (/usr/share/emacs/site-lisp/<pkg>/<pkg>-init.el), and dest file
+# (/etc/emacs21/site-stard.d/50<pkg>-init.el)), and it should do the rest.
+#
+
+# make sure we exit on error
+set -e
+
+# set the version and revision
+boseprogname="`basename \"$0\"`"
+pversion='$Revision: 1.26 $'
+
+######################################################################
+######## #########
+######## Utility functions #########
+######## #########
+######################################################################
+setq() {
+ # Variable Value Doc_string
+ if [ "x$2" = "x" ]; then
+ echo >&2 "$progname: Unable to determine $3"
+ exit 1;
+ else
+ if [ "x$VERBOSE" != "x" ]; then
+ echo >&2 "$progname: $3 is $2";
+ fi
+ eval "$1=\"\$2\"";
+ fi
+}
+
+# Use debconf to show the differences
+show_diff() {
+ if [ -z "$1" ]; then
+ DIFF="There are no non-white space differences in the files."
+ else
+ if [ 99999 -lt $(echo $1 | wc -c | awk '{print $1; }') ]; then
+ DIFF="The differences between the files are too large to display."
+ else
+ DIFF="$1"
+ fi
+ fi
+ if [ "$DEBCONF_OK" = "YES" ] && [ "$DEBIAN_HAS_FRONTEND" ]; then
+ templ=ucf/show_diff
+ db_capb escape
+ db_subst $templ DIFF "$(printf %s "$DIFF" | debconf-escape -e)"
+ db_fset $templ seen false
+ db_input critical $templ || true
+ db_go || true
+ db_get $templ
+ # may contain sensitive information, so clear
+ # immediatly after use so it is never written
+ # to disk
+ db_subst $templ DIFF ""
+ db_reset $templ
+ db_capb
+ else
+ if [ -z $my_pager ]; then
+ echo "$DIFF" | sensible-pager
+ else
+ echo "$DIFF" | $my_pager
+ fi
+ fi
+}
+
+withecho () {
+ echo " $@" >&2
+ "$@"
+}
+
+usageversion () {
+ cat >&2 <<END
+Debian GNU/Linux $progname $pversion.
+ Copyright (C) 2002-2005 Manoj Srivastava.
+This is free software; see the GNU General Public Licence for copying
+conditions. There is NO warranty.
+
+Usage: $progname [options] new_file destination
+Options:
+ -h, --help print this message
+ -s foo, --src-dir foo Set the src dir (historical md5sums live here)
+ --sum-file bar Force the historical md5sums to be read from
+ this file. Overrides any setting of --src-dir.
+ -d[n], --debug=[n] Set the Debug level to N. Please note there must
+ be no spaces before the debug level
+ -n, --no-action Dry run. No action is actually taken.
+ -v, --verbose Make the script verbose
+ --three-way Register this file in the cache, and turn on the
+ diff3 option allowing the merging of maintainer
+ changes into a (potentially modified) local
+ configuration file. )
+ --state-dir bar Set the state directory to bar instead of the
+ default '/var/lib/ucf'. Used mostly for testing.
+ --debconf-ok Indicate that it is ok for ucf to use an already
+ running debconf instance for prompting.
+ --debconf-template bar
+ Specify an alternate, caller-provided debconf
+ template to use for prompting.
+Usage: $progname -p destination
+ -p, --purge Remove any reference to destination from records
+
+By default, the directory the new_file lives in is assumed to be the src-dir,
+which is where we look for any historical md5sums.
+
+END
+
+}
+
+######################################################################
+######## #########
+######## file and hash save/restore functions #########
+######## #########
+######################################################################
+purge_md5sum () {
+ for i in $(/usr/bin/seq 6 -1 0); do
+ if [ -e "${statedir}/hashfile.${i}" ]; then
+ if [ "X$docmd" = "XYES" ]; then
+ cp -pf "${statedir}/hashfile.${i}" \
+ "${statedir}/hashfile.$(($i+1))"
+ else
+ echo cp -pf "${statedir}/hashfile.${i}" \
+ "${statedir}/hashfile.$(($i+1))"
+ fi
+ fi
+ done
+ if [ -e "$statedir/hashfile" ]; then
+ if [ "X$docmd" = "XYES" ]; then
+ cp -pf "$statedir/hashfile" "$statedir/hashfile.0"
+ else
+ echo cp -pf "$statedir/hashfile" "$statedir/hashfile.0"
+ fi
+ if [ "X$docmd" = "XYES" ]; then
+ set +e
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "egrep -v [[:space:]]${safe_dest_file}$ $statedir/hashfile"
+ egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" >&2 \
+ || true;
+ fi
+ #echo "egrep -v [[:space:]]${safe_dest_file}$ $statedir/hashfile"
+ egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" > \
+ "$statedir/hashfile.tmp" || true;
+ if [ "X$docmd" = "XYES" ]; then
+ mv -f "$statedir/hashfile.tmp" "$statedir/hashfile"
+ else
+ echo mv -f "$statedir/hashfile.tmp" "$statedir/hashfile"
+ fi
+ set -e
+ fi
+ fi
+ test -n "$VERBOSE" && echo >&2 "The cache file is $cached_file"
+ if [ ! -z "$cached_file" -a -f "$statedir/cache/$cached_file" ]; then
+ $action rm -f "$statedir/cache/$cached_file"
+ fi
+}
+
+replace_md5sum () {
+ for i in $(/usr/bin/seq 6 -1 0); do
+ if [ -e "${statedir}/hashfile.${i}" ]; then
+ if [ "X$docmd" = "XYES" ]; then
+ cp -pf "${statedir}/hashfile.${i}" \
+ "${statedir}/hashfile.$(($i+1))"
+ else
+ echo cp -pf "${statedir}/hashfile.${i}" \
+ "${statedir}/hashfile.$(($i+1))"
+ fi
+ fi
+ done
+ if [ -e "$statedir/hashfile" ]; then
+ if [ "X$docmd" = "XYES" ]; then
+ cp -pf "$statedir/hashfile" "$statedir/hashfile.0"
+ else
+ echo cp -pf "$statedir/hashfile" "$statedir/hashfile.0"
+ fi
+ if [ "X$docmd" = "XYES" ]; then
+ set +e
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "(egrep -v \"[[:space:]]${safe_dest_file}$\" \"$statedir/hashfile\";"
+ egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" >&2 || true;
+ md5sum "$orig_new_file" | sed "s|$orig_new_file|$dest_file|" >&2;
+ fi
+ egrep -v "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" > \
+ "$statedir/hashfile.tmp" || true;
+ md5sum "$orig_new_file" | sed "s|$orig_new_file|$dest_file|" >> \
+ "$statedir/hashfile.tmp";
+ mv -f "$statedir/hashfile.tmp" "$statedir/hashfile"
+ set -e
+ else
+ echo "(egrep -v \"[[:space:]]${safe_dest_file}$\" \"$statedir/hashfile\""
+ echo " md5sum \"$orig_new_file\" | sed \"s|$orig_new_file|$dest_file|\"; "
+ echo ") | sort > \"$statedir/hashfile\""
+ fi
+ else
+ if [ "X$docmd" = "XYES" ]; then
+ md5sum "$orig_new_file" | sed "s|$orig_new_file|$dest_file|" > \
+ "$statedir/hashfile"
+ else
+ echo " md5sum \"$orig_new_file\" | sed \"s|$orig_new_file|$dest_file|\" >" \
+ "\"$statedir/hashfile\""
+ fi
+ fi
+ file_size=$(stat -c '%s' "$orig_new_file")
+ if [ "X$THREEWAY" != "X" ] || [ $file_size -lt 25600 ]; then
+ $action cp -pf "$orig_new_file" "$statedir/cache/$cached_file"
+ fi
+ # cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
+}
+
+replace_conf_file () {
+ # do not mangle $dest_file since it's the one registered in the hashfile
+ # or we have been ask to register
+ real_file="$dest_file"
+ if [ -L "$dest_file" ]; then
+ real_file="$(readlink -nf $dest_file || :)"
+ if [ "x$real_file" = "x" ]; then
+ echo >&2 "$dest_file is a broken symlink!"
+ $action rm -f "$dest_file";
+ real_file="$dest_file"
+ fi
+ fi
+ if [ -e "$real_file" ]; then
+ if [ -z "$RETAIN_OLD" ]; then
+ #echo "Saving ${real_file}.${OLD_SUFFIX}, in case."
+ if [ "x$VERBOSE" != "x" ]; then
+ echo >&2 "Not saving ${real_file}, since it was unmodified"
+ fi
+ else
+ $action cp -pf "${real_file}" "${real_file}.${OLD_SUFFIX}"
+ fi
+ fi
+ $action cp -pf "$new_file" "${real_file}"
+ replace_md5sum;
+}
+
+# Escape single quotes in the arguments passed in
+quote_single() {
+ echo "$1" | sed -e "s,','\\\\'',g"
+}
+
+
+
+######################################################################
+######## #########
+######## Command line args #########
+######## #########
+######################################################################
+#
+# Long term variables#
+#
+docmd='YES'
+action='withecho'
+action=
+DEBUG=0
+VERBOSE=''
+statedir='/var/lib/ucf';
+THREEWAY=
+
+DIST_SUFFIX="ucf-dist"
+NEW_SUFFIX="ucf-new"
+OLD_SUFFIX="ucf-old"
+ERR_SUFFIX="merge-error"
+# save up the cmdline with proper quoting/escaping
+for arg in "$@"; do
+ saved="${saved:+$saved }'$(quote_single "$arg")'"
+done
+
+
+# Note that we use `"$@"' to let each command-line parameter expand to a
+# separate word. The quotes around `$@' are essential!
+# We need TEMP as the `eval set --' would nuke the return value of getopt.
+TEMP=`getopt -a -o hs:d::D::nv -n "$progname" \
+ --long help,src-dir:,sum-file:,dest-dir:,debug::,DEBUG::,no-action,purge,verbose,three-way,debconf-ok,debconf-template:,state-dir: \
+ -- "$@"`
+
+# Note the quotes around `$TEMP': they are essential!
+eval set -- "$TEMP"
+
+while true ; do
+ case "$1" in
+ -h|--help) usageversion; exit 0 ;;
+ -n|--no-action) action='echo'; docmd='NO'; shift ;;
+ -v|--verbose) VERBOSE=1; shift ;;
+ -s|--src-dir)
+ opt_source_dir="$2"; shift 2 ;;
+ --sum-file)
+ opt_old_mdsum_file="$2"; shift 2 ;;
+ --state-dir)
+ opt_state_dir="$2"; shift 2 ;;
+ --debconf-template)
+ override_template="$2"; shift 2 ;;
+ -D|-d|--debug|--DEBUG)
+ # d has an optional argument. As we are in quoted mode,
+ # an empty parameter will be generated if its optional
+ # argument is not found.
+ case "$2" in
+ "") setq DEBUG 1 "The Debug value"; shift 2 ;;
+ *) setq DEBUG "$2" "The Debug value"; shift 2 ;;
+ esac ;;
+ -p|--purge) PURGE=YES; shift ;;
+ --three-way) THREEWAY=YES; shift ;;
+ --debconf-ok) DEBCONF_OK=YES; shift ;;
+ --) shift ; break ;;
+ *) echo >&2 "Internal error!" ; exit 1 ;;
+ esac
+done
+
+
+######################################################################
+######## #########
+######## Sanity checking #########
+######## #########
+######################################################################
+# Need to run as root, or else the
+if test $(id -u) != 0; then
+ if [ "$docmd" = "YES" ]; then
+ echo "$progname: Need to be run as root." >&2
+ echo "$progname: Setting up no action mode." >&2
+ action='echo'; docmd='NO';
+ fi
+fi
+
+if [ "X$PURGE" = "XYES" ]; then
+ if [ $# != 1 ]; then
+ echo >&2 "*** ERROR: Need exactly one argument when purging, got $#";
+ echo >&2 ""
+ usageversion;
+ exit 2 ;
+ fi
+ temp_dest_file=$1;
+ setq dest_file "$(readlink -q -m $temp_dest_file)" "The Destination file";
+else
+ if [ $# != 2 ]; then
+ echo >&2 "*** ERROR: Need exactly two arguments, got $#";
+ echo >&2 ""
+ usageversion;
+ exit 2 ;
+ fi
+ temp_new_file=$1;
+ temp_dest_file=$2;
+
+ if [ ! -e "$temp_new_file" ]; then
+ echo >&2 "Error: The new file ${temp_new_file} does not exist!";
+ exit 1;
+ fi
+ setq new_file "$(readlink -q -m $temp_new_file)" "The new file";
+ setq dest_file "$(readlink -q -m $temp_dest_file)" "The Destination file";
+fi
+
+
+safe_dest_file=$(echo $dest_file | perl -nle 'print "\Q$_\E\n"')
+
+
+
+######################################################################
+######## #########
+######## Set Default Values #########
+######## #########
+######################################################################
+# Load site defaults and over rides.
+if [ -f /etc/ucf.conf ]; then
+ . /etc/ucf.conf
+fi
+
+# Command line, env variable, config file, or default
+if [ ! "x$opt_source_dir" = "x" ]; then
+ setq source_dir "$opt_source_dir" "The Source directory"
+elif [ ! "x$UCF_SOURCE_DIR" = "x" ]; then
+ setq source_dir "$UCF_SOURCE_DIR" "The Source directory"
+elif [ ! "x$conf_source_dir" = "x" ]; then
+ setq source_dir "$conf_source_dir" "The Source directory"
+else
+ if [ "X$new_file" != "X" ]; then
+ setq source_dir $(dirname "$new_file") "The Source directory"
+ else
+ setq source_dir /tmp "The Source directory"
+ fi
+
+fi
+
+if [ "X$PAGER" != "X" ] && which $PAGER >/dev/null 2>&1 ; then
+ my_pager=$(which $PAGER);
+elif [ -s /usr/bin/pager ] &&
+ [ "X$(readlink -e /usr/bin/pager || :)" != "X" ]; then
+ my_pager=/usr/bin/pager
+elif [ -x /usr/bin/sensible-pager ]; then
+ my_pager=/usr/bin/sensible-pager
+elif [ -x /bin/more ]; then
+ my_pager=/bin/more
+else
+ my_pager=
+fi
+
+
+
+if [ "X$my_pager" = "X" ]; then
+ STOP=YES
+elif [ "X$my_pager" = "X/bin/more" ]; then
+ STOP=YES
+fi
+
+# Command line, env variable, config file, or default
+if [ ! "x$opt_state_dir" = "x" ]; then
+ setq statedir "$opt_state_dir" "The State directory"
+elif [ ! "x$UCF_STATE_DIR" = "x" ]; then
+ setq statedir "$UCF_STATE_DIR" "The State directory"
+elif [ ! "x$conf_state_dir" = "x" ]; then
+ setq statedir "$conf_state_dir" "The State directory"
+else
+ setq statedir '/var/lib/ucf' "The State directory"
+fi
+
+# Command line, env variable, config file, or default
+if [ ! "x$opt_force_conffold" = "x" ]; then
+ setq force_conffold "$opt_force_conffold" "Keep the old file"
+elif [ ! "x$UCF_FORCE_CONFFOLD" = "x" ]; then
+ setq force_conffold "$UCF_FORCE_CONFFOLD" "Keep the old file"
+elif [ ! "x$conf_force_conffold" = "x" ]; then
+ setq force_conffold "$conf_force_conffold" "Keep the old file"
+else
+ force_conffold=''
+fi
+
+# Command line, env variable, config file, or default
+if [ ! "x$opt_force_conffnew" = "x" ]; then
+ setq force_conffnew "$opt_force_conffnew" "Replace the old file"
+elif [ ! "x$UCF_FORCE_CONFFNEW" = "x" ]; then
+ setq force_conffnew "$UCF_FORCE_CONFFNEW" "Replace the old file"
+elif [ ! "x$conf_force_conffnew" = "x" ]; then
+ setq force_conffnew "$conf_force_conffnew" "Replace the old file"
+else
+ force_conffnew=''
+fi
+
+# Command line, env variable, config file, or default
+if [ ! "x$opt_force_conffmiss" = "x" ]; then
+ setq force_conffmiss "$opt_force_conffmiss" "Replace any missing files"
+elif [ ! "x$UCF_FORCE_CONFFMISS" = "x" ]; then
+ setq force_conffmiss "$UCF_FORCE_CONFFMISS" "Replace any missing files"
+elif [ ! "x$conf_force_conffmiss" = "x" ]; then
+ setq force_conffmiss "$conf_force_conffmiss" "Replace any missing files"
+else
+ force_conffmiss=''
+fi
+
+if [ -n "$opt_old_mdsum_file" ]; then
+ setq old_mdsum_file "$opt_old_mdsum_file" "The md5sum is found here"
+elif [ ! "x$UCF_OLD_MDSUM_FILE" = "x" ]; then
+ setq old_mdsum_file "$UCF_OLD_MDSUM_FILE" "The md5sum is found here"
+elif [ ! "x$conf_old_mdsum_file" = "x" ]; then
+ setq old_mdsum_file "$conf_old_mdsum_file" "Replace the old file"
+else
+ old_mdsum_file="$source_dir/"$(basename "${new_file}")".md5sum";
+fi
+
+
+######################################################################
+######## #########
+######## More Sanity checking #########
+######## #########
+######################################################################
+if [ "X$force_conffold" != "X" -a "X$force_conffnew" != "X" ]; then
+ echo >&2 "Error: Only one of force_conffold and force_conffnew should";
+ echo >&2 " be set";
+ exit 1;
+fi
+
+# VERBOSE of 0 is supposed to be the same as not setting VERBOSE
+if [ "X$VERBOSE" = "X0" ]; then
+ VERBOSE=''
+fi
+
+
+#
+if [ -e "$statedir/hashfile" -a ! -w "$statedir/hashfile" ]; then
+ echo >&2 "ucf: do not have write privilege to the state data"
+ if [ "X$docmd" = "XYES" ]; then
+ exit 1;
+ fi
+fi
+
+if [ ! -d $statedir/cache ]; then
+ $action mkdir -p $statedir/cache ;
+fi
+
+# test and see if this file exists in the database
+if [ -e "$statedir/hashfile" ]; then
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "The hash file exists"
+ echo >&2 egrep "[[:space:]]${safe_dest_file}$" "$statedir/hashfile"
+ egrep "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" >&2 || true
+ fi
+ lastsum=$(egrep "[[:space:]]${safe_dest_file}$" "$statedir/hashfile" | \
+ awk '{print $1;}' )
+fi
+
+old_mdsum_dir="$source_dir/"$(basename "${new_file}")".md5sum.d";
+cached_file=$(echo $dest_file | tr / :)
+######################################################################
+######## #########
+######## Debugging dump #########
+######## #########
+######################################################################
+
+if [ $DEBUG -gt 0 ]; then
+ cat <<EOF
+The new start file is \`$new_file\'
+The destination is \`$dest_file\' (\`$safe_dest_file\')
+The history is kept under \'$source_dir\'
+The file may be cached at \'$statedir/cache/$cached_file\'
+EOF
+ if [ -s "$dest_file" ]; then
+ echo "The destination file exists, and has md5sum:"
+ md5sum "$dest_file"
+ else
+ echo "The destination file does not exist."
+ fi
+ if [ "X$lastsum" != "X" ]; then
+ echo "The old md5sum exists, and is:"
+ echo $lastsum
+ else
+ echo "The old md5sum does not exist."
+ if [ -d "$old_mdsum_dir" -o -f "$old_mdsum_file" ]; then
+ echo "However, there are historical md5sums around."
+ fi
+ fi
+ if [ -e "$new_file" ]; then
+ echo "The new file exists, and has md5sum:"
+ md5sum "$new_file"
+ else
+ echo "The new file does not exist."
+ fi
+ if [ -d "$old_mdsum_dir" ]; then
+ echo "The historical md5sum dir $old_mdsum_dir exists"
+ elif [ -f "$old_mdsum_file" ]; then
+ echo "The historical md5sum file $old_mdsum_file exists"
+ else
+ echo "Historical md5sums are not available"
+ fi
+fi
+
+######################################################################
+######## #########
+######## Short circuit if we are purging #########
+######## #########
+######################################################################
+
+if [ "X$PURGE" = "XYES" ]; then
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "Preparing to purge ${dest_file}"
+ fi
+ purge_md5sum;
+ exit 0;
+fi
+
+
+# now we can restore $@
+eval set -- "$saved"
+
+######################################################################
+######## #########
+######## DebConf stuff #########
+######## #########
+######################################################################
+
+# Is debconf already running? Kinda tricky, because it will be after the
+# confmodule is sourced, so only test before that.
+if [ -z "$DEBCONF_ALREADY_RUNNING" ]; then
+ if [ "$DEBIAN_HAS_FRONTEND" ]; then
+ DEBCONF_ALREADY_RUNNING='YES'
+ else
+ DEBCONF_ALREADY_RUNNING='NO'
+ fi
+fi
+
+export DEBCONF_ALREADY_RUNNING
+
+if [ -z "$DEBCONF_OK" ]; then
+ if [ "$DEBCONF_ALREADY_RUNNING" = 'YES' ]; then
+ DEBCONF_OK='NO'
+ else
+ DEBCONF_OK='YES'
+ fi
+fi
+
+# Time to start nagging the users who call ucf without debconf-ok
+if [ "$DEBCONF_ALREADY_RUNNING" = 'YES' ] && [ "$DEBCONF_OK" = NO ]; then
+ # Commented out for now, uncomment after a while to begin nagging
+ # maintainers to fix their scripts.
+ cat \
+<<END
+*** WARNING: ucf was run from a maintainer script that uses debconf, but
+ the script did not pass --debconf-ok to ucf. The maintainer
+ script should be fixed to not stop debconf before calling ucf,
+ and pass it this parameter. For now, ucf will revert to using
+ old-style, non-debconf prompting. Ugh!
+
+ Please inform the package maintainer about this problem.
+END
+fi
+
+# Start up debconf or at least get the db_* commands available
+if [ -e /usr/share/debconf/confmodule ]; then
+ if test $(id -u) = 0; then
+ . /usr/share/debconf/confmodule
+
+ # Load our templates, just in case our template has
+ # not been loaded or the Debconf DB lost or corrupted
+ # since then, but only if it is OK to use debconf.
+ if [ "$DEBCONF_OK" = 'YES' ]; then
+ db_x_loadtemplatefile "$(dpkg-query --control-path ucf templates)" ucf
+ fi
+ else
+ echo >&2 "$progname: Not loading confmodule, since we are not running as root."
+ fi
+ # Only set the title if debconf was not already running.
+ # If it was running, then we do not want to clobber the
+ # title used for configuring the whole package with debconf.
+ if [ "$DEBCONF_ALREADY_RUNNING" = 'NO' ]; then
+ if ! db_settitle ucf/title 2>/dev/null; then
+ # Older debconf that does not support that command.
+ if test $(id -u) = 0; then
+ db_title "Modified configuration file"
+ else
+ echo >&2 "$progname: Not changing title, since we are not running as root."
+ fi
+ fi
+ fi
+fi
+
+
+
+######################################################################
+######## #########
+######## Start Processing #########
+######## #########
+######################################################################
+
+orig_new_file="$new_file" # Since sometimes we replace the newfile below
+newsum=$(md5sum "$new_file" | awk '{print $1}')
+
+# Determine the action for the current file. The default is to ask,
+# with non-replacement being the norm.
+# If the config dir exists
+# if file in always overwrite, state +=1;
+# fi
+# if file in never overwrite, state +=2;
+# fi
+# if file in ask; state +=4
+# fi
+# if state == 0; then state = default
+# if state >= 4; ask
+# if state == 3; ask
+# if state == 2; exit
+# if state == 1; then replace_conffile; exit
+
+######################################################################
+######## #########
+######## Do the replacement #########
+######## #########
+######################################################################
+# Step 1: If we have no record of this file, and dest file
+# does, We need to determine how to initialize the
+# ${old_mdsum_prefix}.old file..
+if [ -e "$dest_file" ]; then
+ destsum=$(md5sum "$dest_file" | awk '{print $1}');
+ if [ "X$lastsum" = "X" ]; then
+# a: If we have a directory containing historical md5sums of this
+# file in question, we should look and see if the currently
+# installed file matches any of the old md5sums; in which case
+# it can be silently replaced.
+ if [ -d "$old_mdsum_dir" -o -f "$old_mdsum_file" ]; then
+ if [ -d "$old_mdsum_dir" ]; then
+ for file in ${old_mdsum_dir}/*; do
+ oldsum=$(cat "$file" | awk '{print $1}');
+ if [ "$oldsum" = "$destsum" ]; then
+ if [ "X$force_conffold" = "X" ]; then
+# Bingo! replace, set the md5sum, and we are done
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 \
+ "Replacing config file $dest_file with new version"
+ fi
+ replace_conf_file;
+ exit 0;
+ else
+ replace_md5sum;
+ cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
+ exit 0;
+ fi
+ fi
+ done
+ elif [ -f "$old_mdsum_file" ]; then
+ oldsum=$(egrep "^${destsum}" "$old_mdsum_file" || true)
+ if [ "X$oldsum" != "X" ]; then
+# Bingo
+ if [ "X$force_conffold" = "X" ]; then
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 \
+ "Replacing config file $dest_file with new version"
+ fi
+ replace_conf_file;
+ exit 0;
+ else
+ replace_md5sum;
+ cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
+ exit 0;
+ fi
+ fi
+ fi
+# Well, nothing matched. We now check to see if the
+# maintainer has an opinion on how to set the ``md5sum of the
+# previously installed version'', since we have no way of
+# determining that automatically. Please note that unless
+# there are limited number of previously released packages
+# (like just one), the maintainer is also making a guess at
+# this point by supplying a historical md5sum default file.
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "Histotical md5sums did not match."
+ fi
+ if [ -d "$old_mdsum_dir" ]; then
+ if [ -e "${old_mdsum_dir}/default" ]; then
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "However, a default entry exists, using it."
+ fi
+ lastsum=$(cat "${old_mdsum_dir}/default" | \
+ awk '{print $1;}')
+ do_replace_md5sum=1;
+ fi
+ elif [ -f "$old_mdsum_file" ]; then
+ oldsum=$(egrep "[[:space:]]default$" "$old_mdsum_file" | \
+ awk '{print $1;}')
+ if [ "X$oldsum" != "X" ]; then
+# Bingo
+ lastsum=$oldsum;
+ do_replace_md5sum=1;
+ fi
+ fi
+ fi
+
+# At this point, we are almost certain that either the
+# historical record of md5sums is not complete, or the user has
+# changed the configuration file. Rather than guessing and
+# chosing one of the historical md5sums, we fall through to the
+# solution used if there had been no historical md5sums
+# directory/file.
+ if [ "X$lastsum" = "X" ]; then
+# b: We do not have a historical list of md5sums, or none
+# matched, and we still need to initialize the
+# ${old_mdsum_prefix}.old file. We can't determine whther or
+# not they made any changes, so we err on the side of caution
+# and ask'
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "No match found, we shall ask."
+ fi
+ lastsum='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
+ fi # the old md5sum file does not exist, and the historical
+ # record failed
+ fi # the old md5sum file does not exist (bug))
+else # "$dest_file" does not exist
+# Step 2: If destfile does not exist, create it, set the file
+# "${old_mdsum_prefix}.old" to the md5sum of the new file, and we
+# are done
+ if [ "X$lastsum" = "X" ]; then
+ # Ok, so there is no indication that the package was ever
+ # installed on this machine.
+ echo >&2 ""
+ echo >&2 "Creating config file $dest_file with new version"
+ replace_conf_file;
+ exit 0;
+ elif [ "$lastsum" = "$newsum" ]; then
+ # OK, new version of the file is the same as the last version
+ # we saw. Since the user apparently has deleted the file,
+ # nothing needs be done, unless we have been told differently
+ if [ "X$force_conffmiss" != "X" ]; then
+ echo >&2 ""
+ echo >&2 "Recreating deleted config file $dest_file with new version, as asked"
+ replace_conf_file;
+ exit 0;
+ else
+ echo >&2 "Not replacing deleted config file $dest_file";
+ fi
+
+ else
+ # OK. New upstream version.
+ if [ "X$force_conffmiss" != "X" ]; then
+ # User has said to replace missing files, so we do so, no
+ # questions asked.
+ echo >&2 ""
+ echo >&2 "Recreating deleted config file $dest_file with new version, as asked"
+ replace_conf_file;
+ exit 0;
+ else
+ # Even though the user has deleted this file, they should
+ # be asked now, unless specified otherwise.
+ if [ "X$force_conffold" = "X" ]; then
+ destsum='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
+ else
+ exit 0;
+ fi
+ fi
+ fi
+fi
+
+# Here, the destfile exists.
+
+# step 3: If the old md5sum and the md5sum of the new file
+# do not match, we need to take action.
+if [ "$lastsum" = "$newsum" ]; then
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "md5sums match, nothing needs be done."
+ fi
+ if [ "X$do_replace_md5sum" != "X" ]; then
+ replace_md5sum;
+ fi
+ exit 0; # Hah. Match. We are done.
+fi
+# a: If the md5sum of the dest file is the same as lastsum, replace the
+# destfile, saying we are replacing old config files
+if [ "$destsum" = "$lastsum" ]; then
+ if [ "X$force_conffold" = "X" ]; then
+ echo >&2 "Replacing config file $dest_file with new version"
+ replace_conf_file;
+ exit 0;
+ else
+ replace_md5sum;
+ cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
+ exit 0;
+ fi
+else
+# b: If the md5sum of the dest file differs from lastsum, we need to ask
+# the user what action to take.
+ if [ "X$force_conffnew" != "X" ]; then
+ echo >&2 "Replacing config file $dest_file with new version"
+ echo >&2 "since you asked for it."
+ if [ "$destsum" = "$newsum" ]; then
+ echo >&2 "The new and the old files are identical, AFAICS"
+ else
+ echo >&2 "The new and the old files are different"
+ fi
+ replace_conf_file;
+ exit 0;
+ fi
+ if [ "X$force_conffold" != "X" ]; then
+ replace_md5sum;
+ cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
+ exit 0;
+ fi
+# c: If the destination file is the same as the new maintianer provided one,
+# we need do nothing.
+ if [ "$newsum" = "$destsum" ]; then
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "md5sums of the file in place matches, nothing needs be done."
+ fi
+ replace_md5sum;
+ exit 0; # Hah. Match. We are done.
+ fi
+
+
+ done='NO';
+ while [ "X$done" = "XNO" ]; do
+ if [ "$DEBCONF_OK" = "YES" ] && [ "$DEBIAN_HAS_FRONTEND" ]; then
+ # Use debconf to prompt.
+ if [ -e "$statedir/cache/$cached_file" ]; then
+ templ=ucf/changeprompt_threeway
+ else
+ templ=ucf/changeprompt
+ fi
+ if [ "X$override_template" != "X" ]; then
+ choices="$(db_metaget $templ Choices-C)"
+ choices2="$(db_metaget $override_template Choices-C)"
+ if [ "$choices" = "$choices2" ]; then
+ templ=$override_template
+ fi
+ fi
+ db_fset $templ seen false
+ db_reset $templ
+ db_subst $templ FILE "$dest_file"
+ db_subst $templ NEW "$new_file"
+ db_subst $templ BASENAME $(basename "$dest_file")
+ db_input critical $templ || true
+ if ! db_go; then
+ # The current ucf interface does not provide a way for it
+ # to tell its caller that the user chose to back up.
+ # However, we could get here, if the caller turned on
+ # debconf's backup capb. The best thing to do seems to be
+ # to ignore requests to back up.
+ continue
+ fi
+ db_get $templ
+ ANSWER="$RET"
+ else
+ echo >&2 "Need debconf to interact"
+ exit 2
+########################################################################################
+# # Prompt without using debconf. #
+# cat >&2 <<EOPRMT #
+# Configuration file \`$dest_file' #
+# ==> File on system created by you or by a script. #
+# ==> File also in package provided by package maintainer. #
+# What would you like to do about it ? Your options are: #
+# Y or I : install the package maintainer's version #
+# N or O : keep your currently-installed version #
+# D : show the differences between the versions #
+# S : show the side-by-side differences between the versions #
+# EOPRMT #
+# if [ "X$THREEWAY" != "X" -a -e "$statedir/cache/$cached_file" ]; then #
+# cat >&2 <<EOTD #
+# 3 or T : show a three way difference between current, older, #
+# and new versions of the file #
+# M : Do a 3 way merge between current, older, #
+# and new versions of the file [Very Experimental] #
+# EOTD #
+# fi #
+# cat >&2 <<EOPEND #
+# Z : start a new shell to examine the situation #
+# The default action is to keep your current version. #
+# EOPEND #
+# if [ "X$THREEWAY" != "X" -a -e "$statedir/cache/$cached_file" ]; then #
+# echo -n >&2 "*** " $(basename "$dest_file") \ #
+# " (Y/I/N/O/D/3/T/M/Z) [default=N] ?" #
+# else #
+# echo -n >&2 "*** " $(basename "$dest_file") \ #
+# " (Y/I/N/O/D/Z) [default=N] ?" #
+# fi #
+# read -e ANSWER </dev/tty #
+########################################################################################
+ fi
+
+ case "$ANSWER" in
+ install_new|y|Y|I|i)
+ echo >&2 "Replacing config file $dest_file with new version"
+ RETAIN_OLD=YES
+ replace_conf_file;
+ exit 0;
+ ;;
+ diff|D|d)
+ if [ -e "$dest_file" ]; then
+ DIFF="$(diff -uBbw "$dest_file" "$new_file")" || true
+ else
+ DIFF="$(diff -uBbw /dev/null "$new_file")" || true
+ fi
+ show_diff "$DIFF"
+ ;;
+ sdiff|S|s)
+ if [ -e "$dest_file" ]; then
+ DIFF="$( sdiff -BbW "$dest_file" "$new_file")" || true
+ else
+ DIFF="$(sdiff -BbW /dev/null "$new_file")" || true
+ fi
+ show_diff "$DIFF"
+ ;;
+ diff_threeway|3|t|T)
+ if [ -e "$statedir/cache/$cached_file" \
+ -a "X$THREEWAY" != "X" ]; then
+ if [ -e "$dest_file" ]; then
+ DIFF="$(diff3 -L Current -L Older -L New -A \
+ "$dest_file" "$statedir/cache/$cached_file" \
+ "$new_file")" || true
+ else
+ DIFF="$(diff3 -L Current -L Older -L New -A \
+ /dev/null "$statedir/cache/$cached_file" \
+ "$new_file")" || true
+ fi
+ show_diff "$DIFF"
+ else
+ if [ -e "$dest_file" ]; then
+ DIFF="$(diff -uBbw "$dest_file" "$new_file")" || true
+ else
+ DIFF="$(diff -uBbw /dev/null "$new_file")" || true
+ fi
+ show_diff "$DIFF"
+ fi
+ ;;
+ merge_threeway|M|m)
+ echo >&2 "Merging changes into the new version"
+ if [ -e "$statedir/cache/$cached_file" \
+ -a "X$THREEWAY" != "X" ]; then
+ ret=0
+ diff3 -L Current -L Older -L New -m \
+ "$dest_file" "$statedir/cache/$cached_file" \
+ "$new_file" > $dest_file.${NEW_SUFFIX} || ret=$?
+ case "$ret" in
+ 0)
+ new_file="$dest_file.${NEW_SUFFIX}"
+ RETAIN_OLD=YES
+ replace_conf_file
+ rm -f "$dest_file.${NEW_SUFFIX}" # don't need this around no mo'
+ exit 0
+ ;;
+ *)
+ mv $dest_file.${NEW_SUFFIX} $dest_file.${ERR_SUFFIX}
+ db_subst ucf/conflicts_found dest_file "$dest_file"
+ db_subst ucf/conflicts_found ERR_SUFFIX "${ERR_SUFFIX}"
+ db_input critical ucf/conflicts_found || true
+ db_go || true
+ ;;
+ esac
+ else
+ replace_conf_file
+ rm -f "$dest_file.${NEW_SUFFIX}" # don't need this around no mo'
+ exit 0
+ fi
+ ;;
+ shell|Z|z)
+ # We explicitly connect STDIN and STDOUT to the
+ # script's controlling terminal, so even if STDIN is
+ # fed by a pipe, as is the case when run from
+ # /usr/bin/debconf, the shell should be fully
+ # functional. However, the test for a controlling
+ # terminal uses /usr/bin/tty, which consults only
+ # STDIN. As far as I can tell, when run from debconf,
+ # ucf will _never_ use the current terminal. If the
+ # goal is to check for access to a terminal, the test
+ # should be for foreground process group membership,
+ # not a terminal connected to STDIN (tty -s), and not
+ # a terminal it doesn't necessarily own (tty -s
+ # </dev/tty). The easiest way do this from a shell is
+ # probably with /bin/ps.
+ if ps -o stat= --ppid $$ | grep -q '+'; then
+ bash >/dev/tty </dev/tty || true
+ elif [ -n "$DISPLAY" ]; then
+ x-terminal-emulator || true
+ else
+ # Don't know what to do
+ echo >&2 "No terminal, and no DISPLAY set, can't fork shell."
+ sleep 3;
+ fi
+ ;;
+ keep_current|n|N|o|O|'')
+ replace_md5sum;
+
+ cp -pf "$orig_new_file" "$dest_file.${DIST_SUFFIX}"
+ exit 0;
+ ;;
+ *)
+ if [ "$DEBCONF_OK" = "YES" ]; then
+ echo "Error: unknown response from debconf:'$RET'" >&2
+ exit 1
+ else
+ echo
+ echo "Please answer with one of the single letters listed." >&2
+ echo
+ fi
+ esac
+ done
+fi
+
+db_stop
+
+exit 0;
diff --git a/ucf.1 b/ucf.1
new file mode 100644
index 0000000..dfeffd9
--- /dev/null
+++ b/ucf.1
@@ -0,0 +1,384 @@
+.\" -*- Mode: Nroff -*-
+.\" updateConfFile.1 ---
+.\" Author : Manoj Srivastava ( srivasta@green-gryphon.com )
+.\" Created On : Fri Feb 1 11:17:32 2002
+.\" Created On Node : glaurung.green-gryphon.com
+.\" Last Modified By : Manoj Srivastava
+.\" Last Modified On : Tue Apr 11 14:46:06 2006
+.\" Last Machine Used: glaurung.internal.golden-gryphon.com
+.\" Update Count : 53
+.\" Status : Unknown, Use with caution!
+.\" HISTORY :
+.\" Description :
+.\"
+.\" Copyright (c) 2002 Manoj Srivastava <srivasta@debian.org>
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+.\" 02111-1307, USA.
+.\"
+.\" $Id: ucf.1,v 1.10 2003/09/28 23:29:21 srivasta Exp $
+.TH UCF 1 "May 30 2008" "Debian" "Debian GNU/Linux manual"
+.SH NAME
+ucf \- Update Configuration File: preserve user changes in configuration files
+.SH SYNOPSIS
+.B ucf
+.RI [ options "] "
+.I <New File>
+.I <Destination>
+.PP
+.B ucf
+.RI [ options "] "
+.I \-\-purge
+.I <Destination>
+.SH DESCRIPTION
+This utility provides a means of asking the user whether or not to
+accept new versions of configuration files provided by the package
+maintainer, with various heuristics designed to minimize
+interaction time. It uses debconf to interact with the user, as per Debian
+policy. In the SYNOPSIS above,
+.I New file
+is the configuration file as provided by the package (either shipped
+with the package, or generated by the maintainer scripts on the fly),
+and
+.I Destination
+is the location (usually under /etc) where the real configuration file
+lives, and is potentially modified by the end user. Since the files
+edited would be real files, and not symbolic links,
+.B ucf
+follows and resolves symbolic links before acting. As far as
+possible, ucf attempts to preserve the ownership and permission of
+the
+.I New file
+as it is copied to the new location.
+.PP
+This script attempts to provide conffile like handling for files
+installed under
+.I /etc
+not
+shipped in a
+.B Debian
+package, but handled by the postinst instead.
+.B Debian
+policy states that files under
+.I /etc
+which are configuration files
+.B must
+preserve user changes, and this applies to files handled by maintainer
+scripts as well. Using
+.B ucf,
+one may ship a bunch of default configuration files somewhere in
+.I /usr
+(
+.I /usr/share/<pkg>
+is a good location), and maintain files in
+.I /etc,
+preserving user changes and in general offering the same facilities
+while upgrading that
+.B dpkg
+normally provides for
+.I \*(lqconffiles\*(rq
+.PP
+Additionally, this script provides facilities for transitioning a file
+that had not been provided
+.I conffile
+like protection to come under this
+schema, and attempts to minimize questions asked at install
+time. Indeed, the transitioning facility is better than the one
+offered by
+.B dpkg
+while transitioning a file from a
+.I non\-conffile
+to
+.I conffile
+status. The second form in the SYNOPSIS above is for purging
+information about the configuration file when the package is purged;
+and is critical for allowing smooth reinstallations.
+.PP
+During the course of operations, when working with configuration files,
+.B ucf
+optionally creates copies of versions of the configuration file in
+question. For example, a file with the suffix
+.I "ucf-old"
+holds the old version of a configuration file replaced by
+.B ucf.
+Also, copies of the configuration file with the suffixes
+.I "ucf-new"
+and
+.I "ucf-dist"
+may be created; and the maintainer scripts should consider purging
+copies of the configuration file with these extensions during purge.
+.SH OPTIONS
+.TP
+.B "\-h, \-\-help"
+Print a short usage message
+.TP
+.B "\-n, \-\-no\-action"
+Dry run. Print the actions that would be taken if the script is
+invoked, but take no action.
+.TP
+.B "\-d[n], \-\-debug=[n]"
+Set the debug level to the (optional) level
+.I n
+(n defaults to 1). Please note there mist be no spaces before the
+optional digit n. This turns on copious debugging information.
+.TP
+.B "\-p, \-\-purge"
+Removes all vestiges of the file from the state hashfile. This is
+required to allow a package to be reinstalled after it is purged;
+since otherwise, the real configuration file is removed, but it
+remains in the hash file; and on reinstall no action is taken, since
+the md5sum of the new file matches that in the hashfile. In short,
+remember to use this option in the postrm for every configuration file
+managed by ucf when the package is being purged (assuming ucf itself
+exists).
+.I Note:
+ucf does not actually touch the file on disk in this operation, so any
+file removals are still the responsibility of the calling package.
+.TP
+.B "\-v, \-\-verbose"
+Make the script be very verbose about setting internal variables.
+.TP
+.B "\-s foo, \-\-src\-dir foo"
+Set the source directory (historical md5sums are expected to live in
+files and sub directories of this directory) to foo. By default, the
+directory the new_file lives in is assumed to be the source
+directory. Setting this option overrides settings in the environment
+variable
+.B UCF_SOURCE_DIR,
+and in the configuration file variable
+.B conf_source_dir.
+.TP
+.B "\-\-sum\-file foo"
+Force the historical md5sums to be read from this file, rather than
+defaulting to living in the source directory. Setting this option
+overrides settings in the environment variable
+.B UCF_OLD_MDSUM_FILE,
+and in the configuration file variable
+.B conf_old_mdsum_file.
+.TP
+.B "\-\-three\-way"
+This turns on the option, during installation, for the user to be
+offered a chance to see a merge of the changes between old maintainer
+version and the new maintainer version into the local copy of the
+configuration file. If the user likes what they see, they can ask to
+have these changes merged in. This allows one to get new upstream
+changes merged in even while retaining local modifications to the
+configuration file. This is accomplished by taking the configuration
+file and stashing it in a cache area during registration, and using
+diff3 during the install (the stashed file name is a munged version of
+the full path of the configuration file to avoid name space clashes).
+.I Note
+This option appeared in Version 0.8 of
+.B ucf,
+which was the first version released into unstable and ultimately
+.B Sarge.
+The version of ucf in woody does not contain this option.
+.TP
+.B "\-\-debconf\-ok"
+Indicate that it is ok for
+.I ucf
+to use an already running debconf instance for prompting (it has
+always been ok to use ucf when debconf is not running -- it shall
+invoke debconf as needed). Since historically maintainer scripts that
+used debconf and also ucf had to disable/cripple debconf before
+running ucf (since ucf did not prompt with debconf, and needed stdio
+available), ucf must be cautious when called from a maintainer script
+that uses debconf. This option lets it know that the maintainer script
+has not told debconf to stop, or redirected its stdio from debconf, or
+anything of the sort -- and thus it is safe to use debconf even when
+the script discovers that debconf is running. Packages that call ucf
+with this option should take care to depend on version 0.28 or higher
+of ucf (the first to support use this option).
+.TP
+.B "\-\-debconf\-template foo"
+Instruct ucf to use the named multiselect debconf template instead of
+the normal ucf-provided debconf template. The caller is responsible for
+ensuring that the named template exists and has a list of choices
+matching those for the default ucf template, and should set
+Choices\-C: ${CHOICES} to ensure the returned values match those from
+the default template. Note that the choices must be different according
+to whether the
+.B \-\-three\-way
+option is also set.
+.TP
+.B "\-\-state\-dir /path/to/dir"
+Set the state directory to /path/to/dir instead of the default
+.I /var/lib/ucf.
+Used mostly for testing.
+.SH USAGE
+The most common case usage is pretty simple: a single line invocation
+in the postinst on configure, and another single line in the postrm to
+tell
+.B ucf
+to forget about the configuration file on purge
+(using the \-\-purge option) is all that is needed (assuming ucf is
+still on the system).
+.PP
+It is recommended that you also register any file being managed by
+.B ucf
+with the ucf registry; this associates the configuration file with the
+package it belongs to. This is done with a simple call to
+.B ucfr.
+Users may then query the association between a configuration file and
+the package using the tool
+.B ucfq.
+Please see the appropriate manual pages for details.
+.PP
+If a file maintained by maintainer scripts is being transitioned from an
+unprotected status to the protection afforded by the script, the
+maintainer can help ease the transition by reducing the questions that
+may be asked at installation time. Specifically, questions should not
+be asked if the file in question is an unmodified version that was one
+shipped in a previous version of this package; and the maintainer can
+help by telling the script about the historical md5sums that published
+versions of this file contained.
+.PP
+The way to do this is to either create a file called
+.B <New file>.md5sum,
+with one md5sum on each line, (the file names you use are ignored, except
+for the entry named default), or create a directory, called
+.B <New file>.md5sum.d,
+which should contain any number of files, each containing a single
+line, namely, the md5sum of a previous version of
+.B <New file>.
+The names of these files are not important, with one exception: The
+file called default is treated specially. For example, the author
+personally uses either package version numbers or release code names,
+like
+.I 7.6.3,
+or
+.I potato.
+If none of the historical md5sums match, we are almost certain that
+either the historical record of md5sums is not complete, or the user
+has changed the configuration file.
+.SS "The default historical md5sum"
+The exception to the rule about names mentioned earlier is that if no
+md5sums match, and if the file
+.B <New file>.md5sum.d/default
+exists, or if there is a line corresponding to a
+.I default
+file in
+.B <New file>.md5sum,
+it shall be used as the default md5sum of the
+.I previous
+version of the package assumed to have been installed on this machine.
+As you can see, unless there are limited number of previously released
+packages (like just one), the maintainer is also making an informed
+guess, but the option is provided to the maintainer.
+.PP
+If the file
+.B <New file>.md5sum,
+or the directory
+.B <New file>.md5sum.d
+does not exist, or none of the md5sums match, we test the installed
+.I <Destination>
+file to see whether it is the same as the
+.I <New file>.
+If not, we ask the user whether they want us to replace the file.
+.PP
+An additional facility is also offered: optionally, ucf can store one
+old version of the maintainers copy of the configuration file, and,
+on upgrade, calculate the changes made in the maintainers version of
+the configuration file, and apply that patch to the local version of
+the file (on user request, of course). There is also a preview
+facility where the user can inspect the results of such a merge,
+before asking the action to be taken.
+.SH "ENVIRONMENT VARIABLES"
+The variable
+.B UCF_FORCE_CONFFNEW,
+if set, forces the new file to always overwrite the installed
+destination file, while the variable
+.B UCF_FORCE_CONFFOLD,
+if set silently retains the installed file.
+.B UCF_FORCE_CONFFMISS
+is only applicable when the installed destination file does not exist
+(perhaps due to user removal),and forces ucf to recreate the missing
+file (the default behaviour is to honor the users wishes and not
+recreate the locally deleted file).
+.SH FILES
+This script creates the file
+.I new_file.md5sum,
+and it may copy the file (presumably shipped with the package)
+.I <New file>
+to its destination,
+.I <Destination>.
+.PP
+.I /var/lib/ucf/hashfile,
+and
+.I /var/lib/ucf/hashfile.X,
+where
+.I X
+is a small integer, where previous versions of the hashfile are
+stored.
+.PP
+.I /etc/ucf.conf
+.SH EXAMPLES
+If the package
+.I foo
+wants to use ucf to handle user interaction for configuration file
+.I foo.conf,
+a version of which is provided in the package as
+.I /usr/share/foo/configuration,
+a simple invocation of ucf in the post inst file is all that is
+needed:
+.PP
+.B ucf
+.I /usr/share/foo/configuration
+.I /etc/foo.conf
+.PP
+On purge, one should tell ucf to forget about the file (see detailed
+examples in /usr/share/doc/ucf/examples):
+.PP
+.B ucf
+.I \-\-purge
+.I /etc/foo.conf
+Please note that purge can also be used to make ucf forget the
+rpevious state of the files, and when the package is next installed or
+updated, ucf will ask the user to replace the current cofiguration
+file. Do this if you want to change your decision to not update to a
+maintainer provided version of the configuration file.
+.PP
+The motivation for this script was to provide conffile like handling
+for start files for emacs lisp packages (for example,
+.I /etc/emacs21/site\-start.d/50psgml\-init.el
+) These start files are not
+shipped with the package, instead, they are installed during the
+post installation configuration phase by the script
+.I /usr/lib/emacsen\-common/emacs\-package\-install $package_name.
+.PP
+This script is meant to be invoked by the packages install script at
+.I /usr/lib/emacsen\-common/packages/install/$package_name
+for each
+flavour of installed emacsen by calling it with the proper values of
+new file (
+.I /usr/share/emacs/site\-lisp/<pkg>/<pkg\-init.el
+), and dest file
+(
+.I /etc/emacs21/site\-start.d/50<pkg\-init.el
+), and it should do the rest.
+.SH "SEE ALSO"
+ucf.conf(5), ucfr(1), ucfq(1), and diff3(1).
+The
+.B Debian
+Emacs policy, shipped with the package
+.I emacsen\-common.
+.SH AUTHOR
+This manual page was written Manoj Srivastava <srivasta@debian.org>,
+for the Debian GNU/Linux system.
diff --git a/ucf.conf b/ucf.conf
new file mode 100644
index 0000000..cb4f02c
--- /dev/null
+++ b/ucf.conf
@@ -0,0 +1,39 @@
+#
+# This file is a bourne shell snippet, and is sourced by the
+# ucf script for configuration.
+#
+
+# Debugging information: The default value is 0 (no debugging
+# information is printed). To change the default behavior, uncomment
+# the following line and set the value to 1.
+#
+# DEBUG=0
+
+# Verbosity: The default value is 0 (quiet). To change the default
+# behavior, uncomment the following line and set the value to 1.
+#
+# VERBOSE=0
+
+
+# The src directory. This is the directory where the historical
+# md5sums for a file are looked for. Specifically, the historical
+# md5sums are looked for in the subdirectory ${filename}.md5sum.d/
+#
+# conf_source_dir=/some/path/
+
+# Force the installed file to be retained. The default is have this
+# variable unset, which makes the script ask in case of doubt. To
+# change the default behavior, uncomment the following line and set
+# the value to YES
+#
+# conf_force_conffold=YES
+
+# Force the installed file to be overridden. The default is have this
+# variable unset, which makes the script ask in case of doubt. To
+# change the default behavior, uncomment the following line and set
+# the value to YES
+#
+# conf_force_conffnew=YES
+
+# Please note that only one of conf_force_conffold and
+# conf_force_conffnew should be set.
diff --git a/ucf.conf.5 b/ucf.conf.5
new file mode 100644
index 0000000..61c88a3
--- /dev/null
+++ b/ucf.conf.5
@@ -0,0 +1,120 @@
+.\" -*- Mode: Nroff -*-
+.\" updateConfFile.1 ---
+.\" Author : Manoj Srivastava ( srivasta@green-gryphon.com )
+.\" Created On : Fri Feb 1 11:17:32 2002
+.\" Created On Node : glaurung.green-gryphon.com
+.\" Last Modified By : Manoj Srivastava
+.\" Last Modified On : Mon Apr 19 12:16:51 2004
+.\" Last Machine Used: glaurung.internal.golden-gryphon.com
+.\" Update Count : 28
+.\" Status : Unknown, Use with caution!
+.\" HISTORY :
+.\" Description :
+.\" Copyright (c) 2002 Manoj Srivastava <srivasta@debian.org>
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+.\" 02111-1307, USA.
+.\"
+.\" $Id: ucf.conf.5,v 1.2 2002/02/25 18:07:21 srivasta Exp $
+.\"
+.TH UCF.CONF 5 "Feb 12 2002" "Debian" "Debian GNU/Linux manual"
+.SH NAME
+ucf.conf \- site\-wide configuration file for
+.B ucf
+.SH SYNOPSIS
+.I /etc/ucf.conf
+.SH "DESCRIPTION"
+The file
+.I /etc/ucf.conf
+is actually a
+.BR "Bourne Shell"
+snippet included during the package build process, and hence you may
+put any shell directive in that file (just make very sure you know
+what you are doing).
+.PP
+All the variables have reasonable default values, and some may be
+overridden on a per run or a per individual basis by using
+environment variables, and all configurable variables can be
+overridden by options to the scripts themselves.
+.PP
+The value of a variable can be set so:
+.TP 3
+a)
+Defaults exist in the rules file. These are the values used if no
+customization is done.
+.IP b)
+Some variables can be set in the config file
+.I /etc/ucf.conf.
+These values override the defaults.
+.IP c)
+Some variables can also be set by setting a corresponding environment
+variable. These values override the config file and the defaults.
+.IP d)
+Using script command line
+options. All configurable variables may be set by this method, and
+will override the other methods above.
+.SH "Configuration File options"
+At the moment, the user modifiable variables supported are:
+.TP 18
+.B DEBUG
+Debugging information: The default value is 0 (no debugging
+information is printed). To enable debugging output, set the value to
+1.
+.TP
+.B VERBOSE
+Verbosity: The default value is 0 (quiet). To change the default
+behavior, set the value to 1.
+.TP
+.B conf_force_conffold
+Force the installed file to be retained. The default is to have this
+variable unset, which makes the script ask in case of doubt. This can
+be overridden by the environment variable
+.B UCF_FORCE_CONFFOLD
+.TP
+.B conf_force_conffnew
+Force the installed file to be overridden. The default is to have this
+variable unset, which makes the script ask in case of doubt. This can
+be overridden by the environment variable
+.B UCF_FORCE_CONFFNEW
+.TP
+.B conf_source_dir
+This is the directory where the historical md5sums for a file are
+looked for. Specifically, the historical md5sums are looked for in
+either the file
+.I ${filename}.md5sum,
+or the subdirectory
+.I ${filename}.md5sum.d/
+.TP
+.B conf_old_mdsum_file
+Force the historical md5sums to be read from this file, rather than
+defaulting to living in the source directory. Setting this option
+overrides settings in the environment variable
+.B UCF_OLD_MDSUM_FILE
+.SH Files
+System\-wide defaults are placed in
+.I /etc/ucf.conf,
+.SH "SEE ALSO"
+.BR ucf (1),
+.SH BUGS
+There are no bugs. Any resemblance thereof is delirium. Really.
+.SH AUTHOR
+This manual page was written by Manoj Srivastava <srivasta@debian.org>,
+for the Debian GNU/Linux system.
+
diff --git a/ucfq b/ucfq
new file mode 100755
index 0000000..1996a7a
--- /dev/null
+++ b/ucfq
@@ -0,0 +1,851 @@
+#!/usr/bin/perl
+# -*- Mode: Cperl -*-
+# ucfq ---
+# Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com )
+# Created On : Wed Apr 12 14:51:16 2006
+# Created On Node : glaurung.internal.golden-gryphon.com
+# Last Modified By : Manoj Srivastava
+# Last Modified On : Fri Apr 14 19:30:45 2006
+# Last Machine Used: glaurung.internal.golden-gryphon.com
+# Update Count : 81
+# Status : Unknown, Use with caution!
+# HISTORY :
+# Description :
+#
+# arch-tag: 1390e09f-ee31-4d7f-a968-bd539ea061a0
+#
+=head1 NAME
+
+ucfq - query ucf registry and hashfile about configuration file details.
+
+=cut
+
+use strict;
+
+
+package ucf;
+
+use strict;
+use Getopt::Long;
+
+# set the version and revision
+($main::MYNAME = $main::0) =~ s|.*/||;
+$main::Author = "Manoj Srivastava";
+$main::AuthorMail = "srivasta\@debian.org";
+
+=head1 SYNOPSIS
+
+ usage: ucfq [options] (file|package)[file|package ...]
+
+=cut
+
+
+{ # scope for ultra-private meta-object for class attributes
+
+ my %Ucf =
+ (
+ Optdesc =>
+ {
+ 'help|h' => sub {print ucf->Usage(); exit 0;},
+ 'with-colons|w!' => sub {$::ConfOpts{"Colons"}= "$_[1]";},
+ 'state-dir=s' => sub {$::ConfOpts{"StateDir"}= "$_[1]";},
+ 'debug|d' => sub {$::ConfOpts{"DEBUG"}+= "$_[1]";},
+ 'verbose|v' => sub {$::ConfOpts{"VERBOSE"}+= "$_[1]";}
+ },
+ Usage => qq(Usage: $main::MYNAME [options]
+Author: $main::Author <$main::AuthorMail>
+ where options are:
+ --help This message.
+ --debug Turn on debugging mode.
+ --verbose Make the script more verbose.
+ --with-colons A compact, machine readable version of the output.
+ --state-dir </path/> Set the state directory to /path/ instead of the
+ default /var/lib/ucf.
+
+),
+ Defaults =>
+ {
+ "Colons" => 0,
+ "DEBUG" => 0,
+ "VERBOSE" => 0,
+ "StateDir" => '/var/lib/ucf'
+ }
+ );
+ # tri-natured: function, class method, or object method
+ sub _classobj {
+ my $obclass = shift || __PACKAGE__;
+ my $class = ref($obclass) || $obclass;
+ no strict "refs"; # to convert sym ref to real one
+ return \%$class;
+ }
+
+ for my $datum (keys %Ucf ) {
+ no strict "refs";
+ *$datum = sub {
+ use strict "refs";
+ my ($self, $newvalue) = @_;
+ $Ucf{$datum} = $newvalue if @_ > 1;
+ return $Ucf{$datum};
+ }
+ }
+}
+
+=head1 OPTIONS
+
+=over 3
+
+=item B<--help> B<h> Print out a usage message.
+
+=item B<--debug> B<-d> Turn on debugging mode.
+
+=item B<--verbose> B<-v> Make the script more verbose..
+
+=item B<--with-colons> B<-w>
+
+=over 2
+
+Normally, the script presents the information in a human readable
+tabular format, but that may be harder for a machine to parse. With
+this option, the output is a compact, colon separated line, with no
+dividers, headers, or footer.
+
+=back
+
+=item B<--state-dr> dir
+
+=over 2
+
+Set the state directory to C</path/to/dir> instead of the default
+C</var/lib/ucf>. Used mostly for testing.
+
+=back
+
+=back
+
+=cut
+
+
+=head1 DESCRIPTION
+
+
+This script takes a set of arguments, each of which is a package or a
+path to a configuration file, and outputs the associated package, if
+any, if the file exists on disk, and whether it has been modfied by te
+user. The output is either a human readable tabular form, or a
+compact colon-separated machine friendly format.
+
+This script can potentially be used in package C<postinst> scripts
+during purge to query the system for configuration files that may
+still exist on the system, and whether these files have been locally
+modified by the user -- assuming that the package registered all the
+configuration files with B<ucf> using C<ucfr>.
+
+=cut
+
+
+
+
+=head1 INTERNALS
+
+=head2 Class Methods
+
+All class methods mediate access to class variables. All class
+methods can be invoked with zero or one parameters. When invoked with
+the optional parameter, the class method sets the value of the
+underlying class data. In either case, the value of the underlying
+variable is returned.
+
+=cut
+
+=head1 Class ucf
+
+This is a combination view and controller class that mediates between
+the user and the internal model classes.
+
+
+=head2 new
+
+This is the constructor for the class. It takes a number of optional
+parameters. If the parameter B<Colons> is present, then the output
+will be compact. The parameters B<DEBUG> and B<VERBOSE> turn on
+additional diagnostics from the script.
+
+=cut
+
+sub new {
+ my $this = shift;
+ my %params = @_;
+ my $class = ref($this) || $this;
+ my $self = {};
+
+ bless $self => $class;
+
+ # validate and sanitize the settings
+ $self->validate(%params);
+
+ return $self;
+}
+
+=head2 validate
+
+This routine is responsible for ensuring that the parameters passed in
+(presumably from the command line) are given preference.
+
+=cut
+
+sub validate{
+ my $this = shift;
+ my %params = @_;
+ my $defaults = $this->Defaults();
+
+
+ # Make sure runtime options override what we get from the config file
+ for my $option (keys %params) {
+ $this->{Con_Ref}->{"$option"} = $params{"$option"};
+ }
+
+ # Ensure that if default parameters have not been set on the comman
+ # line on in the configuration file, if any, we use the built in
+ # defaults.
+ for my $default (keys %$defaults) {
+ if (! defined $this->{Con_Ref}->{"$default"}) {
+ $this->{Con_Ref}->{"$default"} = $defaults->{"$default"};
+ }
+ }
+}
+
+=head2 get_config_ref
+
+This routine returns a reference to the configuration hash
+
+=cut
+
+sub get_config_ref {
+
+ my $this = shift;
+ return $this->{Con_Ref};
+}
+
+=head2 dump_config
+
+This routine returns a C<Data::Dumper> for debugging purposes
+
+=cut
+
+sub dump_config {
+ my $this = shift;
+ for (keys %{$this->{Con_Ref}}) {
+ print "$_ = [${$this->{Con_Ref}}{$_}]\n"
+ }
+}
+
+=head2 process
+
+This routine is the work horse routine -- it parses the command line
+arguments, and queries the on disk databases, determines of the files
+exist, and have been modified.
+
+=cut
+
+
+sub process {
+ my $this = shift;
+
+# Step 1: Process all arguments in sequence.
+# Step 2: determine if the arument given is a package name (no / in
+# arg)
+
+ %{$this->{packages}} = map { +"$_" => 1} grep {! m,/,} @ARGV;
+ %{$this->{configs}} = map { +"$_" => 1} grep { m,/,} @ARGV;
+ $this->{pkg_list} = object_list->new;
+ $this->{file_list} = object_list->new;
+ $this->{registry_proxy} =
+ registry->new("StateDir" => $this->{Con_Ref}->{StateDir});
+ $this->{hashfile_proxy} =
+ hashfile->new("StateDir" => $this->{Con_Ref}->{StateDir});
+
+ for (keys %{$this->{packages}} ) {
+ my $package = pkg->new('Name' => "$_");
+ $this->{pkg_list}->element($_, $package);
+ }
+ for (keys %{$this->{configs}}) {
+ warn "Need a fully qualified path name for config file \"$_\"\n"
+ unless m,^/,;
+ # Don't die for etch
+ exit 0 unless m,^/,;
+
+ my $file = conffile->new('Name' => "$_");
+ $this->{file_list}->element($_, $file);
+ }
+# Step 3: If so, gather all files associated with the package
+ for my $package ($this->{pkg_list}->list) {
+ my $pkg_files = $this->{registry_proxy}->list_files($package);
+ for my $file (@$pkg_files) {
+ if (! defined $this->{file_list}->element($file)) {
+ my $ret = conffile->new('Name' => "$file");
+ $this->{file_list}->element($file, $ret);
+ }
+ $this->{file_list}->element($file)->conffile_package($package);
+ }
+ }
+# Step 4: for all configuration files, determine package (unless
+# already determined), if any
+# Step 5: For each configuration file, check if it exists
+# Step 6: For each existing file, see if it has been changed
+
+ for my $file ($this->{file_list}->list) {
+ $this->{file_list}->element($file)->conffile_hash($file, $this->{hashfile_proxy}->hash($file));
+ if (! defined $this->{file_list}->element($file)->conffile_package) {
+ $this->{file_list}->element($file)->conffile_package($this->{registry_proxy}->find_pkg($file));
+ }
+ }
+}
+
+=head2 report
+
+This routine generates a nicely formatted report based on the
+information gathered during the processing. There are two kinds of
+reports, the first being a user friendly tabular form, the second
+(turned on by the C<-w> option) a easily parseable colon separated
+report.
+
+=cut
+
+
+our ($out_pkg, $out_file, $there, $mod);
+
+format STDOUT_TOP =
+Configuration file Package Exists Changed
+.
+
+format STDOUT =
+@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<< @||| @|||
+$out_file, $out_pkg, $there,$mod
+.
+
+sub report {
+ my $this = shift;
+ for my $file (sort $this->{file_list}->list) {
+ ($out_pkg, $out_file, $there, $mod) =
+ $this->{file_list}->element($file)->conffile_report;
+ if ($this->{Con_Ref}->{Colons}) {
+ print "$out_file:$out_pkg:$there:$mod\n";
+ }
+ else {
+ write;
+ }
+ }
+}
+
+=head1 Class registry
+
+This moel class encapsulates the package-configuration file
+associations registry. It parses the data in the registry, and
+provides methods to query the registry based either on package name,
+or the full path of the configuration file.
+
+=cut
+
+package registry;
+use strict;
+
+=head2 new
+
+This is the constructor for the class. It takes a required parameter
+B<StateDir>, and based on that, proceeds toparse the registry and
+populate internal data structures.
+
+=cut
+
+sub new {
+ my $this = shift;
+ my %params = @_;
+ my $class = ref($this) || $this;
+ my $self = {};
+
+ die "Missing required parameter StateDir"
+ unless $params{StateDir};
+
+ if (-e "$params{StateDir}/registry") {
+ if (! -r "$params{StateDir}/registry") {
+ die "Can't read registry file $params{StateDir}/registry:$!";
+ }
+ open (REG, "$params{StateDir}/registry") ||
+ die "Can't read registry file $params{StateDir}/registry:$!";
+ while (<REG>) {
+ chomp;
+ my ($pkg, $file) = m/^(\S+)\s+(\S+)$/;
+ $self->{Packages}->{$file} = $pkg;
+ if (exists $self->{List}->{$pkg}) {
+ push @{$self->{List}->{$pkg}}, $file;
+ }
+ else {
+ $self->{List}->{$pkg} = [ $file ];
+ }
+ }
+ }
+
+ bless $self => $class;
+
+ return $self;
+}
+
+=head2 list_files
+
+This routine queries the registry and lists all configuration files
+associated with the given package. Takes the package name as a
+required parameter.
+
+=cut
+
+sub list_files {
+ my $this = shift;
+ my $pkg = shift;
+
+ if (exists $this->{List}->{$pkg}) {
+ return [ @{$this->{List}->{$pkg}} ];
+ }
+ else {
+ return [];
+ }
+}
+
+
+=head2 find_pkg
+
+This routine queries the registry for the package associated with the
+given file. Takes the path of the configuration file as a required
+parameter.
+
+=cut
+
+sub find_pkg {
+ my $this = shift;
+ my $file = shift;
+
+ if (exists $this->{Packages}->{$file}) {
+ return $this->{Packages}->{$file};
+ }
+ else {
+ return undef;
+ }
+}
+
+=head1 Class hashfile
+
+This moel class encapsulates the configuration file hash database. It
+parses the data in the database, and provides methods to query the
+hash of the configuration file.
+
+=cut
+
+package hashfile;
+use strict;
+
+sub new {
+ my $this = shift;
+ my %params = @_;
+ my $class = ref($this) || $this;
+ my $self = {};
+
+ die "Missing required parameter StateDir"
+ unless $params{StateDir};
+
+
+ if (-e "$params{StateDir}/hashfile") {
+ if (! -r "$params{StateDir}/hashfile") {
+ die "Can't read registry file $params{StateDir}/hashfile:$!";
+ }
+ open (HASH, "$params{StateDir}/hashfile") ||
+ die "Can't read registry file $params{StateDir}/hashfile:$!";
+ while (<HASH>) {
+ chomp;
+ my ($hash, $file) = m/^(\S+)\s+(\S+)$/;
+ $self->{$file} = $hash
+ }
+ }
+
+ bless $self => $class;
+
+ return $self;
+}
+
+
+=head2 hash
+
+This routine queries the database for the hash associated with the
+developers version of the given file. Takes the path of the
+configuration file as a required parameter.
+
+=cut
+
+
+sub hash {
+ my $this = shift;
+ my $file = shift;
+ my $value = shift;
+
+ if ($value) {
+ $this->{$file} = $value;
+ }
+ return $this->{$file};
+}
+
+=head1 class conffile
+
+This is the encapsulation of a configuration file metadata.
+
+=cut
+
+
+
+package conffile;
+use strict;
+use Cwd qw{abs_path};
+
+
+=head2 new
+
+This is the constructor for the class. It takes a number of optional
+parameters. If the parameter B<Colons> is present, then the output
+will be compact. The parameters B<DEBUG> and B<VERBOSE> turn on
+additional diagnostics from the script.
+
+=cut
+
+sub new {
+ my $this = shift;
+ my %params = @_;
+ my $class = ref($this) || $this;
+ my $self = {};
+
+ die "Missing required parameter Name"
+ unless $params{Name};
+ $self->{Name} = $params{Name};
+ $self->{Package} = $params{Package}
+ if $params{Package};
+ $self->{Exists} = 'Yes' if -e $self->{Name};
+ if ($self->{Exists}) {
+ $self->{Name} = abs_path( $self->{Name});
+ }
+ bless $self => $class;
+
+ return $self;
+}
+
+
+=head2 conffile_package
+
+This routine is the accessor method of the internal attribute that
+holds package name associated with the file. If an optional C<value>
+is present, updates the value of the attribute.
+
+=cut
+
+sub conffile_package {
+ my $this = shift;
+ my $value = shift;
+
+ if ($value ) {
+ $this->{Package} = $value;
+ }
+ if (exists $this->{Package}) {
+ return $this->{Package};
+ }
+ else {
+ return undef;
+ }
+}
+
+=head2 conffile_exists
+
+This routine is the accessor method of the internal attribute that
+holds the information whether the file exists on disk or not.
+
+=cut
+
+sub conffile_exists {
+ my $this = shift;
+ my $name = shift;
+ my $value = shift;
+
+ die "Missing required parameter Name"
+ unless $name;
+ if (exists $this->{Exists}) {
+ return $this->{Exists};
+ }
+ else {
+ return undef;
+ }
+}
+
+=head2 conffile_modified
+
+This routine is the accessor method of the internal attribute that
+holds the information whether the file exists on disk or not. If an
+optional C<value> is present, updates the value of the attribute.
+
+=cut
+
+sub conffile_modified {
+ my $this = shift;
+ my $name = shift;
+ my $value = shift;
+
+ die "Missing required parameter Name"
+ unless $name;
+ if ($value ) {
+ $this->{Modified} = $value;
+ }
+ if (exists $this->{Modified}) {
+ return $this->{Modified};
+ }
+ else {
+ return undef;
+ }
+}
+
+=head2 conffile_hash
+
+This routine is the accessor method of the internal attribute that
+holds the hash for the developers version of the file. If an optional
+C<value> is present, updates the value of the attribute. It also
+notes whether or not the file is modified from the developers version.
+
+=cut
+
+sub conffile_hash {
+ my $this = shift;
+ my $name = shift;
+ my $value = shift;
+
+ die "Missing required parameter Name"
+ unless $name;
+ if ($value ) {
+ $this->{Hash} = $value;
+ if (-e "$name") {
+ if (-x "/usr/bin/md5sum") {
+ open (NEWHASH, "/usr/bin/md5sum $name |") ||
+ die "Could not run md5sum: $!";
+ while (<NEWHASH>) {
+ chomp;
+ my ($hash, $dummy) = m/^(\S+)\s+(\S+)$/;
+ if ("$hash" ne "$value") {
+ $this->{Modified} = 'Yes';
+ }
+ else {
+ $this->{Modified} = 'No';
+ }
+ }
+ close NEWHASH;
+ }
+ else {
+ die "Could not find /usr/bin/md5sum .\n";
+ }
+ }
+ }
+ if (exists $this->{Hash}) {
+ return $this->{Hash};
+ }
+ else {
+ return undef;
+ }
+}
+
+sub conffile_report {
+ my $this = shift;
+ return $this->{Package} ? $this->{Package} : "",
+ $this->{Name}, $this->{Exists} ? $this->{Exists} : "",
+ $this->{Modified}? $this->{Modified} : "";
+}
+
+
+=head1 CLASS PKG
+
+This is an encapsulation of package metadata. Packages may be
+associated with configuration files.
+
+=cut
+
+
+package pkg;
+use strict;
+
+
+=head2 new
+
+This is the constructor for the class. It takes a number of optional
+parameters. If the parameter B<Colons> is present, then the output
+will be compact. The parameters B<DEBUG> and B<VERBOSE> turn on
+additional diagnostics from the script.
+
+=cut
+
+sub new {
+ my $this = shift;
+ my %params = @_;
+ my $class = ref($this) || $this;
+ my $self = {};
+
+ die "Missing required parameter Name"
+ unless $params{Name};
+ $self->{Name} = $params{Name};
+
+ bless $self => $class;
+
+ return $self;
+}
+
+sub list_files {
+ my $this = shift;
+ return [];
+}
+
+=head1 CLASS object_list
+
+This is a clas which holds lists of object names, either packages or
+configuration file object names. It provides methods to add, access,
+and remove objects, as well as an option to list all elements in the
+list.
+
+=cut
+
+package object_list;
+use strict;
+
+
+
+=head2 new
+
+This is the constructor for the class. It takes no arguments.
+
+=cut
+
+sub new {
+ my $this = shift;
+ my %params = @_;
+ my $class = ref($this) || $this;
+ my $self = {};
+
+ $self->{"List"} = ();
+
+ bless $self => $class;
+
+ return $self;
+}
+
+=head2 element
+
+This is an accessor method for elements of the list. If an optional
+value argument exists, it creates or updates the element associtated
+with the vaslue. Takes in a required name, which is used as a kay, and
+an optional value argument. The value is returned.
+
+=cut
+
+sub element {
+ my $this = shift;
+ my $name = shift;
+ my $value = shift;
+
+ die "Missing required parameter Name"
+ unless $name;
+ if ($value) {
+ $this->{"List"}->{$name} = $value;
+ }
+ if (exists $this->{"List"}->{$name}) {
+ return $this->{"List"}->{$name};
+ }
+ else {
+ return undef;
+ }
+}
+
+
+=head2 remove
+
+Removes elements from the list. Take in an required name, which is
+used as the key for the element to delete.
+
+=cut
+
+sub remove {
+ my $this = shift;
+ my $name = shift;
+ die "Missing required parameter Name"
+ unless $name;
+ delete $this->{"List"}->{$name}
+ if (exists $this->{"List"}->{$name} );
+}
+
+=head2 list
+
+This routine lists all the elements in the list. It does not take any
+options.
+
+=cut
+
+sub list {
+ my $this = shift;
+
+ return keys %{$this->{"List"}};
+}
+
+package main;
+use Getopt::Long;
+
+sub main {
+ my $optdesc = ucf->Optdesc();
+ my $parser = new Getopt::Long::Parser;
+ $parser->configure("bundling");
+ $parser->getoptions (%$optdesc);
+ my $query = ucf->new(%::ConfOpts);
+ $query->process;
+ $query->report;
+}
+
+&main;
+
+exit 0;
+
+=head1 CAVEATS
+
+This is very inchoate, at the moment, and needs testing.
+
+=cut
+
+=head1 BUGS
+
+None Known so far.
+
+=cut
+
+=head1 AUTHOR
+
+Manoj Srivastava <srivasta\@debian.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This script is a part of the Ucf package, and is
+
+Copyright (c) 2006 Manoj Srivastava <srivasta\@debian.org>
+
+This program is free software; you can redistribute it and / or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+=cut
+
+1;
+
+__END__
diff --git a/ucfq.1 b/ucfq.1
new file mode 100644
index 0000000..9b2a2ca
--- /dev/null
+++ b/ucfq.1
@@ -0,0 +1,235 @@
+.\" -*- Mode: Nroff -*-
+.\" ucfq.1 ---
+.\" Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com )
+.\" Created On : Sun Apr 16 16:29:21 2006
+.\" Created On Node : glaurung.internal.golden-gryphon.com
+.\" Last Modified By : Manoj Srivastava
+.\" Last Modified On : Sun Apr 16 16:31:08 2006
+.\" Last Machine Used: glaurung.internal.golden-gryphon.com
+.\" Update Count : 2
+.\" Status : Unknown, Use with caution!
+.\" HISTORY :
+.\" Description :
+.\"
+.\" arch-tag: daf13e00-a69c-45f0-80a1-b6f3b8bdb14b
+.\"
+.\" Copyright (c) 2006 Manoj Srivastava <srivasta@debian.org>
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+.\" 02111-1307, USA.
+.\"
+
+.\" ========================================================================
+.de Sh \" Subsection heading
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.\"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.hy 0
+.if n .na
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.TH UCFQ 1 "2006-04-16" "perl v5.8.8" "User Contributed Perl Documentation"
+.SH NAME
+ucfq \- query the ucf database
+.SH "SYNOPSIS"
+.Vb 1
+\& usage: ucfq [options] (/path/to/file|package)[/path/to/file|package ...]
+.Ve
+.SH "OPTIONS"
+.IP "\fB\-\-help\fR \fBh\fR Print out a usage message." 3
+.PD 0
+.IP "\fB\-\-debug\fR \fB\-d\fR Turn on debugging mode." 3
+.IP "\fB\-\-verbose\fR \fB\-v\fR Make the script more verbose.." 3
+.IP "\fB\-\-with\-colons\fR \fB\-w\fR" 3
+.RS 3
+.PD
+.RS 2
+Normally, the script presents the information in a human readable
+tabular format, but that may be harder for a machine to parse. With
+this option, the output is a compact, colon separated line, with no
+dividers, headers, or footer.
+.RE
+.RE
+.RS 3
+.RE
+.IP "\fB\-\-state\-dr\fR dir" 3
+.RS 3
+.RS 2
+Set the state directory to \f(CW\*(C`/path/to/dir\*(C'\fR instead of the default
+\&\f(CW\*(C`/var/lib/ucf\*(C'\fR. Used mostly for testing.
+.RE
+.RE
+.RS 3
+.RE
+.SH "DESCRIPTION"
+This script takes a set of arguments, each of which is a package name
+(and thus does not contain a /) or a full path to a configuration
+file, and outputs the associated package, if any, if the file exists
+on disk, and whether it has been modified by the user. The output is
+either a human readable tabular form, or a compact colon-separated
+machine friendly format.
+.PP
+This script can potentially be used in package \f(CW\*(C`postrm\*(C'\fR scripts
+during purge to query the system for configuration files that may
+still exist on the system, and whether these files have been locally
+modified by the user \*(-- assuming that the package registered all the
+configuration files with \fBucf\fR using \f(CW\*(C`ucfr\*(C'\fR.
+.SH "CAVEATS"
+This is very inchoate, at the moment, and needs testing.
+.SH "BUGS"
+None Known so far.
+.SH "AUTHOR"
+Manoj Srivastava <srivasta\e@debian.org>
+.SH "COPYRIGHT AND LICENSE"
+This script is a part of the Ucf package, and is
+.PP
+Copyright (c) 2006 Manoj Srivastava <srivasta\e@debian.org>
+.PP
+This program is free software; you can redistribute it and / or modify
+it under the terms of the \s-1GNU\s0 General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+.PP
+This program is distributed in the hope that it will be useful,
+but \s-1WITHOUT\s0 \s-1ANY\s0 \s-1WARRANTY\s0; without even the implied warranty of
+\&\s-1MERCHANTABILITY\s0 or \s-1FITNESS\s0 \s-1FOR\s0 A \s-1PARTICULAR\s0 \s-1PURPOSE\s0. See the
+\&\s-1GNU\s0 General Public License for more details.
+.PP
+You should have received a copy of the \s-1GNU\s0 General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, \s-1MA\s0 02111\-1307 \s-1USA\s0
diff --git a/ucfr b/ucfr
new file mode 100755
index 0000000..4ca47a1
--- /dev/null
+++ b/ucfr
@@ -0,0 +1,336 @@
+#! /bin/bash
+# -*- Mode: Sh -*-
+# ucfr ---
+# Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com )
+# Created On : Tue Apr 11 11:09:15 2006
+# Created On Node : glaurung.internal.golden-gryphon.com
+# Last Modified By : Manoj Srivastava
+# Last Modified On : Tue Apr 11 13:50:58 2006
+# Last Machine Used: glaurung.internal.golden-gryphon.com
+# Update Count : 43
+# Status : Unknown, Use with caution!
+# HISTORY :
+# Description :
+#
+# Register a configuration file as belonging to a package
+#
+# arch-tag: 6e1d33fe-a930-41ce-8d0f-c87f87b19918
+#
+
+# make sure we exit on error
+set -e
+
+# set the version and revision
+progname=$(basename "$0")
+
+######################################################################
+######## #########
+######## Utility functions #########
+######## #########
+######################################################################
+setq() {
+ # Variable Value Doc_string
+ if [ "x$2" = "x" ]; then
+ echo >&2 "$progname: Unable to determine $3"
+ exit 1;
+ else
+ if [ "x$VERBOSE" != "x" ]; then
+ echo >&2 "$progname: $3 is $2";
+ fi
+ eval "$1=\"\$2\"";
+ fi
+}
+
+withecho () {
+ echo " $@" >&2
+ "$@"
+}
+
+
+purge_from_registry () {
+ if [ ! -e "$statedir/registry" ]; then
+ echo >&2 "$progname: Internal error: $statedir/registry does not exist";
+ exit 6;
+ fi
+
+ if [ $count -eq 0 ]; then
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "$progname: Association already purged. No changes.";
+ fi
+ exit 0;
+ fi
+ old_pkg=$(egrep "[[:space:]]${real_conf_file_re}$" "$statedir/registry" | \
+ awk '{print $1;}' );
+ if [ "$pkg" != "$old_pkg" ]; then
+ echo >&2 "ucfr: Association belongs to $old_pkg, not $pkg";
+ if [ "X$FORCE" = "X" ]; then
+ echo >&2 "ucfr: Aborting";
+ exit 5;
+ fi
+ fi
+
+ # OK, so we have something to purge.
+ for i in $(/usr/bin/seq 6 -1 0); do
+ if [ -e "${statedir}/registry.${i}" ]; then
+ if [ "X$docmd" = "XYES" ]; then
+ cp -f "${statedir}/registry.${i}" "${statedir}/registry.$(($i+1))"
+ else
+ echo cp -f "${statedir}/registry.${i}" "${statedir}/registry.$(($i+1))"
+ fi
+ fi
+ done
+ if [ "X$docmd" = "XYES" ]; then
+ cp -f "$statedir/registry" "$statedir/registry.0"
+ else
+ echo cp -f "$statedir/registry" "$statedir/registry.0"
+ fi
+ if [ "X$docmd" = "XYES" ]; then
+ set +e
+ if [ "X$VERBOSE" != "X" ]; then
+ echo "egrep -v [[:space:]]${real_conf_file_re}$ $statedir/registry >\\"
+ echo " $statedir/registry.tmp || true";
+ fi
+ #echo "egrep -v [[:space:]]${real_conf_file_re}$ $statedir/registry"
+ egrep -v "[[:space:]]${real_conf_file_re}$" "$statedir/registry" > \
+ "$statedir/registry.tmp" || true;
+ if [ "X$docmd" = "XYES" ]; then
+ mv -f "$statedir/registry.tmp" "$statedir/registry"
+ else
+ echo mv -f "$statedir/registry.tmp" "$statedir/registry"
+ fi
+ set -e
+ fi
+}
+
+replace_in_registry () {
+ if [ ! -e "$statedir/registry" ]; then
+ echo >&2 "$progname: Internal error: $statedir/registry does not exist";
+ exit 6;
+ fi
+ if [ $count -eq 1 ]; then
+ old_pkg=$(egrep "[[:space:]]${real_conf_file_re}$" "$statedir/registry" | \
+ awk '{print $1;}' );
+
+ if [ "$pkg" != "$old_pkg" ]; then
+ if [ "X$FORCE" = "X" ]; then
+ echo >&2 "$progname: Attempt from package $pkg to take ${real_conf_file} away from package $old_pkg";
+ echo >&2 "ucfr: Aborting.";
+ exit 4;
+ fi
+ else
+ if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "$progname: Association already recorded. No changes.";
+ fi
+ exit 0;
+ fi
+ fi
+
+ for i in $(/usr/bin/seq 6 -1 0); do
+ if [ -e "${statedir}/registry.${i}" ]; then
+ if [ "X$docmd" = "XYES" ]; then
+ cp -f "${statedir}/registry.${i}" \
+ "${statedir}/registry.$(($i+1))"
+ else
+ echo cp -f "${statedir}/registry.${i}" \
+ "${statedir}/registry.$(($i+1))"
+ fi
+ fi
+ done
+ if [ "X$docmd" = "XYES" ]; then
+ cp -f "$statedir/registry" "$statedir/registry.0"
+ else
+ echo cp -f "$statedir/registry" "$statedir/registry.0"
+ fi
+ if [ "X$docmd" = "XYES" ]; then
+ set +e
+ if [ "X$VERBOSE" != "X" ]; then
+ echo "egrep -v \"[[:space:]]${real_conf_file_re}$\" \"$statedir/registry\" \\"
+ echo " $statedir/registry.tmp || true"
+ echo "echo \"$pkg $real_conf_file\" >> \"$statedir/registry.tmp\""
+ echo "mv -f $statedir/registry.tmp $statedir/registry"
+ fi
+ egrep -v "[[:space:]]${real_conf_file_re}$" "$statedir/registry" > \
+ "$statedir/registry.tmp" || true;
+ echo "$pkg $real_conf_file" >> "$statedir/registry.tmp";
+ mv -f "$statedir/registry.tmp" "$statedir/registry"
+ set -e
+ else
+ echo "egrep -v \"[[:space:]]${real_conf_file_re}$\" \"$statedir/registry\" \\"
+ echo " $statedir/registry.tmp || true"
+ echo "echo \"$pkg $real_conf_file\" >> \"$statedir/registry.tmp\""
+ echo "mv -f $statedir/registry.tmp $statedir/registry"
+ fi
+}
+
+
+usageversion () {
+ cat >&2 <<END
+Debian GNU/Linux $progname $pversion.
+ Copyright (C) 2002-2006 Manoj Srivastava.
+This is free software; see the GNU General Public Licence for copying
+conditions. There is NO warranty.
+
+Usage: $progname [options] package_name path_for_configuration_file
+Options:
+ -h, --help print this message
+ -f --force Force the association, even if another package
+ used to own the configuration file.
+ -d [n], --debug [n] Set the Debug level to N
+ -n, --no-action Dry run. No action is actually taken.
+ -v, --verbose Make the script verbose
+ -p, --purge Remove any reference to the package/file association
+ from the records
+ --state-dir bar Set the state directory to bar instead of the
+ default '/var/lib/ucf'. Used mostly for testing.
+END
+
+}
+
+######################################################################
+######## #########
+######## Command line args #########
+######## #########
+######################################################################
+#
+# Long term variables#
+#
+docmd='YES'
+action='withecho'
+action=
+DEBUG=0
+VERBOSE=''
+statedir='/var/lib/ucf';
+THREEWAY=
+
+# Note that we use `"$@"' to let each command-line parameter expand to a
+# separate word. The quotes around `$@' are essential!
+# We need TEMP as the `eval set --' would nuke the return value of getopt.
+TEMP=`getopt -a -o hd::D::fnvp -n "$progname" \
+ --long help,debug::,DEBUG::,force,no-action,purge,verbose,state-dir: \
+ -- "$@"`
+
+if [ $? != 0 ] ; then
+ echo "Error handling options.Terminating..." >&2 ;
+ exit 1 ;
+fi
+
+# Note the quotes around `$TEMP': they are essential!
+eval set -- "$TEMP"
+
+while true ; do
+ case "$1" in
+ -h|--help) usageversion; exit 0 ;;
+ -n|--no-action) action='echo'; docmd='NO'; shift ;;
+ -v|--verbose) VERBOSE=1; shift ;;
+ -f|--force) FORCE=1; shift ;;
+ --state-dir) opt_state_dir="$2"; shift 2 ;;
+ -D|-d|--debug|--DEBUG)
+ # d has an optional argument. As we are in quoted mode,
+ # an empty parameter will be generated if its optional
+ # argument is not found.
+ case "$2" in
+ "") setq DEBUG 1 "The Debug value"; shift 2 ;;
+ *) setq DEBUG "$2" "The Debug value"; shift 2 ;;
+ esac ;;
+ -p|--purge) PURGE=YES; shift ;;
+ --) shift ; break ;;
+ *) echo >&2 "$progname: Internal error!" ; exit 1 ;;
+ esac
+done
+# Need to run as root, or else the
+if test $(id -u) != 0; then
+ if [ "$docmd" = "YES" ]; then
+ echo "$progname: Need to be run as root." >&2
+ echo "$progname: Setting up no action mode." >&2
+ action='echo';
+ docmd='NO';
+ fi
+fi
+
+if [ $# != 2 ]; then
+ echo >&2 "$progname: *** ERROR: Need exactly two arguments, got $#";
+ echo >&2 ""
+ usageversion;
+ exit 3 ;
+fi
+
+# We have here a configuration file, which can be a symlink, and may
+# contain characters that are unsafe in regular expressions
+setq pkg "$1" "The Package name";
+setq conf_file "$2" "The Configuration file";
+setq real_conf_file "$(readlink -q -m $conf_file)" "The (real) Configuration file";
+
+pkg_re=$(echo $pkg | sed -e 's,+,\\+,')
+conf_file_re=$(echo $conf_file | sed -e 's,+,\\+,')
+real_conf_file_re=$(echo $real_conf_file | sed -e 's,+,\\+,')
+
+case $conf_file_re in
+ /*)
+ : echo fine
+ ;;
+ *)
+ echo >&2 "$progname: Need a fully qualified path for the file \"$conf_file\""
+ # Don't exit with an error for etch'
+ exit 0;
+esac
+
+# Load site defaults and over rides.
+if [ -f /etc/ucf.conf ]; then
+ . /etc/ucf.conf
+fi
+
+# Command line, env variable, config file, or default
+if [ ! "x$opt_state_dir" = "x" ]; then
+ setq statedir "$opt_state_dir" "The State directory"
+elif [ ! "x$UCF_STATE_DIR" = "x" ]; then
+ setq statedir "$UCF_STATE_DIR" "The State directory"
+elif [ ! "x$conf_state_dir" = "x" ]; then
+ setq statedir "$conf_state_dir" "The State directory"
+else
+ setq statedir '/var/lib/ucf' "The State directory"
+fi
+
+# VERBOSE of 0 is supposed to be the same as not setting VERBOSE
+if [ "X$VERBOSE" = "X0" ]; then
+ VERBOSE=''
+fi
+
+#
+if [ -e "$statedir/registry" -a ! -w "$statedir/registry" ]; then
+ echo >&2 "$progname: do not have write privilege to the registry data"
+ if [ "X$docmd" = "XYES" ]; then
+ exit 1;
+ fi
+fi
+
+# test and see if this file exists in the database
+if [ ! -d "$statedir" ]; then
+ mkdir -p "$statedir"
+fi
+
+if [ ! -f "$statedir/registry" ]; then
+ touch "$statedir/registry"
+fi
+
+
+if [ "X$VERBOSE" != "X" ]; then
+ echo >&2 "$progname: The registry exists"
+fi
+
+# sanity check
+count=$(egrep --count "[[:space:]]${real_conf_file_re}$" "$statedir/registry") || true
+
+if [ "$count" -ge 2 ]; then
+ echo >&2 "$progname: Corrupt registry: Duplicate entries for ${conf_file}";
+ egrep "[[:space:]]${real_conf_file_re}$" "$statedir/registry";
+ exit $count;
+fi
+
+if [ "X$PURGE" != "X" ]; then
+ purge_from_registry
+else
+ replace_in_registry
+fi
+
+
+exit 0;
diff --git a/ucfr.1 b/ucfr.1
new file mode 100644
index 0000000..2d17b57
--- /dev/null
+++ b/ucfr.1
@@ -0,0 +1,157 @@
+.\" -*- Mode: Nroff -*-
+.\" ucfr.1 ---
+.\" Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com )
+.\" Created On : Tue Apr 11 13:58:23 2006
+.\" Created On Node : glaurung.internal.golden-gryphon.com
+.\" Last Modified By : Manoj Srivastava
+.\" Last Modified On : Tue Apr 11 14:43:23 2006
+.\" Last Machine Used: glaurung.internal.golden-gryphon.com
+.\" Update Count : 14
+.\" Status : Unknown, Use with caution!
+.\" HISTORY :
+.\" Description :
+.\"
+.\" arch-tag: f2f569c2-5b54-4e5d-83f0-d2a39e103ecb
+.\"
+.\" Copyright (c) 2006 Manoj Srivastava <srivasta@debian.org>
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+.\" 02111-1307, USA.
+.\"
+.TH UCFR 1 "Apr 11 2006" "Debian" "Debian GNU/Linux manual"
+.SH NAME
+ucfr \- Update Configuration File Registry: associate packages with configuration files
+.SH SYNOPSIS
+.B ucfr
+.RI [ options "] "
+.I <Package>
+.I <Path to configuration file>
+.SH DESCRIPTION
+Where
+.I Package
+is the package associated with the configuration file (and, in some
+sense, its owner), and
+.I Path to configuration file
+is the full path to the location (usually under /etc) where the
+configuration file lives, and is potentially modified by the end
+user. Please note that usually this means that we register actual
+files, and not symbolic links to files.
+.B ucfr
+will follow symbolic links and register the real file, and not the
+symbolic link.
+.PP
+This script maintains an association between configuration files and
+packages, and is meant to help provide facilities that
+.I dpkg
+provides conffiles for configuration files and not shipped in a
+.B Debian
+package, but handled by the postinst by
+.I ucf
+instead. This script is idempotent, associating a package to a file
+multiple times is not an error. It is normally an error to try to
+associate a file which is already associated with another package, but
+this can be over ridden by using the
+.I \-\-force
+option.
+.SH OPTIONS
+.TP
+.B "\-h, \-\-help"
+Print a short usage message
+.TP
+.B "\-n, \-\-no\-action"
+Dry run. Print the actions that would be taken if the script is
+invoked, but take no action.
+.TP
+.B "\-d [n], \-\-debug [n]"
+Set the debug level to the (optional) level
+.I n
+(n defaults to 1). This turns on copious debugging information.
+.TP
+.B "\-p, \-\-purge"
+Removes all vestiges of the association between the named package and
+the configuration file from the registry. The association must already
+exist; if the configuration file is associated with some other
+package, an error happens, unless the option
+.I \-\-force
+is also given. In that case, the any associations for the
+configuration file are removed from the registry, whether or not the
+package name matches. This action is idempotent, asking for an
+association to be purged multiple times does not result in an error,
+since attempting to remove an non-existent association is silently
+ignored unless the
+.I \-\-verbose
+option is used (in which case it just issues a diagnostic).
+.TP
+.B "\-v, \-\-verbose"
+Make the script be very verbose about setting internal variables.
+.TP
+.B "\-f, \-\-force"
+This option forces operations requested even if the configuration file
+in consideration is owned by another package. This allows a package to
+.I "hijack"
+a configuration file from another package, or to purge the
+association between the file and some other package in the registry.
+.TP
+.B "\-\-state\-dir /path/to/dir"
+Set the state directory to /path/to/dir instead of the default
+.I /var/lib/ucf.
+Used mostly for testing.
+.SH USAGE
+The most common case usage is pretty simple: a single line invocation
+in the postinst on configure, and another single line in the postrm to
+tell
+.B ucfr
+to forget about the association with the configuration file on purge
+(using the \-\-purge option) is all that is needed (assuming ucfr is
+still on the system).
+.SH FILES
+.I /var/lib/ucf/registry,
+and
+.I /var/lib/ucf/registry.X,
+where
+.I X
+is a small integer, where previous versions of the registry are
+stored.
+.PP
+.I /etc/ucf.conf
+.SH EXAMPLES
+If the package
+.I foo
+wants to use ucfr to associate itself with a configuration file
+.I foo.conf,
+a simple invocation of ucfr in the postinst file is all that is
+needed:
+.PP
+.B ucfr
+.I foo
+.I /etc/foo.conf
+.PP
+On purge, one should tell ucf to forget about the file (see detailed
+examples in /usr/share/doc/examples):
+.PP
+.B ucfr
+.I \-\-purge
+.I foo
+.I /etc/foo.conf
+.SH "SEE ALSO"
+ucf(1), ucf.conf(5).
+.SH AUTHOR
+This manual page was written Manoj Srivastava <srivasta@debian.org>,
+for the Debian GNU/Linux system.