summaryrefslogtreecommitdiffstats
path: root/pki/base/native-tools/src/sslget/sslget.c
diff options
context:
space:
mode:
Diffstat (limited to 'pki/base/native-tools/src/sslget/sslget.c')
-rw-r--r--pki/base/native-tools/src/sslget/sslget.c836
1 files changed, 0 insertions, 836 deletions
diff --git a/pki/base/native-tools/src/sslget/sslget.c b/pki/base/native-tools/src/sslget/sslget.c
deleted file mode 100644
index 7288a1c58..000000000
--- a/pki/base/native-tools/src/sslget/sslget.c
+++ /dev/null
@@ -1,836 +0,0 @@
-/* --- BEGIN COPYRIGHT BLOCK ---
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Copyright (C) 2007 Red Hat, Inc.
- * All rights reserved.
- * --- END COPYRIGHT BLOCK ---
- */
-
-/* vi: set ts=4 sw=4 : */
-#ifdef HAVE_CONFIG_H
-#ifndef AUTOTOOLS_CONFIG_H
-#define AUTOTOOLS_CONFIG_H
-
-/* Eliminate warnings when using Autotools */
-#undef PACKAGE_BUGREPORT
-#undef PACKAGE_NAME
-#undef PACKAGE_STRING
-#undef PACKAGE_TARNAME
-#undef PACKAGE_VERSION
-
-#include <config.h>
-#endif /* AUTOTOOLS_CONFIG_H */
-#endif /* HAVE_CONFIG_H */
-
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-
-#if defined(XP_UNIX)
-#include <unistd.h>
-#endif
-
-#include "ssl.h"
-
-#include "prerror.h"
-
-#include "pk11func.h"
-#include "secitem.h"
-
-
-#include <stdlib.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdarg.h>
-
-#include "nspr.h"
-#include "prio.h"
-#include "prnetdb.h"
-#include "nss.h"
-
-
-/* set Tabs to 8 */
-
-
-/*from nss2.8.4 secopt.h*/
-#ifdef XP_PC
-
-/*
-** This comes from the AT&T public-domain getopt published in mod.sources
-** (i.e., comp.sources.unix before the great Usenet renaming).
-*/
-
-extern int opterr;
-extern int optind;
-extern int optopt;
-extern char *optarg;
-
-#ifdef _WIN32
-static void do_opterr(const char *s, int c, char * const av[]);
-#define ERR(s, c) do_opterr(s, c, av)
-#else
-#define ERR(s, c) /* Win16 doesn't do stderr */
-#endif
-
-/*
-** Return options and their values from the command line.
-*/
-int getopt(int ac, char * const av[], const char * opts);
-#else
-#if defined(LINUX)
-#include <getopt.h>
-#endif
-#endif /* XP_PC */
-/*end secopt.h*/
-
-#define VERSIONSTRING "$Revision$ ($Date$)"
-
-#ifndef PORT_Sprintf
-#define PORT_Sprintf sprintf
-#endif
-
-#ifndef PORT_Strstr
-#define PORT_Strstr strstr
-#endif
-
-#ifndef PORT_Malloc
-#define PORT_Malloc PR_Malloc
-#endif
-
-#define RD_BUF_SIZE (60 * 1024)
-
-#define PRINTF if (verbose) printf
-#define FPRINTF if (verbose) fprintf
-#define FPUTS if (verbose) fputs
-
-#define MAX_SERIAL_LEN 8192
-
-int MakeCertOK=1;
-
-int verbose;
-SECItem bigBuf;
-
-
-char * ownPasswd( PK11SlotInfo *slot, PRBool retry, void *arg)
-{
- char *passwd = NULL;
-
- if ( (!retry) && arg ) {
- passwd = PL_strdup((char *)arg);
- }
-
- return passwd;
-}
-
-static void
-Usage(const char *progName)
-{
- fprintf(stderr,
- "Usage: %s [-n nickname] [-p password | -w pwfile ] [-d dbdir] \n"
- " [-e post] [-v] [-V] -r url hostname[:port]\n"
- " -n : nickname or hsm:nickname\n"
- " -v : verbose\n"
- " -V : report version information\n",
- progName);
- exit(1);
-}
-
-
-static void
-errWarn(char * funcString)
-{
- PRErrorCode perr = PR_GetError();
-
- FPRINTF(stderr, "exit after %s with error %d:\n", funcString,perr );
-}
-
-static void
-errExit(char * funcString)
-{
- errWarn(funcString);
- exit(1);
-}
-
-/* This invokes the "default" AuthCert handler in libssl.
-** The only reason to use this one is that it prints out info as it goes.
-*/
-static SECStatus
-mySSLAuthCertificate(void *arg, PRFileDesc *fd, PRBool checkSig,
- PRBool isServer)
-{
- SECStatus rv;
- CERTCertificate * peerCert;
-
- peerCert = SSL_PeerCertificate(fd);
-
- PRINTF("Subject: %s\nIssuer : %s\n",
- peerCert->subjectName, peerCert->issuerName);
- /* invoke the "default" AuthCert handler. */
- rv = SSL_AuthCertificate(arg, fd, checkSig, isServer);
-
- if (rv == SECSuccess) {
- FPUTS("-- SSL3: Server Certificate Validated.\n", stderr);
- }
- /* error, if any, will be displayed by the Bad Cert Handler. */
- return rv;
-}
-
-static SECStatus
-myBadCertHandler( void *arg, PRFileDesc *fd)
-{
- /* int err = PR_GetError(); */
- /* fprintf(stderr, "-- SSL: Server Certificate Invalid, err %d.\n%s\n",
- err, SECU_Strerror(err)); */
- return (MakeCertOK ? SECSuccess : SECFailure);
-}
-
-
-SECStatus
-my_GetClientAuthData(void * arg,
- PRFileDesc * socket,
- struct CERTDistNamesStr * caNames,
- struct CERTCertificateStr ** pRetCert,
- struct SECKEYPrivateKeyStr **pRetKey)
-{
- CERTCertificate * cert = NULL;
- SECKEYPrivateKey * privkey = NULL;
- char * chosenNickName = (char *)arg; /* CONST */
- void * proto_win = NULL;
- SECStatus rv = SECFailure;
-
- FPRINTF(stderr,"Called mygetclientauthdata - nickname = %s\n",chosenNickName);
-
- proto_win = SSL_RevealPinArg(socket);
-
- if (chosenNickName) {
- cert = PK11_FindCertFromNickname(chosenNickName, proto_win);
- FPRINTF(stderr," mygetclientauthdata - cert = %x\n",(unsigned int)cert);
- if ( cert ) {
- privkey = PK11_FindKeyByAnyCert(cert, proto_win);
- FPRINTF(stderr," mygetclientauthdata - privkey = %x\n",(unsigned int)privkey);
- if ( privkey ) {
- rv = SECSuccess;
- } else {
- CERT_DestroyCertificate(cert);
- }
- }
- } else { /* no name given, automatically find the right cert. */
- CERTCertNicknames * names;
- int i;
-
- names = CERT_GetCertNicknames(CERT_GetDefaultCertDB(),
- SEC_CERT_NICKNAMES_USER, proto_win);
- if (names != NULL) {
- for (i = 0; i < names->numnicknames; i++) {
- cert = PK11_FindCertFromNickname(names->nicknames[i],proto_win);
- if ( !cert )
- continue;
- /* Only check unexpired certs */
- if (CERT_CheckCertValidTimes(cert, PR_Now(), PR_TRUE) !=
- secCertTimeValid ) {
- CERT_DestroyCertificate(cert);
- continue;
- }
- rv = NSS_CmpCertChainWCANames(cert, caNames);
- if ( rv == SECSuccess ) {
- privkey = PK11_FindKeyByAnyCert(cert, proto_win);
- if ( privkey )
- break;
- }
- rv = SECFailure;
- CERT_DestroyCertificate(cert);
- }
- CERT_FreeNicknames(names);
- }
- }
- if (rv == SECSuccess) {
- *pRetCert = cert;
- *pRetKey = privkey;
- }
- return rv;
-}
-
-
-
-
-void
-printSecurityInfo(PRFileDesc *fd)
-{
- char * cp; /* bulk cipher name */
- char * ip; /* cert issuer DN */
- char * sp; /* cert subject DN */
- int op; /* High, Low, Off */
- int kp0; /* total key bits */
- int kp1; /* secret key bits */
- int result;
-
- static int only_once;
-
- if (! only_once++ && fd) {
- result = SSL_SecurityStatus(fd, &op, &cp, &kp0, &kp1, &ip, &sp);
- if (result != SECSuccess)
- return;
-#if 0
- PRINTF("bulk cipher %s, %d secret key bits, %d key bits, status: %d\n"
- "subject DN: %s\n"
- "issuer DN: %s\n", cp, kp1, kp0, op, sp, ip);
-#else
- PRINTF("bulk cipher %s, %d secret key bits, %d key bits, status: %d\n",
- cp, kp1, kp0, op);
-#endif
- PR_Free(cp);
- PR_Free(ip);
- PR_Free(sp);
- }
-
-}
-
-
-PRBool useModelSocket = PR_TRUE;
-
-static const char outHeader[] = {
- "HTTP/1.0 200 OK\r\n"
- "Server: Netscape-Enterprise/2.0a\r\n"
- "Date: Tue, 26 Aug 1997 22:10:05 GMT\r\n"
- "Content-type: text/plain\r\n"
- "\r\n"
-};
-
-
-PRInt32
-do_writes(
- void * a
-)
-{
- PRFileDesc * ssl_sock = (PRFileDesc *)a;
- PRUint32 sent = 0;
- PRInt32 count = 0;
-
- while (sent < bigBuf.len) {
-
- count = PR_Write(ssl_sock, bigBuf.data + sent, bigBuf.len - sent);
- if (count < 0) {
- errWarn("PR_Write bigBuf");
- exit(4);
- break;
- }
- FPRINTF(stderr, "PR_Write wrote %d bytes from bigBuf\n", count );
- FPRINTF(stderr, "bytes: [%*s]\n",count,bigBuf.data);
-
- sent += (PRUint32)count;
- }
- if (count >= 0) { /* last write didn't fail. */
- FPRINTF(stderr, "do_writes shutting down send socket\n");
- /* PR_Shutdown(ssl_sock, PR_SHUTDOWN_SEND); */
- }
-
- FPRINTF(stderr, "do_writes exiting with (failure = %d)\n",sent<bigBuf.len == SECFailure);
- return (sent < bigBuf.len) ? SECFailure : SECSuccess;
-}
-
-
-
-
-SECStatus
-do_io( PRFileDesc *ssl_sock, int connection)
-{
- int countRead = 0;
- PRInt32 rv;
- char *buf;
- char *buf2;
- int first=1;
-
- buf = PR_Malloc(RD_BUF_SIZE);
- if (!buf) exit(5);
-
- /* send the http request here. */
-
- rv = do_writes(ssl_sock);
-
- if (rv == SECFailure) {
- errWarn("returning from after calling do_writes");
- PR_Free(buf);
- buf = 0;
- exit(6);
- }
- printSecurityInfo(ssl_sock);
-
- /* read until EOF */
- while (1) {
- rv = PR_Read(ssl_sock, buf, RD_BUF_SIZE);
- if (rv == 0) {
- break; /* EOF */
- }
- if (rv < 0) {
- errWarn("PR_Read");
- PR_Free(buf);
- buf = 0;
- exit(1);
- }
-
- countRead += rv;
- FPRINTF(stderr, "connection %d read %d bytes (%d total).\n",
- connection, rv, countRead );
- FPRINTF(stderr, "these bytes read:\n");
- PR_Write(PR_STDOUT,buf,rv);
-
- if (first) {
- first=0;
- if (rv < 13) {
- int ret = 0;
- buf2 = PR_Malloc(RD_BUF_SIZE);
- if (!buf2) {
- PR_Free(buf);
- buf = 0;
- exit(5);
- }
-
- for (ret=0; rv < 13 ; rv += ret) {
- ret = PR_Read(ssl_sock, buf2, RD_BUF_SIZE - rv);
- if (ret < 0 ) {
- errWarn("PR_Read");
- PR_Free(buf);
- buf = 0;
- PR_Free(buf2);
- buf2 = 0;
- exit(1);
- }
- if (ret == 0) {
- errWarn("not enough bytes read in first read");
- PR_Free(buf);
- buf = 0;
- PR_Free(buf2);
- buf2 = 0;
- exit(2);
- }
- countRead += ret;
- FPRINTF(stderr, "connection %d read %d bytes (%d total).\n",
- connection, ret, countRead );
- FPRINTF(stderr, "these bytes read:\n");
- PR_Write(PR_STDOUT, buf2, ret);
-
- PR_snprintf(buf, RD_BUF_SIZE, "%s%s", buf, buf2);
- }
- PR_Free(buf2);
- buf2 = 0;
- }
-
- if ( ! PL_strnstr(buf,"200",13)) {
- PR_Free(buf);
- buf = 0;
- exit(3);
- }
- }
- }
- PR_fprintf(PR_STDOUT, "\n");
-
- PR_Free(buf);
- buf = 0;
-
- /* Caller closes the socket. */
-
- FPRINTF(stderr,
- "connection %d read %d bytes total. -----------------------------\n",
- connection, countRead);
-
- return SECSuccess; /* success */
-}
-
-int
-do_connect(
- PRNetAddr *addr,
- PRFileDesc *model_sock,
- int connection)
-{
- PRFileDesc * ssl_sock;
- PRFileDesc * tcp_sock;
- PRStatus prStatus;
- SECStatus result;
- int rv = SECSuccess;
- PRSocketOptionData opt;
-
- int family = PR_NetAddrFamily( addr );
-
- tcp_sock = PR_OpenTCPSocket( family );
- if (tcp_sock == NULL) {
- errExit("PR_OpenTCPSocket on tcp socket");
- }
-
- opt.option = PR_SockOpt_Nonblocking;
- opt.value.non_blocking = PR_FALSE;
- prStatus = PR_SetSocketOption(tcp_sock, &opt);
- if (prStatus != PR_SUCCESS) {
- if( tcp_sock != NULL ) {
- PR_Close(tcp_sock);
- tcp_sock = NULL;
- }
- /* Don't return SECFailure? */
- return SECSuccess;
- }
-
- prStatus = PR_Connect(tcp_sock, addr, PR_SecondsToInterval(3));
- if (prStatus != PR_SUCCESS) {
- errWarn("PR_Connect");
- if( tcp_sock != NULL ) {
- PR_Close(tcp_sock);
- tcp_sock = NULL;
- }
- exit(6);
- }
-
- ssl_sock = SSL_ImportFD(model_sock, tcp_sock);
- /* XXX if this import fails, close tcp_sock and return. */
- if (!ssl_sock) {
- if( tcp_sock != NULL ) {
- PR_Close(tcp_sock);
- tcp_sock = NULL;
- }
- exit(7);
- }
-
- rv = SSL_ResetHandshake(ssl_sock, /* asServer */ 0);
- if (rv != SECSuccess) {
- errWarn("SSL_ResetHandshake");
- exit(8);
- }
-
- result = do_io( ssl_sock, connection);
-
- if( ssl_sock != NULL ) {
- PR_Close(ssl_sock);
- ssl_sock = NULL;
- }
- return SECSuccess;
-}
-
-/* Returns IP address for hostname as PRUint32 in Host Byte Order.
-** Since the value returned is an integer (not a string of bytes),
-** it is inherently in Host Byte Order.
-*/
-PRUint32
-getIPAddress(const char * hostName)
-{
- const unsigned char *p;
- PRStatus prStatus;
- PRUint32 rv;
- PRHostEnt prHostEnt;
- char scratch[PR_NETDB_BUF_SIZE];
-
- prStatus = PR_GetHostByName(hostName, scratch, sizeof scratch, &prHostEnt);
- if (prStatus != PR_SUCCESS)
- errExit("PR_GetHostByName");
-
-#undef h_addr
-#define h_addr h_addr_list[0] /* address, for backward compatibility */
-
- p = (const unsigned char *)(prHostEnt.h_addr); /* in Network Byte order */
- FPRINTF(stderr, "%s -> %d.%d.%d.%d\n", hostName, p[0], p[1], p[2], p[3]);
- rv = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
- return rv;
-}
-
-void
-client_main(
- unsigned short port,
- int connections,
- SECKEYPrivateKey ** privKey,
- CERTCertificate ** cert,
- const char * hostName,
- char * nickName)
-{
- PRFileDesc *model_sock = NULL;
- int rv;
-
-
- FPRINTF(stderr, "port: %d\n", port);
-
- /* all suites except RSA_NULL_MD5 are enabled by Domestic Policy */
- NSS_SetDomesticPolicy();
-
- /* all the SSL2 and SSL3 cipher suites are enabled by default. */
-
- /* enable FIPS ciphers */
- SSL_CipherPrefSetDefault(0xc004 /* TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0xc003 /* TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0xC005 /* TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0xc00a /* TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0x2f /* TLS_RSA_WITH_AES_128_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0x35 /* TLS_RSA_WITH_AES_256_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0xc008 /* TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0xc009 /* TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0xc012 /* TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0xc013 /* TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0xc014 /* TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0x32 /* TLS_DHE_DSS_WITH_AES_128_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0x38 /* TLS_DHE_DSS_WITH_AES_256_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0x33 /* TLS_DHE_RSA_WITH_AES_128_CBC_SHA */, PR_TRUE);
- SSL_CipherPrefSetDefault(0x39 /* TLS_DHE_RSA_WITH_AES_256_CBC_SHA */, PR_TRUE);
-
- /*
- * Rifle through the values for the host
- */
-
- PRAddrInfo *ai;
- void *iter;
- PRNetAddr addr;
- int family = PR_AF_INET;
-
- ai = PR_GetAddrInfoByName(hostName, PR_AF_UNSPEC, PR_AI_ADDRCONFIG);
- if (ai) {
- FPRINTF( stderr, "addr='%s'\n", PR_GetCanonNameFromAddrInfo( ai ) );
- iter = NULL;
- while ((iter = PR_EnumerateAddrInfo(iter, ai, 0, &addr)) != NULL) {
- family = PR_NetAddrFamily(&addr);
- FPRINTF( stderr, "family='%d'\n", family );
- break;
- }
- PR_FreeAddrInfo(ai);
- }
-
- PR_SetNetAddr( PR_IpAddrNull, family, port, &addr );
-
- model_sock = PR_OpenTCPSocket( family );
- if (model_sock == NULL) {
- errExit("PR_OpenTCPSocket on tcp socket");
- }
-
- /* Should we really be re-using the same socket? */
- model_sock = SSL_ImportFD(NULL, model_sock);
-
-
- /* check on success of call to SSL_ImportFD() */
- if (model_sock == NULL) {
- errExit("SSL_ImportFD");
- }
-
- /* enable ECC cipher also */
-
- /* do SSL configuration. */
-
- rv = SSL_OptionSet(model_sock, SSL_SECURITY, 1);
- if (rv < 0) {
- if( model_sock != NULL ) {
- PR_Close( model_sock );
- model_sock = NULL;
- }
- errExit("SSL_OptionSet SSL_SECURITY");
- }
-
- SSL_SetURL(model_sock, hostName);
-
- SSL_AuthCertificateHook(model_sock, mySSLAuthCertificate,
- (void *)CERT_GetDefaultCertDB());
-
- SSL_BadCertHook(model_sock, myBadCertHandler, NULL);
-
- if( nickName) {
- SSL_GetClientAuthDataHook(model_sock,
- (SSLGetClientAuthData)my_GetClientAuthData,
- nickName);
- }
-
- /* I'm not going to set the HandshakeCallback function. */
-
- /* end of ssl configuration. */
-
- rv = do_connect(&addr, model_sock, 1);
-
- if( model_sock != NULL ) {
- PR_Close( model_sock );
- model_sock = NULL;
- }
-}
-
-
-SECStatus
-createRequest(char * url, char *post)
-{
- char * newstr;
-
- if (post == NULL) {
- newstr = PR_smprintf(
- "GET %s HTTP/1.0\r\n\r\n",
- url);
- } else {
- int len = strlen(post);
- newstr = PR_smprintf(
- "POST %s HTTP/1.0\r\nContent-Length: %d\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n%s", url, len, post);
- }
-
- bigBuf.data = (unsigned char *)newstr;
-
- FPUTS((char *)bigBuf.data, stderr);
-
- bigBuf.len = PORT_Strlen((char *)bigBuf.data);
-
- return SECSuccess;
-}
-
-int
-main(int argc, char **argv)
-{
- char * dir = ".";
- char * hostName = NULL;
- char * nickName = NULL;
- char * progName = NULL;
- char * tmp = NULL;
- char * post = NULL;
- CERTCertificate * cert [kt_kea_size] = { NULL };
- SECKEYPrivateKey * privKey[kt_kea_size] = { NULL };
- int optchar;
- int connections = 1;
- int tmpI;
- unsigned short port = 443;
- SECStatus rv;
- char * passwd = NULL;
- char * passwdfile = NULL;
- char * url = NULL;
- FILE *fp;
- char pwbuf[256];
- int co;
- char *crlf;
-
- /* Call the NSPR initialization routines */
- PR_Init( PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1);
-
- tmp = strrchr(argv[0], '/');
- tmp = tmp ? tmp + 1 : argv[0];
- progName = strrchr(tmp, '\\');
- progName = progName ? progName + 1 : tmp;
-
-
- while ((optchar = getopt(argc, argv, "Vd:e:n:p:r:w:v")) != -1) {
- switch(optchar) {
-
-/* Version */
- case 'V':
- printf("%s\n",VERSIONSTRING);
- PR_Cleanup();
- return 0;
-
-/* Directory which holds cert8.db and key3.db */
- case 'd':
- dir = optarg;
- break;
-
-/* Nickname of certificate to use */
- case 'n':
- nickName = optarg;
- break;
-
-/* password to open key3.db */
- case 'p':
- passwd = optarg;
- break;
-
-/* name of file holding password for key3.db */
- case 'w':
- passwdfile = optarg;
- break;
-
-/* url */
- case 'r':
- url = optarg;
- break;
-
-/* post parameters */
- case 'e':
- post = optarg;
- break;
-
- case 'v':
- verbose++;
- break;
-
- default:
- case '?':
- fprintf( stderr, "ERROR: Invalid option!\n" );
- Usage(progName);
- break;
-
- }
- }
-
- if (optind != argc - 1) {
- fprintf( stderr, "ERROR: Invalid number of arguments!\n" );
- Usage(progName);
- }
-
- hostName = argv[optind];
- tmp = strchr(hostName, ':');
- if (tmp) {
- *tmp++ = 0;
- tmpI = atoi(tmp);
- if (tmpI <= 0) {
- fprintf( stderr, "ERROR: Invalid port!\n" );
- Usage(progName);
- }
- port = (unsigned short)tmpI;
- }
-
- if ( !url) {
- fprintf( stderr, "ERROR: Invalid url!\n" );
- Usage(progName);
- }
-
- createRequest(url, post);
-
- if (passwdfile) {
- fp = fopen(passwdfile,"r");
- if (!fp) { fprintf(stderr, "Couldn't open password file\n"); exit(7); }
- co = fread(pwbuf,1,256,fp);
- pwbuf[co] = '\0';
- crlf = PL_strchr(pwbuf,'\n');
- if (crlf) {
- *crlf = '\0';
- }
- passwd = pwbuf;
- }
-
- /* set our password function */
- if (passwd == NULL) {
- fprintf( stderr, "ERROR: Invalid password!\n" );
- PRINTF("Password must be provided on command line in this version of revoker.\n");
- Usage(progName);
- }
- PK11_SetPasswordFunc(ownPasswd);
-
- /* Call the libsec initialization routines */
- rv = NSS_Init(dir);
- if (rv != SECSuccess) {
- fputs("NSS_Init failed.\n", stderr);
- exit(1);
- }
-
- if(nickName) {
- cert[kt_rsa] = PK11_FindCertFromNickname(nickName, passwd);
- if (cert[kt_rsa] == NULL) {
- fprintf(stderr, "Can't find certificate %s\n", nickName);
- exit(1);
- }
-
- privKey[kt_rsa] = PK11_FindKeyByAnyCert(cert[kt_rsa], passwd);
- if (privKey[kt_rsa] == NULL) {
- fprintf(stderr, "Can't find Private Key for cert %s (possibly incorrect password)\n", nickName);
- exit(1);
- }
- }
-
- client_main(port, connections, privKey, cert, hostName, nickName);
-
- NSS_Shutdown();
- PR_Cleanup();
- return 0;
-}
-