mirror of
https://github.com/Llewellynvdm/Tomb.git
synced 2024-11-22 04:25:12 +00:00
more code to integrate gui elements and script
This commit is contained in:
parent
0bd8f4b4b6
commit
bd370c1ef5
47
src/monmort.xpm
Normal file
47
src/monmort.xpm
Normal file
@ -0,0 +1,47 @@
|
||||
/* XPM */
|
||||
|
||||
/* The Tomb icon is an artwork by Jordi aka MonMort
|
||||
a nomadic graffiti artist from Barcelona */
|
||||
|
||||
const char *monmort[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"32 32 5 1",
|
||||
" c #000000",
|
||||
". c #010101",
|
||||
"X c #020202",
|
||||
"o c #C1C1C1",
|
||||
"O c None",
|
||||
/* pixels */
|
||||
"OO OO",
|
||||
"O oooooooooooooooooooooooooooo O",
|
||||
" oooooooooooooooooooooooooooooo ",
|
||||
" oooooooooooooooooooooooooooooo ",
|
||||
" oooooooo X oooooo ooo ",
|
||||
" oooooooo oooooo ooo ",
|
||||
" oooooooo oooooo ooo ",
|
||||
" oooooooo oooooo oooX",
|
||||
" oooooooo X oooooo ooo ",
|
||||
" oooooooo oooooo ooo ",
|
||||
" oooooooo Xoooooo ooo ",
|
||||
" oooooooo oooooo X ooo ",
|
||||
" oooooooo X oooooo ooo ",
|
||||
" oooooooooooooooooooooooooooooo ",
|
||||
" oooooooooooooooooooooo oooooooX",
|
||||
" ooooooooooooooooooooooo oooooo ",
|
||||
" oooooooooooooooo X ooooo ",
|
||||
"O ooooooooooooooooooooooooooooo ",
|
||||
"OO oooooooooooooooooo O",
|
||||
"OOOOOOOOOOOO oooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo oooXooo OO",
|
||||
"OOOOOOOOOOOOO oooXooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo oooXOO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOOXooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooooooooooooooo OO",
|
||||
"OOOOOOOOOOOOOO ooooooooooooo OOO",
|
||||
"OOOOOOOOOOOOOOO OOOO"
|
||||
};
|
67
src/tomb
67
src/tomb
@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
#!/bin/zsh
|
||||
#
|
||||
# Tomb
|
||||
#
|
||||
@ -30,7 +30,7 @@
|
||||
VERSION=0.9
|
||||
DATE=Jan/2011
|
||||
|
||||
PATH=/usr/bin:/usr/sbin:/bin:/sbin
|
||||
# PATH=/usr/bin:/usr/sbin:/bin:/sbin
|
||||
|
||||
# standard output message routines
|
||||
# it's always useful to wrap them, in case we change behaviour later
|
||||
@ -126,6 +126,11 @@ ask_password() {
|
||||
|
||||
}
|
||||
|
||||
# drop privileges
|
||||
exec_as_user() {
|
||||
func "executing as user '$SUDO_USER': ${(f)@}"
|
||||
sudo -u $SUDO_USER ${@} &
|
||||
}
|
||||
|
||||
|
||||
############################
|
||||
@ -134,16 +139,15 @@ ask_password() {
|
||||
|
||||
notice "Tomb - simple commandline tool for encrypted storage"
|
||||
act "version $VERSION ($DATE) by Jaromil @ dyne.org"
|
||||
act ""
|
||||
func "invoked with args \"$*\" "
|
||||
func "invoked with args \"${(f)@}\" "
|
||||
func "running on `date`"
|
||||
|
||||
|
||||
OPTS=`getopt -o hvs:k: -n 'tomb' -- "$@"`
|
||||
|
||||
OPTS=`getopt -o hvs:k:S -n 'tomb' -- "$@"`
|
||||
while true; do
|
||||
case "$1" in
|
||||
-h)
|
||||
act ""
|
||||
notice "Syntax: tomb [options] command [file] [mountpoint | size]"
|
||||
act ""
|
||||
notice "Options:"
|
||||
@ -151,6 +155,7 @@ while true; do
|
||||
act "-v print out the version information for this tool"
|
||||
act "-s size of the storage file when creating one (in MBytes)"
|
||||
act "-k path to the key to use for decryption"
|
||||
act "-S acquire super user rights if possible"
|
||||
act ""
|
||||
notice "Commands:"
|
||||
act "create create a new encrypted storage FILE and keys"
|
||||
@ -159,6 +164,7 @@ while true; do
|
||||
echo; exit 2 ;;
|
||||
-v)
|
||||
# print out the GPL license in this file
|
||||
act ""
|
||||
cat $0 | awk '
|
||||
BEGIN { license=0 }
|
||||
/^# This source/ { license=1 }
|
||||
@ -167,6 +173,37 @@ BEGIN { license=0 }
|
||||
'
|
||||
act ""
|
||||
exit 0 ;;
|
||||
-S) GETPRIV=true; shift 1 ;;
|
||||
*) break ;;
|
||||
esac
|
||||
done
|
||||
|
||||
id | grep root > /dev/null
|
||||
if [ $? != 0 ]; then
|
||||
error "This program must be run as root to produce results"
|
||||
if [ "$GETPRIV" = "true" ]; then
|
||||
which gksu > /dev/null
|
||||
if [ $? = 0 ]; then
|
||||
act "Using gksu for root execution of 'tomb ${(f)@}'"
|
||||
gksu "tomb ${(f)@}"
|
||||
exit $?
|
||||
fi
|
||||
which sudo > /dev/null
|
||||
if [ $? = 0 ]; then
|
||||
act "Using sudo for root execution of 'tomb ${(f)@}'"
|
||||
sudo "tomb ${(f)@}"
|
||||
exit $?
|
||||
fi
|
||||
exit 1
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# now process the real options
|
||||
OPTS=`getopt -o hvs:k:S -n 'tomb' -- "$@"`
|
||||
while true; do
|
||||
case "$1" in
|
||||
-s) SIZE=$2; shift 2 ;;
|
||||
-k) KEY=$2; shift 2 ;;
|
||||
--) shift; break ;;
|
||||
@ -180,11 +217,7 @@ if [ -z $CMD ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
id | grep root > /dev/null
|
||||
if [ $? != 0 ]; then
|
||||
error "This program must be run as root to produce results"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
func "command: $CMD for file $FILE"
|
||||
|
||||
@ -193,7 +226,7 @@ tombtab=${tombdir}/fstab
|
||||
if ! [ -r ${tombtab} ]; then
|
||||
act "creating tomb filesystem tab in your home"
|
||||
mkdir -p ${HOME}/.tomb
|
||||
echo "# entombed filesystem information, see man tomb" > ${tombtab}
|
||||
echo "# entombed filesystem information, see man tomb (TODO)" > ${tombtab}
|
||||
echo "# format here is similar to the system wide fstab" >> ${tombtab}
|
||||
echo "# <file system> <mount point> <type> <options> <key>" >> ${tombtab}
|
||||
fi
|
||||
@ -379,7 +412,9 @@ mount_tomb() {
|
||||
mount -t ext4 -o rw,noatime,nodev /dev/mapper/${mapper} ${MOUNT}
|
||||
|
||||
notice "encrypted storage $FILE succesfully mounted on $MOUNT"
|
||||
|
||||
if [ $DISPLAY ]; then
|
||||
exec_as_user tomb-gtk ${FILE} ${MOUNT}
|
||||
fi
|
||||
}
|
||||
|
||||
umount_tomb() {
|
||||
@ -388,7 +423,7 @@ umount_tomb() {
|
||||
|
||||
how_many_tombs="`ls /dev/mapper/tomb* 2>/dev/null | wc -w`"
|
||||
if [ $how_many_tombs = 0 ]; then
|
||||
error "there is no tomb found to be mounted"
|
||||
error "there is no open tomb to be closed"
|
||||
return
|
||||
elif [ $how_many_tombs = 1 ]; then
|
||||
mapper=`ls /dev/mapper/tomb* 2>/dev/null`
|
||||
@ -450,6 +485,8 @@ umount_tomb() {
|
||||
# fi
|
||||
|
||||
notice "crypt storage ${mapper} unmounted"
|
||||
exec_as_user tomb-notify "Tomb closed:" "${FILE}
|
||||
Rest In Peace."
|
||||
}
|
||||
|
||||
|
||||
@ -457,8 +494,10 @@ case "$CMD" in
|
||||
create) create_tomb ;;
|
||||
format) format_tomb ;;
|
||||
mount) mount_tomb ;;
|
||||
open) mount_tomb ;;
|
||||
umount) umount_tomb ;;
|
||||
unmount) umount_tomb ;;
|
||||
close) umount_tomb ;;
|
||||
*) error "command \"$CMD\" not recognized"
|
||||
act "try -h for help"
|
||||
;;
|
||||
|
114
src/tomb-gtk.cpp
114
src/tomb-gtk.cpp
@ -1,106 +1,90 @@
|
||||
/* Tomb - encrypted storage undertaker
|
||||
*
|
||||
* (c) Copyright 2007-2011 Denis Roio <jaromil@dyne.org>
|
||||
*
|
||||
* This source code is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Public License as published
|
||||
* by the Free Software Foundation; either version 3 of the License,
|
||||
* or (at your option) any later version.
|
||||
*
|
||||
* This source code is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* Please refer to the GNU Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Public License along with
|
||||
* this source code; if not, write to:
|
||||
* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <libnotify/notify.h>
|
||||
|
||||
/* The Tomb icon is an artwork by Jordi aka MonMort
|
||||
a nomadic graffiti artist from Barcelona */
|
||||
const char *monmort[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"32 32 5 1",
|
||||
" c #000000",
|
||||
". c #010101",
|
||||
"X c #020202",
|
||||
"o c #C1C1C1",
|
||||
"O c None",
|
||||
/* pixels */
|
||||
"OO OO",
|
||||
"O oooooooooooooooooooooooooooo O",
|
||||
" oooooooooooooooooooooooooooooo ",
|
||||
" oooooooooooooooooooooooooooooo ",
|
||||
" oooooooo X oooooo ooo ",
|
||||
" oooooooo oooooo ooo ",
|
||||
" oooooooo oooooo ooo ",
|
||||
" oooooooo oooooo oooX",
|
||||
" oooooooo X oooooo ooo ",
|
||||
" oooooooo oooooo ooo ",
|
||||
" oooooooo Xoooooo ooo ",
|
||||
" oooooooo oooooo X ooo ",
|
||||
" oooooooo X oooooo ooo ",
|
||||
" oooooooooooooooooooooooooooooo ",
|
||||
" oooooooooooooooooooooo oooooooX",
|
||||
" ooooooooooooooooooooooo oooooo ",
|
||||
" oooooooooooooooo X ooooo ",
|
||||
"O ooooooooooooooooooooooooooooo ",
|
||||
"OO oooooooooooooooooo O",
|
||||
"OOOOOOOOOOOO oooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo oooXooo OO",
|
||||
"OOOOOOOOOOOOO oooXooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo oooXOO",
|
||||
"OOOOOOOOOOOOO ooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOOXooo ooo ooo ooo OO",
|
||||
"OOOOOOOOOOOOO ooooooooooooooo OO",
|
||||
"OOOOOOOOOOOOOO ooooooooooooo OOO",
|
||||
"OOOOOOOOOOOOOOO OOOO"
|
||||
};
|
||||
|
||||
#include <monmort.xpm>
|
||||
|
||||
GtkStatusIcon *status_tomb;
|
||||
GtkMenu *menu_tomb;
|
||||
|
||||
NotifyNotification *notice;
|
||||
GError *error;
|
||||
|
||||
// forward declaration of callbacks
|
||||
gboolean left_click(GtkWidget *w, GdkEvent *e);
|
||||
gboolean cb_open(GtkWidget *w, GdkEvent *e);
|
||||
gboolean cb_quit(GtkWidget *w, GdkEvent *e);
|
||||
|
||||
gboolean cb_close(GtkWidget *w, GdkEvent *e);
|
||||
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
GObject *tray;
|
||||
GdkPixbuf *pb_monmort;
|
||||
GtkWidget *menu_open, *menu_close, *menu_quit;
|
||||
GtkWidget *menu_close;
|
||||
gint menu_x, menu_y;
|
||||
gboolean push_in = true;
|
||||
|
||||
char tomb_file[512];
|
||||
|
||||
gtk_set_locale();
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
// libnotify
|
||||
notify_init(PACKAGE);
|
||||
|
||||
// set and show the status icon
|
||||
pb_monmort = gdk_pixbuf_new_from_xpm_data(monmort);
|
||||
status_tomb = gtk_status_icon_new_from_pixbuf(pb_monmort);
|
||||
// gtk_status_icon_set_name(status_tomb, "tomb");
|
||||
gtk_status_icon_set_title(status_tomb, "Tomb");
|
||||
gtk_status_icon_set_tooltip_text (status_tomb, "Tomb - encrypted storage undertaker");
|
||||
gtk_status_icon_set_tooltip_text (status_tomb, "Tomb - crypto undertaker");
|
||||
|
||||
// gtk_status_icon_set_blinking(status_tomb, true);
|
||||
menu_tomb = (GtkMenu*) gtk_menu_new();
|
||||
|
||||
menu_open = gtk_menu_item_new_with_label("Open");
|
||||
gtk_menu_attach(menu_tomb, menu_open, 0, 1, 0, 1);
|
||||
g_signal_connect_swapped(menu_open, "activate", G_CALLBACK(cb_open), NULL);
|
||||
gtk_widget_show(menu_open);
|
||||
|
||||
menu_close = gtk_menu_item_new_with_label("Close");
|
||||
gtk_menu_attach(menu_tomb, menu_close, 0, 1, 1, 2);
|
||||
gtk_menu_attach(menu_tomb, menu_close, 0, 1, 0, 1);
|
||||
g_signal_connect_swapped(menu_close, "activate", G_CALLBACK(cb_close), NULL);
|
||||
gtk_widget_show(menu_close);
|
||||
|
||||
menu_quit = gtk_menu_item_new_with_label("Quit");
|
||||
gtk_menu_attach(menu_tomb, menu_quit, 0, 1, 2, 3);
|
||||
g_signal_connect_swapped(menu_quit, "activate", G_CALLBACK(cb_quit), NULL);
|
||||
gtk_widget_show(menu_quit);
|
||||
|
||||
|
||||
g_signal_connect_swapped(status_tomb, "activate", G_CALLBACK(left_click), menu_tomb);
|
||||
|
||||
notice = notify_notification_new_with_status_icon
|
||||
("Tomb encrypted undertaker",
|
||||
"We started digging out bones",
|
||||
NULL, status_tomb);
|
||||
notify_notification_set_icon_from_pixbuf(notice, pb_monmort);
|
||||
|
||||
notify_notification_show(notice, &error);
|
||||
|
||||
gtk_main();
|
||||
|
||||
notify_uninit();
|
||||
|
||||
exit(0);
|
||||
|
||||
|
||||
}
|
||||
|
||||
// callbacks
|
||||
@ -109,7 +93,7 @@ gboolean left_click(GtkWidget *w, GdkEvent *e) {
|
||||
gtk_status_icon_position_menu, status_tomb,
|
||||
1, gtk_get_current_event_time());
|
||||
}
|
||||
gboolean cb_open(GtkWidget *w, GdkEvent *e) {
|
||||
execlp("tomb","tomb","mount","sarcofago","/mnt/etrom",NULL);
|
||||
gboolean cb_close(GtkWidget *w, GdkEvent *e) {
|
||||
execlp("tomb","tomb","-S","umount",NULL);
|
||||
gtk_main_quit();
|
||||
}
|
||||
gboolean cb_quit(GtkWidget *w, GdkEvent *e) { gtk_main_quit(); }
|
||||
|
70
src/tomb-notify.cpp
Normal file
70
src/tomb-notify.cpp
Normal file
@ -0,0 +1,70 @@
|
||||
/* Tomb - encrypted storage undertaker
|
||||
*
|
||||
* (c) Copyright 2007-2011 Denis Roio <jaromil@dyne.org>
|
||||
*
|
||||
* This source code is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Public License as published
|
||||
* by the Free Software Foundation; either version 3 of the License,
|
||||
* or (at your option) any later version.
|
||||
*
|
||||
* This source code is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* Please refer to the GNU Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Public License along with
|
||||
* this source code; if not, write to:
|
||||
* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
// this file is a notification tool to send messages on the screen
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <libnotify/notify.h>
|
||||
|
||||
/* The Tomb icon is an artwork by Jordi aka MonMort
|
||||
a nomadic graffiti artist from Barcelona */
|
||||
#include <monmort.xpm>
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
NotifyNotification *notice;
|
||||
GError *error;
|
||||
GdkPixbuf *pb_monmort;
|
||||
|
||||
char title[256];
|
||||
char body[512];
|
||||
|
||||
gtk_set_locale();
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
// libnotify
|
||||
notify_init(PACKAGE);
|
||||
|
||||
if(argc<3)
|
||||
snprintf(body,511, "I'm the crypto undertaker.\nLet's start digging out bones.");
|
||||
else
|
||||
snprintf(body,511, "%s", argv[2]);
|
||||
|
||||
if(argc<2)
|
||||
snprintf(title,255,"%s version %s",PACKAGE,VERSION);
|
||||
else
|
||||
snprintf(title,255, "%s", argv[1]);
|
||||
|
||||
// set the icon
|
||||
pb_monmort = gdk_pixbuf_new_from_xpm_data(monmort);
|
||||
|
||||
notice = notify_notification_new(title, body, NULL, NULL);
|
||||
notify_notification_set_icon_from_pixbuf(notice, pb_monmort);
|
||||
|
||||
notify_notification_show(notice, &error);
|
||||
|
||||
notify_uninit();
|
||||
|
||||
usleep(.5);
|
||||
|
||||
exit(0);
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user