#!/bin/sh
# Copyright 2006, 2007  Marcos Henrique Esteves Barbosa <marcosestevesbarbosa@gmail.com>
# Heavily based in rpm2tgz script created by Patrick Volkerding
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#

if [ "$1" = "" ]; then
    echo "$0:  Converts DEB format to standard GNU tar + GNU zip format."
    echo "            (view converted packages with \"less\", install and remove"
    echo "            with \"installpkg\", \"removepkg\", \"pkgtool\", or manually"
    echo "            with \"tar\")"
    echo
    echo "Usage:      $0 <file.deb>"
    if [ "`basename $0`" = "deb2tgz" ]; then
	echo "            (Outputs \"file.tgz\")"
    else
	echo "            (Outputs \"file.tar.gz\")"
    fi
    exit 1;
fi

# Create a new temporary directory with a secure filename:
make_temp_dir()
{
    if [ -x "$(which mcookie)" ]; then
	tempd=/tmp/tmp.$(mcookie)
	mkdir -p -m 0755 $tempd
    elif [ -x "$(which openssl)" ]; then
	tempd=/tmp/tmp.$(dd if=/dev/urandom bs=1k count=1 2> /dev/null | openssl dgst -md5)
	mkdir -p -m 0755 $tempd
    elif [ -x "$(which md5)" ]; then
	tempd=/tmp/tmp.$(dd if=/dev/urandom bs=1k count=1 2> /dev/null | md5)
	mkdir -p -m 0755 $tempd
    elif [ -x "$(which mktemp)" ]; then
	tempd=$(mktemp -d)
	chmod 755 $tempd
    ## Uncomment for insecure use, but don't blame me:
    #else
    #  tempd=/tmp/tmp.$$
    #  mkdir -p -m 0755 $tempd
    fi
    if [ -d $tempd ]; then # success, return the name of the directory:
	echo $tempd
    else
	echo "ERROR:  Could not find mcookie, openssl, or md5."
	echo "        Exiting since a secure temporary directory could not be made."
	exit 1
    fi
}

for i in $* ; do
  
    # Determine if this is a source or binary DEB.
    if file $i | grep Debian | grep " src " 1> /dev/null 2> /dev/null ; then
        isSource=1
    else
        isSource=0
    fi

    # Create a temporary directory:
    TMPDIR=$(make_temp_dir)

    # Extract the DEB:
    # Extract the file data.tar.gz from package $i and move to location indicated by the  variable $ofn
    ar x $i data.tar.gz 2> /dev/null
    mv data.tar.gz $TMPDIR
    if [ ! $? = 0 ]; then
        echo "ERROR:  ar failed. (maybe $i is not an DEB?)"
	rm -rf $TMPDIR
        continue
    fi
#    DEST=$TMPDIR
    # If the package is source ...
#    if [ "$isSource" = "1" ]; then
#	DEST=$DEST/$(basename $(basename $i .deb) .src)
#    fi
#    mkdir -p $DEST
#    ( cd $DEST
#    ar x $ofn 1> /dev/null 2> /dev/null
#    rm -f $ofn
#    find . -type d -perm 700 -exec chmod 755 {} \;
#    )

    # Repack the files in a tar+gz archive:
#    ( cd $TMPDIR ; tar cf - . ) > `basename $i .deb`.tar
#    gzip -9 `basename $i .deb`.tar
    if [ "`basename $0`" = "deb2tgz" ]; then
	mv $TMPDIR/data.tar.gz $(basename $i .deb).tgz
    fi

    # Remove temporary directory:
    rm -rf $TMPDIR

done
