DM-Crypt Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Milan Broz <mbroz@redhat.com>
To: demo demo <demodemodx@gmail.com>
Cc: dm-crypt@saout.de
Subject: Re: [dm-crypt] Building error
Date: Thu, 16 Aug 2012 12:52:07 +0200	[thread overview]
Message-ID: <502CD0D7.2020100@redhat.com> (raw)
In-Reply-To: <CACgeVjLF0rYxtA7yN+zkCKSZ5BenQjWOyMSuFGA8r53jcLp+zQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1663 bytes --]

On 08/16/2012 08:43 AM, demo demo wrote:

> At the end, the production box has CentOS 5.7 and all disk already
> encrypted with cryptsetup-luks-1.0.3 !
> 
> I thought to upgrade it to one of more recent version but it's really
> complex due to dependencies incompatibility.
> 
> I also found that libcryptsetup.h v 1.0.3 has more differences
> compared to libcryptsetup.h used by API example file. So this suggest
> me that there is no way to use the example with very old library!

I responded to mail where you mentioned CentOS 6.

For RHEL5 no way, it has just old API. We backported many extension to RHEL5.8,
so cryptsetup+kernel dmcrypt should be able to open all LUKS device
formatted in recent versions but API library is obsolete anyway.

> Also I tryied to figure out how to extract and use the old
> crypt_luksOpen() function but it's hard form me to follow all the
> #define present in the whole cryptsetup package.
> 
> So can you provide me an example code that use the ancient
> crypt_luksOpen() function and its relates gcc args used to compile
> it?

Isn't better to just use binary then? Your code will not work on recent
distros (in RHEL6 there is still compatible library but not upstream anymore).

Whatever, see file in attachment, it can be compiled both on RHEL5
and RHEL6 (but not upstream anymore), just with
cc -o luks_test luks_test.c -g -O0 -lcryptsetup -lgcrypt -ldevmapper -luuid

The #ifdef is the because of incompatible changes in header (and API/ABI), one
of the reasons the old API was obsoleted.

If you need anything else... read the source please (test/api-test.c
in RHEL6 version source should give you more hints).

Milan

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: luks_test.c --]
[-- Type: text/x-csrc; name="luks_test.c", Size: 1480 bytes --]

/*
 * OLD OBSOLETE libcryptsetup API example
 * DO NOT USE FOR NEW PROJECTS.
 */

#include <stdio.h>
#include <stdlib.h>
#include "libcryptsetup.h"

/* definition was introduced together with log */
#ifdef CRYPT_LOG_NORMAL
#define HAVE_ICB
#endif

#ifdef HAVE_ICB
static int yesDialog(char *msg)
{
	printf("You are sure, I know.\n");
	return 1;
}

static void cmdLineLog(int class, char *msg)
{
	fputs(msg, stdout);
}

static struct interface_callbacks cmd_icb = {
	.yesDialog = yesDialog,
	.log = cmdLineLog,
};
#endif

int LuksOpen(const char *device, const char *name)
{
	struct crypt_options co = {
		.device = device,
		.name = name,
		// .key_file = "-", // standard input, you can echo -n"xxx"|prg
		// or use key file. API cannot give password directly
		.tries = 1,
#ifdef HAVE_ICB
		.icb = &cmd_icb,
#endif
	};

	return crypt_luksOpen(&co);
}

// r == 0 inactive, r > 0 active (r== opencount), othewise error (-EINVAL, -ENODEV, -EBUSY)
int LuksClose(const char *name)
{
	struct crypt_options co = {
		.name = name,
#ifdef HAVE_ICB
		.icb = &cmd_icb,
#endif
	};

	return crypt_remove_device(&co);
}

void print_error()
{
	char buf[256];

	crypt_get_error(buf, sizeof(buf));
	printf("%s\n", buf);
}

int main (int argc, char *argv[])
{
	const char *device = "/dev/loop0";
	const char *name = "xxx"; // let's call me /dev/mapper/xxx
	int r;

	r = LuksOpen(device, name);
	if (r)
		print_error();

        r = LuksClose(name);
	if (r)
		print_error();

	return r ? 0 : 1;
}

  reply	other threads:[~2012-08-16 10:52 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-08  9:10 [dm-crypt] Building error demo demo
2012-08-08  9:39 ` Milan Broz
     [not found]   ` <CACgeVjKhPvSXjqt0CR2w2KCV3vut8cK3P=AnsM7qqjAEZQUZxw@mail.gmail.com>
2012-08-16  6:43     ` demo demo
2012-08-16 10:52       ` Milan Broz [this message]
2012-08-16 11:13         ` demo demo
2012-08-16 10:29   ` demo demo
  -- strict thread matches above, loose matches on Subject: below --
2012-08-08  9:29 demo demo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=502CD0D7.2020100@redhat.com \
    --to=mbroz@redhat.com \
    --cc=demodemodx@gmail.com \
    --cc=dm-crypt@saout.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox