]> git.donarmstrong.com Git - roundcube.git/blobdiff - debian/roundcube-core.postinst
Finished 0.1~rc2-2
[roundcube.git] / debian / roundcube-core.postinst
diff --git a/debian/roundcube-core.postinst b/debian/roundcube-core.postinst
new file mode 100644 (file)
index 0000000..33d6912
--- /dev/null
@@ -0,0 +1,164 @@
+#!/bin/sh
+# postinst script for roundcube
+#
+# see: dh_installdeb(1)
+
+set -e
+
+. /usr/share/debconf/confmodule
+. /usr/share/dbconfig-common/dpkg/postinst 
+dbc_generate_include=php:/etc/roundcube/debian-db.php
+dbc_generate_include_owner="www-data:www-data"
+dbc_generate_include_perms="660"
+dbc_dbfile_owner="www-data:www-data"
+dbc_dbfile_perms="0660"
+dbc_dbuser=roundcube
+dbc_dbname=roundcube
+
+dbc_go roundcube $@
+
+case "$1" in
+    configure)
+
+       # From 0.1-beta2.2 to 0.1-rc1, a column was added to table
+       # `identities'. For MySQL and PostgreSQL, this is handled by
+       # dbconfig-common but for sqlite, there is no way to add a
+       # column to a table. Therefore, we dump here the table and add
+       # the column.
+       [ "$dbc_upgrade" = "true" ] && {
+           case "$dbc_dbtype" in
+               sqlite)
+                   db="${dbc_basepath}/${dbc_dbname}"
+               # OK, we need to check if the table contains html_signature
+                   if ! sqlite "$db" '.schema identities' | grep -q html_signature; then
+                       # We need to add it
+                       echo -n "Need to upgrade 'identities' table in $db... "
+                       upgrade_tmp=$(mktemp -t roundcube.sqlite.XXXXXXXXXX)
+                       (
+                           cat <<EOF
+BEGIN TRANSACTION;
+DROP TABLE identities;
+CREATE TABLE identities (
+  identity_id integer NOT NULL PRIMARY KEY,
+  user_id integer NOT NULL default '0',
+  del tinyint NOT NULL default '0',
+  standard tinyint NOT NULL default '0',
+  name varchar(128) NOT NULL default '',
+  organization varchar(128) default '',
+  email varchar(128) NOT NULL default '',
+  "reply-to" varchar(128) NOT NULL default '',
+  bcc varchar(128) NOT NULL default '',
+  signature text NOT NULL default '',
+  html_signature tinyint NOT NULL default '0'
+);
+
+CREATE INDEX ix_identities_user_id ON identities(user_id);
+
+EOF
+                           # We dump and keep only inserts
+                           sqlite "$db" '.dump identities' | \
+                               awk '/^INSERT INTO/ {start = 1} {if (start == 1) print}' | \
+                               head -n -2 | \
+                               sed 's/^\(INSERT INTO identities \)/\1(identity_id, user_id, del, standard, name, organization, email, "reply-to", bcc, signature) /'
+                           echo 'COMMIT;' ) > $upgrade_tmp
+                       sqlite "$db" < $upgrade_tmp
+                       rm $upgrade_tmp
+                       echo "OK"
+                   fi
+                   ;;
+               *)
+                   # Do nothing
+                   ;;
+           esac
+       }
+
+       CONFFILE=/etc/roundcube/main.inc.php
+       touch $CONFFILE.ucftmp
+       chmod 640 $CONFFILE.ucftmp
+
+       db_get roundcube/hosts || true
+       hosts="$RET"
+       if [ "$hosts" != "" ]; then
+           hosts="array(\"$(echo $hosts | sed 's/ /\",\"/g')\")"
+       else
+           hosts="''"
+       fi
+
+       db_get roundcube/language || true
+       language="$RET"
+
+       # Get current 3DES key from /etc/roundcube/main.inc.php
+       [ -f /etc/roundcube/main.inc.php ] && {
+           deskey=$(sed -n "s+^\$rcmail_config\['des_key'\] = '\(.*\)';\$+\1+p" \
+               /etc/roundcube/main.inc.php)
+       }
+       # If this is the default key, forget it !
+       [ "$deskey" = "rcmail-!24ByteDESkey*Str" ] && unset deskey
+       # Generate a new one
+       while [ -z "$deskey" ]; do
+           deskey=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | \
+               tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{24\}\).*/\1/p')
+       done
+
+       # Put hosts, language and key in main.inc.php
+       cat /usr/share/roundcube/main.inc.php.dist | \
+           sed -e "s+^\(\$rcmail_config\['default_host'\] = \)''\(;\)\$+\1${hosts}\2+" \
+               -e "s+^\(\$rcmail_config\['des_key'\] = '\).*\(';\)\$+\1$deskey\2+" \
+               -e "s+^\(\$rcmail_config\['locale_string'\] = '\).*\(';\)\$+\1${language}\2+" >> $CONFFILE.ucftmp
+
+       ucf --debconf-ok $CONFFILE.ucftmp $CONFFILE
+       chown root:www-data $CONFFILE
+        rm -f $CONFFILE.ucftmp
+       
+       # Handle webserver reconfiguration/restart ; stolen from zabbix package
+       db_get roundcube/reconfigure-webserver || true
+       webservers="$RET"
+       restart=""
+
+       for webserver in $webservers; do
+            webserver=${webserver%,}
+            test -x /usr/sbin/$webserver || continue
+        
+            if [ ! -f /etc/$webserver/conf.d/roundcube ] && [ ! -h /etc/$webserver/conf.d/roundcube ]; then
+               ln -s /etc/roundcube/apache.conf /etc/$webserver/conf.d/roundcube
+            fi
+            restart="$restart $webserver"
+        done
+
+        db_get roundcube/restart-webserver || true
+       res="$RET"
+       db_stop || true
+       if [ "$res" = "true" ]; then
+            for webserver in $restart; do
+               webserver=${webserver%,}
+               if [ -x /usr/sbin/invoke-rc.d ]; then
+                    invoke-rc.d $webserver restart
+               else
+                    /etc/init.d/$webserver restart
+               fi
+            done
+       fi
+
+       chown -R www-data:adm /var/log/roundcube
+       chmod -R 750 /var/log/roundcube
+       chown -R www-data:www-data /var/lib/roundcube/temp
+       chmod -R 750 /var/lib/roundcube/temp
+       chown www-data:adm /var/lib/roundcube/skins
+
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+        echo "postinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+
+#DEBHELPER#
+
+exit 0
+
+