gsasl-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CVS gsasl/lib/securid


From: gsasl-commit
Subject: CVS gsasl/lib/securid
Date: Thu, 23 Sep 2004 02:49:14 +0200

Update of /home/cvs/gsasl/lib/securid
In directory dopio:/tmp/cvs-serv16888/lib/securid

Modified Files:
        client.c securid.h 
Log Message:
Make SECURID client use new allocating API.
Use new callback/property API in SECURID client.


--- /home/cvs/gsasl/lib/securid/client.c        2004/09/18 16:34:26     1.1
+++ /home/cvs/gsasl/lib/securid/client.c        2004/09/23 00:49:13     1.2
@@ -28,22 +28,8 @@
 int
 _gsasl_securid_client_start (Gsasl_session_ctx * sctx, void **mech_data)
 {
-  Gsasl_ctx *ctx;
   int *step;
 
-  ctx = gsasl_client_ctx_get (sctx);
-  if (ctx == NULL)
-    return GSASL_CANNOT_GET_CTX;
-
-  if (gsasl_client_callback_authorization_id_get (ctx) == NULL)
-    return GSASL_NEED_CLIENT_AUTHORIZATION_ID_CALLBACK;
-
-  if (gsasl_client_callback_authentication_id_get (ctx) == NULL)
-    return GSASL_NEED_CLIENT_AUTHENTICATION_ID_CALLBACK;
-
-  if (gsasl_client_callback_passcode_get (ctx) == NULL)
-    return GSASL_NEED_CLIENT_PASSCODE_CALLBACK;
-
   step = (int *) malloc (sizeof (*step));
   if (step == NULL)
     return GSASL_MALLOC_ERROR;
@@ -60,37 +46,15 @@
                            void *mech_data,
                            const char *input,
                            size_t input_len,
-                           char *output, size_t * output_len)
+                           char **output, size_t * output_len)
 {
   int *step = mech_data;
-  Gsasl_client_callback_authorization_id cb_authorization_id;
-  Gsasl_client_callback_authentication_id cb_authentication_id;
-  Gsasl_client_callback_passcode cb_passcode;
-  Gsasl_client_callback_pin cb_pin;
-  Gsasl_ctx *ctx;
+  const char *authzid, *authid, *passcode, *pin;
+  size_t authzidlen, authidlen, passcodelen, pinlen;
   int do_pin = 0;
-  char *tmp;
   int res;
   size_t len;
 
-  ctx = gsasl_client_ctx_get (sctx);
-  if (ctx == NULL)
-    return GSASL_CANNOT_GET_CTX;
-
-  cb_authorization_id = gsasl_client_callback_authorization_id_get (ctx);
-  if (cb_authorization_id == NULL)
-    return GSASL_NEED_CLIENT_AUTHORIZATION_ID_CALLBACK;
-
-  cb_authentication_id = gsasl_client_callback_authentication_id_get (ctx);
-  if (cb_authentication_id == NULL)
-    return GSASL_NEED_CLIENT_AUTHENTICATION_ID_CALLBACK;
-
-  cb_passcode = gsasl_client_callback_passcode_get (ctx);
-  if (cb_passcode == NULL)
-    return GSASL_NEED_CLIENT_PASSCODE_CALLBACK;
-
-  cb_pin = gsasl_client_callback_pin_get (ctx);
-
   switch (*step)
     {
     case 1:
@@ -102,8 +66,6 @@
       else if (input_len >= strlen (PIN) &&
               memcmp (input, PIN, strlen (PIN)) == 0)
        {
-         if (cb_pin == NULL)
-           return GSASL_NEED_CLIENT_PIN_CALLBACK;
          do_pin = 1;
          *step = 0;
        }
@@ -116,34 +78,23 @@
       /* fall through */
 
     case 0:
-      tmp = output;
-      len = *output_len - (tmp - output) - 1;
-      res = cb_authorization_id (sctx, output, &len);
-      if (res != GSASL_OK)
-       return res;
-      tmp[len] = '\0';
-      tmp = tmp + len + 1;
-      if (*output_len <= (tmp - output))
-       return GSASL_TOO_SMALL_BUFFER;
-      len = *output_len - (tmp - output) - 1;
-      res = cb_authentication_id (sctx, tmp, &len);
-      if (res != GSASL_OK)
-       return res;
-      tmp[len] = '\0';
-      tmp = tmp + len + 1;
-      if (*output_len <= (tmp - output))
-       return GSASL_TOO_SMALL_BUFFER;
-      len = *output_len - (tmp - output) - 1;
-      res = cb_passcode (sctx, tmp, &len);
-      if (res != GSASL_OK)
-       return res;
-      tmp[len] = '\0';
-      tmp = tmp + len + 1;
-      if (*output_len <= (tmp - output))
-       return GSASL_TOO_SMALL_BUFFER;
+      authzid = gsasl_property_get (sctx, GSASL_AUTHZID);
+      if (!authzid)
+       return GSASL_NO_AUTHZID;
+      authzidlen = strlen (authzid);
+
+      authid = gsasl_property_get (sctx, GSASL_AUTHID);
+      if (!authid)
+       return GSASL_NO_AUTHID;
+      authidlen = strlen (authid);
+
+      passcode = gsasl_property_get (sctx, GSASL_PASSCODE);
+      if (!passcode)
+       return GSASL_NO_PASSCODE;
+      passcodelen = strlen (passcode);
+
       if (do_pin)
        {
-         len = *output_len - (tmp - output);
          if (input_len > strlen (PIN))
            {
              char *zsuggestedpin;
@@ -154,24 +105,46 @@
              memcpy (zsuggestedpin, &input[strlen (PIN)],
                      input_len - strlen (PIN));
              zsuggestedpin[input_len - strlen (PIN)] = '\0';
-             res = cb_pin (sctx, zsuggestedpin, tmp, &len);
+
+             gsasl_property_set (sctx, GSASL_SUGGESTED_PIN, zsuggestedpin);
              free (zsuggestedpin);
            }
-         else
-           res = cb_pin (sctx, NULL, tmp, &len);
-         if (res != GSASL_OK)
-           return res;
-         tmp[len] = '\0';
-         tmp = tmp + len + 1;
+
+         pin = gsasl_property_get (sctx, GSASL_PIN);
+         if (!pin)
+           return GSASL_NO_PIN;
+         pinlen = strlen (pin);
+       }
+
+      *output_len = authzidlen + 1 + authidlen + 1 + passcodelen + 1;
+      if (do_pin)
+       *output_len += pinlen + 1;
+      *output = malloc (*output_len);
+      if (*output == NULL)
+       return GSASL_MALLOC_ERROR;
+
+      memcpy (*output, authzid, authzidlen);
+      (*output)[authzidlen] = '\0';
+      memcpy (*output + authzidlen + 1, authid, authidlen);
+      (*output)[authzidlen + 1 + authidlen] = '\0';
+      memcpy (*output + authzidlen + 1 + authidlen + 1, passcode,
+             passcodelen);
+      (*output)[authzidlen + 1 + authidlen + 1 + passcodelen] = '\0';
+      if (do_pin)
+       {
+         memcpy (*output + authzidlen + 1 + authidlen + 1 + passcodelen + 1,
+                 pin, pinlen);
+         (*output)[authzidlen + 1 + authidlen + 1 + passcodelen + 1 +
+                   pinlen] = '\0';
        }
 
-      *output_len = (tmp - output);
       (*step)++;
       res = GSASL_OK;
       break;
 
     case 2:
       *output_len = 0;
+      *output = NULL;
       (*step)++;
       res = GSASL_OK;
       break;
--- /home/cvs/gsasl/lib/securid/securid.h       2004/09/18 16:34:26     1.3
+++ /home/cvs/gsasl/lib/securid/securid.h       2004/09/23 00:49:13     1.4
@@ -33,9 +33,8 @@
                                        void **mech_data);
 extern int _gsasl_securid_client_step (Gsasl_session_ctx * sctx,
                                       void *mech_data,
-                                      const char *input,
-                                      size_t input_len,
-                                      char *output, size_t * output_len);
+                                      const char *input, size_t input_len,
+                                      char **output, size_t * output_len);
 extern int _gsasl_securid_client_finish (Gsasl_session_ctx * sctx,
                                         void *mech_data);
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]