derdump.c
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:4k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is the Netscape security libraries.
  13.  * 
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are 
  16.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  17.  * Rights Reserved.
  18.  * 
  19.  * Contributor(s):
  20.  * 
  21.  * Alternatively, the contents of this file may be used under the
  22.  * terms of the GNU General Public License Version 2 or later (the
  23.  * "GPL"), in which case the provisions of the GPL are applicable 
  24.  * instead of those above.  If you wish to allow use of your 
  25.  * version of this file only under the terms of the GPL and not to
  26.  * allow others to use your version of this file under the MPL,
  27.  * indicate your decision by deleting the provisions above and
  28.  * replace them with the notice and other provisions required by
  29.  * the GPL.  If you do not delete the provisions above, a recipient
  30.  * may use your version of this file under either the MPL or the
  31.  * GPL.
  32.  */
  33. #include "secutil.h"
  34. #if defined(XP_WIN) || (defined(__sun) && !defined(SVR4))
  35. #if !defined(WIN32)
  36. extern int fprintf(FILE *, char *, ...);
  37. #endif
  38. #endif
  39. #include "plgetopt.h"
  40. static void Usage(char *progName)
  41. {
  42.     fprintf(stderr,
  43.     "Usage: %s [-r] [-i input] [-o output]n",
  44.     progName);
  45.     fprintf(stderr, "%-20s For formatted items, dump raw bytes as welln",
  46.     "-r");
  47.     fprintf(stderr, "%-20s Define an input file to use (default is stdin)n",
  48.     "-i input");
  49.     fprintf(stderr, "%-20s Define an output file to use (default is stdout)n",
  50.     "-o output");
  51.     exit(-1);
  52. }
  53. int main(int argc, char **argv)
  54. {
  55.     char *progName;
  56.     int option;
  57.     FILE *outFile;
  58.     PRFileDesc *inFile;
  59.     SECItem der;
  60.     SECStatus rv;
  61.     int16 xp_error;
  62.     PRBool raw = PR_FALSE;
  63.     PLOptState *optstate;
  64.     PLOptStatus status;
  65.     progName = strrchr(argv[0], '/');
  66.     progName = progName ? progName+1 : argv[0];
  67.     /* Parse command line arguments */
  68.     inFile = 0;
  69.     outFile = 0;
  70.     optstate = PL_CreateOptState(argc, argv, "i:o:r");
  71.     while ((status = PL_GetNextOpt(optstate)) == PL_OPT_OK) {
  72. switch (optstate->option) {
  73.   case 'i':
  74.     inFile = PR_Open(optstate->value, PR_RDONLY, 0);
  75.     if (!inFile) {
  76. fprintf(stderr, "%s: unable to open "%s" for readingn",
  77. progName, optstate->value);
  78. return -1;
  79.     }
  80.     break;
  81.   case 'o':
  82.     outFile = fopen(optstate->value, "w");
  83.     if (!outFile) {
  84. fprintf(stderr, "%s: unable to open "%s" for writingn",
  85. progName, optstate->value);
  86. return -1;
  87.     }
  88.     break;
  89.   case 'r':
  90.     raw = PR_TRUE;
  91.     break;
  92.   default:
  93.     Usage(progName);
  94.     break;
  95. }
  96.     }
  97. if (status == PL_OPT_BAD)
  98. Usage(progName);
  99.     if (!inFile) inFile = PR_STDIN;
  100.     if (!outFile) outFile = stdout;
  101. rv = SECU_ReadDERFromFile(&der, inFile, PR_FALSE);
  102.     if (rv == SECSuccess) {
  103. rv = DER_PrettyPrint(outFile, &der, raw);
  104. if (rv == SECSuccess)
  105.     return 0;
  106.     }
  107.     xp_error = PORT_GetError();
  108.     if (xp_error) {
  109. SECU_PrintError(progName, "error %d", xp_error);
  110.     }
  111.     if (errno) {
  112. SECU_PrintSystemError(progName, "errno=%d", errno);
  113.     }
  114.     return 1;
  115. }