/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to initramfs-unpack

  • Committer: Teddy Hogeborn
  • Date: 2008-08-16 03:29:08 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080816032908-ihw7c05r2mnyk389
Add feature to specify custom environment variables for plugins.

* plugin-runner.c (plugin): New members "environ" and "envc" to
                            contain possible custom environment.
  (getplugin): Return NULL on failure instead of doing exit(); all
               callers changed.
  (add_to_char_array): New helper function for "add_argument" and
                       "add_environment".
  (addargument): Renamed to "add_argument".  Return bool.  Call
                 "add_to_char_array" to actually do things.
  (add_environment): New; analogous to "add_argument".
  (addcustomargument): Renamed to "add_to_argv" to avoid confusion
                       with "add_argument".
  (main): New options "--global-envs" and "--envs-for" to specify
          custom environment for plugins.  Print environment for
          plugins in debug mode.  Use asprintf instead of strcpy and
          strcat.  Use execve() for plugins with custom environments.
          Free environment for plugin when freeing plugin list.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/bin/bash
2
 
3
 
# Initramfs unpacker - unpacks initramfs images into /tmp
4
 
5
 
# Copyright © 2013 Teddy Hogeborn
6
 
# Copyright © 2013 Björn Påhlsson
7
 
8
 
# This program is free software: you can redistribute it and/or modify
9
 
# it under the terms of the GNU General Public License as published by
10
 
# the Free Software Foundation, either version 3 of the License, or
11
 
# (at your option) any later version.
12
 
#
13
 
#     This program is distributed in the hope that it will be useful,
14
 
#     but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 
#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 
#     GNU General Public License for more details.
17
 
18
 
# You should have received a copy of the GNU General Public License
19
 
# along with this program.  If not, see
20
 
# <http://www.gnu.org/licenses/>.
21
 
22
 
# Contact the authors at <mandos@recompile.se>.
23
 
 
24
 
cpio="cpio --extract --make-directories --unconditional --preserve-modification-time"
25
 
 
26
 
if [ -z "$*" ]; then
27
 
    set -- /boot/initrd.img-*
28
 
fi
29
 
 
30
 
for imgfile in "$@"; do
31
 
    if ! [ -f "$imgfile" ]; then
32
 
        echo "Error: Not an existing file: $imgfile" >&2
33
 
        continue
34
 
    fi
35
 
    imgdir="${TMPDIR:-/tmp}/${imgfile##*/}"
36
 
    if [ -d "$imgdir" ]; then
37
 
        rm --recursive -- "$imgdir"
38
 
    fi
39
 
    mkdir --parents "$imgdir"
40
 
    # Does this image contain microcode?
41
 
    if $cpio --quiet --list --file="$imgfile" >/dev/null 2>&1; then
42
 
        # Number of bytes to skip to get to the compressed archive
43
 
        skip=$(($(LANG=C $cpio --io-size=1 --list --file="$imgfile" 2>&1 \
44
 
            | sed --quiet --expression='s/^\([0-9]\+\) blocks$/\1/p')+8))
45
 
        catimg="dd if=$imgfile bs=$skip skip=1 status=noxfer"
46
 
    else
47
 
        catimg="cat -- $imgfile"
48
 
    fi
49
 
    # Determine the compression method
50
 
    if { $catimg 2>/dev/null | zcat --test >/dev/null 2>&1;
51
 
            [ ${PIPESTATUS[-1]} -eq 0 ]; }; then
52
 
        decomp="zcat"
53
 
    elif { $catimg 2>/dev/null | bzip2 --test >/dev/null 2>&1;
54
 
            [ ${PIPESTATUS[-1]} -eq 0 ]; }; then
55
 
        decomp="bzip2 --stdout --decompress"
56
 
    elif { $catimg 2>/dev/null | lzop --test >/dev/null 2>&1;
57
 
            [ ${PIPESTATUS[-1]} -eq 0 ]; }; then
58
 
        decomp="lzop --stdout --decompress"
59
 
    else
60
 
        echo "Error: Could not determine type of $imgfile" >&2
61
 
        continue
62
 
    fi
63
 
    $catimg 2>/dev/null | $decomp | ( cd -- "$imgdir" && $cpio --quiet )
64
 
    if [ ${PIPESTATUS[-1]} -eq 0 ]; then
65
 
        echo "$imgfile unpacked into $imgdir"
66
 
    fi
67
 
done