W wrote:

> 
> Saya kira ini tak masalah .., cryptsetup mencari lib yang diperlukan pada
> /lib dan pada /usr/lib, bisa dilihat pada output strace berikut :
> 
> open("/lib/libpopt.so.0″, O_RDONLY) = -1 ENOENT (No such file or directory)
> open("/lib/libpopt.so.0″, O_RDONLY) = -1 ENOENT (No such file or directory)
> open("/usr/lib/libpopt.so.0″, O_RDONLY) = 3
> 
> Pada kali ketiha, library yang diperlulkan akhirnya ditemukan di
> /usr/lib, demikian juga
> kasus nya dengan libcryptsetup & libdevmapper, berikut outputnya :
> Jadi saya kira inti permasalahannya bukan disini .., CMIIW

Memang benar, process open berulang hingga menemukan file yang ditemukan
karena process ini mengikuti path_resolution (coba man open) dari root
directory / hingga file tsb ditemukan, dengan catatan jika file adalah
symbolic link nanti akan terjadi stack overflow di kernel dan biasanya
akan return ELOOP atau ENAMETOOLONG. Jadi lebih baik tempatkan file yang
dicari sesuai directory yang diminta.

>> Btw, di lucksDump coba check di bagian "Key Slot 0", apakah DISABLED
>> atau ENABLED? Karena proses baru luksFormat.
> 
> Sudah ENABLED ..., bisa dilihat disini :
> 
> http://wildanm.wordpress.com/2007/09/14/no-problemo-cryptsetup-luksdump-devmmcblk0p2/

Ok, sudah benar kalau begitu karena pada saat fungsi luksFormat, alokasi
header ada di keyblock 0.

Dari file cryptsetup.c akan memanggil fungsi crypt_luksFormat yang ada
di file setup.c :

int crypt_luksFormat(struct crypt_options *options)
{
        return crypt_job(__crypt_luks_format, 0, options);
}

dengan nilai arg = 0 atau bukan reload fungsi atau baru pertama kali
dibuat.

Jika dilihat di __crypt_luks_format pada bagian

header.keyblock[0].passwordIterations = at_least_one(PBKDF2perSecond *
((float)options->iteration_time / 1000.0));
....
r = LUKS_set_key(options->device, 0, password, passwordLen, &header, mk,
backend);
....
dst

jika process LUKS_set_key berhasil (default keyblock 0 sebelumnya
DISABLED, akan meng-enable keyblock 0 (check keymanage.c).


Untuk email anda sebelumnya, untuk bagian :

        if(!password)
        {
                r = -EINVAL;
                goto out;
        }
        
        if((r = LUKS_open_any_key(options->device, password,
passwordLen, &hdr, &mk, backend)) < 0) {
                set_error("No key available with this passphrase.\n");
                goto out1;
        }

Jika ada nilai return 0 (false) dari fungsi get_key (ini tergantung
apakah bisa menulis ke stdin terminal atau tidak) setelah 3 kali
mencoba, maka akan ke non password condition :

            if(!password)
            {
                r = -EINVAL;
                goto out;
            }
        
maka akan return -ENINVAL dan jump ke out (bukan dilanjutkan ke kondisi
berikutnya). Untuk kondisi ini maka akan jump ke out dan mengembalikan
nilai r (= -EINVAL)

out :
         LUKS_dealloc_masterkey(mk);
         if (r == -EPERM && tries > 0)
                goto start;
         return r;

Sementara jika ternyata password yang diminta adalah benar, maka akan
berlanjut ke kondisi :

 if((r = LUKS_open_any_key(options->device, password, passwordLen, &hdr,
&mk, backend)) < 0)
         {
                set_error("No key available with this passphrase.\n");
                goto out1;
         }

dan kemudian akan dicheck nilai return dari r.

Sementara ini dulu. Nanti saya coba check lagi...

Doni

-- 
FAQ milis di http://wiki.linux.or.id/FAQ_milis_tanya-jawab
Unsubscribe: kirim email ke [EMAIL PROTECTED]
Arsip dan info milis selengkapnya di http://linux.or.id/milis

Kirim email ke