summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Magne <jmagne@dhcp-16-213.sjc.redhat.com>2014-09-03 19:15:07 -0700
committerJack Magne <jmagne@dhcp-16-213.sjc.redhat.com>2014-09-03 20:03:39 -0700
commit4dbec5fe960a89b7ced3028e000b5695b6d9aac7 (patch)
treebfb8d2b0b4c83dc95689948c683b1d85527bda65
parent82d3ed74289857b5fa60a842979406a2a8acecda (diff)
downloadpki-4dbec5fe960a89b7ced3028e000b5695b6d9aac7.tar.gz
pki-4dbec5fe960a89b7ced3028e000b5695b6d9aac7.tar.xz
pki-4dbec5fe960a89b7ced3028e000b5695b6d9aac7.zip
TpsClient support for extensions.
TpsClient will now suport the ability to specify extensions in the script file. Ex: op=ra_format uid=jmagne pwd=netscape new_pin=netscape num_threads=1 extensions=tokenType=userKey Ticket # 1016.
-rw-r--r--base/tps-client/tools/raclient/RA_Conn.cpp62
1 files changed, 57 insertions, 5 deletions
diff --git a/base/tps-client/tools/raclient/RA_Conn.cpp b/base/tps-client/tools/raclient/RA_Conn.cpp
index 8e7f30e51..4686acb6b 100644
--- a/base/tps-client/tools/raclient/RA_Conn.cpp
+++ b/base/tps-client/tools/raclient/RA_Conn.cpp
@@ -152,6 +152,33 @@ Output (const char *fmt, ...)
va_end (ap);
}
+static void
+printBuf (Buffer * buf)
+{
+ int sum = 0;
+
+ BYTE *data = *buf;
+ int i = 0;
+ if (buf->size () > 255)
+ {
+ Output ("printBuf: TOO BIG to print");
+ return;
+ }
+ Output ("Begin printing buffer =====");
+ for (i = 0; i < (int) buf->size (); i++)
+ {
+ printf ("%02x ", (unsigned char) data[i]);
+ sum++;
+ if (sum == 10)
+ {
+ printf ("\n");
+ sum = 0;
+ }
+ }
+ Output ("End printing buffer =====");
+}
+
+
#ifdef VERBOSE
static void
@@ -275,28 +302,52 @@ RA_Conn::SendMsg (RA_Msg * msg)
{
char msgbuf[MAX_RA_MSG_SIZE];
char chunk[MAX_RA_MSG_SIZE];
+ char extsbuf[MAX_RA_MSG_SIZE];
+
+ memset(msgbuf,0, sizeof(msgbuf));
+ memset(chunk, 0, sizeof(chunk));
+ memset(extsbuf,0, sizeof(extsbuf));
+
+ char *encodedExts = NULL;
/* send chunk size */
if (msg->GetType () == MSG_BEGIN_OP)
{
RA_Begin_Op_Msg *begin = (RA_Begin_Op_Msg *) msg;
- sprintf (msgbuf, "%s=%d&%s=%d", PARAM_MSG_TYPE, MSG_BEGIN_OP,
+ snprintf (msgbuf, MAX_RA_MSG_SIZE, "%s=%d&%s=%d", PARAM_MSG_TYPE, MSG_BEGIN_OP,
PARAM_OPERATION, begin->GetOpType ());
NameValueSet *exts = begin->GetExtensions ();
if (exts != NULL)
{
- sprintf (msgbuf, "%s&%s=", msgbuf, PARAM_EXTENSIONS);
+ strncat(msgbuf,"&",MAX_RA_MSG_SIZE - strlen(msgbuf) - 1);
+ strncat(msgbuf,PARAM_EXTENSIONS,MAX_RA_MSG_SIZE - strlen(msgbuf) - 1);
+ strncat(msgbuf,"=",MAX_RA_MSG_SIZE - strlen(msgbuf) - 1);
+
for (int i = 0; i < exts->Size (); i++)
{
if (i != 0)
{
- sprintf (msgbuf, "%s%%26", msgbuf);
+ strncat(extsbuf,"%%26",MAX_RA_MSG_SIZE - strlen(extsbuf) - 1);
}
char *name = exts->GetNameAt (i);
- sprintf (msgbuf, "%s%s=%s",
- msgbuf, name, exts->GetValueAsString (name));
+
+ strncat(extsbuf,name,MAX_RA_MSG_SIZE - strlen(extsbuf) - 1);
+ strncat(extsbuf,"=",MAX_RA_MSG_SIZE - strlen(extsbuf) - 1);
+ strncat(extsbuf,exts->GetValueAsString(name),MAX_RA_MSG_SIZE - strlen(extsbuf) - 1);
+
}
+
+ printf("extsbuf: %s \n", extsbuf);
+
+ encodedExts = Util::URLEncode(extsbuf);
+
}
+
+ if(encodedExts) {
+ strncat(msgbuf,encodedExts,MAX_RA_MSG_SIZE - strlen(msgbuf) - 1);
+ printf("msgbuf: %s \n", msgbuf);
+ PR_Free(encodedExts);
+ }
CreateChunkEntity (msgbuf, chunk, 4096);
}
else if (msg->GetType () == MSG_LOGIN_RESPONSE)
@@ -994,6 +1045,7 @@ RA_Conn::ReadMsg (RA_Token * token)
else if (msg_type == MSG_TOKEN_PDU_REQUEST)
{
char *pdu_encoded = params->GetValue (PARAM_PDU_DATA);
+ Output("PDU_REQUEST: pdu_encoded = %s", pdu_encoded);
Buffer *apdu_data = Util::URLDecode (pdu_encoded);
#ifdef VERBOSE