Cleanup: don't leak build directory information via SHLIB_ENV
in makedefs.out. Files: Makefile.in, conf/postfix-files.
+
+20140626
+
+ Cleanup: construction debris. Files: Makefile.in,
+ conf/postfix-script.
+
+ Cleanup: replace expanded MAIL_VERSION with $mail_version
+ in main.cf installation parameter settings, to permit safe
+ upgrade of a running mail system. File: postfix-install.
+
+ Cleanup: replace expanded MAIL_VERSION with $mail_version
+ in built-in default installation parameter settings, for
+ consistency with main.cf. File: makedefs, postfix-install,
+ conf/post-install.
+
+ Cleanup: removed $mail_version from the default shlib_directory
+ value. Files: global/mail_params.h, proto/INSTALL.html.
(Specify "make makefiles shared=no" to explicitly disable Postfix shared-
library support).
-This installs shared libraries in $shlib_directory, typically, /usr/lib/
-postfix/version or /usr/local/lib/postfix/version, with names like libpostfix-
-name.so, where the name is a source-code directory name such as "util" or
-"global", and the version is the Postfix release version: x.y.z for stable
-releases, x.y-date for snapshot (development) releases, or x.y-date-nonprod for
-non-production releases.
+This installs shared libraries in $shlib_directory, typically /usr/lib/postfix
+or /usr/local/lib/postfix, with file names libpostfix-name.so, where the name
+is a source-code directory name such as "util" or "global", and the version is
+the Postfix release version: x.y.z for stable releases, x.y-date for snapshot
+(development) releases, or x.y-date-nonprod for non-production releases.
See section 4.3.3 "Customizing Postfix shared libraries and database plugins"
-below for how to customize the Postfix shared-library location and version.
+below for how to customize the Postfix shared-library location and version,
+including support to upgrade a running mail system.
4.3.2 Turning on Postfix database-plugin support
If you intend to upgrade Postfix without stopping the mail system, then you
should append the Postfix release version to the shlib_directory pathname, to
-eliminate the possibility that programs from the old Postfix version will link
-with files from the new Postfix version. For example:
+eliminate the possibility that programs will link with shared libraries or
+database plugins from the wrong Postfix version. For example:
$ make makefiles shared=yes \
shlib_directory=/usr/local/lib/postfix/MAIL_VERSION ...
meta/postfix-files: conf/postfix-files conf/makedefs.out Makefile
rm -f $@
- (if [ "${SHLIB_DIR_OVERRIDE}" = "no" -o "${SHLIB_DIR}" = "" ]; then \
+ (if [ "${SHLIB_DIR}" = "no" -o "${SHLIB_DIR}" = "" ]; then \
sed -e '/^\$$shlib_directory/d' \
-e '/dynamicmaps.cf/d' conf/postfix-files; \
- elif [ "${PLUGIN_LD}" = "" ]; then \
+ elif [ "${PLUGIN_LD}" = ":" -o "${PLUGIN_LD}" = "" ]; then \
sed -e '/dynamicmaps.cf/d' \
-e '/^\$$shlib_directory\/\$${LIB_PREFIX}/d' \
conf/postfix-files | $(EXPAND); \
(Specify "make makefiles shared=no" to explicitly disable Postfix shared-
library support).
-This installs shared libraries in $shlib_directory, typically, /usr/lib/
-postfix/version or /usr/local/lib/postfix/version, with names like libpostfix-
-name.so, where the name is a source-code directory name such as "util" or
-"global", and the version is the Postfix release version: x.y.z for stable
-releases, x.y-date for snapshot (development) releases, or x.y-date-nonprod for
-non-production releases.
+This installs shared libraries in $shlib_directory, typically /usr/lib/postfix
+or /usr/local/lib/postfix, with file names libpostfix-name.so, where the name
+is a source-code directory name such as "util" or "global", and the version is
+the Postfix release version: x.y.z for stable releases, x.y-date for snapshot
+(development) releases, or x.y-date-nonprod for non-production releases.
See section 4.3.3 "Customizing Postfix shared libraries and database plugins"
-below for how to customize the Postfix shared-library location and version.
+below for how to customize the Postfix shared-library location and version,
+including support to upgrade a running mail system.
4\b4.\b.3\b3.\b.2\b2 T\bTu\bur\brn\bni\bin\bng\bg o\bon\bn P\bPo\bos\bst\btf\bfi\bix\bx d\bda\bat\bta\bab\bba\bas\bse\be-\b-p\bpl\blu\bug\bgi\bin\bn s\bsu\bup\bpp\bpo\bor\brt\bt
If you intend to upgrade Postfix without stopping the mail system, then you
should append the Postfix release version to the shlib_directory pathname, to
-eliminate the possibility that programs from the old Postfix version will link
-with files from the new Postfix version. For example:
+eliminate the possibility that programs will link with shared libraries or
+database plugins from the wrong Postfix version. For example:
$ make makefiles shared=yes \
shlib_directory=/usr/local/lib/postfix/MAIL_VERSION ...
test "$shlib_directory" = "no" || todo="$shlib_directory $todo"
todo="$meta_directory $todo"
}
+ todo=`echo "$todo" | tr ' ' '\12' | sort -u`
- for dir in `echo "$todo" | tr ' ' '\12' | sort -u`
+ for dir in $todo
do
ls -lLd $dir | (grep " root " >/dev/null ||
$WARN not owned by root: $dir)
test -n "$check_shared_files" && {
todo="$daemon_directory/* $todo"
test "$shlib_directory" = "no" ||
- todo="$shlib_directory/libpostfix* $todo"
+ todo="$shlib_directory/* $todo"
+ todo="$meta_directory/* $todo"
}
+ todo=`echo "$todo" | tr ' ' '\12' | sort -u`
find $todo ! -user root \
-exec $WARN not owned by root: {} \;
todo="$config_directory/."
- test -n "$check_shared_files" && todo="$daemon_directory/. $todo"
- # FIXME don't scan non-Postfix files under /usr/local/lib.
- test "$shlib_directory" = "no" ||
- todo="$shlib_directory/libpostfix* $shlib_directory/postfix* $todo"
+ test -n "$check_shared_files" && {
+ todo="$daemon_directory/. $todo"
+ test "$shlib_directory" = "no" ||
+ todo="$shlib_directory/. $todo"
+ todo="$meta_directory/. $todo"
+ }
+ todo=`echo "$todo" | tr ' ' '\12' | sort -u`
find $todo \
\( -perm -020 -o -perm -002 \) -type f \
<p> (Specify "make makefiles shared=no" to explicitly disable Postfix
shared-library support). </p>
-<p> This installs shared libraries in $<a href="postconf.5.html#shlib_directory">shlib_directory</a>, typically,
-/usr/lib/postfix/<i>version</i> or /usr/local/lib/postfix/<i>version</i>,
-with names like libpostfix-<i>name</i>.so, where the <i>name</i>
-is a source-code directory name such as "util" or "global", and the
-<i>version</i> is the Postfix release version: <i>x.y.z</i> for
-stable releases, <i>x.y</i>-<i>date</i> for snapshot (development)
-releases, or <i>x.y</i>-<i>date</i>-nonprod for non-production
-releases. </p>
+<p> This installs shared libraries in $<a href="postconf.5.html#shlib_directory">shlib_directory</a>, typically
+/usr/lib/postfix or /usr/local/lib/postfix, with file names
+libpostfix-<i>name</i>.so, where the <i>name</i> is a source-code
+directory name such as "util" or "global", and the <i>version</i>
+is the Postfix release version: <i>x.y.z</i> for stable releases,
+<i>x.y</i>-<i>date</i> for snapshot (development) releases, or
+<i>x.y</i>-<i>date</i>-nonprod for non-production releases. </p>
<p> See section 4.3.3 "Customizing Postfix shared libraries and
database plugins" below for how to customize the Postfix shared-library
-location and version.
+location and version, including support to upgrade a running mail
+system. </p>
<h4><a name="dynamicmaps_enable"> 4.3.2 Turning on Postfix
database-plugin support </a></h4>
<p> If you intend to upgrade Postfix without stopping the mail
system, then you should append the Postfix release version to the
<a href="postconf.5.html#shlib_directory">shlib_directory</a> pathname, to eliminate the possibility that programs
-from the old Postfix version will link with files from the new
-Postfix version. For example: </p>
+will link with shared libraries or database plugins from the wrong
+Postfix version. For example: </p>
<blockquote>
<pre>
# command-line arguments. In the specific example above, gmake would
# eat up the "$" and "m" before it even invokes makedefs, and it
# ould replace "'${mail_version}'" and "'$(mail_version)'" with
-# nothing.
+# nothing.
#
-# We could work around this by documenting that $$ must be used (and
-# fix $$ in the case that people use traditional make). But this
-# would be non-intuitive and bad from a usability point of view.
-#
-# We could work around this by documenting that people must pass
-# name=value via the environment instead of the command line, as in
-# "shlib_directory=/some/where/'$mail_version' make makefiles", or
-# that they issue "export" or "setenv" commands depending on their
-# interactive shell. That would be non-intuitive and bad usability.
-#
-# Even if we did any of the above, we would not want to pass the
-# unexpanded $mail_version via CCARGS, because that requires extra
-# quoting with `echo "$parm_val" | sed 's/[$]/\\\\$$/'` which is
-# just too ugly to be portable.
-#
-# The upshot of all this is that we will expand MAIL_VERSION in the
-# "make makefiles parameter=value" command line, and that we pass
-# the expanded text via CCARGS. This is clumsier but cleaner.
+# Requiring people to specify $$ is not a good option. Instead we
+# replace the string MAIL_VERSION in "make makefiles name=value"
+# parameter values with a form that depends on usage context: the
+# actual release version in actual pathnames, the unexpanded
+# $mail_version in main.cf parameter values and built-in default
+# parameter settings.
# Helper function to determine DEF_MAIL_VERSION.
s/\$mail_version/$mail_version/g
"
}
+
+# Helper to invoke the above. global: parm_name, parm_val, cparm_val, CCARGS.
+
+process_input_parameter()
+{
+ case "$parm_val" in
+ *MAIL_VERSION*)
+ cparm_val=`echo "$parm_val"|sed 's/MAIL_VERSION/\\\\$$mail_version/g'`||
+ exit 1
+ parm_val=`expand_MAIL_VERSION "$parm_val"` || exit 1
+ eval ${parm_name}=\""\$parm_val"\";;
+ *) cparm_val="$parm_val";;
+ esac
+ CCARGS="$CCARGS -D$parm_macro=\\\"$cparm_val\\\""
+}
+
# Optionally override installation-parameter default settings.
command_directory_macro=DEF_COMMAND_DIR
eval parm_macro=\"\$${parm_name}_macro\"
case "$parm_val" in
"") ;;
- /*) case "$parm_val" in
- *MAIL_VERSION*)
- parm_val=`expand_MAIL_VERSION "$parm_val"` || exit 1
- eval ${parm_name}=\""\$parm_val"\";;
- esac
- CCARGS="$CCARGS -D$parm_macro=\\\"$parm_val\\\"";;
+ /*) process_input_parameter;;
*) error "$parm_name must specify an absolute path name";;
esac
done
eval parm_macro=\"\$${parm_name}_macro\"
case "$parm_val" in
"") ;;
- /*|no) case "$parm_val" in
- *MAIL_VERSION*)
- parm_val=`expand_MAIL_VERSION "$parm_val"` || exit 1
- eval ${parm_name}=\""\$parm_val"\";;
- esac
- CCARGS="$CCARGS -D$parm_macro=\\\"$parm_val\\\"";;
+ /*|no) process_input_parameter;;
*) error "$parm_name must specify \"no\" or an absolute path name";;
esac
done
eval parm_macro=\"\$${parm_name}_macro\"
case "$parm_val" in
"") ;;
- *) case "$parm_val" in
- *MAIL_VERSION*)
- parm_val=`expand_MAIL_VERSION "$parm_val"` || exit 1
- eval ${parm_name}=\""\$parm_val"\";;
- esac
- CCARGS="$CCARGS -D$parm_macro=\\\"$parm_val\\\"";;
+ *) process_input_parameter;;
esac
done
case "$junk" in
"") eval unset $name;;
esac
- eval : \${$name=\`bin/postconf -c $CONFIG_DIRECTORY -h $name\`} ||
+ eval : \${$name=\`bin/postconf -c $CONFIG_DIRECTORY -hx $name\`} ||
exit 1
done
}
case "$junk" in
"") eval unset $name;;
esac
- eval : \${$name=\`bin/postconf -c conf -d -h $name\`} || exit 1
+ eval : \${$name=\`bin/postconf -c conf -d -hx $name\`} || exit 1
done
# Override settings manually.
# Postfix releases, and software should not suddenly be installed in
# the wrong place when Postfix is being upgraded.
+case "$mail_version" in
+"") mail_version="`bin/postconf -dhx mail_version`" || exit 1
+esac
+
+# Undo MAIL_VERSION expansion. If someone really wants the expanded
+# mail version in main.cf, we're sorry.
+
+for name in $CONFIG_PARAMS sample_directory
+do
+ eval junk=\$$name
+ case "$junk" in
+ *"$mail_version"*)
+ val=`echo "$junk" | sed "s/$mail_version/"'$mail_version/g'` || exit 1
+ eval ${name}='"$val"'
+ esac
+done
+
bin/postconf -c $CONFIG_DIRECTORY -e \
"daemon_directory = $daemon_directory" \
"data_directory = $data_directory" \
<p> (Specify "make makefiles shared=no" to explicitly disable Postfix
shared-library support). </p>
-<p> This installs shared libraries in $shlib_directory, typically,
-/usr/lib/postfix/<i>version</i> or /usr/local/lib/postfix/<i>version</i>,
-with names like libpostfix-<i>name</i>.so, where the <i>name</i>
-is a source-code directory name such as "util" or "global", and the
-<i>version</i> is the Postfix release version: <i>x.y.z</i> for
-stable releases, <i>x.y</i>-<i>date</i> for snapshot (development)
-releases, or <i>x.y</i>-<i>date</i>-nonprod for non-production
-releases. </p>
+<p> This installs shared libraries in $shlib_directory, typically
+/usr/lib/postfix or /usr/local/lib/postfix, with file names
+libpostfix-<i>name</i>.so, where the <i>name</i> is a source-code
+directory name such as "util" or "global", and the <i>version</i>
+is the Postfix release version: <i>x.y.z</i> for stable releases,
+<i>x.y</i>-<i>date</i> for snapshot (development) releases, or
+<i>x.y</i>-<i>date</i>-nonprod for non-production releases. </p>
<p> See section 4.3.3 "Customizing Postfix shared libraries and
database plugins" below for how to customize the Postfix shared-library
-location and version.
+location, including support to upgrade a running mail system safely.
+</p>
<h4><a name="dynamicmaps_enable"> 4.3.2 Turning on Postfix
database-plugin support </a></h4>
<p> If you intend to upgrade Postfix without stopping the mail
system, then you should append the Postfix release version to the
shlib_directory pathname, to eliminate the possibility that programs
-from the old Postfix version will link with files from the new
-Postfix version. For example: </p>
+will link with shared libraries or database plugins from the wrong
+Postfix version. For example: </p>
<blockquote>
<pre>
*/
#define VAR_SHLIB_DIR "shlib_directory"
#ifndef DEF_SHLIB_DIR
-#define DEF_SHLIB_DIR "/usr/lib/postfix/$mail_version"
+#define DEF_SHLIB_DIR "/usr/lib/postfix"
#endif
extern char *var_shlib_dir;
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20140625"
+#define MAIL_RELEASE_DATE "20140626"
#define MAIL_VERSION_NUMBER "2.12"
#ifdef SNAPSHOT