|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
MQCSP for Perl |
« View previous topic :: View next topic » |
Author |
Message
|
garbagedook |
Posted: Mon Mar 23, 2009 1:48 pm Post subject: MQCSP for Perl |
|
|
Novice
Joined: 15 May 2006 Posts: 11
|
Hi folks,
I am able to send the MQCSP (MQConnectionSecurityParameters) using a MQSecurityExit in Java.
Does anyone know how I would do this in Perl? I tried specifying a SecurityParms hash in the ConnectOpts and used that in MQCONNX but it doesn't seem to be sending it over...
Thanks,
Duke |
|
Back to top |
|
 |
gbaddeley |
Posted: Mon Mar 23, 2009 5:40 pm Post subject: Re: MQCSP for Perl |
|
|
 Jedi Knight
Joined: 25 Mar 2003 Posts: 2538 Location: Melbourne, Australia
|
garbagedook wrote: |
Hi folks,
I am able to send the MQCSP (MQConnectionSecurityParameters) using a MQSecurityExit in Java.
Does anyone know how I would do this in Perl? I tried specifying a SecurityParms hash in the ConnectOpts and used that in MQCONNX but it doesn't seem to be sending it over...
Thanks,
Duke |
Did you sent the ConnectOpts to at least version 5 ? _________________ Glenn |
|
Back to top |
|
 |
garbagedook |
Posted: Tue Mar 24, 2009 11:06 am Post subject: |
|
|
Novice
Joined: 15 May 2006 Posts: 11
|
hi,
Thanks for the reply.
I set it to MQCNO_CURRENT_VERSION. There doesn't seem to be a version 5 in perl.
This is what my ConnectOpts structure looks like:
my $ConnectOpts =
{
ClientConn =>
{
Version => MQCD_VERSION_6,
ChannelName => $channel,
TransportType => 'TCP',
ConnectionName => $host . "(" . $port . ")",
},
StrucId => MQCNO_STRUC_ID,
Version => MQCNO_CURRENT_VERSION,
Options => MQCNO_STANDARD_BINDING,
SecurityParms =>
{
AuthenticationType => 1, # there is no MQCSP_AUTH_USER_ID_AND_PWD in perl?
CSPUserId => 'user',
CSPPassword => 'pass',
}
};
Have you ever sent the MQCSP to the OAM using Perl? If you had some sample code that would be great. |
|
Back to top |
|
 |
gbaddeley |
Posted: Tue Mar 24, 2009 5:49 pm Post subject: |
|
|
 Jedi Knight
Joined: 25 Mar 2003 Posts: 2538 Location: Melbourne, Australia
|
garbagedook wrote: |
..
I set it to MQCNO_CURRENT_VERSION. There doesn't seem to be a version 5 in perl. |
What does MQCNO_CURRENT_VERSION equate to?
Quote: |
Have you ever sent the MQCSP to the OAM using Perl? If you had some sample code that would be great. |
No, I'm not a Perl programmer, so I don't really understand your code. You could try just setting the CNO Version field to 5.
What version of MQ are you using? The CSP fields first appeared in V6.0.
In C the code looks like this:
Code: |
MQCNO MyConnOpt = { MQCNO_DEFAULT }; /* connection options */
MQCD MyChlDef = { MQCD_DEFAULT }; /* channel definition */
MQCSP MySecParm = { MQCSP_DEFAULT }; /* security parameters */
....
MyConnOpt.Version = MQCNO_VERSION_5;
MyConnOpt.SecurityParmsPtr = &MySecParm;
MyConnOpt.ClientConnPtr = &MyChlDef;
strncpy( MyChlDef.ChannelName, ClntChan, sizeof(MyChlDef.ChannelName) );
MyChlDef.ChannelType = MQCHT_CLNTCONN;
MyChlDef.TransportType = MQXPT_TCP;
strncpy( MyChlDef.QMgrName, QMgrName, sizeof(MyChlDef.QMgrName) );
strncpy( MyChlDef.ConnectionName, ClntHostPort, sizeof(MyChlDef.ConnectionName) );
MySecParm.CSPUserIdPtr = CspUserId;
MySecParm.CSPUserIdLength = strlen(CspUserId);
MySecParm.CSPPasswordPtr = CspPassword;
MySecParm.CSPPasswordLength = strlen(CspPassword);
|
MQCONNX( QMgrName, &MyConnOpt, &Hcon, &CompCode, &ReasonCode );
HTH, _________________ Glenn |
|
Back to top |
|
 |
