[C/OpenSSL] EVP_get_cipherbyname() werkt niet

Pagina: 1
Acties:

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 20-02 03:31

Gerco

Professional Newbie

Topicstarter
Op mijn laptop gebruik ik het programma pam_mount (0.13.0) om een encrypted homedir automatisch te mounten, maar dat hield op met werken na een upgrade van OpenSSL. Na OpenSSL weer te downgraden werkte het overigens nog steeds niet. Ik heb eens lopen debuggen en kwam het volgende tegen:

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#    include <openssl/ssl.h>
#    include <openssl/evp.h>
...
    const EVP_CIPHER *cipher;
    EVP_CIPHER_CTX ctx;
...
    OpenSSL_add_all_ciphers();
    EVP_CIPHER_CTX_init(&ctx);
...
    if((cipher = EVP_get_cipherbyname(fs_key_cipher)) == NULL) {
        l0g(PMPREFIX "error getting cipher \"%s\"\n",
            fs_key_cipher);
                return 0;
        }


De functie EVP_get_cipherbyname(char*) faalt, de naam van de cipher (in fs_key_cipher) is "aes-256-ecb" en dat is een geldige cipher. Om dat te testen heb ik een minimaal testprogramma gemaakt wat hetzelfde doet en dat werkt prima.

Ik heb vervolgens het dynamisch opzoeken van de cipher aangevuld:
C:
1
2
3
4
5
    if((cipher = EVP_get_cipherbyname(fs_key_cipher)) == NULL) {
        l0g(PMPREFIX "error getting cipher \"%s\"\n",
            fs_key_cipher);
        cipher = EVP_aes_256_ecb();
    }


Als de cipher dynamisch niet gevonden wordt, gaat hij nu gewoon met een statische functie de cipher ophalen. Dit werkt ook prima.

Samenvattend: Dynamisch ophalen werkt in pam_mount niet, in een testprogramma wel. Statisch ophalen werkt in alle gevallen.

Ik wil natuurlijk graag dat ik pam_mount ongepatched kan gebruiken, dus misschien kan iemand mij vertellen waardoor het dynamische ophalen van de cipher in pam_mount.so niet werkt.

[ Voor 3% gewijzigd door Gerco op 25-05-2006 22:46 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Ivo
  • Registratie: Juni 2001
  • Laatst online: 14-01-2025

Ivo

Op de pam_mount site (http://www.flyn.org/projects/pam_mount) vind ik geen versie 0.13.0. Welke source tarball zou ik moeten hebben volgens jou, want zonder de rest van de code te zien denk ik niet dat ik fouten ga vinden?

Edit: Is het trouwens de bedoeling dat die pointer `cypher' const is?

[ Voor 16% gewijzigd door Ivo op 26-05-2006 09:33 ]


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 20-02 03:31

Gerco

Professional Newbie

Topicstarter
pam_mount heeft tegenwoordig een nieuwe site en daar staat de nieuwe versie: http://prdownloads.source...ount-0.13.0.tbz2?download

Die const pointer vond ik ook al vreemd ja, maar ik mag hem wel gewoon assignen, zoals mijn verandering laat zien. Ik ben niet zo goed in C, dus waarom dat wel of niet mag begrijp ik niet helemaal.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Ivo
  • Registratie: Juni 2001
  • Laatst online: 14-01-2025

Ivo

In principe zou zie pointer niet veranderd mogen worden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func(int *a)
{
  a = 1;
  return;
}

int main()
{
  const int *a;
  a = 0;
  func(a);
  printf("%i\n", (int) a);
  return 0;
}

Dit print 0 bij mij.

Edit: Negeer maar, want dit
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func(int **a)
{
  *a = 1;
  return;
}

int main()
{
  const int *a;
  a = 0;
  func(&a);
  printf("%i\n", (int) a);
  return 0;
}

print wel 1.

Edit2: Het is dus zo dat const int * een pointer naar een const definieert. int * const definieert een constante pointer naar een int. Waar het probleem dan wel zit zou ik niet weten, maar ik zal misschien straks de evp.c file eens bekijken.

[ Voor 82% gewijzigd door Ivo op 26-05-2006 11:52 ]


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 20-02 03:31

Gerco

Professional Newbie

Topicstarter
Ik heb het ook geprobeerd idd en zonder die 'const' werkt het nog steeds precies hetzelfde.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!