/[rdesktop]/sourceforge.net/trunk/rdesktop/secure.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/secure.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 482 by matthewc, Thu Oct 9 04:21:19 2003 UTC revision 677 by n-ki, Mon Apr 26 13:48:39 2004 UTC
# Line 412  sec_out_mcs_data(STREAM s) Line 412  sec_out_mcs_data(STREAM s)
412          if (hostlen > 30)          if (hostlen > 30)
413                  hostlen = 30;                  hostlen = 30;
414    
415          out_uint16_be(s, 5);    /* unknown */          /* Generic Conference Control (T.124) ConferenceCreateRequest */
416            out_uint16_be(s, 5);
417          out_uint16_be(s, 0x14);          out_uint16_be(s, 0x14);
418          out_uint8(s, 0x7c);          out_uint8(s, 0x7c);
419          out_uint16_be(s, 1);          out_uint16_be(s, 1);
# Line 425  sec_out_mcs_data(STREAM s) Line 426  sec_out_mcs_data(STREAM s)
426          out_uint16_le(s, 0xc001);          out_uint16_le(s, 0xc001);
427          out_uint8(s, 0);          out_uint8(s, 0);
428    
429          out_uint32_le(s, 0x61637544);   /* "Duca" ?! */          out_uint32_le(s, 0x61637544);   /* OEM ID: "Duca", as in Ducati. */
430          out_uint16_be(s, ((length - 14) | 0x8000));     /* remaining length */          out_uint16_be(s, ((length - 14) | 0x8000));     /* remaining length */
431    
432          /* Client information */          /* Client information */
# Line 448  sec_out_mcs_data(STREAM s) Line 449  sec_out_mcs_data(STREAM s)
449          out_uint32(s, 0);          out_uint32(s, 0);
450          out_uint32_le(s, 12);          out_uint32_le(s, 12);
451          out_uint8s(s, 64);      /* reserved? 4 + 12 doublewords */          out_uint8s(s, 64);      /* reserved? 4 + 12 doublewords */
452            out_uint16_le(s, 0xca01);       /* colour depth? */
         switch (g_server_bpp)  
         {  
                 case 8:  
                         out_uint16_le(s, 0xca01);  
                         break;  
                 case 15:  
                         out_uint16_le(s, 0xca02);  
                         break;  
                 case 16:  
                         out_uint16_le(s, 0xca03);  
                         break;  
                 case 24:  
                         out_uint16_le(s, 0xca04);  
                         break;  
         }  
453          out_uint16_le(s, 1);          out_uint16_le(s, 1);
454    
455          out_uint32(s, 0);          out_uint32(s, 0);
# Line 625  sec_parse_crypt_info(STREAM s, uint32 * Line 611  sec_parse_crypt_info(STREAM s, uint32 *
611          }          }
612          else          else
613          {          {
614                    uint32 certcount;
615    
616                  DEBUG_RDP5(("We're going for the RDP5-style encryption\n"));                  DEBUG_RDP5(("We're going for the RDP5-style encryption\n"));
617                  in_uint8s(s, 4);        /* Number of certificates */                  in_uint32_le(s, certcount);     /* Number of certificates */
618    
619                    if (certcount < 2)
620                    {
621                            error("Server didn't send enough X509 certificates\n");
622                            return False;
623                    }
624    
625                    for (; certcount > 2; certcount--)
626                    {               /* ignore all the certificates between the root and the signing CA */
627                            uint32 ignorelen;
628                            X509 *ignorecert;
629    
630                            DEBUG_RDP5(("Ignored certs left: %d\n", certcount));
631    
632                            in_uint32_le(s, ignorelen);
633                            DEBUG_RDP5(("Ignored Certificate length is %d\n", ignorelen));
634                            ignorecert = d2i_X509(NULL, &(s->p), ignorelen);
635    
636                            if (ignorecert == NULL)
637                            {       /* XXX: error out? */
638                                    DEBUG_RDP5(("got a bad cert: this will probably screw up the rest of the communication\n"));
639                            }
640    
641    #ifdef WITH_DEBUG_RDP5
642                            DEBUG_RDP5(("cert #%d (ignored):\n", certcount));
643                            X509_print_fp(stdout, ignorecert);
644    #endif
645                    }
646    
647                  /* Do da funky X.509 stuffy                  /* Do da funky X.509 stuffy
648    
# Line 700  sec_process_crypt_info(STREAM s) Line 716  sec_process_crypt_info(STREAM s)
716    
717          DEBUG(("Generating client random\n"));          DEBUG(("Generating client random\n"));
718          /* Generate a client random, and hence determine encryption keys */          /* Generate a client random, and hence determine encryption keys */
719          // This is what the MS client do:          /* This is what the MS client do: */
720          memset(inr, 0, SEC_RANDOM_SIZE);          memset(inr, 0, SEC_RANDOM_SIZE);
721          /*  *ARIGL!* Plaintext attack, anyone?          /*  *ARIGL!* Plaintext attack, anyone?
722             I tried doing:             I tried doing:
# Line 740  sec_process_srv_info(STREAM s) Line 756  sec_process_srv_info(STREAM s)
756          in_uint16_le(s, g_server_rdp_version);          in_uint16_le(s, g_server_rdp_version);
757          DEBUG_RDP5(("Server RDP version is %d\n", g_server_rdp_version));          DEBUG_RDP5(("Server RDP version is %d\n", g_server_rdp_version));
758          if (1 == g_server_rdp_version)          if (1 == g_server_rdp_version)
759            {
760                  g_use_rdp5 = 0;                  g_use_rdp5 = 0;
761                    g_server_bpp = 8;
762            }
763  }  }
764    
765    
# Line 752  sec_process_mcs_data(STREAM s) Line 771  sec_process_mcs_data(STREAM s)
771          uint8 *next_tag;          uint8 *next_tag;
772          uint8 len;          uint8 len;
773    
774          in_uint8s(s, 21);       /* header (T.124 stuff, probably) */          in_uint8s(s, 21);       /* header (T.124 ConferenceCreateResponse) */
775          in_uint8(s, len);          in_uint8(s, len);
776          if (len & 0x80)          if (len & 0x80)
777                  in_uint8(s, len);                  in_uint8(s, len);
# Line 844  sec_connect(char *server, char *username Line 863  sec_connect(char *server, char *username
863          if (!mcs_connect(server, &mcs_data, username))          if (!mcs_connect(server, &mcs_data, username))
864                  return False;                  return False;
865    
866          //      sec_process_mcs_data(&mcs_data);          /*      sec_process_mcs_data(&mcs_data); */
867          if (g_encryption)          if (g_encryption)
868                  sec_establish_key();                  sec_establish_key();
869          xfree(mcs_data.data);          xfree(mcs_data.data);

Legend:
Removed from v.482  
changed lines
  Added in v.677

  ViewVC Help
Powered by ViewVC 1.1.26