start handling settings migration
[diogenes.git] / debian / diogenes.config
index 08221cb..02e838a 100644 (file)
@@ -1,34 +1,5 @@
 #!/bin/bash -e
 
-RANDOMDEVICE=/dev/urandom
-allowed=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./
-declare -a RVAL
-
-second () {
-       echo $2
-}
-
-create-random-pw() {
-       if ! read -n 0 < $RANDOMDEVICE ; then
-               echo 1>&2 "Warning, no random device found, password might be insecure"
-               for i in 0 1 2 3 4 5 6 7; do
-                       RVAL[i]=$RANDOM
-               done
-       else
-               for i in 0 1 2 3 4 5 6 7; do
-                       RVAL[i]=$(second $(od -N 1 -t d $RANDOMDEVICE))
-               done
-       fi
-
-       PW=""
-       for i in 0 1 2 3 4 5 6 7; do
-               idx=$((${RVAL[i]} & 0x3F))
-               PW="${PW}${allowed:$idx:1}"
-       done
-
-       printf "%s" $PW
-}
-
 # this function comes from wwwconfig-common's apache.func script
 getwwwoption() {
     getwwwoption=""
@@ -39,6 +10,49 @@ getwwwoption() {
     fi
 }
 
+# migrate pre-dbc debconf values
+migrate_settings() {
+    dumpfile=$1
+    rm -f $dumpfile
+    touch $dumpfile
+    chmod 0006 $dumpfile
+
+    db_get "diogenes/databasemgr_type"
+    dbtype="$RET"
+    if [ "$dbtype" != "Automatic" ] ; then
+        echo "Not migrating manual pre-dbconfig settings"
+        return
+    fi
+    echo "Migrating automatic pre-dbconfig settings"
+    db_get "diogenes/databasemgr_server"
+    if [ -n "$RET" ] && [ "$RET" != "localhost" ]; then
+        echo "dbserver=\"$RET\"" >> $dumpfile
+    fi
+    db_get "diogenes/database_name"
+    if [ -n "$RET" ]; then
+        echo "dbname=\"$RET\"" >> $dumpfile
+    fi
+    db_get "diogenes/database_user"
+    if [ -n "$RET" ]; then
+        echo "dbuser=\"$RET\"" >> $dumpfile
+    fi
+    db_get "diogenes/database_pass"
+    if [ -n "$RET" ]; then
+        echo "dbpass=\"$RET\"" >> $dumpfile
+    fi
+}
+
+clean_settings() {
+    echo "Removing pre-dbconfig settings"
+    db_clear "diogenes/databasemgr_type" || true
+    db_clear "diogenes/databasemgr_server" || true
+    db_clear "diogenes/dbmyadmin" || true
+    db_clear "diogenes/dbadmpass" || true
+    db_clear "diogenes/database_name" || true
+    db_clear "diogenes/database_user" || true
+    db_clear "diogenes/database_pass" || true
+}
+
 
 # Use debconf baby
 . /usr/share/debconf/confmodule
@@ -63,10 +77,16 @@ for i in $webservers ; do nbsrv=`expr $nbsrv + 1`; done
 
 if [ $nbsrv == 1 ]; then
     server=$(echo $webservers | sed 's/,$//')
-    if [ -f /etc/$server/httpd.conf ]; then
-        getwwwoption User /etc/$server/httpd.conf
+    config_file=
+    if [ "$server" == "apache2" ] && [ -f /etc/$server/apache2.conf ]; then
+        config_file=/etc/$server/apache2.conf
+    elif [ -f /etc/$server/httpd.conf ]; then
+        config_file=/etc/$server/httpd.conf
+    fi
+    if [ -n "$config_file" ]; then
+        getwwwoption User $config_file
         webuser=$(echo "$getwwwoption" | sed -e "q")
-        getwwwoption Group /etc/$server/httpd.conf
+        getwwwoption Group $config_file
         webgroup=$(echo "$getwwwoption" | sed -e "q")
     fi
 fi
@@ -84,31 +104,28 @@ else
     db_set "diogenes/webgroup" "$webgroup"
 fi
 
-db_input "high" "diogenes/databasemgr_type" || true
-db_go
-db_get "diogenes/databasemgr_type"
-dbtype="$RET"
+# source dbconfig-common shell library, and call the hook function
+if [ -f /usr/share/dbconfig-common/dpkg/config.mysql ]; then
+    . /usr/share/dbconfig-common/dpkg/config.mysql 
+    dbc_first_version=0.9.20-2
+    dbc_oldversion="$2"
+    # check if we are migrating from a pre-dbc version
+    if [ "$dbc_oldversion" ] && [ "$dbc_first_version" ] && \
+        dpkg --compare-versions "$dbc_first_version" gt "$dbc_oldversion"; then
+            migrating="yes"
+       fi
 
-if [ "$dbtype" = "Automatic" ] ; then
-    db_input "high" "diogenes/databasemgr_server" || true
-    db_go
-    db_input "high" "diogenes/dbmyadmin" || true
-    db_go
-    db_input "critical" "diogenes/dbadmpass" || true
-    db_go
-    db_input "medium" "diogenes/database_name" || true
-    db_go
-    db_input "medium" "diogenes/database_user" || true
-    db_go
-    db_input "medium" "diogenes/database_pass" || true
-    db_go
-    db_get "diogenes/database_pass"
-    dbpass="$RET"
-    if [ "$dbpass" = "auto" ]; then
-       dbpass=$(create-random-pw)
-    elif [ "$dbpass" = "none" ]; then
-       dbpass=""
+    if [ -n "$migrating" ]; then
+        dumpfile=/etc/diogenes/diogenes.dump
+        migrate_settings $dumpfile
+        dbc_load_include="sh:$dumpfile"
     fi
-    db_set "diogenes/database_pass" "$dbpass"
 
+    dbc_go diogenes $@
+
+    if [ -n "$migrating" ]; then
+        rm -f $dumpfile
+        #clean_settings
+    fi
 fi
+