Package: isync
Version: 0.9.2
Severity: wishlist

hello,
I was inspired by wmbiff's option to skip verification, so added 
a couple of opts as documented in the patch below.
Did not touch docs, just src/changelog, the latter being obviously for 
my own -log. 
WFM. HTH.

-- paolo

-- System Information
Debian Release: 3.0
Kernel Version: Linux npp 2.4.26-ss-fb-lm287 #1 Fri Jul 16 21:26:09 CEST 2004 
i686 unknown


diff -urN isync-0.9.2/debian/changelog /tmp/isync-0.9.2.1/debian/changelog
--- isync-0.9.2/debian/changelog        Mon Jan 16 22:23:43 2006
+++ /tmp/isync-0.9.2.1/debian/changelog Mon Jan 16 22:22:53 2006
@@ -1,3 +1,12 @@
+isync (0.9.2-4w00dy1) unstable; urgency=low
+
+  * option -O --no-verify-cert to enable imaps connections despite missing
+    CertificateFile
+  * option -S --ss-cert-ok to accept by default self-signed server 
+    certificate
+
+ -- paolo <[EMAIL PROTECTED]>  Mon, 16 Jan 2006 22:22:24 +0100
+
 isync (0.9.2-4) unstable; urgency=low
 
   * Add Czech debconf translation, thanks to Martin Šín. (Closes: #317571)
diff -urN isync-0.9.2/src/imap.c /tmp/isync-0.9.2.1/src/imap.c
--- isync-0.9.2/src/imap.c      Mon Jan 16 22:23:43 2006
+++ /tmp/isync-0.9.2.1/src/imap.c       Mon Jan 16 22:11:56 2006
@@ -112,9 +112,18 @@
     info ("      to:   %s\n", buf);
 
     fprintf (stderr, 
-       "\n*** WARNING ***  There is no way to verify this certificate.  It 
is\n"
-        "                 possible that a hostile attacker has replaced the\n"
-        "                 server certificate.  Continue at your own risk!\n"
+       "\n*** WARNING ***  There is no way to verify this certificate.\n");
+    if (sscert_ok && (err == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT ||
+                        err == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN))
+    {
+       fprintf (stderr, 
+         "\n*** Going on anyway as you asked - but you've been warned!\n\n");
+        return 0;
+    }
+      
+    fprintf (stderr,
+        "      It is possible that a hostile attacker has replaced the\n"
+        "      server certificate.  Continue at your own risk!\n"
          "\nAccept this certificate anyway? [no]: ");
     if (fgets (buf, sizeof (buf), stdin) && (buf[0] == 'y' || buf[0] == 'Y'))
     {
@@ -130,7 +139,7 @@
     SSL_METHOD *method;
     int options = 0;
 
-    if (!conf->cert_file)
+    if (!conf->cert_file && !no_vfy_cert)
     {
        fprintf (stderr, "Error, CertificateFile not defined\n");
        return -1;
@@ -145,7 +154,7 @@
 
     SSLContext = SSL_CTX_new (method);
 
-    if (access (conf->cert_file, F_OK))
+    if (!no_vfy_cert && access (conf->cert_file, F_OK))
     {
        if (errno != ENOENT)
        {
@@ -155,7 +164,7 @@
        warn ("*** Warning: CertificateFile doesn't exist, can't verify server 
certificates\n");
     }
     else
-       if (!SSL_CTX_load_verify_locations
+       if (!no_vfy_cert && !SSL_CTX_load_verify_locations
            (SSLContext, conf->cert_file, NULL))
     {
        fprintf (stderr, "Error, SSL_CTX_load_verify_locations: %s\n",
diff -urN isync-0.9.2/src/isync.h /tmp/isync-0.9.2.1/src/isync.h
--- isync-0.9.2/src/isync.h     Mon Jan 16 22:23:43 2006
+++ /tmp/isync-0.9.2.1/src/isync.h      Mon Jan 16 22:12:11 2006
@@ -180,7 +180,7 @@
 extern config_t *boxes;
 extern unsigned int Tag;
 extern char Hostname[256];
-extern int Verbose, Quiet;
+extern int Verbose, Quiet, sscert_ok, no_vfy_cert;
 
 extern void info (const char *, ...);
 extern void infoc (char);
diff -urN isync-0.9.2/src/main.c /tmp/isync-0.9.2.1/src/main.c
--- isync-0.9.2/src/main.c      Mon Jan 16 22:23:43 2006
+++ /tmp/isync-0.9.2.1/src/main.c       Mon Jan 16 22:17:47 2006
@@ -95,6 +95,8 @@
     {"port", 1, NULL, 'p'},
     {"quiet", 0, NULL, 'q'},
     {"user", 1, NULL, 'u'},
+    {"no-verify-cert", 0, NULL, 'O'},
+    {"ss-cert-ok", 0, NULL, 'S'},
     {"version", 0, NULL, 'v'},
     {"verbose", 0, NULL, 'V'},
     {0, 0, 0, 0}
@@ -108,6 +110,7 @@
 mailbox_t *CleanupMail = 0;
 imap_t *CleanupImap = 0;
 int CleanupValid = 0;
+int sscert_ok = 0, no_vfy_cert = 0;
 
 static void signal_exit(int sig)
 {
@@ -156,6 +159,8 @@
 "  -s, --host HOST     IMAP server address\n"
 "  -p, --port PORT     server IMAP port\n"
 "  -u, --user USER     IMAP user name\n"
+"  -O, --no-verify-cert do not (try to) verify server's SSL certificate\n"
+"  -S, --ss-cert-ok    accept Self-Signed server's SSL certificate as well\n"
 "  -c, --config CONFIG read an alternate config file (default: ~/.isyncrc)\n"
 "  -V, --verbose               verbose mode (display network traffic)\n"
 "  -q, --quiet         don't display progress info\n"
@@ -248,7 +253,7 @@
     global.use_tlsv1 = 1;
 #endif
 
-#define FLAGS "alCLRc:defhp:qu:r:F:M:1I:s:vV"
+#define FLAGS "alCLRc:defhp:qOSu:r:F:M:1I:s:vV"
 
 #if HAVE_GETOPT_LONG
     while ((i = getopt_long (argc, argv, FLAGS, Opts, NULL)) != -1)
@@ -324,6 +329,12 @@
                break;
            case 'u':
                global.user = optarg;
+               break;
+           case 'O':
+               no_vfy_cert = 1;
+               break;
+           case 'S':
+               sscert_ok = 1;
                break;
            case 'V':
                Verbose = 1;

Reply via email to