** Description changed:

+ [Impact]
+ 
+ If a user's /etc/postfix/main.conf has an empty alias_database setting,
+ postfix-mysql.postinst fails when upgrading.
+ 
+ [Test Case]
+ 
+ Install the previous postfix and postfix-mysql:
+ 
+ # apt install -y postfix=3.3.0-1 postfix-mysql=3.3.0-1
+  * Install type: Local Only
+  * System mail name: anything
+ 
+ Clear the alias settings in /etc/postfix/main.cf, then upgrade to the
+ latest:
+ 
+ # sed -i 's/\(alias_.* =\).*/\1/g' /etc/postfix/main.cf
+ # service postfix reload
+ # apt upgrade -y
+ 
+ You'll get the following error:
+     Adding mysql map entry to /etc/postfix/dynamicmaps.cf
+     /var/lib/dpkg/info/postfix-mysql.postinst: 33: [: =: unexpected operator
+ 
+ 
+ [Regression Potential]
+ 
+ The fix only affects the package installation scripts.
+ 
+ [Original Description]
+ 
  I wanted to upgrade my bionic system. Some postfix related packages has
  been upgraded:
  
  # apt-get upgrade
  Reading package lists... Done
- Building dependency tree       
+ Building dependency tree
  Reading state information... Done
  Calculating upgrade... Done
  The following packages will be upgraded:
    base-files postfix postfix-ldap postfix-mysql postfix-pcre
    python3-problem-report qemu-guest-agent
  7 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
  
- # ls  /var/cache/apt/archives/postfix*deb
- /var/cache/apt/archives/postfix_3.3.0-1ubuntu0.1_amd64.deb      
/var/cache/apt/archives/postfix-ldap_3.3.0-1ubuntu0.1_amd64.deb   
/var/cache/apt/archives/postfix-pcre_3.3.0-1ubuntu0.1_amd64.deb
- /var/cache/apt/archives/postfix-cdb_3.3.0-1ubuntu0.1_amd64.deb  
/var/cache/apt/archives/postfix-mysql_3.3.0-1ubuntu0.1_amd64.deb
+ # ls /var/cache/apt/archives/postfix*deb
+ /var/cache/apt/archives/postfix_3.3.0-1ubuntu0.1_amd64.deb 
/var/cache/apt/archives/postfix-ldap_3.3.0-1ubuntu0.1_amd64.deb 
/var/cache/apt/archives/postfix-pcre_3.3.0-1ubuntu0.1_amd64.deb
+ /var/cache/apt/archives/postfix-cdb_3.3.0-1ubuntu0.1_amd64.deb 
/var/cache/apt/archives/postfix-mysql_3.3.0-1ubuntu0.1_amd64.deb
  
  After the installation, I saw this error message:
  
  Setting up postfix-mysql (3.3.0-1ubuntu0.1) ...
  Adding mysql map entry to /etc/postfix/dynamicmaps.cf
  /var/lib/dpkg/info/postfix-mysql.postinst: 33: [: =: unexpected operator
  
  But anyway, installation seemed to be succeeded. However, I noticed,
  that according to my mail logs, all mysql based postfix tables does not
  work at all with "unsupported map type". Just noticed, that even with
  ldap tables, not only mysql tables ...
  
  restarting postfix seems to cured the problem, but I think, it shouldn't
  work this way ...
  
  What I found: in /var/lib/dpkg/info/postfix-mysql.postinst the
  corresponding context, where the problem is (line 33):
  
      configure)
          addmap mysql
         if [ $(postconf |grep alias_database | awk '{print $3}'|awk -F \: \
             '{print $1}') = 'mysql' ]; then
             runnewaliases
         fi
      ;;
  
  I guess, the problem is the following: I have the main.cf with empty
  alias_database directive, since I don't use aliases at all, so in
  main.cf, I have:
  
  # grep ^alias /etc/postfix/main.cf
- alias_maps = 
- alias_database = 
+ alias_maps =
+ alias_database =
  # postconf |grep alias_database
  alias_database =
  # postconf |grep alias_database | awk '{print $3}'|awk -F \: '{print $1}'
  #
  
  So you see, because of my config, I get empty string ... And it seems
  the postinst script is not prepared to have this, as the empty string is
  represented in the script this way then:
  
  if [ = 'mysql' ]; then
  
  So it is understandable now, that I get this error:
  
  /var/lib/dpkg/info/postfix-mysql.postinst: 33: [: =: unexpected operator
  
  Because of the postinst script runs with "set -e", this error is
  "fatal". Surely, I guess the same issue happens with postfix-ldap
  package as well, I guess, maybe with others, I am not sure (postfix-
  pcre, etc?).
  
  I think, this should be fixed, since it can break things for everyone
  using empty value for alias_database directive in main.cf
  
  Though I am still not sure, why postfix thought these are unsupported
  map types after the upgrade, and postfix restart cured the problem,
  shouldn't the upgrade restart postfix anyway?
  
  As a workaround, I put an empty hash map file into main.cf for with
  option, now there is no error message in postinst script, but still,
  it's a strange situation ...
  
  Also, the logic in the script to "extract" table type is a bit
  complicated I guess, I would use something like this:
  
  if [ "$(postconf -h alias_database | cut -f1 -d:)" = "mysql" ]; then
  ....
  
  Maybe there are better solutions than mine above, still, it's just a
  quick idea (rather than multiple awk's and a grep) ....
  
  Thanks for your attention.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1791139

Title:
  postfix-mysql package upgrade results in server configuration error

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/postfix/+bug/1791139/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to