~ubuntu-branches/ubuntu/saucy/evolution-data-server/saucy

« back to all changes in this revision

Viewing changes to camel/camel-tcp-stream-ssl.c

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2012-10-08 12:58:16 UTC
  • mfrom: (181.1.7 quantal)
  • Revision ID: package-import@ubuntu.com-20121008125816-i3n76e8c0m64e7xp
Tags: 3.6.0-0ubuntu2
* Fix LP: #1038047 part 1 - Don't abort in e_source_registry_new* when a
  problem occurs connecting to the Dbus service
  - add debian/patches/dont-abort-in-e_source_registry_new.patch
  - update debian/patches/series
* Fix LP: #1038047 part 2 - libedataserver depends on
  evolution-data-server-common to ensure that the GSettings schemas are
  present
  - update debian/control

Show diffs side-by-side

added added

removed removed

Lines of Context:
168
168
                CERTCertNicknames *names;
169
169
                gint i;
170
170
 
171
 
                names = CERT_GetCertNicknames (CERT_GetDefaultCertDB (),
172
 
                                               SEC_CERT_NICKNAMES_USER,
173
 
                                               proto_win);
 
171
                names = CERT_GetCertNicknames (
 
172
                        CERT_GetDefaultCertDB (),
 
173
                        SEC_CERT_NICKNAMES_USER,
 
174
                        proto_win);
174
175
 
