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

« back to all changes in this revision

Viewing changes to camel/camel-sasl-ntlm.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:
703
703
 
704
704
        service = camel_sasl_get_service (sasl);
705
705
 
706
 
        settings = camel_service_get_settings (service);
 
706
        settings = camel_service_ref_settings (service);
707
707
        g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
708
708
 
709
709
        network_settings = CAMEL_NETWORK_SETTINGS (settings);
710
710
        user = camel_network_settings_dup_user (network_settings);
 
711
 
 
712
        g_object_unref (settings);
 
713
 
711
714
        g_return_val_if_fail (user != NULL, NULL);
712
715
 
713
716
        password = camel_service_get_password (service);
740
743
                        string = g_strdup_printf ("TT %s\n", type2);
741
744
                        if (camel_stream_write_string (
742
745
                                priv->helper_stream, string, NULL, NULL) >= 0 &&
743
 
                           (s = camel_stream_read (priv->helper_stream, buf,
744
 
                                   sizeof (buf), cancellable, NULL)) > 4 &&
745
 
                           buf[0] == 'K' && buf[1] == 'K' && buf[2] == ' ' &&
746
 
                           buf[s - 1] == '\n') {
 
746
                                (s = camel_stream_read (
 
747
                                        priv->helper_stream, buf,
 
748
                                        sizeof (buf), cancellable, NULL)) > 4 &&
 
749
                                buf[0] == 'K' &&
 
750
                                buf[1] == 'K' &&
 
751
                                buf[2] == ' ' &&
 
752
                                buf[s - 1] == '\n') {
747
753
                                buf[s - 1] = 0;
748
754
                                data = g_base64_decode (buf + 3, &length);
749
755
                                g_byte_array_append (ret, data, length);
790
796
                memset (lm_resp + 8, 0, 16);
791
797
 
792
798
                /* Session nonce is client nonce + server nonce */
793
 
                memcpy (sess_nonce.srv,
 
799
                memcpy (
 
800
                        sess_nonce.srv,
794
801
                        token->data + NTLM_CHALLENGE_NONCE_OFFSET, 8);
795
802
 
796
803
                /* Take MD5 of session nonce */
829
836
        /* Don't jump to 'fail' label after this point. */
830
837
        g_byte_array_set_size (ret, NTLM_RESPONSE_BASE_SIZE);
831
838
        memset (ret->data, 0, NTLM_RESPONSE_BASE_SIZE);
832
 
        memcpy (ret->data, NTLM_RESPONSE_HEADER,
 
839
        memcpy (
 
840
                ret->data, NTLM_RESPONSE_HEADER,
833
841
                sizeof (NTLM_RESPONSE_HEADER) - 1);
834
 
        memcpy (ret->data + NTLM_RESPONSE_FLAGS_OFFSET,
 
842
        memcpy (
 
843
                ret->data + NTLM_RESPONSE_FLAGS_OFFSET,
835
844
                NTLM_RESPONSE_FLAGS, sizeof (NTLM_RESPONSE_FLAGS) - 1);
836
845
        /* Mask in the NTLM2SESSION flag */
837
846
        ret->data[NTLM_RESPONSE_FLAGS_OFFSET + 2] |=
838
847
                token->data[NTLM_CHALLENGE_FLAGS_OFFSET + 2] & 8;
839
848
 
840
 
        ntlm_set_string (ret, NTLM_RESPONSE_DOMAIN_OFFSET,
841
 
                         domain->str, domain->len);
842
 
        ntlm_set_string (ret, NTLM_RESPONSE_USER_OFFSET,
843
 
                         real_user, strlen (real_user));
844
 
        ntlm_set_string (ret, NTLM_RESPONSE_HOST_OFFSET,
845
 
                         "UNKNOWN", sizeof ("UNKNOWN") - 1);
846
 
        ntlm_set_string (ret, NTLM_RESPONSE_LM_RESP_OFFSET,
847
 
                         (const gchar *) lm_resp, sizeof (lm_resp));
848
 
        ntlm_set_string (ret, NTLM_RESPONSE_NT_RESP_OFFSET,
849
 
                         (const gchar *) nt_resp, sizeof (nt_resp));
 
849
        ntlm_set_string (
 
850
                ret, NTLM_RESPONSE_DOMAIN_OFFSET,
 
851
                domain->str, domain->len);
 
852
        ntlm_set_string (
 
853
                ret, NTLM_RESPONSE_USER_OFFSET,
 
854
                real_user, strlen (real_user));
 
855
        ntlm_set_string (
 
856
                ret, NTLM_RESPONSE_HOST_OFFSET,
 
857
                "UNKNOWN", sizeof ("UNKNOWN") - 1);
 
858
        ntlm_set_string (
 
859
                ret, NTLM_RESPONSE_LM_RESP_OFFSET,
 
860
                (const gchar *) lm_resp, sizeof (lm_resp));
 
861
        ntlm_set_string (
 
862
                ret, NTLM_RESPONSE_NT_RESP_OFFSET,
 
863
                (const gchar *) nt_resp, sizeof (nt_resp));
850
864
 
851
865
        camel_sasl_set_authenticated (sasl, TRUE);
852
866
 
857
871
fail:
858
872
        /* If the challenge is malformed, restart authentication.
859
873
         * XXX A malicious server could make this loop indefinitely. */
860
 
        g_byte_array_append (ret, (guint8 *) NTLM_REQUEST,
861
 
                             sizeof (NTLM_REQUEST) - 1);
 
874
        g_byte_array_append (
 
875
                ret, (guint8 *) NTLM_REQUEST,
 
876
                sizeof (NTLM_REQUEST) - 1);
862
877
 
863
878
exit:
864
879
        g_free (user);
890
905
 
891
906
        service = camel_sasl_get_service (sasl);
892
907
 
893
 
        settings = camel_service_get_settings (service);
 
908
        settings = camel_service_ref_settings (service);
894
909
        g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), FALSE);
895
910
 
896
911
        network_settings = CAMEL_NETWORK_SETTINGS (settings);
897
912
        user = camel_network_settings_dup_user (network_settings);
 
913
 
 
914
        g_object_unref (settings);
 
915
 
898
916
        g_return_val_if_fail (user != NULL, FALSE);
899
917
 
900
918
        cp = strchr (user, '\\');