From: Wietse Venema Date: Fri, 27 Jun 2014 05:00:00 +0000 (-0500) Subject: postfix-2.12-20140627 X-Git-Tag: v3.0.0-RC1~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bbe8bc4b5a6216665b8619240cbbdab8fdabe933;p=thirdparty%2Fpostfix.git postfix-2.12-20140627 --- diff --git a/postfix/HISTORY b/postfix/HISTORY index 97e8a92b5..0ed03a52c 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -20029,14 +20029,42 @@ Apologies for any names omitted. 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 the result of MAIL_VERSION expansion 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: replace the result of MAIL_VERSION expansion 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. + + Cleanup: in postfix-script, use find instead of ls to + determine permissions or ownership, and group some checks + with "pathname/." and "pathname/*" into one. Downside: + more warnings will now have "/./" in the middle of a pathname. + File: conf/postfix-script. + + Cleanup: need to evaluate mail_version before evaluating + parameters that may contain $mail_version. File: + global/mail_params.h + + Cleanup: the postmulti command now exercises the postconf + "-x" option to expand $parameter_name in secondary-instance + parameter values. File: postmulti/postmulti.c. + + Cleanup: post-install also needed to replace the result of + MAIL_VERSION expansion with $mail_version, for the same + reasons as postfix-script. Viktor Dukhovni. File: + conf/post-install. + +20140627 + + Bugfix (introduced: 20140626) broken build and broken install + with default shlib_directory. Files: makedefs. + + Bugfix (introduced: 20140627) broken install with default + shlib_directory. Files: conf/post-install. diff --git a/postfix/INSTALL b/postfix/INSTALL index 9dd024ddc..db35fc5a7 100644 --- a/postfix/INSTALL +++ b/postfix/INSTALL @@ -187,13 +187,11 @@ library support). 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. +is a source-code directory name such as "util" or "global". See section 4.3.3 "Customizing Postfix shared libraries and database plugins" -below for how to customize the Postfix shared-library location and version, -including support to upgrade a running mail system. +below for how to customize the Postfix shared-library location, including +support to upgrade a running mail system safely. 4.3.2 Turning on Postfix database-plugin support diff --git a/postfix/README_FILES/INSTALL b/postfix/README_FILES/INSTALL index cba343f41..6fe50e057 100644 --- a/postfix/README_FILES/INSTALL +++ b/postfix/README_FILES/INSTALL @@ -187,13 +187,11 @@ library support). 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. +is a source-code directory name such as "util" or "global". See section 4.3.3 "Customizing Postfix shared libraries and database plugins" -below for how to customize the Postfix shared-library location and version, -including support to upgrade a running mail system. +below for how to customize the Postfix shared-library location, including +support to upgrade a running mail system safely. 44..33..22 TTuurrnniinngg oonn PPoossttffiixx ddaattaabbaassee--pplluuggiinn ssuuppppoorrtt diff --git a/postfix/conf/post-install b/postfix/conf/post-install index f81f6b91d..0c2ca8bb9 100644 --- a/postfix/conf/post-install +++ b/postfix/conf/post-install @@ -424,6 +424,28 @@ POSTCONF="$command_directory/postconf" # Save settings, allowing command line/environment override. +# Undo MAIL_VERSION expansion. If someone really wants the expanded +# mail version in main.cf, we're sorry. + +# Confine side effects from mail_version unexpansion within a subshell. + +(case "$mail_version" in +"") mail_version="`$POSTCONF -dhx mail_version`" || exit 1 +esac + +for name in $MOST_PARAMETERS +do + eval junk=\$$name + case "$junk" in + *"$mail_version"*) + case "$pattern" in + "") pattern=`echo "$mail_version" | sed 's/\./\\\\./g'` || exit 1 + esac + val=`echo "$junk" | sed "s/$pattern/"'$mail_version/g'` || exit 1 + eval ${name}='"$val"' + esac +done + override= for name in $MOST_PARAMETERS do @@ -451,7 +473,7 @@ test -n "$override" && { "shlib_directory = $shlib_directory" \ "meta_directory = $meta_directory" \ || exit 1 -} +} || exit 0) || exit 1 # Use file/directory status information in $meta_directory/postfix-files. diff --git a/postfix/conf/postfix-script b/postfix/conf/postfix-script index de29c18e1..19088a688 100755 --- a/postfix/conf/postfix-script +++ b/postfix/conf/postfix-script @@ -252,60 +252,55 @@ check-fatal) check-warn) # This command is NOT part of the public interface. - todo="$config_directory $queue_directory $queue_directory/pid" - 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` + # Check Postfix root-owned directory owner/permissions. - for dir in $todo - do - ls -lLd $dir | (grep " root " >/dev/null || - $WARN not owned by root: $dir) - done + find $queue_directory/. $queue_directory/pid \ + -prune ! -user root \ + -exec $WARN not owned by root: {} \; - # Some people break Postfix's security model. - ls -lLd $queue_directory | egrep '^.....(w|...w)' >/dev/null && \ - $WARN group or other writable: $queue_directory + find $queue_directory/. $queue_directory/pid \ + -prune \( -perm -020 -o -perm -002 \) \ + -exec $WARN group or other writable: {} \; - todo="$config_directory/*" - 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 ! -user root \ - -exec $WARN not owned by root: {} \; + # Check Postfix root-owned directory tree owner/permissions. todo="$config_directory/." test -n "$check_shared_files" && { - todo="$daemon_directory/. $todo" + todo="$daemon_directory/. $meta_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 \ - -exec $WARN group or other writable: {} \; + find $todo ! -user root \ + -exec $WARN not owned by root: {} \; + + find $todo \( -perm -020 -o -perm -002 \) \ + -exec $WARN group or other writable: {} \; + + # Check Postfix mail_owner-owned directory tree owner/permissions. find $data_directory/. ! -user $mail_owner \ -exec $WARN not owned by $mail_owner: {} \; - ls -lLd $data_directory | egrep '^.....(w|...w)' >/dev/null && \ - $WARN group or other writable: $data_directory + find $data_directory/. \( -perm -020 -o -perm -002 \) \ + -exec $WARN group or other writable: {} \; + + # Check Postfix mail_owner-owned directory tree owner. find `ls -d $queue_directory/* | \ egrep '/(saved|incoming|active|defer|deferred|bounce|hold|trace|corrupt|public|private|flush)$'` \ ! \( -type p -o -type s \) ! -user $mail_owner \ -exec $WARN not owned by $mail_owner: {} \; + # WARNING: this should not descend into the maildrop directory. + # maildrop is the least trusted Postfix directory. + + find $queue_directory/maildrop -prune ! -user $mail_owner \ + -exec $WARN not owned by $mail_owner: $queue_directory/maildrop \; + + # Check Postfix setgid_group-owned directory and file group/permissions. + todo="$queue_directory/public $queue_directory/maildrop" test -n "$check_shared_files" && todo="$command_directory/postqueue $command_directory/postdrop $todo" @@ -319,33 +314,27 @@ check-warn) -prune ! -perm -02111 \ -exec $WARN not set-gid or not owner+group+world executable: {} \; - for name in `ls -d $queue_directory/* | \ - egrep '/(bin|etc|lib|usr)$'` ; \ - do \ - find $name ! -user root \ - -exec $WARN not owned by root: {} \; ; \ - done - - # WARNING: this should not descend into the maildrop directory. - # maildrop is the least trusted Postfix directory. - - find $queue_directory/maildrop/. -prune ! -user $mail_owner \ - -exec $WARN not owned by $mail_owner: $queue_directory/maildrop \; + # Check non-Postfix root-owned directory tree owner/content. for dir in bin etc lib sbin usr do - test -d $dir && find $dir -type f -print | while read path + test -d $dir && { + find $dir ! -user root \ + -exec $WARN not owned by root: $queue_directory/{} \; + + find $dir -type f -print | while read path do - test -f /$path && { - cmp -s $path /$path || - $WARN $queue_directory/$path and /$path differ - } + test -f /$path && { + cmp -s $path /$path || + $WARN $queue_directory/$path and /$path differ + } done + } done find corrupt -type f -exec $WARN damaged message: {} \; - # XXX also: look for weird stuff, weird permissions, etc. + # Check for non-Postfix MTA remnants. test -n "$check_shared_files" -a -f /usr/sbin/sendmail -a \ -f /usr/lib/sendmail && { diff --git a/postfix/html/INSTALL.html b/postfix/html/INSTALL.html index 104f43dc6..e2f818cfb 100644 --- a/postfix/html/INSTALL.html +++ b/postfix/html/INSTALL.html @@ -286,15 +286,12 @@ shared-library support).

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.

