/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-02 10:48:24 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080802104824-fx0miwp9o4g9r31e
* plugbasedclient.c (struct process): New fields "eof", "completed",
                                      and "status".
  (handle_sigchld): New function.
  (main): Initialize "dir" to NULL to only closedir() it if necessary.
          Move "process_list" to be a global variable to be accessible
          by "handle_sigchld".  Make "handle_sigchld" handle SIGCHLD.
          Remove redundant check for NULL "dir".  Free "filename" when
          no longer used.  Block SIGCHLD around fork()/exec().
          Restore normal signals in child.  Only loop while running
          processes exist.  Print process buffer when the process is
          done and it has emitted EOF, not when it only emits EOF.
          Remove processes from list which exit non-cleanly.  In
          cleaning up, closedir() if necessary.  Bug fix: set next
          pointer correctly when freeing process list.

* plugins.d/passprompt.c (main): Do not ignore SIGQUIT.

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