garbagedook |
Posted: Wed Mar 25, 2009 8:18 am Post subject: |
|
|
Novice
Joined: 15 May 2006 Posts: 11
|
Hi folks,
As I suspected, this is not supported in the Perl MQ API. Right now you cannot pass the MQCSP structure using Perl.
The author of ther Api, Hildo Biersma, was nice enough to let me know that.
Thanks,
Duke |
|
Back to top |
|
 |
garbagedook |
Posted: Mon Apr 20, 2009 8:49 am Post subject: |
|
|
Novice
Joined: 15 May 2006 Posts: 11
|
hello folks,
Surprisingly, I got this to work by hacking/patching the latest source for the MQ perl api (version 1.28b)
I modified 31MQCONNX-v5 in the MQClient/MQSeries.xs.in directory in the tarball.
Here are the key changes in bold
#ifdef MQCNO_VERSION_4
MQSCO SSLConfigOpts = { MQSCO_DEFAULT };
#endif
#ifdef MQCNO_VERSION_5
MQCSP SecurityParms = { MQCSP_DEFAULT };
#endif
#endif /* MQCNO_VERSION_4 */
#ifdef MQCNO_VERSION_5
/*
SecurityParms represents the hash entry for ConnectOpts
(Contributed by Duke Nguyen)
*/
if (hv_exists((HV*)SvRV(ST(1)),"SecurityParms",13)) {
SV **cvp, **elem;
HV *options;
int FieldSize;
STRLEN UserLength;
STRLEN PassLength;
char *user;
char *pass;
/* warn("Using SecurityParms options to set MQCSP"); */
ConnectOpts.SecurityParmsOffset = 0;
ConnectOpts.SecurityParmsPtr = &SecurityParms;
ConnectOpts.Version = MQCNO_VERSION_5;
cvp = hv_fetch((HV*)SvRV(ST(1)),"SecurityParms",13, FALSE);
if ( !SvROK(*cvp) || ( SvROK(*cvp) &&
SvTYPE(SvRV(*cvp)) != SVt_PVHV ) ) {
warn("Invalid data for SecurityParms, not a HASH reference\n");
XSRETURN_EMPTY;
}
options = (HV*)SvRV(*cvp);
/* Version */
elem = hv_fetch(options, "Version", 7, FALSE);
if (elem) {
SecurityParms.Version = SvIV(*elem);
}
/* AuthenticationType */
elem = hv_fetch(options, "AuthenticationType", 18, FALSE);
if (elem) {
SecurityParms.AuthenticationType = SvIV(*elem);
}
/* CSPUserId */
elem = hv_fetch(options, "CSPUserId", 9, FALSE);
if (elem) {
user = SvPV(*elem, UserLength);
SecurityParms.CSPUserIdPtr = user;
SecurityParms.CSPUserIdOffset = 0;
SecurityParms.CSPUserIdLength = strlen(user);
}
/* CSPPassword */
elem = hv_fetch(options, "CSPPassword", 11, FALSE);
if (elem) {
pass = SvPV(*elem, PassLength);
SecurityParms.CSPPasswordPtr = pass;
SecurityParms.CSPPasswordOffset = 0;
SecurityParms.CSPPasswordLength = strlen(pass);
}
} else {
/* warn("SecurityParms options not present"); */
}
#endif /* MQCNO_VERSION_5 */
MQCONNX(Name,&ConnectOpts,&RETVAL,&CompCode,&Reason);
}
Then just rebuild and you can pass the MQCSP.
I will probably contribute this back to the author. Just waiting on confirmation from my company. |
|
Back to top |
|
 |
garbagedook |
Posted: Fri Jun 26, 2009 8:27 am Post subject: |
|
|
Novice
Joined: 15 May 2006 Posts: 11
|
hi folks,
FYI, I worked w/ the author Hildo Biersma on this and he released a new 1.29 version of the Perl MQ libraries on CPAN.
It now includes support for the MQCSP, as well as a slew of other new features.
Check it out on CPAN.
Thanks,
Duke |
|
Back to top |
|
 |
|
|
 |
|
Page 1 of 1 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|