+directory name such as "util" or "global".

See section 4.3.3 "Customizing Postfix shared libraries and database plugins" below for how to customize the Postfix shared-library -location and version, including support to upgrade a running mail -system.

+location, including support to upgrade a running mail system safely. +

4.3.2 Turning on Postfix database-plugin support

diff --git a/postfix/html/postfix.1.html b/postfix/html/postfix.1.html index 2a850394f..0453a284c 100644 --- a/postfix/html/postfix.1.html +++ b/postfix/html/postfix.1.html @@ -186,36 +186,37 @@ POSTFIX(1) POSTFIX(1) ter.cf.proto. shlib_directory (see 'postconf -d' output) - The location of Postfix shared libraries (libpostfix-*.so.*), - and of Postfix database plugins that have a relative pathname in - the dynamicmaps.cf file. + The location of Postfix shared libraries (libpostfix-*.so), and + the default location of Postfix database plugins (libpost- + fix-*.so) that have a relative pathname in the dynamicmaps.cf + file. Other configuration parameters: import_environment (see 'postconf -d' output) - The list of environment parameters that a Postfix process will + The list of environment parameters that a Postfix process will import from a non-Postfix parent process. syslog_facility (mail) The syslog facility of Postfix logging. syslog_name (see 'postconf -d' output) - The mail system name that is prepended to the process name in - syslog records, so that "smtpd" becomes, for example, "post- + The mail system name that is prepended to the process name in + syslog records, so that "smtpd" becomes, for example, "post- fix/smtpd". Available in Postfix version 2.6 and later: multi_instance_directories (empty) - An optional list of non-default Postfix configuration directo- - ries; these directories belong to additional Postfix instances - that share the Postfix executable files and documentation with - the default Postfix instance, and that are started, stopped, + An optional list of non-default Postfix configuration directo- + ries; these directories belong to additional Postfix instances + that share the Postfix executable files and documentation with + the default Postfix instance, and that are started, stopped, etc., together with the default Postfix instance. multi_instance_wrapper (empty) - The pathname of a multi-instance manager command that the post- - fix(1) command invokes when the multi_instance_directories + The pathname of a multi-instance manager command that the post- + fix(1) command invokes when the multi_instance_directories parameter value is non-empty. multi_instance_group (empty) @@ -225,15 +226,15 @@ POSTFIX(1) POSTFIX(1) The optional instance name of this Postfix instance. multi_instance_enable (no) - Allow this Postfix instance to be started, stopped, etc., by a + Allow this Postfix instance to be started, stopped, etc., by a multi-instance manager. FILES - Prior to Postfix version 2.6, all of the following files were in $con- + Prior to Postfix version 2.6, all of the following files were in $con- fig_directory. Some files are now in $daemon_directory so that they can be shared among multiple instances that run the same Postfix version. - Use the command "postconf config_directory" or "postconf daemon_direc- + Use the command "postconf config_directory" or "postconf daemon_direc- tory" to expand the names into their actual values. $config_directory/main.cf, Postfix configuration parameters diff --git a/postfix/html/postmulti.1.html b/postfix/html/postmulti.1.html index cd84a79a2..e647f355a 100644 --- a/postfix/html/postmulti.1.html +++ b/postfix/html/postmulti.1.html @@ -365,9 +365,10 @@ POSTMULTI(1) POSTMULTI(1) ter.cf.proto. shlib_directory (see 'postconf -d' output) - The location of Postfix shared libraries (libpostfix-*.so.*), - and of Postfix database plugins that have a relative pathname in - the dynamicmaps.cf file. + The location of Postfix shared libraries (libpostfix-*.so), and + the default location of Postfix database plugins (libpost- + fix-*.so) that have a relative pathname in the dynamicmaps.cf + file. FILES $meta_directory/main.cf.proto, stock configuration file diff --git a/postfix/makedefs b/postfix/makedefs index 94687094f..faff21d16 100644 --- a/postfix/makedefs +++ b/postfix/makedefs @@ -922,12 +922,8 @@ EOF eval ${CC-gcc} ${CCARGS} -o makedefs.test makedefs.test.c || exit 1 parm_val=`./makedefs.test` || exit 1 rm -f makedefs.test makedefs.test.[co] - case $parm_val in - *'$'mail_version*|*'$'{mail_version}*|'$('mail_version')'*) - parm_val=`expand_mail_version "$parm_val"` || exit 1 - eval ${parm_name}=\""\$parm_val"\" - esac - CCARGS="$CCARGS -D$parm_macro=\\\"$parm_val\\\"" + eval ${parm_name}=\""\$parm_val"\" + #CCARGS="$CCARGS -D$parm_macro=\\\"$parm_val\\\"" ;; *) # this parameter was already checked above. error "Can't happen in $0 - $parm_val is not an absolute path" diff --git a/postfix/man/man1/postfix.1 b/postfix/man/man1/postfix.1 index 206c61380..5a62e7d71 100644 --- a/postfix/man/man1/postfix.1 +++ b/postfix/man/man1/postfix.1 @@ -170,9 +170,9 @@ The location of non-executable files that are shared among multiple Postfix instances, such as postfix-files, dynamicmaps.cf, and the multi-instance template files main.cf.proto and master.cf.proto. .IP "\fBshlib_directory (see 'postconf -d' output)\fR" -The location of Postfix shared libraries (libpostfix-*.so.*), -and of Postfix database plugins that have a relative pathname in -the dynamicmaps.cf file. +The location of Postfix shared libraries (libpostfix-*.so), +and the default location of Postfix database plugins (libpostfix-*.so) +that have a relative pathname in the dynamicmaps.cf file. .PP Other configuration parameters: .IP "\fBimport_environment (see 'postconf -d' output)\fR" diff --git a/postfix/man/man1/postmulti.1 b/postfix/man/man1/postmulti.1 index f26b339c3..6512fb598 100644 --- a/postfix/man/man1/postmulti.1 +++ b/postfix/man/man1/postmulti.1 @@ -375,9 +375,9 @@ The location of non-executable files that are shared among multiple Postfix instances, such as postfix-files, dynamicmaps.cf, and the multi-instance template files main.cf.proto and master.cf.proto. .IP "\fBshlib_directory (see 'postconf -d' output)\fR" -The location of Postfix shared libraries (libpostfix-*.so.*), -and of Postfix database plugins that have a relative pathname in -the dynamicmaps.cf file. +The location of Postfix shared libraries (libpostfix-*.so), +and the default location of Postfix database plugins (libpostfix-*.so) +that have a relative pathname in the dynamicmaps.cf file. .SH "FILES" .na .nf diff --git a/postfix/postfix-install b/postfix/postfix-install index e4bb6f942..7707622da 100644 --- a/postfix/postfix-install +++ b/postfix/postfix-install @@ -793,7 +793,7 @@ do exit 1;; esac - done +done # Save the installation parameters to main.cf even when they haven't # changed from their current default. Defaults can change between @@ -812,7 +812,10 @@ do eval junk=\$$name case "$junk" in *"$mail_version"*) - val=`echo "$junk" | sed "s/$mail_version/"'$mail_version/g'` || exit 1 + case "$pattern" in + "") pattern=`echo "$mail_version" | sed 's/\./\\\\./g'` || exit 1 + esac + val=`echo "$junk" | sed "s/$pattern/"'$mail_version/g'` || exit 1 eval ${name}='"$val"' esac done @@ -838,6 +841,9 @@ bin/postconf -c $CONFIG_DIRECTORY -e \ # If Postfix is being installed locally from source code, do the # post-install processing now. +# The unexpansion above may have side effects on exported variables. +# It does not matter because bin/postfix below will override them. + test -n "$install_root" || { bin/postfix post-install $post_install_options || exit 1 } diff --git a/postfix/proto/INSTALL.html b/postfix/proto/INSTALL.html index f1e3672bc..77a2dca1b 100644 --- a/postfix/proto/INSTALL.html +++ b/postfix/proto/INSTALL.html @@ -286,10 +286,7 @@ shared-library support).

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.

