~ubuntu-branches/ubuntu/saucy/lvm2/saucy-proposed

« back to all changes in this revision

Viewing changes to test/shell/name-mangling.sh

  • Committer: Package Import Robot
  • Author(s): Dmitrijs Ledkovs
  • Date: 2012-08-14 14:35:57 UTC
  • mfrom: (3.1.25 sid)
  • Revision ID: package-import@ubuntu.com-20120814143557-93aill2tp3kf3o30
Tags: 2.02.95-4ubuntu1
* Merge from Debian unstable, remaining changes:
  - debian/patches/avoid-dev-block.patch: Prefer any other device name over
    names in /dev/block/ since lvm.conf won't handle this.
  - debian/rules:
    - copy .po file to .pot file for Rosetta (Ubuntu specific).
  - debian/{dmsetup,lvm2}-udeb.install:
    - install initramfs and udev hooks in udebs (Debian bug 504341).
  - auto-start VGs as their PVs are discovered (Ubuntu specific):
    - add debian/tree/lvm2/lib/udev/rules.d/85-lvm2.rules: use watershed plus
      the sledgehammer of vgscan/vgchange to turn on VGs as they come online.
    - debian/tree/lvm2/usr/share/initramfs-tools/scripts/hooks/lvm2:
      - add 85-lvm2.rules to the list of udev rules to copy.
      - depend on udev.
    - debian/control:
      - add versioned Depend on watershed in lvm2 for udev rules.
      - add Depends on watershed-udeb in lvm2-udeb for udev rules.
      - add versioned Depend/Breaks on udev in dmsetup for udev rules.
      - add Depend on initramfs-tools in dmsetup so system is not potentially
        rendered unbootable by out-of-order dpkg configuration.
    - debian/rules:
      - do not install local-top scripts since Ubuntu mounts root using udev.
      - do not install init scripts for lvm2, since udev starts LVM.
    - debian/lvm2.postinst: handle missing lvm2 init script.
    - debian/tree/dmsetup/lib/udev/rules.d/60-persistent-storage-dm.rules:
      watch dm devices for changes with inotify
  - add mountroot failure hooks to help fix bad boots (Debian bug 468115):
    - debian/tree/lvm2/usr/share/initramfs-tools/scripts/init-premount/lvm2
  - remaining changes to upstream event manager packages (Debian bug 514706):
    - debian/rules:
      - enable dmeventd during configure.
    - debian/dmeventd.{8,manpages}: install dmeventd files.
  - rename debian/clvm.defaults to debian/clvm.default so it is installed
    correctly.
  - debian/control: add dmsetup-udeb to libdevmapper1.02.1-udeb recommends.
  - debian/rules: make sure dmsetup and lvm2 initramfs-tools scripts are
    executable.  When the Ubuntu-specific ones are added with a patch,
    they may lose their executable bit.
  - Add and install clvmd resource agent
  - Add dependency on libudev-dev to libdevmapper-dev so that the .pc file
    works.
  - debian/{clvmd.ra,clvm.init}:
    - create /run/lvm if it doesn't exist.
  - debian/clvm.init:
    - exit 3 if not running on status action.
  - Call dh_installman so that our dmeventd manpage actually gets installed
  - Install the missing fsadm manpage.

 * libdevmapper-dev:
  - move .so symlinks and pkgconfig files to multiarched locations.
  - mark libdevmapper-dev M-A: same

 * libdevmapper-event1.02.1:
  - Add Breaks: dmeventd (<< 2.02.95-4ubuntu1) due to debian symbol rename

 * debian/lvm2.{preinst,postinst,postrm}:
  - Implement removal of obsolete /etc/init.d/lvm2 conffile, which
    should not have been re-introduced in Quantal.

 * Dropped Changes, included in Debian:
  - Mostly included packages for upstream event manager (Debian bug 514706).
  - debian/patches/rules-subdir.patch: removed as reordering will cause
    build failure with dmeventd.
  - debian/patches/libdm-event-static.patch: removed as other static libs
    aren't being built anymore either.
  - Update symbols for libdevmapper-event.
  - Update libdevmapper-event, dmeventd descriptions to match Debian
    boilerplate.

 * Disappeared Changes:
  - Don't install documentation in udebs. No diff found, but no docs are
    installed into udebs either.

 * Resurected Changes:
  - corrected dropping the wrong init script. Now clvm.init is shipped
    and lvm2.init is dropped in favor of udev rules as per original
    intention (LP: #1037033).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2012 Red Hat, Inc. All rights reserved.
 
2
#
 
3
# This copyrighted material is made available to anyone wishing to use,
 
4
# modify, copy, or redistribute it subject to the terms and conditions
 
5
# of the GNU General Public License v.2.
 
6
#
 
7
# You should have received a copy of the GNU General Public License
 
8
# along with this program; if not, write to the Free Software Foundation,
 
9
# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
10
 
 
11
. lib/test
 
12
 
 
13
name_prefix=$RANDOM
 
14
 
 
15
CHARACTER_WHITELIST="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789#+-.:=@_"
 
16
FAIL_MIXED_STR="contains mixed mangled and unmangled characters"
 
17
FAIL_MULTI_STR="seems to be mangled more than once"
 
18
FAIL_BLACK_STR="should be mangled but it contains blacklisted characters"
 
19
CORRECT_FORM_STR="name already in correct form"
 
20
RENAMING_STR="renaming to"
 
21
 
 
22
function create_dm_dev()
 
23
{
 
24
        local mode=$1
 
25
        local name=$2;
 
26
 
 
27
        if [ $mode = "none" ]; then
 
28
                # there's no mangling done - we must use --verifyudev here in
 
29
                # case we're testing with udev so we have the nodes in place,
 
30
                # udev would not create them - it can't handle unmangled names
 
31
                verify_udev="--verifyudev"
 
32
        else
 
33
                verify_udev=""
 
34
        fi
 
35
 
 
36
        dmsetup create "${name_prefix}$name" $verify_udev --manglename $mode --table "0 1 zero"
 
37
}
 
38
 
 
39
function remove_dm_dev()
 
40
{
 
41
        local mode=$1
 
42
        local name=$2
 
43
 
 
44
        if [ $mode = "none" ]; then
 
45
                verify_udev="--verifyudev"
 
46
        else
 
47
                verify_udev=""
 
48
        fi
 
49
 
 
50
        dmsetup remove $verify_udev --manglename $mode "${name_prefix}$name"
 
51
}
 
52
 
 
53
function check_create_and_remove()
 
54
{
 
55
        local mode=$1
 
56
        local input_name=$2
 
57
        local dm_name=$3
 
58
        local r=0
 
59
 
 
60
        if [ $mode = "none" ]; then
 
61
                verify_udev="--verifyudev"
 
62
        else
 
63
                verify_udev=""
 
64
        fi
 
65
 
 
66
        dmsetup create "${name_prefix}$input_name" $verify_udev --manglename $mode --table "0 1 zero" 2>err && \
 
67
        test -b "$DM_DEV_DIR/mapper/${name_prefix}$dm_name" && \
 
68
        dmsetup remove "${name_prefix}$input_name" $verify_udev --manglename $mode || r=1
 
69
 
 
70
        if [ $dm_name = "FAIL_MIXED" ]; then
 
71
                r=0
 
72
                grep "$FAILED_MIXED_STR" err || r=1
 
73
        elif [ $dm_name = "FAIL_MULTI" ]; then
 
74
                r=0
 
75
                grep "$FAILED_MULTI_STR" err || r=1
 
76
        elif [ $dm_name = "FAIL_BLACK" ]; then
 
77
                r=0
 
78
                grep "$FAILED_BLACK_STR" err || r=1
 
79
        fi
 
80
 
 
81
        return $r
 
82
}
 
83
 
 
84
function check_dm_field()
 
85
{
 
86
        local mode=$1
 
87
        local dm_name="$2"
 
88
        local field=$3
 
89
        local expected="$4"
 
90
 
 
91
        value=$(dmsetup info --rows --noheadings --manglename $mode -c -o $field "${DM_DEV_DIR}/mapper/${name_prefix}$dm_name" 2> err || true)
 
92
 
 
93
        if [ "$expected" = "FAIL_MIXED" ]; then
 
94
                grep "$FAIL_MIXED_STR" err
 
95
        elif [ "$expected" = "FAIL_MULTI" ]; then
 
96
                grep "$FAIL_MULTI_STR" err
 
97
        elif [ "$expected" = "FAIL_BLACK" ]; then
 
98
                grep "$FAIL_BLACK_STR" err
 
99
        else
 
100
                test "$value" = "${name_prefix}$expected"
 
101
        fi
 
102
}
 
103
 
 
104
function check_expected_names()
 
105
{
 
106
        local mode=$1
 
107
        local dm_name="$2"
 
108
        local r=0
 
109
 
 
110
        create_dm_dev none "$dm_name"
 
111
 
 
112
        test -b "$DM_DEV_DIR/mapper/${name_prefix}$dm_name" && \
 
113
        check_dm_field none "$dm_name" name "$dm_name" && \
 
114
        check_dm_field $mode "$dm_name" name "$3" && \
 
115
        check_dm_field $mode "$dm_name" mangled_name "$4" && \
 
116
        check_dm_field $mode "$dm_name" unmangled_name "$5" || r=1
 
117
 
 
118
        remove_dm_dev none "$dm_name"
 
119
 
 
120
        return $r
 
121
}
 
122
 
 
123
function check_mangle_cmd()
 
124
{
 
125
        local mode=$1
 
126
        local dm_name="$2"
 
127
        local expected="$3"
 
128
        local rename_expected=0
 
129
        local r=0
 
130
 
 
131
        create_dm_dev none "$dm_name"
 
132
 
 
133
        dmsetup mangle --manglename $mode "${name_prefix}$dm_name" 1>out 2>err || true;
 
134
 
 
135
        if [ "$expected" = "OK" ]; then
 
136
                grep "$CORRECT_FORM_STR" out || r=1
 
137
        elif [ "$expected" = "FAIL_MIXED" ]; then
 
138
                grep "$FAIL_MIXED_STR" err || r=1
 
139
        elif [ "$expected" = "FAIL_MULTI" ]; then
 
140
                grep "$FAIL_MULTI_STR" err || r=1
 
141
        else
 
142
                rename_expected=1
 
143
                grep -F "$RENAMING_STR ${name_prefix}$expected" out || r=1
 
144
        fi
 
145
 
 
146
        if [ $r = 0 -a $rename_expected = 1 ]; then
 
147
                # successfuly renamed to expected name
 
148
                remove_dm_dev none "$expected"
 
149
        elif [ $r = 1 ]; then
 
150
                # failed to rename to expected or renamed when it should not - find the new name
 
151
                new_name=$(sed -e "s/.*: $RENAMING_STR //g" out)
 
152
                # try to remove any of the form - falling back to less probable error scenario
 
153
                dmsetup remove --verifyudev --manglename none "$new_name" || \
 
154
                remove_dm_dev none "$dm_name" || remove_dm_dev none "$expected"
 
155
        else
 
156
                # successfuly done nothing
 
157
                remove_dm_dev none "$dm_name"
 
158
        fi
 
159
 
 
160
        return $r
 
161
}
 
162
 
 
163
# check dmsetup can process path where the last component is not equal dm name (rhbz #797322)
 
164
r=0
 
165
create_dm_dev auto "abc"
 
166
ln -s ${DM_DEV_DIR}/mapper/${name_prefix}abc ${DM_DEV_DIR}/${name_prefix}xyz
 
167
dmsetup status ${DM_DEV_DIR}/${name_prefix}xyz || r=1
 
168
remove_dm_dev auto "abc"
 
169
if [ r = 1 ]; then
 
170
        exit 1
 
171
fi
 
172
 
 
173
### ALL WHITELISTED CHARACTERS ###
 
174
# none of these should be mangled in any mode
 
175
name="$CHARACTER_WHITELIST"
 
176
for mode in auto hex none; do
 
177
        check_expected_names $mode "$name" "$name" "$name" "$name"
 
178
        check_mangle_cmd $mode "$name" "OK"
 
179
done
 
180
 
 
181
 
 
182
#### NONE MANGLING MODE ###
 
183
check_create_and_remove none 'a b' 'a b'
 
184
check_create_and_remove none 'a\x20b' 'a\x20b'
 
185
check_create_and_remove none 'a b\x20c' 'a b\x20c'
 
186
check_create_and_remove none 'a\x5cx20b' 'a\x5cx20b'
 
187
 
 
188
check_expected_names none 'a b' 'a b' 'a\x20b' 'a b'
 
189
check_expected_names none 'a\x20b' 'a\x20b' 'a\x20b' 'a b'
 
190
check_expected_names none 'a b\x20c' 'a b\x20c' 'FAIL_MIXED' 'a b c'
 
191
check_expected_names none 'a\x5cx20b' 'a\x5cx20b' 'a\x5cx20b' 'a\x20b'
 
192
 
 
193
check_mangle_cmd none 'a b' 'OK'
 
194
check_mangle_cmd none 'a\x20b' 'a b'
 
195
check_mangle_cmd none 'a b\x20c' 'a b c'
 
196
check_mangle_cmd none 'a\x5cx20b' 'a\x20b'
 
197
 
 
198
 
 
199
### AUTO MANGLING MODE ###
 
200
check_create_and_remove auto 'a b' 'a\x20b'
 
201
check_create_and_remove auto 'a\x20b' 'a\x20b'
 
202
check_create_and_remove auto 'a b\x20c' 'FAIL_MIXED'
 
203
check_create_and_remove auto 'a\x5cx20b' 'FAIL_MULTI'
 
204
 
 
205
check_expected_names auto 'a b' 'FAIL_BLACK' 'FAIL_BLACK' 'FAIL_BLACK'
 
206
check_expected_names auto 'a\x20b' 'a b' 'a\x20b' 'a b'
 
207
check_expected_names auto 'a b\x20c' 'FAIL_BLACK' 'FAIL_BLACK' 'FAIL_BLACK'
 
208
check_expected_names auto 'a\x5cx20b' 'FAIL_MULTI' 'FAIL_MULTI' 'FAIL_MULTI'
 
209
 
 
210
check_mangle_cmd auto 'a b' 'a\x20b'
 
211
check_mangle_cmd auto 'a\x20b' 'OK'
 
212
check_mangle_cmd auto 'a b\x20c' 'FAIL_MIXED'
 
213
check_mangle_cmd auto 'a\x5cx20b' 'FAIL_MULTI'
 
214
 
 
215
 
 
216
### HEX MANGLING MODE ###
 
217
check_create_and_remove hex 'a b' 'a\x20b'
 
218
check_create_and_remove hex 'a\x20b' 'a\x5cx20b'
 
219
check_create_and_remove hex 'a b\x20c' 'a\x20b\x5cx20c'
 
220
check_create_and_remove hex 'a\x5cx20b' 'a\x5cx5cx20b'
 
221
 
 
222
check_expected_names hex 'a b' 'FAIL_BLACK' 'FAIL_BLACK' 'FAIL_BLACK'
 
223
check_expected_names hex 'a\x20b' 'a b' 'a\x20b' 'a b'
 
224
check_expected_names hex 'a b\x20c' 'FAIL_BLACK' 'FAIL_BLACK' 'FAIL_BLACK'
 
225
check_expected_names hex 'a\x5cx20b' 'a\x20b' 'a\x5cx20b' 'a\x20b'
 
226
 
 
227
check_mangle_cmd hex 'a b' 'a\x20b'
 
228
check_mangle_cmd hex 'a\x20b' 'OK'
 
229
check_mangle_cmd hex 'a b\x20c' 'FAIL_MIXED'
 
230
check_mangle_cmd hex 'a\x5cx20b' 'OK'