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