URI: 
       tfixes to tomb-status - tomb - the crypto undertaker
  HTML git clone git://parazyd.org/tomb.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 23244bdedd5a4a9b36a01a1111e2aa41ecfa6d6f
   DIR parent 12f92e7aeff3d31545753de8d6c9678cb2c914bd
  HTML Author: Jaromil <jaromil@dyne.org>
       Date:   Wed,  9 Feb 2011 20:35:11 +0100
       
       fixes to tomb-status
       
       Diffstat:
         M src/tomb-open                       |      93 +++++++++++++++++--------------
         M src/tomb-status.c                   |      49 ++++++++++++++++++++++---------
       
       2 files changed, 85 insertions(+), 57 deletions(-)
       ---
   DIR diff --git a/src/tomb-open b/src/tomb-open
       t@@ -1,4 +1,4 @@
       -#!/bin/zsh
       +#!/bin/zsh -x
        #
        # Tomb, the Crypto Undertaker
        #
       t@@ -23,48 +23,63 @@
        # startup wrapper to open tombs
        
        
       +echo "arg: $1"
       +
        try() {
            which ${1} > /dev/null
            if [ $? = 0 ]; then return 0;
            else return -1; fi
        }
                
       -# if no arguments are given, run in terminal 
       -if [ -z $1 ]; then
       -    try gnome-terminal; if [ $? = 0 ]; then gnome-terminal -e "tomb-open create"; exit 0; fi
       -    try lxterm; if [ $? = 0 ]; then lxterm -bg black -fg white -e "tomb-open create"; exit 0; fi
       -    try urxvt; if [ $? = 0 ]; then urxvt -bg black -fg white -e "tomb-open create"; exit 0; fi
       -    try uxterm; if [ $? = 0 ]; then uxterm -bg black -fg white -e "tomb-open create"; exit 0; fi
       -    try xterm; if [ $? = 0 ]; then xterm -bg black -fg white -e "tomb-open create"; exit 0; fi
       -    exit 1
       -fi
        
        
       -# got a directory as argument
       -if [ -d $1 ]; then
       +
       +# got an argument
       +if [ $1 ]; then
       +# is it a tomb?
       +    arg="${1%%\.*}.tomb"
       +
       +    if [ -f $arg ]; then
       +        file $arg | grep LUKS
       +
       +        if [ $? = 0 ]; then # tomb is a valid LUKS file
       +
       +            tomb mount $arg
       +
       +            if [ $? = 0 ]; then        # mount was succesfull (with password and all)
       +            # strip extension if there
       +                tombname="${arg%%.*}"
       +                tombmap=`mount -l | awk "/\[${tombname}\]$/"' { print $1 } '`
       +                tombmount=`mount -l | awk "/\[${tombname}\]$/"' { print $3 } '`
       +                tomb-status $tombmap $tombname $tombmount &!
       +                exit 0
       +            else
       +                tomb notify "Tomb cannot open." "Are you knocking the wrong door?"
       +                exit 1
       +            fi
       +        else
       +            tomb notify "Not a real Tomb." "We found no real bones in there."
       +            exit 1
       +        fi
       +
       +
       +    elif [ -d $1 ]; then
       +        # its a directory
       +        
        # FIXME: somehow xdg-open loses mailcap mimes when executed by tomb-status
        #   try xdg-open; if [ $? = 0 ]; then xdg-open ${1}; exit 0; fi
       -    try gnome-open; if [ $? = 0 ]; then gnome-open ${1}; exit 0; fi
       -    try thunar; if [ $? = 0 ]; then thunar ${1}; exit 0; fi
       -    try rox; if [ $? = 0 ]; then rox ${1}; exit 0; fi
       -    try fsviewer; if [ $? = 0 ]; then fsviewer ${1}; exit 0; fi
       -    try xnc; if [ $? = 0 ]; then xnc ${1}; exit 0; fi
       -    tomb notify "File manager not found." "Tomb cannot guess which filemanager you are using"
       -    exit 1
       -fi
       -
       -# got a tomb as argument?
       -if [ -f $1 ]; then
       -    file $1 | grep LUKS
       -    if [ $? = 0 ]; then
       -        tomb mount $1
       -        exit $?
       -    else
       -        tomb notify "Not a real Tomb." "We found no real bones in there."
       +        try gnome-open; if [ $? = 0 ]; then gnome-open ${1}; exit 0; fi
       +        try thunar; if [ $? = 0 ]; then thunar ${1}; exit 0; fi
       +        try pcmanfm; if [ $? = 0 ]; then pcmanfm ${1}; exit 0; fi        
       +        try rox; if [ $? = 0 ]; then rox ${1}; exit 0; fi
       +        try fsviewer; if [ $? = 0 ]; then fsviewer ${1}; exit 0; fi
       +#        try xnc; if [ $? = 0 ]; then xnc ${1}; exit 0; fi
       +        tomb notify "File manager not found." "Tomb cannot guess which filemanager you are using"
                exit 1
            fi
        fi
        
       +
        # no argument but on graphical display: creation dialog
        if [ -z $DISPLAY ]; then
            echo "[!] tomb-open is a wrapper for the command 'tomb'"
       t@@ -72,11 +87,7 @@ if [ -z $DISPLAY ]; then
            exit 1
        fi
        
       -if [ "$1" != "create" ]; then
       -    exit 0
       -fi
       -
       -# start guided tomb creation
       +# no arguments: start guided tomb creation
        tomb notify
        cat <<EOF
        Create a new Tomb
       t@@ -134,15 +145,11 @@ tomb create ${filename}.tomb $size
        
        if [ $? != 0 ]; then
            echo "An error occurred creating tomb, operation aborted."
       -    tomb kill
       -    echo "Press any key to close this terminal."
       -    read -q
            exit 1
        fi
       -if ! [ -r /usr/share/applications/tomb.desktop ]; then
       -    echo "  Well done!"
       -    echo "  Now the last thing to do is to install Tomb on your desktop:"
       -    sudo tomb install
       -fi
       +# if ! [ -r /usr/share/applications/tomb.desktop ]; then
       +#     echo "  Well done!"
       +#     echo "  Now the last thing to do is to install Tomb on your desktop:"
       +#     sudo tomb install
       +# fi
        
       -exit 0
   DIR diff --git a/src/tomb-status.c b/src/tomb-status.c
       t@@ -145,27 +145,39 @@ gboolean left_click(GtkWidget *w, GdkEvent *e) {
          return TRUE;
        } 
        gboolean cb_view(GtkWidget *w, GdkEvent *e) { 
       -  // GtkWidget *dialog = 
       -  //   gtk_message_dialog_new (NULL,
       -  //                             GTK_DIALOG_DESTROY_WITH_PARENT,
       -  //                             GTK_MESSAGE_INFO,
       -  //                             GTK_BUTTONS_CLOSE,
       -  //                             "Tomb '%s' open on '%s'\n"
       -  //                             "device mapper: %s", filename, mountpoint, mapper);
       -  // gtk_dialog_run (GTK_DIALOG (dialog));
       -  // gtk_widget_destroy (dialog);
       -  pid_t cpid = fork();
       +  int pipefd[2];
       +  pid_t cpid;
       +  char buf;
       +  int c, res;
       +  char map[256];
       +
       +  if (pipe(pipefd) <0) {
       +    fprintf(stderr,"pipe creation error: %s\n", strerror(errno));
       +    return FALSE;
       +  }
       +
       +  cpid = fork();
          if (cpid == -1) {
       -    fprintf(stderr,"error: problem forking process\n");
       +    fprintf(stderr,"fork error: %s\n", strerror(errno));
            return FALSE;
          }
          if (cpid == 0) {    // Child
       -    execlp("tomb-open", "tomb-open", mountpoint ,(char*)NULL);
       -    exit(1);
       +    close(pipefd[1]); // close unused write end
       +    for(c=0; read(pipefd[0], &buf, 1) > 0; c++)
       +      map[c] = buf;
       +    close(pipefd[0]);
       +    map[c] = 0;
       +    execlp("tomb-open", "tomb-open", map, (char*)NULL);
       +    _exit(1);
          }
       +  close(pipefd[0]); // close unused read end
       +  write(pipefd[1], mountpoint, strlen(mountpoint));
       +  close(pipefd[1]); // reader will see EOF
       +
          return TRUE;
        }
        
       +
        gboolean cb_close(GtkWidget *w, GdkEvent *e) { 
          int pipefd[2];
          pid_t cpid;
       t@@ -189,7 +201,7 @@ gboolean cb_close(GtkWidget *w, GdkEvent *e) {
            for(c=0; read(pipefd[0], &buf, 1) > 0; c++)
              map[c] = buf;
            close(pipefd[0]);
       -    map[c] = '\n';
       +    map[c] = 0;
            execlp("tomb", "tomb", "close", map, (char*)NULL);
            _exit(1);
          }
       t@@ -257,3 +269,12 @@ gboolean cb_about(GtkWidget *w, GdkEvent *e) {
        }
          
        
       +  // GtkWidget *dialog = 
       +  //   gtk_message_dialog_new (NULL,
       +  //                             GTK_DIALOG_DESTROY_WITH_PARENT,
       +  //                             GTK_MESSAGE_INFO,
       +  //                             GTK_BUTTONS_CLOSE,
       +  //                             "Tomb '%s' open on '%s'\n"
       +  //                             "device mapper: %s", filename, mountpoint, mapper);
       +  // gtk_dialog_run (GTK_DIALOG (dialog));
       +  // gtk_widget_destroy (dialog);