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