mount verschlüsseltes FS mit eigenem Programm

Also gut, ich bin gerade dabei, mir ein Programm zu schreiben (in C++), welches mich nach mehreren Passwörtern fragt und daraus dann ein längeres macht. Mit diesem Passwort soll dann ein verschlüssltes FS (in diesem Fall erstmal eine kleine Countainer-Datei mit ext2) gemountet werden. Von Hand mounten und so klappt aber wie ich das im Programm machen soll, weiß ich nicht. Irgendwie "mount" aufrufen?! Etwas unsauber, und ich hab kA wie ich dann das Passwort übergeben muss. Per mount-Befehl (man 2 mount) weiß ich auch nicht, wie ich dem dann das Passwort mitteilen muss.

Ich hoffe mein Problem ist klar...

Code:
mount -o encryption=twofish,loop ./test.img /mnt
Passwort:

Nachtrag: Mit dem mount-Befehl (man 2 mount) bekomm ich nichtmal ein normales Images gemountet... Naja, hab mir mal den source von mount und losetup angeschaut... (dass will ich eigentlich etwas eleganter lösen...)
 
Hi,

in C gibt es einen Befehl "command()" oder so. Unter DOS kann man damit einen Befehl aufrufen.
Bei Dir müsste es also:

command("mount -o encryption=twofish,loop ./test.img /mnt");

heissen. Wichtig dabei ist aber, dass du ein eventuelles Passwort direkt in der Komandozeile einträgst.

Ob dieser befehl unter Linux verfügbar ist, weiss ich nicht. meine Schwester hat z.Z. meine Befehlsreferenzbuch.

Gruß
Elmar
 
Ich kenn den "system()" Befehl, aber ich weiß ja ebend nicht, wie ich dann von meinem Programm aus das Passwort übergeben soll... :(

Ich hab mir nochmal den source von losetup angeschaut, ich glaub ich mach das dann so... X(

Aber wenn noch jemand Vorschläge hat, immer her damit ;)

Nachtrag: Ich hab jetzt den Source von losetup genommen, und soweit gekürzt, das er das kann, was ich will (~200 Zeilen). Und es klappt sogar :p
 
wenn ich es richtig verstanden hab, dan sollte dir das hier weiterhelfen.

das prog ist in c, aber das sollte man auch mit g++ kompilieren können
das prog kompilierst du mit "gcc -o encmount mount.c -lcrypt
Code:
#include <stdio.h>
#include <unistd.h>
#define _XOPEN_SOURCE

void main(){
char password[10];
char encrypted[]="xxyxyxyxx";
system("/bin/stty -echo")  /*schaltet das echo aus*/
read (0, password, 9);  /* das zehnte ist für  \0 */ 
system("/bin/stty echo");

if (strcmp( crypt(password, encrypted), encrypted)== 0){
 system("mount -o encryption=twofish,loop ./test.img /mnt");
}
else{
printf("password ist falsch");
}
}
 
ach ja, wenn du das password mit der funktion "system" übergeben willst, musst du zwei strings haben( einen für den mount und das andere für das password).
wenn der mount-befehls z.B so aussieht(ich weiss nicht wo das password steht, bzw stehen soll):
mount -o encryption=twofish,loop ./test.img /mnt -password
dann sieht das im prog ungefähr so aus:
Code:
#include <string.h>
...
char befehl[100]="mount -o encryption=twofish,loop ./tevst.img /mnt -";
char password[10];
...
strcat(befehl[], password[]); /* hängt ne kopie von password an befehl, deswegen muss 
                                                    befehl gross genug sein*/
...
system(befehl);

wenns zB vor encrytion stehen musst, dann musst du den befehl in mehrer strings aufteilen und in der richtigen reihenfolge mit "strcat" konkatieren
 
@foobar: Das Problem ist nicht das einlesen des Passworts aus meinem Programm, sondern dass man losetup/mount ja irgendwie das Passwort mitgeben muss.

Außerdem hab ich mir jetzt util-linux 2.12 geholt, und da kann man losetup dann auch ein filedescriptor mitgeben, von dem es das Passwort lesen soll. Und es läuft auch unter dem 2.6 Kernel :p

Und das Image mit ein paar ioctls und opens selber an ein loop-device zu binden ist auch nicht so schwer...

Somit ist mein Problem gelöst! :]
 
Zurück
Oben