File: prerm

package info (click to toggle)
dbconfig-common 2.0.25
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,184 kB
  • sloc: sh: 1,487; makefile: 51; sql: 40; perl: 12
file content (151 lines) | stat: -rw-r--r-- 5,820 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# -*- mode: sh -*-
###
### some global variables etc
###
dbc_go(){
    local need_admin_pw dumpfile nowtime rmscript rmsql purgescript purgesql tsubstfile

    . /usr/share/dbconfig-common/dpkg/common
    _dbc_debug "(prerm) dbc_go() $@"

    ## With dbconfig-no-thanks installed we don't need to do anything.
    if dbc_no_thanks ; then
        return 0
    fi

    dbc_config "$@" || return $?

    ###
    ### get all the settings we need
    ###
    dbc_read_package_config || return $?
    # and re-run config for db-specific settings
    dbc_set_dbtype_defaults $dbc_dbtype || return $?

    if echo "$dbc_authenticated_dbtypes" | grep -q "$dbc_dbtype"; then
        if [ "$dbc_dbtype" = "pgsql" ] && \
               [ "$dbc_authmethod_admin" = "ident" ];
        then
            need_admin_pw=""
        else
            need_admin_pw="yup"
            # Note: dpkg/config has the same code
            if [ "$dbc_dbtype" = mysql ] && _dbc_mysql_get_debian_sys_maint ; then
                db_set $dbc_package/$dbc_dbtype/admin-user "$dbc_dbadmin"
                db_fset $dbc_package/$dbc_dbtype/admin-user seen true
                db_set $dbc_package/$dbc_dbtype/admin-pass "$dbc_dbadmpass"
                db_fset $dbc_package/$dbc_dbtype/admin-pass seen true
            fi
        fi
    else
        need_admin_pw=""
    fi

    if [ "$dbc_command" = "remove" ] && [ ! "$dbc_frontend" ]; then
        ###
        ### if they didn't want our help installing,  we should assume
        ### they don't want our help removing either
        ###
        if [ "$dbc_install" != "true" ]; then return 0; fi

        ###
        ### ask the admin if we should help with removal
        ### but only if they didn't see the question before
        ### or if we are here after an error
        ###
        if [ "$dbc_remove" ]; then
            db_set $dbc_package/dbconfig-remove "$dbc_remove"
        fi
        db_input $dbc_prio_high $dbc_package/dbconfig-remove || true
        db_go || true
        db_get $dbc_package/dbconfig-remove && dbc_remove="$RET"

        if [ "$dbc_remove" != "true" ]; then
            return 0;
        fi

        ###
        ###	package removal hooks
        ###
        rmscript=/usr/share/dbconfig-common/scripts/$dbc_package/remove/$dbc_dbtype
        rmsql=/usr/share/dbconfig-common/data/$dbc_package/remove/$dbc_dbtype
        # run the script if it exists
        if [ -f "$rmscript" ]; then
            # get the admin user password; required by documentation
            if [ "$need_admin_pw" ]; then
                dbc_get_admin_pass || return $?
            fi
            dbc_logpart "running maintainer removal script hook... "
            if ! sh -c "$rmscript $*"; then
                dbc_error="$rmscript exited with non-zero status"
                dbc_remove_error "running maintainer removal hook" || return $?
                [ "$dbc_tried_again" ] && return 0
            fi
            dbc_logline "done"
        fi
        # run the sql if it exists
        if [ -f "$rmsql" ]; then
            # get the admin user password; required by documentation
            if [ "$need_admin_pw" ]; then
                dbc_get_admin_pass || return $?
            fi
            dbc_logpart "running maintainer removal sql hook... "
            if [ ! "$dbc_sql_substitutions" ]; then
                $dbc_sqlfile_cmd $rmsql || \
                    dbc_remove_error "running maintainer removal sql hook" || \
                    return $?
                [ "$dbc_tried_again" ] && return 0
            else
                tsubstfile=$(dbc_mktemp)
                /usr/sbin/dbconfig-generate-include -f template -o template_infile=$rmsql $dbc_packageconfig > $tsubstfile
                $dbc_sqlfile_cmd $tsubstfile || \
                    dbc_remove_error "running maintainer removal sql hook" || \
                    return $?
                rm -f $tsubstfile
                [ "$dbc_tried_again" ] && return 0
            fi
            dbc_logline "done"
        fi

        ###
        ### ask the admin if the database should be purged
        ### but only if they didn't see the question before
        ### or if we are here after an error
        ###
        db_input $dbc_prio_high $dbc_package/purge || true
        db_go || true
        db_get $dbc_package/purge
        dbc_purge="$RET"

        if [ "$dbc_purge" = "true" ]; then
            # get the admin user password
            if [ "$need_admin_pw" ]; then
                dbc_get_admin_pass || return $?
            fi

            # dump the database into a temporary file
            # Note: nearly equal logic exists in postinst; probably
            # should stay in sync
            nowtime=$(date +%Y-%m-%d-%H.%M)
            if [ ! $(dirname /var/tmp/$dbc_package) = /var/tmp ]; then
                mkdir -p $(dirname /var/tmp/$dbc_package)
            fi
            dumpfile=$(mktemp /var/tmp/$dbc_package.$dbc_dbname.$nowtime.$dbc_dbtype.XXXXXX)
            if [ ! -f $dumpfile ]; then
                dbc_remove_error "creating temporary file for database dump" || \
                    return $?
                [ "$dbc_tried_again" ] && return 0
            fi
            dbc_logline "dbconfig-common: dumping $dbc_dbtype database $dbc_dbname to $dumpfile"
            $dbc_dump_cmd $dumpfile || dbc_remove_error "dumping database" || \
                return $?
            [ "$dbc_tried_again" ] && return 0
            dbc_logline "dbconfig-common: dropping $dbc_dbtype database $dbc_dbname"
            $dbc_dropdb_cmd || dbc_remove_error "dropping database" || return $?
            [ "$dbc_tried_again" ] && return 0

            dbc_logline "dbconfig-common: revoking privileges for user $dbc_dbuser on $dbc_dbname"
            $dbc_dropuser_cmd
        fi
    fi
}