Hi,

I am sending in the patches (for Bodo: I know It was due to the end
of the week, but I will re-send them - as many wrote in asking for
the patches I am sending it to the lists too).

To use the patch, put the madwolf.patch into the
openssl-SNAP-20010228 dir and type:

        $ patch -p0 <madwolf.patch

If all goes well you should have the new versions of the
two files.

Now some explanation:

req.c
=====

o Fixed some "usage" lacking messages (passin,subject):
   -subject       output the request's subject
   -passin        private key password source

o Added some new switch:
   -batch         do not ask anything during request generation
   -subj arg      use the passed subject in new request generation
   -modsubj arg   modify request's subject to arg

   * The -batch will not prompt for any information during new
   request generation so defaults value will be used.

   * The -subj will allow for subject name specification during
   new request generation. The subject name format is:

        "CN=Some Name, OU=myOU, C=IT"

   or

        "CN=Some Name/OU=myOU/C=IT"

   the two will be correctly parsed. The order will be preseved
   into request's subject. All known nid are allowed, unknown will
   be ignored.

   * The -modsubj will allow to modify a request's subject after
   its creation - the request will no more be valid when verifying
   it - I really am not sure about its usability anyway it just
   required few code lines to be added.

ca.c
====

o Added one new switch:
  -subj arg       - Use arg instead of request's subject

  * The -subj will allow for subject name arg to be used instead of
  the request's subject name. Useful when issuing certificates with
  modified subject (by RA operator) without requiring the user to
  submit again for a certificate because of errors in subject.
  This is useful for IE/Server requests.

  The subject's format is the same as the one reported for the
  -subj request's new switch.

Hope this will help in CA managing.

C'you,

        Massimiliano Pala ([EMAIL PROTECTED])
--- apps/ca.c   Thu Feb 22 16:00:08 2001
+++ apps/ca-openca.c    Thu Mar  1 10:59:05 2001
@@ -183,6 +183,7 @@
 " -batch          - Don't ask questions\n",
 " -msie_hack      - msie modifications to handle all those universal strings\n",
 " -revoke file    - Revoke a certificate (given in file)\n",
+" -subj arg       - Use arg instead of request's subject\n",
 " -extensions ..  - Extension section (override value in config file)\n",
 " -extfile file   - Configuration file with X509v3 extentions to add\n",
 " -crlexts ..     - CRL extension section (override value in config file)\n",
@@ -208,24 +209,25 @@
 static int save_serial(char *serialfile, BIGNUM *serial);
 static int certify(X509 **xret, char *infile,EVP_PKEY *pkey,X509 *x509,
                   const EVP_MD *dgst,STACK_OF(CONF_VALUE) *policy,TXT_DB *db,
-                  BIGNUM *serial, char *startdate,char *enddate, int days,
-                  int batch, char *ext_sect, LHASH *conf,int verbose);
+                  BIGNUM *serial, char *subj, char *startdate,char *enddate,
+                  int days, int batch, char *ext_sect, LHASH *conf,int verbose);
 static int certify_cert(X509 **xret, char *infile,EVP_PKEY *pkey,X509 *x509,
                        const EVP_MD *dgst,STACK_OF(CONF_VALUE) *policy,
-                       TXT_DB *db, BIGNUM *serial,char *startdate,
+                       TXT_DB *db, BIGNUM *serial, char *subj, char *startdate,
                        char *enddate, int days, int batch, char *ext_sect,
                        LHASH *conf,int verbose);
 static int certify_spkac(X509 **xret, char *infile,EVP_PKEY *pkey,X509 *x509,
                         const EVP_MD *dgst,STACK_OF(CONF_VALUE) *policy,
-                        TXT_DB *db, BIGNUM *serial,char *startdate,
+                        TXT_DB *db, BIGNUM *serial,char *subj, char *startdate,
                         char *enddate, int days, char *ext_sect,LHASH *conf,
                                int verbose);
 static int fix_data(int nid, int *type);
 static void write_new_certificate(BIO *bp, X509 *x, int output_der, int notext);
 static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,
-       STACK_OF(CONF_VALUE) *policy, TXT_DB *db, BIGNUM *serial,
+       STACK_OF(CONF_VALUE) *policy, TXT_DB *db, BIGNUM *serial,char *subj,
        char *startdate, char *enddate, int days, int batch, int verbose,
        X509_REQ *req, char *ext_sect, LHASH *conf);