+directory name such as "util" or "global".

See section 4.3.3 "Customizing Postfix shared libraries and database plugins" below for how to customize the Postfix shared-library diff --git a/postfix/src/global/mail_params.c b/postfix/src/global/mail_params.c index ba77e91cf..f7b2d2ce1 100644 --- a/postfix/src/global/mail_params.c +++ b/postfix/src/global/mail_params.c @@ -527,6 +527,8 @@ static char *read_param_from_file(const char *path) void mail_params_init() { static const CONFIG_STR_TABLE first_str_defaults[] = { + /* $mail_version may appear in other parameters. */ + VAR_MAIL_VERSION, DEF_MAIL_VERSION, &var_mail_version, 1, 0, VAR_SYSLOG_FACILITY, DEF_SYSLOG_FACILITY, &var_syslog_facility, 1, 0, VAR_INET_PROTOCOLS, DEF_INET_PROTOCOLS, &var_inet_protocols, 0, 0, VAR_MULTI_CONF_DIRS, DEF_MULTI_CONF_DIRS, &var_multi_conf_dirs, 0, 0, @@ -566,7 +568,6 @@ void mail_params_init() VAR_DEFAULT_PRIVS, DEF_DEFAULT_PRIVS, &var_default_privs, 1, 0, VAR_ALIAS_DB_MAP, DEF_ALIAS_DB_MAP, &var_alias_db_map, 0, 0, VAR_MAIL_RELEASE, DEF_MAIL_RELEASE, &var_mail_release, 1, 0, - VAR_MAIL_VERSION, DEF_MAIL_VERSION, &var_mail_version, 1, 0, VAR_DB_TYPE, DEF_DB_TYPE, &var_db_type, 1, 0, VAR_HASH_QUEUE_NAMES, DEF_HASH_QUEUE_NAMES, &var_hash_queue_names, 1, 0, VAR_RCPT_DELIM, DEF_RCPT_DELIM, &var_rcpt_delim, 0, 0, diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index 48a909033..8a4f8971c 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -20,7 +20,7 @@ * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ -#define MAIL_RELEASE_DATE "20140626" +#define MAIL_RELEASE_DATE "20140627" #define MAIL_VERSION_NUMBER "2.12" #ifdef SNAPSHOT diff --git a/postfix/src/postfix/postfix.c b/postfix/src/postfix/postfix.c index a1ec5ff4f..6909e1c24 100644 --- a/postfix/src/postfix/postfix.c +++ b/postfix/src/postfix/postfix.c @@ -160,9 +160,9 @@ /* multiple Postfix instances, such as postfix-files, dynamicmaps.cf, /* and the multi-instance template files main.cf.proto and master.cf.proto. /* .IP "\fBshlib_directory (see 'postconf -d' output)\fR" -/* The location of Postfix shared libraries (libpostfix-*.so.*), -/* and of Postfix database plugins that have a relative pathname in -/* the dynamicmaps.cf file. +/* The location of Postfix shared libraries (libpostfix-*.so), +/* and the default location of Postfix database plugins (libpostfix-*.so) +/* that have a relative pathname in the dynamicmaps.cf file. /* .PP /* Other configuration parameters: /* .IP "\fBimport_environment (see 'postconf -d' output)\fR" diff --git a/postfix/src/postmulti/postmulti.c b/postfix/src/postmulti/postmulti.c index 00c57010a..1dd13997b 100644 --- a/postfix/src/postmulti/postmulti.c +++ b/postfix/src/postmulti/postmulti.c @@ -359,9 +359,9 @@ /* multiple Postfix instances, such as postfix-files, dynamicmaps.cf, /* and the multi-instance template files main.cf.proto and master.cf.proto. /* .IP "\fBshlib_directory (see 'postconf -d' output)\fR" -/* The location of Postfix shared libraries (libpostfix-*.so.*), -/* and of Postfix database plugins that have a relative pathname in -/* the dynamicmaps.cf file. +/* The location of Postfix shared libraries (libpostfix-*.so), +/* and the default location of Postfix database plugins (libpostfix-*.so) +/* that have a relative pathname in the dynamicmaps.cf file. /* FILES /* $meta_directory/main.cf.proto, stock configuration file /* $meta_directory/master.cf.proto, stock configuration file @@ -789,14 +789,13 @@ static INSTANCE *load_instance(INSTANCE *ip) }; /* - * XXX: We could really use a "postconf -E" to expand values in the - * context of the target main.cf! + * Expand parameter values in the context of the target main.cf file. */ #define REQUEST_PARAM_COUNT 5 /* # of requested parameters */ cmd = argv_alloc(REQUEST_PARAM_COUNT + 3); name = concatenate(var_command_dir, "/", "postconf", (char *) 0); - argv_add(cmd, name, "-c", ip->config_dir, + argv_add(cmd, name, "-xc", ip->config_dir, VAR_QUEUE_DIR, VAR_DATA_DIR, VAR_MULTI_NAME, VAR_MULTI_GROUP, VAR_MULTI_ENABLE, (char *) 0); diff --git a/postfix/src/util/dict_test.c b/postfix/src/util/dict_test.c index 4b4529847..93d3f7dca 100644 --- a/postfix/src/util/dict_test.c +++ b/postfix/src/util/dict_test.c @@ -22,6 +22,7 @@ #include #include #include +#include DEFINE_DICT_LMDB_MAP_SIZE; DEFINE_DICT_DB_CACHE_SIZE;