]> arthur.barton.de Git - netatalk.git/blobdiff - etc/uams/uams_dhx2_pam.c
dhx2 logincont packet size, from Frank Lahm
[netatalk.git] / etc / uams / uams_dhx2_pam.c
index e195ba3858aecf5027f76a6ad9406b5351d0c540..57cc523b4108091a529c5e9da0822b5b30ee6322 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: uams_dhx2_pam.c,v 1.3 2008-11-24 21:50:02 didg Exp $
+ * $Id: uams_dhx2_pam.c,v 1.6 2009-01-15 04:16:32 didg Exp $
  *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * Copyright (c) 1999 Adrian Sun (asun@u.washington.edu)
@@ -63,7 +63,7 @@ static struct passwd *dhxpwd;
 
 /*********************************************************
  * Crypto helper func to generate p and g for use in DH.
- * libgcrpyt doesn't provide one directly.
+ * libgcrypt doesn't provide one directly.
  * Algorithm taken from GNUTLS:gnutls_dh_primes.c 
  *********************************************************/
 
@@ -434,6 +434,8 @@ static int logincont1(void *obj _U_, char *ibuf, int ibuflen, char *rbuf, int *r
     gcry_cipher_hd_t ctx;
     gcry_error_t ctxerror;
 
+    *rbuflen = 0;
+
     Mb = gcry_mpi_new(0);
     K = gcry_mpi_new(0);
     clientNonce = gcry_mpi_new(0);
@@ -571,9 +573,9 @@ static int logincont2(void *obj, struct passwd **uam_pwd,
 
     *rbuflen = 0;
 
-    /* Packet size should be: Session ID + ServerNonce + Passwd buffer */
-    if (ibuflen != 2 + 16 + 256) {
-        LOG(log_error, logtype_uams, "DHX2: Paket length not correct");
+    /* Packet size should be: Session ID + ServerNonce + Passwd buffer (evantually +10 extra bytes, see Apples Docs) */
+    if ((ibuflen != 2 + 16 + 256) && (ibuflen != 2 + 16 + 256 + 10)) {
+        LOG(log_error, logtype_uams, "DHX2: Paket length not correct: %d. Should be 274 or 284.", ibuflen);
         ret = AFPERR_PARAM;
         goto error_noctx;
     }