+static X509_NAME *do_subject( char *subject );
 static int do_revoke(X509 *x509, TXT_DB *db, int ext, char *extval);
 static int get_certificate_status(const char *ser_status, TXT_DB *db);
 static int do_updatedb(TXT_DB *db);
@@ -280,6 +282,7 @@
        char *serialfile=NULL;
        char *extensions=NULL;
        char *extfile=NULL;
+       char *subj=NULL;
        char *crl_ext=NULL;
        int rev_type = REV_NONE;
        char *rev_arg = NULL;
@@ -343,6 +346,12 @@
                        if (--argc < 1) goto bad;
                        section= *(++argv);
                        }
+               else if (strcmp(*argv,"-subj") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       subj= *(++argv);
+                       /* preserve=1; */
+                       }
                else if (strcmp(*argv,"-startdate") == 0)
                        {
                        if (--argc < 1) goto bad;
@@ -1138,7 +1147,7 @@
                        {
                        total++;
                        j=certify_spkac(&x,spkac_file,pkey,x509,dgst,attribs,db,
-                               serial,startdate,enddate, days,extensions,conf,
+                               serial,subj,startdate,enddate, days,extensions,conf,
                                verbose);
                        if (j < 0) goto err;
                        if (j > 0)
@@ -1162,7 +1171,7 @@
                        {
                        total++;
                        j=certify_cert(&x,ss_cert_file,pkey,x509,dgst,attribs,
-                               db,serial,startdate,enddate,days,batch,
+                               db,serial,subj,startdate,enddate,days,batch,
                                extensions,conf,verbose);
                        if (j < 0) goto err;
                        if (j > 0)
@@ -1181,7 +1190,7 @@
                        {
                        total++;
                        j=certify(&x,infile,pkey,x509,dgst,attribs,db,
-                               serial,startdate,enddate,days,batch,
+                               serial,subj,startdate,enddate,days,batch,
                                extensions,conf,verbose);
                        if (j < 0) goto err;
                        if (j > 0)
@@ -1200,7 +1209,7 @@
                        {
                        total++;
                        j=certify(&x,argv[i],pkey,x509,dgst,attribs,db,
-                               serial,startdate,enddate,days,batch,
+                               serial,subj,startdate,enddate,days,batch,
                                extensions,conf,verbose);
                        if (j < 0) goto err;
                        if (j > 0)
@@ -1674,7 +1683,7 @@
 
 static int certify(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
             const EVP_MD *dgst, STACK_OF(CONF_VALUE) *policy, TXT_DB *db,
-            BIGNUM *serial, char *startdate, char *enddate, int days,
+            BIGNUM *serial, char *subj, char *startdate, char *enddate, int days,
             int batch, char *ext_sect, LHASH *lconf, int verbose)
        {
        X509_REQ *req=NULL;
@@ -1722,7 +1731,7 @@
        else
                BIO_printf(bio_err,"Signature ok\n");
 
-       ok=do_body(xret,pkey,x509,dgst,policy,db,serial,startdate, enddate,
+       ok=do_body(xret,pkey,x509,dgst,policy,db,serial,subj,startdate, enddate,
                days,batch,verbose,req,ext_sect,lconf);
 
 err:
@@ -1733,7 +1742,7 @@
 
 static int certify_cert(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
             const EVP_MD *dgst, STACK_OF(CONF_VALUE) *policy, TXT_DB *db,
-            BIGNUM *serial, char *startdate, char *enddate, int days,
+            BIGNUM *serial, char *subj, char *startdate, char *enddate, int days,
             int batch, char *ext_sect, LHASH *lconf, int verbose)
        {
        X509 *req=NULL;
@@ -1784,7 +1793,7 @@
        if ((rreq=X509_to_X509_REQ(req,NULL,EVP_md5())) == NULL)
                goto err;
 
-       ok=do_body(xret,pkey,x509,dgst,policy,db,serial,startdate,enddate,days,
+       ok=do_body(xret,pkey,x509,dgst,policy,db,serial,subj,startdate,enddate,days,
                batch,verbose,rreq,ext_sect,lconf);
 
 err:
@@ -1795,7 +1804,7 @@
        }
 
 static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst,
-            STACK_OF(CONF_VALUE) *policy, TXT_DB *db, BIGNUM *serial,
+            STACK_OF(CONF_VALUE) *policy, TXT_DB *db, BIGNUM *serial, char *subj,
             char *startdate, char *enddate, int days, int batch, int verbose,
             X509_REQ *req, char *ext_sect, LHASH *lconf)
        {
@@ -1825,6 +1834,12 @@
                row[i]=NULL;
 
        BIO_printf(bio_err,"The Subjects Distinguished Name is as follows\n");
+       if (subj)
+               {
+               X509_REQ_set_subject_name(req,do_subject(subj));
+               /* req->req_info->enc.modified = 1; */
+               }
+
        name=X509_REQ_get_subject_name(req);
        for (i=0; i<X509_NAME_entry_count(name); i++)
                {
@@ -2288,7 +2303,7 @@
 
 static int certify_spkac(X509 **xret, char *infile, EVP_PKEY *pkey, X509 *x509,
             const EVP_MD *dgst, STACK_OF(CONF_VALUE) *policy, TXT_DB *db,
-            BIGNUM *serial, char *startdate, char *enddate, int days,
+            BIGNUM *serial, char *subj, char *startdate, char *enddate, int days,
             char *ext_sect, LHASH *lconf, int verbose)
        {
        STACK_OF(CONF_VALUE) *sk=NULL;
@@ -2423,7 +2438,7 @@
 
        X509_REQ_set_pubkey(req,pktmp);
        EVP_PKEY_free(pktmp);
-       ok=do_body(xret,pkey,x509,dgst,policy,db,serial,startdate,enddate,
+       ok=do_body(xret,pkey,x509,dgst,policy,db,serial,subj,startdate,enddate,
                   days,1,verbose,req,ext_sect,lconf);
 err:
        if (req != NULL) X509_REQ_free(req);
@@ -2973,3 +2988,60 @@
 
        return ret;
        }
+
+static X509_NAME *do_subject( char *subject ) {
+
+       X509_NAME *n = NULL;
+
+       int i, nid, ne_num=0;
+
+       char *ne_name = NULL;
+       char *ne_value = NULL;
+
+       char *tmp = NULL;
+       char *p[2];
+
+       char *str_list[256];
+       
+       p[0] = ",/";
+        p[1] = "=";
+
+       n = X509_NAME_new();
+
+       tmp = strtok( subject, p[0] );
+       while( ( tmp != NULL ) && (ne_num < 255) ) 
+               {
+               int cnt;
+               char *token = tmp;
+
+               for ( cnt = 0; cnt < strlen(tmp); cnt++ ) {
+                       if( token[cnt] == ' ' )
+                               token++;
+                       else
+                               break;
+               }
+               str_list[ne_num] = token;
+
+               tmp = strtok( NULL, p[0] );
+               ne_num++;
+               }
+
+       for( i = 0; i < ne_num; i++ )
+               {
+               ne_name  = strtok( str_list[i], p[1] );
+               ne_value = strtok( NULL, p[1] );
+
+               if ((nid=OBJ_txt2nid(ne_name)) == NID_undef)
+                       {
+                       BIO_printf( bio_err, "Subject Attribute %s has no known NID\n",
+                                                       ne_name );
+                      continue;
+                       }
+
+               if(!X509_NAME_add_entry_by_NID( n, nid, MBSTRING_ASC,
+                                                       ne_value, -1,-1,0))
+                       return(NULL);
+               }
+
+       return(n);
+}
--- apps/req.c  Tue Feb 20 10:00:20 2001
+++ apps/req-openca.c   Thu Mar  1 10:59:00 2001
@@ -111,7 +111,8 @@
  *               require.  This format is wrong
  */
 
-static int make_REQ(X509_REQ *req,EVP_PKEY *pkey,int attribs);
+static int make_REQ(X509_REQ *req,EVP_PKEY *pkey,char *dn,int attribs);
+static int build_subject( X509_REQ *req, char *subj );
 static int prompt_info(X509_REQ *req,
                STACK_OF(CONF_VALUE) *dn_sk, char *dn_sect,
                STACK_OF(CONF_VALUE) *attr_sk, char *attr_sect, int attribs);
@@ -132,6 +133,7 @@
 static LHASH *config=NULL;
 #endif
 static LHASH *req_conf=NULL;
+static int batch=0;
 
 #define TYPE_RSA       1
 #define TYPE_DSA       2
@@ -150,7 +152,7 @@
        X509 *x509ss=NULL;
        X509_REQ *req=NULL;
        EVP_PKEY *pkey=NULL;
-       int i,badops=0,newreq=0,newkey= -1,pkey_type=TYPE_RSA;
+       int i,badops=0,newreq=0,newkey= -1,verbose=0,pkey_type=TYPE_RSA;
        BIO *in=NULL,*out=NULL;
        int informat,outformat,verify=0,noout=0,text=0,keyform=FORMAT_PEM;
        int nodes=0,kludge=0,newhdr=0,subject=0;
@@ -165,6 +167,8 @@
        char *passargin = NULL, *passargout = NULL;
        char *passin = NULL, *passout = NULL;
        char *p;
+       char *modsubj = NULL;
+       char *subj = NULL;
        const EVP_MD *md_alg=NULL,*digest=EVP_md5();
 #ifndef MONOLITH
        MS_STATIC char config_name[256];
@@ -321,6 +325,8 @@
 
                        newreq=1;
                        }
+               else if (strcmp(*argv,"-batch") == 0)
+                       batch=1;
                else if (strcmp(*argv,"-newhdr") == 0)
                        newhdr=1;
                else if (strcmp(*argv,"-modulus") == 0)
@@ -331,6 +337,8 @@
                        nodes=1;
                else if (strcmp(*argv,"-noout") == 0)
                        noout=1;
+               else if (strcmp(*argv,"-verbose") == 0)
+                       verbose=1;
                else if (strcmp(*argv,"-nameopt") == 0)
                        {
                        if (--argc < 1) goto bad;
@@ -346,6 +354,16 @@
                        kludge=1;
                else if (strcmp(*argv,"-no-asn1-kludge") == 0)
                        kludge=0;
+               else if (strcmp(*argv,"-modsubj") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       modsubj= *(++argv);
+                       }
+               else if (strcmp(*argv,"-subj") == 0)
+                       {
+                       if (--argc < 1) goto bad;
+                       subj= *(++argv);
+                       }
                else if (strcmp(*argv,"-days") == 0)
                        {
                        if (--argc < 1) goto bad;
@@ -397,8 +415,11 @@
                BIO_printf(bio_err," -verify        verify signature on REQ\n");
                BIO_printf(bio_err," -modulus       RSA modulus\n");
                BIO_printf(bio_err," -nodes         don't encrypt the output key\n");
-               BIO_printf(bio_err," -engine e      use engine e, possibly a hardware 
device.\n");
-               BIO_printf(bio_err," -key file  use the private key contained in 
file\n");
+               BIO_printf(bio_err," -engine e      use engine e, possibly a hardware 
+device\n");
+               BIO_printf(bio_err," -subject       output the request's subject\n");
+               BIO_printf(bio_err," -passin        private key password source\n");
+               BIO_printf(bio_err," -modsubj arg   modifies the request's subject to 
+arg\n");
+               BIO_printf(bio_err," -key file      use the private key contained in 
+file\n");
                BIO_printf(bio_err," -keyform arg   key file format\n");
                BIO_printf(bio_err," -keyout arg    file to send the key to\n");
                BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, 
LIST_SEPARATOR_CHAR);
@@ -406,12 +427,13 @@
                BIO_printf(bio_err,"                the random number generator\n");
                BIO_printf(bio_err," -newkey rsa:bits generate a new RSA key of 'bits' 
in size\n");
                BIO_printf(bio_err," -newkey dsa:file generate a new DSA key, 
parameters taken from CA in 'file'\n");
-
                BIO_printf(bio_err," -[digest]      Digest to sign with (md5, sha1, 
md2, mdc2)\n");
                BIO_printf(bio_err," -config file   request template file.\n");
                BIO_printf(bio_err," -new           new request.\n");
+               BIO_printf(bio_err," -batch         do not ask anything during request 
+generation\n");
                BIO_printf(bio_err," -x509          output a x509 structure instead of 
a cert. req.\n");
                BIO_printf(bio_err," -days          number of days a certificate 
generated by -x509 is valid for.\n");
+               BIO_printf(bio_err," -subj arg      use the passed subject in new 
+request generation\n");
                BIO_printf(bio_err," -set_serial    serial number to use for a 
certificate generated by -x509.\n");
                BIO_printf(bio_err," -newhdr        output \"NEW\" in the header 
lines\n");
                BIO_printf(bio_err," -asn1-kludge   Output the 'request' in a format 
that is wrong but some CA's\n");
@@ -795,7 +817,7 @@
                                goto end;
                                }
 
-                       i=make_REQ(req,pkey,!x509);
+                       i=make_REQ(req,pkey,subj,!x509);
                        if ((kludge > 0) && 
!sk_X509_ATTRIBUTE_num(req->req_info->attributes))
                                {
                                sk_X509_ATTRIBUTE_free(req->req_info->attributes);
@@ -872,6 +894,31 @@
                        }
                }
 
+       if (modsubj && !x509)
+               {
+               if(verbose)
+                       {
+                       BIO_printf( bio_err, "Modifying Request's Subject\n");
+                       print_name(bio_err, "old subject=", 
+                               X509_REQ_get_subject_name(req), nmflag);
+                       }
+
+               if( build_subject( req, modsubj ) == 0)
+                       {
+                       BIO_printf( bio_err, "ERROR: cannot modify subject\n");
+                       ex=1;
+                       goto end;
+                       }
+
+               req->req_info->enc.modified = 1;
+
+               if( verbose )
+                       {
+                       print_name(bio_err, "new subject=", 
+                               X509_REQ_get_subject_name(req), nmflag);
+                       }
+               }
+
        if (verify && !x509)
                {
                int tmp=0;
@@ -1024,7 +1071,7 @@
        EXIT(ex);
        }
 
-static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, int attribs)
+static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int attribs)
        {
        int ret=0,i;
        char no_prompt = 0;
@@ -1069,8 +1116,15 @@
        /* setup version number */
        if (!X509_REQ_set_version(req,0L)) goto err; /* version 1 */
 
-       if(no_prompt) i = auto_info(req, dn_sk, attr_sk, attribs);
-       else i = prompt_info(req, dn_sk, dn_sect, attr_sk, attr_sect, attribs);
+       if(no_prompt) 
+               i = auto_info(req, dn_sk, attr_sk, attribs);
+       else 
+               {
+               if (subj)
+                       i = build_subject( req, subj );
+               else
+                       i = prompt_info(req, dn_sk, dn_sect, attr_sk, attr_sect, 
+attribs);
+               }
        if(!i) goto err;
 
        X509_REQ_set_pubkey(req,pkey);
@@ -1080,6 +1134,66 @@
        return(ret);
        }
 
+static int build_subject( X509_REQ *req, char *subject ) {
+
+       X509_NAME *n = NULL;
+
+       int i, nid, ne_num=0;
+
+       char *ne_name = NULL;
+       char *ne_value = NULL;
+
+       char *tmp = NULL;
+       char *p[2];
+
+       char *str_list[256];
+       
+       p[0] = ",/";
+        p[1] = "=";
+
+       n = X509_NAME_new();
+
+       tmp = strtok( subject, p[0] );
+       while( ( tmp != NULL ) && (ne_num < 255) ) 
+               {
+               int cnt;
+               char *token = tmp;
+
+               for ( cnt = 0; cnt < strlen(tmp); cnt++ ) {
+                       if( token[cnt] == ' ' )
+                               token++;
+                       else
+                               break;
+               }
+               str_list[ne_num] = token;
+
+               tmp = strtok( NULL, p[0] );
+               ne_num++;
+               }
+
+       for( i = 0; i < ne_num; i++ )
+               {
+               ne_name  = strtok( str_list[i], p[1] );
+               ne_value = strtok( NULL, p[1] );
+
+               if ((nid=OBJ_txt2nid(ne_name)) == NID_undef)
+                       {
+                       BIO_printf( bio_err, "Subject Attribute %s has no known NID\n",
+                                                       ne_name );
+                      continue;
+                       }
+
+               if(!X509_NAME_add_entry_by_NID( n, nid, MBSTRING_ASC,
+                                                       ne_value, -1,-1,0))
+                       return(0);
+               }
+
+       if(!X509_REQ_set_subject_name ( req, n ))
+               return(0);
+
+       return(1);
+}
+
 
 static int prompt_info(X509_REQ *req,
                STACK_OF(CONF_VALUE) *dn_sk, char *dn_sect,
@@ -1093,13 +1207,17 @@
        CONF_VALUE *v;
        X509_NAME *subj;
        subj = X509_REQ_get_subject_name(req);
-       BIO_printf(bio_err,"You are about to be asked to enter information that will 
be incorporated\n");
-       BIO_printf(bio_err,"into your certificate request.\n");
-       BIO_printf(bio_err,"What you are about to enter is what is called a 
Distinguished Name or a DN.\n");
-       BIO_printf(bio_err,"There are quite a few fields but you can leave some 
blank\n");
-       BIO_printf(bio_err,"For some fields there will be a default value,\n");
-       BIO_printf(bio_err,"If you enter '.', the field will be left blank.\n");
-       BIO_printf(bio_err,"-----\n");
+
+       if(!batch)
+               {
+               BIO_printf(bio_err,"You are about to be asked to enter information 
+that will be incorporated\n");
+               BIO_printf(bio_err,"into your certificate request.\n");
+               BIO_printf(bio_err,"What you are about to enter is what is called a 
+Distinguished Name or a DN.\n");
+               BIO_printf(bio_err,"There are quite a few fields but you can leave 
+some blank\n");
+               BIO_printf(bio_err,"For some fields there will be a default value,\n");
+               BIO_printf(bio_err,"If you enter '.', the field will be left 
+blank.\n");
+               BIO_printf(bio_err,"-----\n");
+               }
 
 
        if (sk_CONF_VALUE_num(dn_sk))
@@ -1160,7 +1278,7 @@
 
                if (attribs)
                        {
-                       if ((attr_sk != NULL) && (sk_CONF_VALUE_num(attr_sk) > 0))
+                       if ((attr_sk != NULL) && (sk_CONF_VALUE_num(attr_sk) > 0) && 
+(!batch))
                                {
                                BIO_printf(bio_err,"\nPlease enter the following 
'extra' attributes\n");
                                BIO_printf(bio_err,"to be sent with your certificate 
request\n");
@@ -1276,9 +1394,9 @@
        int i,ret=0;
        MS_STATIC char buf[1024];
 start:
-       BIO_printf(bio_err,"%s [%s]:",text,def);
+       if (!batch) BIO_printf(bio_err,"%s [%s]:",text,def);
        (void)BIO_flush(bio_err);
-       if (value != NULL)
+       if(value != NULL)
                {
                strcpy(buf,value);
                strcat(buf,"\n");
@@ -1287,7 +1405,15 @@
        else
                {
                buf[0]='\0';
-               fgets(buf,1024,stdin);
+               if (!batch)
+                       {
+                       fgets(buf,1024,stdin);
+                       }
+               else
+                       {
+                       buf[0] = '\n';
+                       buf[1] = '\0';
+                       }
                }
 
        if (buf[0] == '\0') return(0);
@@ -1307,7 +1433,6 @@
                return(0);
                }
        buf[--i]='\0';
-
 #ifdef CHARSET_EBCDIC
        ebcdic2ascii(buf, buf, i);
 #endif
@@ -1327,7 +1452,7 @@
        static char buf[1024];
 
 start:
-       BIO_printf(bio_err,"%s [%s]:",text,def);
+       if (!batch) BIO_printf(bio_err,"%s [%s]:",text,def);
        (void)BIO_flush(bio_err);
        if (value != NULL)
                {
@@ -1338,7 +1463,15 @@
        else
                {
                buf[0]='\0';
-               fgets(buf,1024,stdin);
+               if (!batch)
+                       {
+                       fgets(buf,1024,stdin);
+                       }
+               else
+                       {
+                       buf[0] = '\n';
+                       buf[1] = '\0';
+                       }
                }
 
        if (buf[0] == '\0') return(0);

S/MIME Cryptographic Signature

Reply via email to