[Top][All Lists]
[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);
- CVS gsasl/lib/securid, gsasl-commit, 2004/09/17
- CVS gsasl/lib/securid, gsasl-commit, 2004/09/18
- CVS gsasl/lib/securid,
gsasl-commit <=
- CVS gsasl/lib/securid, gsasl-commit, 2004/09/22
- CVS gsasl/lib/securid, gsasl-commit, 2004/09/22
- CVS gsasl/lib/securid, gsasl-commit, 2004/09/23
- CVS gsasl/lib/securid, gsasl-commit, 2004/09/24
- CVS gsasl/lib/securid, gsasl-commit, 2004/09/24
- CVS gsasl/lib/securid, gsasl-commit, 2004/09/26
- CVS gsasl/lib/securid, gsasl-commit, 2004/09/30
- CVS gsasl/lib/securid, gsasl-commit, 2004/09/30