Mainly changes to adjust for the changed KSBA API.
[gnupg.git] / sm / verify.c
index 6dd4f4e..201fc7b 100644 (file)
 #include "i18n.h"
 
 static char *
-strtimestamp_r (time_t atime)
+strtimestamp_r (ksba_isotime_t atime)
 {
   char *buffer = xmalloc (15);
   
-  if (atime < 0) 
-    strcpy (buffer, "????" "-??" "-??");
-  else if (!atime)
+  if (!atime || !*atime)
     strcpy (buffer, "none");
   else
-    {
-      struct tm *tp;
-      
-      tp = gmtime( &atime );
-      sprintf (buffer, "%04d-%02d-%02d",
-               1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday);
-    }
+    sprintf (buffer, "%.4s-%.2s-%.2s", atime, atime+4, atime+6);
   return buffer;
 }
 
@@ -143,8 +135,8 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
         }
     }
 
-  cms = ksba_cms_new ();
-  if (!cms)
+  err = ksba_cms_new (&cms);
+  if (err)
     {
       rc = gpg_error (GPG_ERR_ENOMEM);
       goto leave;
@@ -154,8 +146,8 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
   if (err)
     {
       log_error ("ksba_cms_set_reader_writer failed: %s\n",
-                 ksba_strerror (err));
-      rc = map_ksba_err (err);
+                 gpg_strerror (err));
+      rc = err;
       goto leave;
     }
 
@@ -174,8 +166,8 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
       err = ksba_cms_parse (cms, &stopreason);
       if (err)
         {
-          log_error ("ksba_cms_parse failed: %s\n", ksba_strerror (err));
-          rc = map_ksba_err (err);
+          log_error ("ksba_cms_parse failed: %s\n", gpg_strerror (err));
+          rc = err;
           goto leave;
         }
 
@@ -251,14 +243,15 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
     {
       char *issuer = NULL;
       KsbaSexp sigval = NULL;
-      time_t sigtime, keyexptime;
+      ksba_isotime_t sigtime, keyexptime;
       KsbaSexp serial;
       char *msgdigest = NULL;
       size_t msgdigestlen;
       char *ctattr;
 
       err = ksba_cms_get_issuer_serial (cms, signer, &issuer, &serial);
-      if (!signer && err == KSBA_No_Data && data_fd == -1 && is_detached)
+      if (!signer && gpg_err_code (err) == GPG_ERR_NO_DATA
+          && data_fd == -1 && is_detached)
         {
           log_info ("certs-only message accepted\n");
           err = 0;
@@ -279,13 +272,14 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
           log_printf ("\n");
         }
 
-      err = ksba_cms_get_signing_time (cms, signer, &sigtime);
-      if (err == KSBA_No_Data)
-        sigtime = 0;
+      err = ksba_cms_get_signing_time (cms, signer, sigtime);
+      if (gpg_err_code (err) == GPG_ERR_NO_DATA)
+        *sigtime = 0;
       else if (err)
         {
-          log_error ("error getting signing time: %s\n", ksba_strerror (err));
-          sigtime = (time_t)-1;
+          log_error ("error getting signing time: %s\n", gpg_strerror (err));
+          *sigtime = 0; /* FIXME: we can't encode an error in the time
+                           string. */
         }
 
       err = ksba_cms_get_message_digest (cms, signer,
@@ -302,7 +296,7 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
               goto next_signer;
             }
         }
-      else if (err == KSBA_No_Data)
+      else if (gpg_err_code (err) == GPG_ERR_NO_DATA)
         {
           assert (!msgdigest);
           err = 0;
@@ -335,7 +329,7 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
       else if (err != -1)
         {
           log_error ("error getting content-type attribute: %s\n",
-                     ksba_strerror (err));
+                     gpg_strerror (err));
           goto next_signer;
         }
       err = 0;
@@ -383,7 +377,7 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
         }
 
       log_info (_("Signature made "));
-      if (sigtime)
+      if (*sigtime)
         gpgsm_dump_time (sigtime);
       else
         log_printf (_("[date not given]"));
@@ -427,7 +421,7 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
           if (rc)
             {
               log_error ("hashing signed attrs failed: %s\n",
-                         ksba_strerror (rc));
+                         gpg_strerror (rc));
               gcry_md_close (md);
               goto next_signer;
             }
@@ -459,7 +453,7 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
 
       if (DBG_X509)
         log_debug ("signature okay - checking certs\n");
-      rc = gpgsm_validate_chain (ctrl, cert, &keyexptime);
+      rc = gpgsm_validate_chain (ctrl, cert, keyexptime);
       if (gpg_err_code (rc) == GPG_ERR_CERT_EXPIRED)
         {
           gpgsm_status (ctrl, STATUS_EXPKEYSIG, NULL);
@@ -474,8 +468,8 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
         fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1);
         tstr = strtimestamp_r (sigtime);
         buf = xmalloc ( strlen(fpr) + strlen (tstr) + 120);
-        sprintf (buf, "%s %s %lu %lu", fpr, tstr,
-                 (unsigned long)sigtime, (unsigned long)keyexptime );
+        sprintf (buf, "%s %s %s %s", fpr, tstr,
+                 sigtime, keyexptime );
         xfree (tstr);
         xfree (fpr);
         gpgsm_status (ctrl, STATUS_VALIDSIG, buf);
@@ -521,9 +515,9 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd, FILE *out_fp)
     }
   rc = 0;
   if (err)
-    {
-      log_error ("ksba error: %s\n", ksba_strerror (err));
-      rc = map_ksba_err (rc);
+    { /* FIXME: still needed? */
+      log_error ("ksba error: %s\n", gpg_strerror (err));
+      rc = err;
     }