ucf-3.0027+nmu1/0000755000000000000000000000000012164152314010123 5ustar ucf-3.0027+nmu1/ucfr.10000644000000000000000000001225212164152314011146 0ustar .\" -*- 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 .\" .\" 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 .I .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. .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 , for the Debian GNU/Linux system. ucf-3.0027+nmu1/ucfr0000755000000000000000000002433212164152314011014 0ustar #! /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:]]${safe_conf_file}$" "$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:]]${safe_conf_file}$ $statedir/registry >\\" echo " $statedir/registry.tmp || true"; fi #echo "egrep -v [[:space:]]${safe_conf_file}$ $statedir/registry" egrep -v "[[:space:]]${safe_conf_file}$" "$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:]]${safe_conf_file}$" "$statedir/registry" | \ awk '{print $1;}' ); if [ "$pkg" != "$old_pkg" ]; then if [ "X$FORCE" = "X" ]; then echo >&2 "$progname: Attempt from package $pkg to take ${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:]]${safe_conf_file}$\" \"$statedir/registry\" \\" echo " $statedir/registry.tmp || true" echo "echo \"$pkg $conf_file\" >> \"$statedir/registry.tmp\"" echo "mv -f $statedir/registry.tmp $statedir/registry" fi egrep -v "[[:space:]]${safe_conf_file}$" "$statedir/registry" > \ "$statedir/registry.tmp" || true; echo "$pkg $conf_file" >> "$statedir/registry.tmp"; mv -f "$statedir/registry.tmp" "$statedir/registry" set -e else echo "egrep -v \"[[:space:]]${safe_conf_file}$\" \"$statedir/registry\" \\" echo " $statedir/registry.tmp || true" echo "echo \"$pkg $conf_file\" >> \"$statedir/registry.tmp\"" echo "mv -f $statedir/registry.tmp $statedir/registry" fi } usageversion () { cat >&2 <&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 setq pkg "$1" "The Package name"; setq conf_file "$2" "The Configuration file"; safe_pkg=$(echo $pkg | sed -e 's,+,\\+,') safe_conf_file=$(echo $conf_file | sed -e 's,+,\\+,') case $safe_conf_file in /*) : echo fine ;; *) echo >&2 "$progname: Need a fully qualified path for the file \"$safe_conf_file\"" # Don't exit with an error for etch' exit 0; esac temp=$safe_conf_file setq safe_conf_file "$(readlink -q -m $temp)" "The configuration file"; # 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:]]${safe_conf_file}$" "$statedir/registry") || true if [ "$count" -ge 2 ]; then echo >&2 "$progname: Corrupt registry: Duplicate entries for ${conf_file}"; egrep "[[:space:]]${safe_conf_file}$" "$statedir/registry"; exit $count; fi if [ "X$PURGE" != "X" ]; then purge_from_registry $pkg $conf_file; else replace_in_registry $pkg $conf_file; fi exit 0; ucf-3.0027+nmu1/ucfq.10000644000000000000000000001734112164152314011151 0ustar .\" -*- 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 .\" .\" 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 .SH "COPYRIGHT AND LICENSE" This script is a part of the Ucf package, and is .PP Copyright (c) 2006 Manoj Srivastava .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 ucf-3.0027+nmu1/ucfq0000755000000000000000000004564712164152314011027 0ustar #!/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 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 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 instead of the default C. 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 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 using C. =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 is present, then the output will be compact. The parameters B and B 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 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, 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 () { 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 () { 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 is present, then the output will be compact. The parameters B and B 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 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 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 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 () { 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 is present, then the output will be compact. The parameters B and B 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 =head1 COPYRIGHT AND LICENSE This script is a part of the Ucf package, and is Copyright (c) 2006 Manoj Srivastava 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__ ucf-3.0027+nmu1/ucf.conf.50000644000000000000000000001037712164152314011722 0ustar .\" -*- 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 .\" .\" 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 , for the Debian GNU/Linux system. ucf-3.0027+nmu1/ucf.conf0000644000000000000000000000235412164152314011553 0ustar # # 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. ucf-3.0027+nmu1/ucf.10000644000000000000000000003345512164152314010774 0ustar .\" -*- 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 .\" .\" 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 .I .PP .B ucf .RI [ options "] " .I \-\-purge .I .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. 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/ 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). 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 .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 .md5sum.d, which should contain any number of files, each containing a single line, namely, the md5sum of a previous version of .B . 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 .md5sum.d/default exists, or if there is a line corresponding to a .I default file in .B .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 .md5sum, or the directory .B .md5sum.d does not exist, or none of the md5sums match, we test the installed .I file to see whether it is the same as the .I . 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 to its destination, .I . .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 .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//, for the Debian GNU/Linux system. ucf-3.0027+nmu1/ucf0000755000000000000000000011366012164152314010635 0ustar #!/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/ 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//-init.el), and dest file # (/etc/emacs21/site-stard.d/50-init.el)), and it should do the rest. # # make sure we exit on error set -e # set the version and revision progname="`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 <&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 <&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 \ <&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 "even though the files differ, since you asked for it" 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 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 < 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 <&2 <&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 &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 &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; ucf-3.0027+nmu1/lcf.10000644000000000000000000000575312164152314010763 0ustar .\" -*- 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 .\" .\" 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 .I .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 , for the Debian GNU/Linux system. ucf-3.0027+nmu1/lcf0000755000000000000000000001720412164152314010621 0ustar #!/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 <&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 <&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; ucf-3.0027+nmu1/examples/0000755000000000000000000000000012164152314011741 5ustar ucf-3.0027+nmu1/examples/postrm0000644000000000000000000000662312164152314013217 0ustar #! /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 ucf-3.0027+nmu1/examples/postinst0000644000000000000000000001126312164152314013552 0ustar #! /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" = ""; 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 ucf-3.0027+nmu1/examples/ChangeLog0000644000000000000000000000035212164152314013513 0ustar 2007-04-17 Manoj Srivastava * 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. ucf-3.0027+nmu1/debian/0000755000000000000000000000000012164152314011345 5ustar ucf-3.0027+nmu1/debian/ucf.preinst0000755000000000000000000000576712164152314013552 0ustar #! /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 ucf-3.0027+nmu1/debian/ucf.postrm0000755000000000000000000001377112164152314013404 0ustar #! /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: # * `remove' # * `purge' # * `upgrade' # * `failed-upgrade' # * `abort-install' # * `abort-install' # * `abort-upgrade' # * `disappear' overwrit>r> # 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 ucf-3.0027+nmu1/debian/ucf.postinst0000755000000000000000000001724112164152314013737 0ustar #! /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: # * `configure' # * `abort-upgrade' # * `abort-remove' `in-favour' # # * `abort-deconfigure' `in-favour' # `removing' # # 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" = ""; 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 ucf-3.0027+nmu1/debian/ucf.lintian-overrides0000644000000000000000000000010212164152314015473 0ustar ucf: no-debconf-config ucf: debconf-is-not-a-registry usr/bin/ucf ucf-3.0027+nmu1/debian/templates0000644000000000000000000000415512164152314013273 0ustar # 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 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 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. ucf-3.0027+nmu1/debian/source/0000755000000000000000000000000012164152314012645 5ustar ucf-3.0027+nmu1/debian/source/format0000644000000000000000000000001512164152314014054 0ustar 3.0 (native) ucf-3.0027+nmu1/debian/rules0000755000000000000000000000003512164152314012423 0ustar #!/usr/bin/make -f %: dh $@ ucf-3.0027+nmu1/debian/po/0000755000000000000000000000000012164152314011763 5ustar ucf-3.0027+nmu1/debian/po/vi.po0000644000000000000000000001100312164152314012734 0ustar # Vietnamese translation for UCF. # Copyright © 2009 Free Software Foundation, Inc. # Clytie Siddall , 2005-2009. # msgid "" msgstr "" "Project-Id-Version: ucf 3.0023\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2009-10-14 19:51+0930\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \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 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ộ." #. 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." ucf-3.0027+nmu1/debian/po/templates.pot0000644000000000000000000000621712164152314014513 0ustar # 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 , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: 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 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 "" ucf-3.0027+nmu1/debian/po/sv.po0000644000000000000000000001021412164152314012751 0ustar # Swedish translation for ucf. # Copyright (C) 2009 Martin Bagge # This file is distributed under the same license as the ucf package. # # Martin Bagge , 2009. # Daniel Nylander , 2007. msgid "" msgstr "" "Project-Id-Version: ucf 2.002\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2009-10-13 18:38+0100\n" "Last-Translator: Martin Bagge \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Swedish\n" "X-Poedit-Country: Sweden\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 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." #. 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." ucf-3.0027+nmu1/debian/po/sk.po0000644000000000000000000001020212164152314012733 0ustar # 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 , 2011. # msgid "" msgstr "" "Project-Id-Version: ucf 3.0025+nmu2\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2011-08-27 11:52+0200\n" "Last-Translator: Slavko \n" "Language-Team: Slovak \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" #. 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 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á." #. 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." ucf-3.0027+nmu1/debian/po/ru.po0000644000000000000000000001136012164152314012752 0ustar # translation of ru.po to Russian # This file is distributed under the same license as the PACKAGE package. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. # # Yuri Kozlov , 2006, 2007. # Yuri Kozlov , 2009. msgid "" msgstr "" "Project-Id-Version: ucf 3.0023\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2009-10-13 18:02+0400\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\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 of configuration file ${FILE} is available, but the version " "installed currently has been locally modified." msgstr "" "Доступна новая версия файла настройки ${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}' содержит элементы, которые не дают " "объединить файлы настройки." ucf-3.0027+nmu1/debian/po/pt_BR.po0000644000000000000000000001134712164152314013337 0ustar # # 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. # Flamarion Jorge , 2010. # msgid "" msgstr "" "Project-Id-Version: ucf\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2010-08-22 12:12-0300\n" "Last-Translator: Flamarion Jorge \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\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" "pt_BR utf-8\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." msgstr "" "Uma nova versão 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 "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}?" ucf-3.0027+nmu1/debian/po/pt.po0000644000000000000000000001043412164152314012750 0ustar # 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 # Bruno Queiros , 2007. # Américo Monteiro , 2010. # msgid "" msgstr "" "Project-Id-Version: ucf 3.0025\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2010-07-11 23:46+0100\n" "Last-Translator: Américo Monteiro \n" "Language-Team: Portuguese \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.0\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 of configuration file ${FILE} is available, but the version " "installed currently has been locally modified." msgstr "" "Uma nova versão do ficheiro de configuração ${FILE} está disponível, mas a " "versão 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." ucf-3.0027+nmu1/debian/po/pl.po0000644000000000000000000001146612164152314012746 0ustar # 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 , 2007. # Michał Kułach , 2012. msgid "" msgstr "" "Project-Id-Version: ucf3002\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2012-02-25 16:25+0100\n" "Last-Translator: Michał Kułach \n" "Language-Team: Polish \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.2\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." msgstr "" "Dostępna jest nowa wersja 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." #, 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}:" ucf-3.0027+nmu1/debian/po/nl.po0000644000000000000000000001017512164152314012740 0ustar # 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 , 2006. # Jeroen Schot , 2011. # msgid "" msgstr "" "Project-Id-Version: ucf_3.0025\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2011-04-14 11:43+0200\n" "Last-Translator: Jeroen Schot \n" "Language-Team: Debian l10n Dutch \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 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." #. 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." ucf-3.0027+nmu1/debian/po/ja.po0000644000000000000000000001104412164152314012715 0ustar # # 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: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2009-10-15 22:11+0900\n" "Last-Translator: Kenshi Muto \n" "Language-Team: Japanese \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 of configuration file ${FILE} is available, but the version " "installed currently has been locally modified." msgstr "" "設定ファイル ${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 ウェイマージ中に競合を発見しました" #. 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}' に設定ファイルのマージに失敗した記録が" "保持されています。" ucf-3.0027+nmu1/debian/po/it.po0000644000000000000000000000777112164152314012753 0ustar # translation of ucf_1.18_templates.po to italian # Copyright Luca Bruno , 2005-2010. msgid "" msgstr "" "Project-Id-Version: ucf_1.18_templates\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2007-09-19 01:10-0500\n" "Last-Translator: Luca Bruno \n" "Language-Team: Italian \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 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." #. 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." ucf-3.0027+nmu1/debian/po/gl.po0000644000000000000000000001052612164152314012731 0ustar # Galician translation of ucf's debconf templates. # This file is distributed under the same license as the ucf package. # # Jacobo Tarrio , 2006, 2007. # Marce Villarino , 2009. msgid "" msgstr "" "Project-Id-Version: ucf\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2009-11-05 20:38+0100\n" "Last-Translator: Marce Villarino \n" "Language-Team: Galician \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 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." #. 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." #, 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}?" ucf-3.0027+nmu1/debian/po/fr.po0000644000000000000000000001101512164152314012730 0ustar # Translation of ucf debconf templates to French # Copyright (C) 2007-2009 Debian French l10n team # This file is distributed under the same license as the ucf package. # # Translators: # # Eric Madesclair , 2007. # Christian Perrier , 2009. msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2009-10-13 18:06+0200\n" "Last-Translator: Christian Perrier \n" "Language-Team: French \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.0\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 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." #. 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é." #, 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} :" ucf-3.0027+nmu1/debian/po/fi.po0000644000000000000000000000763212164152314012731 0ustar # Esko Arajärvi , 2009. msgid "" msgstr "" "Project-Id-Version: ucf_3.003\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2009-10-13 21:50+0300\n" "Last-Translator: Esko Arajärvi \n" "Language-Team: Finnish \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 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." #. 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ä." ucf-3.0027+nmu1/debian/po/eu.po0000644000000000000000000001073212164152314012737 0ustar # translation of ucf_3.0024_eu.po to # translation of eu.po to # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Piarres Beobide , 2007, 2009. # Iñaki Larrañaga Murgoitio , 2009. msgid "" msgstr "" "Project-Id-Version: ucf_3.0024_eu\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2009-10-29 12:11+0100\n" "Last-Translator: Iñaki Larrañaga Murgoitio \n" "Language-Team: Basque \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: KBabel 1.11.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 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." #. 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 "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?" ucf-3.0027+nmu1/debian/po/es.po0000644000000000000000000001232412164152314012734 0ustar # 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 , 2004 # - Updated # Javier Fernandez-Sanguino , 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: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2010-08-08 01:53+0200\n" "Last-Translator: Javier Fernandez-Sanguino \n" "Language-Team: Debian Spanish \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 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." #. 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." #, 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}?" ucf-3.0027+nmu1/debian/po/de.po0000644000000000000000000001111012164152314012705 0ustar # translation of ucf_3.0023_de.po 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 , 2004-2009. msgid "" msgstr "" "Project-Id-Version: ucf_3.0023_de\n" "Report-Msgid-Bugs-To: ucf@packages.debian.org\n" "POT-Creation-Date: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2009-10-30 22:16+0100\n" "Last-Translator: Erik Schanze \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n != 1);\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 Paket-Betreuers 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 installierte Version behalten" #. 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-Differenz verfügbarer Versionen der Datei 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 of configuration file ${FILE} is available, but the version " "installed currently has been locally modified." msgstr "" "Eine neue Version 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 "Bei der 3-Wege-Vereinigung wurden Konflikte festgestellt" #. 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 beheben " "Sie diese selbst in der Datei »${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 "" "Die fehlgeschlagene Vereinigung der Konfigurationsdatei wurde in der Datei " "»${dest_file}.${ERR_SUFFIX}« abgespeichert." ucf-3.0027+nmu1/debian/po/da.po0000644000000000000000000001033712164152314012713 0ustar # Danish translation ucf. # This file is distributed under the same license as the ucf package. # Copyright (C) 2010 ucf & nedenstående oversættere. # Claus Hindsgaul , 2005. # Claus Hindsgaul , 2007. # Joe Hansen , 2010. # # 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: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2010-07-07 17:34+0000\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \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 "installér 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 of configuration file ${FILE} is available, but the version " "installed currently has been locally modified." msgstr "" "Der er kommet en ny version af opsætningsfilen ${FILE}, men din 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." ucf-3.0027+nmu1/debian/po/cs.po0000644000000000000000000001047712164152314012741 0ustar # # 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: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2009-10-13 18:53+0200\n" "Last-Translator: Miroslav Kure \n" "Language-Team: Czech \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 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." #. 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." ucf-3.0027+nmu1/debian/po/ca.po0000644000000000000000000001013512164152314012706 0ustar # ucf (debconf) translation to Catalan. # Copyright © 2004, 2008, 2009, 2010 Free Software Foundation, Inc. # Aleix Badia i Bosch , 2004. # Jordi Mallach , 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: 2009-10-13 08:14-0500\n" "PO-Revision-Date: 2010-07-07 09:53+0200\n" "Last-Translator: Jordi Mallach \n" "Language-Team: Catalan \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 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." #. 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ó." ucf-3.0027+nmu1/debian/po/POTFILES.in0000644000000000000000000000004412164152314013536 0ustar [type: gettext/rfc822deb] templates ucf-3.0027+nmu1/debian/po/ChangeLog0000644000000000000000000000043412164152314013536 0ustar 2006-04-11 Manoj Srivastava * cs.po: srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-18 New translation 2006-01-23 Manoj Srivastava * de.po: srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-14 New translation ucf-3.0027+nmu1/debian/copyright0000644000000000000000000000205312164152314013300 0ustar This is the Debian GNU/Linux packa for ucf. ucf is Copyright (C) 2002, 2003, 2003, 2004, 2005, 2006 Manoj Srivastava 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 . 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 arch-tag: d4250e44-a0e0-4ee0-adb9-2bd74f6eeb27 ucf-3.0027+nmu1/debian/control0000644000000000000000000000356012164152314012754 0ustar Source: ucf VCS-Git: git://anonscm.debian.org/users/srivasta/debian/ucf.git VCS-Browser: http://git.debian.org/?p=users/srivasta/debian/ucf.git Section: utils Priority: standard Maintainer: Manoj Srivastava Build-Depends-Indep: po-debconf, gettext, debhelper (>= 9.0.0) Standards-Version: 3.9.4.0 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. ucf-3.0027+nmu1/debian/compat0000644000000000000000000000000212164152314012543 0ustar 9 ucf-3.0027+nmu1/debian/changelog0000644000000000000000000016367712164152314013243 0ustar 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 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 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 * 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 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 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 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 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 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 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 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 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 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 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 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 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 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 * [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 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 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 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 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 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 -- Manoj Srivastava 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 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 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 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 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 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 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 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 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 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 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 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 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 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 Sun, 25 Feb 2007 13:27:36 -0600 ucf (2.0019) unstable; urgency=medium * Bug fix: ""ucfr: should prepend it's name to error messages/warnings"", 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 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 means a full path. (Closes: #401899). -- Manoj Srivastava 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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: "awlays"", thanks to A Costa (Closes: #306736). * Bug fix: "'man lcf' typos: "algoriothm" and "directrory"", thanks to A Costa (Closes: #306735). -- Manoj Srivastava 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 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 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 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 Fri, 11 Feb 2005 01:36:25 -0600 ucf (1.13) unstable; urgency=low * Bug fix: ""The cache file is $cached_file" should be printed only in verbose mode", thanks to Florent Rougon (Closes: #279350). -- Manoj Srivastava 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 Mon, 1 Nov 2004 19:44:00 -0600 ucf (1.11) unstable; urgency=medium * Bug fix: "ucf creates Destination on "registration" 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 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 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 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 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 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 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 . 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 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 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 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 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 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 , ucf should now be able to handle file names with spaces in them. Touch wood. -- Manoj Srivastava 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 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 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 did the heavy lifting on this one and sent in a tested, working patch. (Closes: #213080). -- Manoj Srivastava 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 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 Sun, 22 Feb 2004 09:49:20 -0600 ucf (0.28) unstable; urgency=low Joey Hess * 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 Sun, 10 Nov 2002 23:09:22 -0600 ucf (0.09) unstable; urgency=low * Umm. use egrep when you mean egrep. -- Manoj Srivastava 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 . 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 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 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 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 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 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 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 Tue, 12 Feb 2002 04:17:38 -0600 ucf (0.01) unstable; urgency=low * New version of the package. -- Manoj Srivastava Tue, 5 Feb 2002 22:25:42 -0600 ucf-3.0027+nmu1/debian/ChangeLog0000644000000000000000000000523412164152314013123 0ustar 2007-11-30 Manoj Srivastava * 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 * 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 * 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 * copyright: srivasta@debian.org--etch/debian-dir--ucf--2.0--patch-18 Updated the years for copyright. 2006-03-12 Manoj Srivastava * 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 * 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 * 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 * 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 * 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. ucf-3.0027+nmu1/Makefile0000644000000000000000000000500012164152314011556 0ustar ############################ -*- Mode: Makefile -*- ########################### ## Makefile --- ## 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 ucf-3.0027+nmu1/ChangeLog0000644000000000000000000001751212164152314011703 0ustar 2008-02-21 Manoj Srivastava * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * ucf.1 (needed): srivasta@debian.org--etch/ucf--devel--2.0--patch-15 Typo fix. 2006-08-20 Manoj Srivastava * 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 * 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 * 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 * 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 * examples/postrm: srivasta@debian.org--etch/ucf--devel--2.0--patch-2 only use ucf if it is available 2005-08-08 Manoj Srivastava * 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 * 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. ucf-3.0027+nmu1/COPYING0000644000000000000000000004317312164152314011166 0ustar 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. Copyright (C) 19yy 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. , 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.