/******************************************************************************/
/* */
/* X r d S e c t e s t C l i e n t . c c */
/* */
/* (c) 2003 by the Board of Trustees of the Leland Stanford, Jr., University */
/* All Rights Reserved */
/* Produced by Andrew Hanushevsky for Stanford University under contract */
/* DE-AC02-76-SFO0515 with the Department of Energy */
/* */
/* This file is part of the XRootD software suite. */
/* */
/* XRootD is free software: you can redistribute it and/or modify it under */
/* the terms of the GNU Lesser General Public License as published by the */
/* Free Software Foundation, either version 3 of the License, or (at your */
/* option) any later version. */
/* */
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
/* COPYING (GPL license). If not, see . */
/* */
/* The copyright holder's institutional names and contributor's names may not */
/* be used to endorse or promote products derived from this software without */
/* specific prior written permission of the institution or contributor. */
/******************************************************************************/
/* Syntax: testClient [-b] [-d] [-h host] [-l] [sectoken]
See the help() function for an explanation of the above.
*/
#include
#include
#include
#include
#include
#include
#include
#include "XrdNet/XrdNetAddr.hh"
#include "XrdSys/XrdSysHeaders.hh"
#include "XrdSec/XrdSecInterface.hh"
/******************************************************************************/
/* G l o b a l D e f i n i t i o n s */
/******************************************************************************/
extern "C"
{
extern XrdSecProtocol *XrdSecGetProtocol(const char *hostname,
XrdNetAddrInfo &endPoint,
XrdSecParameters &parms,
XrdOucErrInfo *einfo=0);
}
/******************************************************************************/
/* L O C A L D E F I N I T I O N S */
/******************************************************************************/
#define H(x) fprintf(stderr,x); fprintf(stderr, "\n");
#define I(x) fprintf(stderr, "\n"); H(x)
/******************************************************************************/
/* m a i n */
/******************************************************************************/
int main(int argc, char **argv)
{
char *tohex(char *inbuff, int inlen, char *outbuff);
char *protocols=0, *hostspec=0;
XrdNetAddr theAddr;
int putbin = 0, putlen = 0;
char kbuff[8192];
char c;
XrdSecCredentials *cred;
XrdSecParameters SecToken;
XrdSecProtocol *pp;
int DebugON = 0;
void help(int);
/*Get all of the options.
*/
while ((c=getopt(argc,argv,"bdlh:")) != (char)EOF)
{ switch(c)
{
case 'b': putbin = 1; break;
case 'd': DebugON = 1; break;
case 'h': hostspec = optarg; break;
case 'l': putlen = 1; break;
default: help(1);
}
}
// Check if the security token is the last argument
//
if (optind < argc) protocols = argv[optind++];
/*Make sure no more parameters exist.
*/
if (optind < argc)
{cerr <<"testClient: Extraneous parameter, '" <addrInfo = &theAddr;
cred = pp->getCredentials();
if (!cred)
{cerr << "Unable to get credentials," <buffer, cred->size, 1, stdout) != (size_t) cred->size)
{cerr << "Unable to write credentials" <size, sizeof(cred->size), kbuff));
printf("%s\n", tohex((char *) cred->buffer, cred->size, kbuff));
}
// All done.
//
pp->Delete();
}
char *tohex(char *inbuff, int inlen, char *outbuff) {
static char hv[] = "0123456789abcdef";
int i, j = 0;
for (i = 0; i < inlen; i++) {
outbuff[j++] = hv[(inbuff[i] >> 4) & 0x0f];
outbuff[j++] = hv[ inbuff[i] & 0x0f];
}
outbuff[j] = '\0';
return outbuff;
}
/*help prints hout the obvious.
*/
void help(int rc) {
/* Use H macro to avoid Sun string catenation bug. */
I("Syntax: testClient [ options ] [sectoken]")
I("Options: -b -d -l -h host")
I("Function: Request for credentials relative to an operation.")
if (rc > 1) exit(rc);
I("options: (defaults: -o 01")
I("-b output the ticket in binary format (i.e., not hexchar).")
I("-d turns on debugging.")
I("-l prefixes the ticket with its 4-byte length.")
I("-h host the requesting hostname (default is localhost).")
I("Notes: 1. Variable XrdSecSECTOKEN must contain the security token,")
H(" sectoken, if it is not specified on the command line.")
exit(rc);
}