175
176
                if (names != NULL) {
176
177
                        for (i = 0; i < names->numnicknames; i++) {
177
 
                                cert = PK11_FindCertFromNickname (names->nicknames[i],
178
 
                                                                  proto_win);
 
178
                                cert = PK11_FindCertFromNickname (
 
179
                                        names->nicknames[i], proto_win);
179
180
                                if (!cert)
180
181
                                        continue;
181
182
 
224
225
 
225
226
        cert = SSL_PeerCertificate (sockfd);
226
227
        pinarg = SSL_RevealPinArg (sockfd);
227
 
        status = CERT_VerifyCertNow ((CERTCertDBHandle *) data, cert,
228
 
                                     checksig, certUsageSSLClient, pinarg);
 
228
        status = CERT_VerifyCertNow (
 
229
                (CERTCertDBHandle *) data, cert,
 
230
                checksig, certUsageSSLClient, pinarg);
229
231
 
230
232
        if (status != SECSuccess)
231
233
                return SECFailure;
353
355
        g_free (fingerprint);
354
356
        if (ccert->rawcert->len != cert->derCert.len
355
357
            || memcmp (ccert->rawcert->data, cert->derCert.data, cert->derCert.len) != 0) {
356
 
                g_warning("rawcert != derCer");
 
358
                g_warning ("rawcert != derCer");
357
359
                camel_cert_set_trust (certdb, ccert, CAMEL_CERT_TRUST_UNKNOWN);
358
360
                camel_certdb_touch (certdb);
359
361
        }
442
444
        for (i = 1; status == PR_TRUE; i++) {
443
445
                if (nick) {
444
446
                        g_free (nick);
445
 
                        nick = g_strdup_printf("%s #%d", server, i);
 
447
                        nick = g_strdup_printf ("%s #%d", server, i);
446
448
                } else {
447
449
                        nick = g_strdup (server);
448
450
                }
499
501
 
500
502
                status = CERT_VerifyCertNow (cert->dbhandle, cert, TRUE, certUsageSSLClient, NULL);
501
503
                fingerprint = cert_fingerprint (cert);
502
 
                cert_str = g_strdup_printf (_("   Issuer:       %s\n"
503
 
                                              "   Subject:      %s\n"
504
 
                                              "   Fingerprint:  %s\n"
505
 
                                              "   Signature:    %s"),
506
 
                                            CERT_NameToAscii (&cert->issuer),
507
 
                                            CERT_NameToAscii (&cert->subject),
508
 
                                            fingerprint, status == SECSuccess?_("GOOD"):_("BAD"));
 
504
                cert_str = g_strdup_printf (_(
 
505
                        "   Issuer:       %s\n"
 
506
                        "   Subject:      %s\n"
 
507
                        "   Fingerprint:  %s\n"
 
508
                        "   Signature:    %s"),
 
509
                        CERT_NameToAscii (&cert->issuer),
 
510
                        CERT_NameToAscii (&cert->subject),
 
511
                        fingerprint,
 
512
                        status == SECSuccess ? _("GOOD") : _("BAD"));
509
513
                g_free (fingerprint);
510
514
 
511
515
                /* construct our user prompt */
512
 
                prompt = g_strdup_printf (_("SSL Certificate for '%s' is not trusted. Do you wish to accept it?\n\nDetailed information about the certificate:\n%s"),
513
 
                                          ssl->priv->expected_host, cert_str);
 
516
                prompt = g_strdup_printf (
 
517
                        _("SSL Certificate for '%s' is not trusted. "
 
518
                        "Do you wish to accept it?\n\n"
 
519
                        "Detailed information about the certificate:\n%s"),
 
520
                        ssl->priv->expected_host, cert_str);
514
521
                g_free (cert_str);
515
522
 
516
523
                button_captions = g_slist_append (button_captions, _("_Reject"));
567
574
        while (go && status != SECSuccess) {
568
575
                gchar *prompt = NULL;
569
576
 
570
 
                printf("looping, error '%d'\n", error);
 
577
                printf ("looping, error '%d'\n", error);
571
578
 
572
579
                switch (error) {
573
580
                case SEC_ERROR_UNKNOWN_ISSUER:
575
582
                case SEC_ERROR_UNTRUSTED_ISSUER:
576
583
                case SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE:
577
584
                        /* add certificate */
578
 
                        printf("unknown issuer, adding ... \n");
579
 
                        prompt = g_strdup_printf(_("Certificate problem: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
 
585
                        printf ("unknown issuer, adding ... \n");
 
586
                        prompt = g_strdup_printf (_("Certificate problem: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
580
587
 
581
588
                        if (camel_session_alert_user (ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, prompt, TRUE)) {
582
589
 
587
594
                                        break;
588
595
                                }
589
596
 
590
 
                                printf("adding cert '%s'\n", nick);
 
597
                                printf ("adding cert '%s'\n", nick);
591
598
 
592
599
                                if (!cert->trust) {
593
600
                                        cert->trust = (CERTCertTrust *) PORT_ArenaZAlloc (cert->arena, sizeof (CERTCertTrust));
594
 
                                        CERT_DecodeTrustString(cert->trust, "P");
 
601
                                        CERT_DecodeTrustString (cert->trust, "P");
595
602
                                }
596
603
 
597
604
                                certs[0] = &cert->derCert;
599
606
                                CERT_ImportCerts (cert->dbhandle, certUsageUserCertImport, 1, certs, NULL, TRUE, FALSE, nick);
600
607
                                g_free (nick);
601
608
 
602
 
                                printf(" cert type %08x\n", cert->nsCertType);
 
609
                                printf (" cert type %08x\n", cert->nsCertType);
603
610
 
604
611
                                memset ((gpointer) &trust, 0, sizeof (trust));
605
612
                                if (CERT_GetCertTrust (cert, &trust) != SECSuccess) {
606
 
                                        CERT_DecodeTrustString(&trust, "P");
 
613
                                        CERT_DecodeTrustString (&trust, "P");
607
614
                                }
608
615
                                trust.sslFlags |= CERTDB_VALID_PEER | CERTDB_TRUSTED;
609
616
                                if (CERT_ChangeCertTrust (cert->dbhandle, cert, &trust) != SECSuccess) {
610
 
                                        printf("couldn't change cert trust?\n");
 
617
                                        printf ("couldn't change cert trust?\n");
611
618
                                }
612
619
 
613
620
                                /*status = SECSuccess;*/
615
622
                                /* re-verify? */
616
623
                                status = CERT_VerifyCertNow (cert->dbhandle, cert, TRUE, certUsageSSLServer, NULL);
617
624
                                error = PR_GetError ();
618
 
                                printf("re-verify status %d, error %d\n", status, error);
 
625
                                printf ("re-verify status %d, error %d\n", status, error);
619
626
#endif
620
627
 
621
 
                                printf(" cert type %08x\n", cert->nsCertType);
 
628
                                printf (" cert type %08x\n", cert->nsCertType);
622
629
                        } else {
623
 
                                printf("failed/cancelled\n");
 
630
                                printf ("failed/cancelled\n");
624
631
                                go = 0;
625
632
                        }
626
633
 
627
634
                        break;
628
635
                case SSL_ERROR_BAD_CERT_DOMAIN:
629
 
                        printf("bad domain\n");
 
636
                        printf ("bad domain\n");
630
637
 
631
 
                        prompt = g_strdup_printf(_("Bad certificate domain: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
 
638
                        prompt = g_strdup_printf (_("Bad certificate domain: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
632
639
 
633
640
                        if (camel_session_alert_user (ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, prompt, TRUE)) {
634
641
                                host = SSL_RevealURL (sockfd);
635
642
                                status = CERT_AddOKDomainName (cert, host);
636
 
                                printf("add ok domain name : %s\n", status == SECFailure?"fail":"ok");
 
643
                                printf ("add ok domain name : %s\n", status == SECFailure?"fail":"ok");
637
644
                                error = PR_GetError ();
638
645
                                if (status == SECFailure)
639
646
                                        go = 0;
644
651
                        break;
645
652
 
646
653
                case SEC_ERROR_EXPIRED_CERTIFICATE:
647
 
                        printf("expired\n");
 
654
                        printf ("expired\n");
648
655
 
649
 
                        prompt = g_strdup_printf(_("Certificate expired: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
 
656
                        prompt = g_strdup_printf (_("Certificate expired: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
650
657
 
651
658
                        if (camel_session_alert_user (ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, prompt, TRUE)) {
652
659
                                cert->timeOK = PR_TRUE;
661
668
                        break;
662
669
 
663
670
                case SEC_ERROR_CRL_EXPIRED:
664
 
                        printf("crl expired\n");
 
671
                        printf ("crl expired\n");
665
672
 
666
 
                        prompt = g_strdup_printf(_("Certificate revocation list expired: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
 
673
                        prompt = g_strdup_printf (_("Certificate revocation list expired: %s\nIssuer: %s"), cert->subjectName, cert->issuerName);
667
674
 
668
675
                        if (camel_session_alert_user (ssl->priv->session, CAMEL_SESSION_ALERT_WARNING, prompt, TRUE)) {
669
676
                                host = SSL_RevealURL (sockfd);
674
681
                        break;
675
682
 
676
683
                default:
677
 
                        printf("generic error\n");
 
684
                        printf ("generic error\n");
678
685
                        go = 0;
679
686
                        break;
680
687
                }
804
811
        CamelTcpStreamSSL *ssl = CAMEL_TCP_STREAM_SSL (stream);
805
812
        gint retval;
806
813
 
807
 
        retval = CAMEL_TCP_STREAM_CLASS (camel_tcp_stream_ssl_parent_class)->
808
 
                connect (stream, host, service,
809
 
                fallback_port, cancellable, error);
 
814
        retval = CAMEL_TCP_STREAM_CLASS (
 
815
                camel_tcp_stream_ssl_parent_class)->connect (
 
816
                stream, host, service, fallback_port, cancellable, error);
810
817
        if (retval != 0)
811
818
                return retval;
812
819
 
822
829
 
823
830
                if (!ssl_fd) {
824
831
                        d (g_print ("  could not enable SSL\n"));
 
832
                        return -1;
825
833
                } else {
826
834
                        d (g_print ("  re-handshaking SSL\n"));
827
835