Fix shadow.
[openssl.git] / apps / gendsa.c
index 44d2b42a0579213b0f6d8301e6c22142fea91e53..805f11451659e3543404e115ab6afca90150a8f0 100644 (file)
 #undef PROG
 #define PROG gendsa_main
 
+int MAIN(int, char **);
+
 int MAIN(int argc, char **argv)
        {
        DSA *dsa=NULL;
        int ret=1;
        char *outfile=NULL;
        char *inrand=NULL,*dsaparams=NULL;
+       char *passout = NULL;
        BIO *out=NULL,*in=NULL;
        EVP_CIPHER *enc=NULL;
 
@@ -98,6 +101,22 @@ int MAIN(int argc, char **argv)
                        if (--argc < 1) goto bad;
                        outfile= *(++argv);
                        }
+               else if (strcmp(*argv,"-envpassout") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       if(!(passout= getenv(*(++argv))))
+                               {
+                               BIO_printf(bio_err,
+                                "Can't read environment variable %s\n",
+                                                               *argv);
+                               goto bad;
+                               }
+                       }
+               else if (strcmp(*argv,"-passout") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       passout= *(++argv);
+                       }
                else if (strcmp(*argv,"-rand") == 0)
                        {
                        if (--argc < 1) goto bad;
@@ -158,6 +177,7 @@ bad:
                goto end;
                }
        BIO_free(in);
+       in = NULL;
                
        out=BIO_new(BIO_s_file());
        if (out == NULL) goto end;
@@ -187,12 +207,13 @@ bad:
 
        app_RAND_write_file(NULL, bio_err);
 
-       if (!PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL,NULL))
+       if (!PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,PEM_cb, passout))
                goto end;
        ret=0;
 end:
        if (ret != 0)
                ERR_print_errors(bio_err);
+       if (in != NULL) BIO_free(in);
        if (out != NULL) BIO_free(out);
        if (dsa != NULL) DSA_free(dsa);
        EXIT(ret);