/[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 438 by jsorg71, Fri Aug 1 17:01:58 2003 UTC revision 580 by astrand, Fri Jan 23 08:35:52 2004 UTC
# Line 34  Line 34 
34  #endif  #endif
35    
36  extern char hostname[16];  extern char hostname[16];
37  extern int width;  extern int g_width;
38  extern int height;  extern int g_height;
39  extern int keylayout;  extern int keylayout;
40  extern BOOL g_encryption;  extern BOOL g_encryption;
41  extern BOOL g_licence_issued;  extern BOOL g_licence_issued;
42  extern BOOL g_use_rdp5;  extern BOOL g_use_rdp5;
43    extern BOOL g_console_session;
44  extern int g_server_bpp;  extern int g_server_bpp;
45  extern uint16 mcs_userid;  extern uint16 mcs_userid;
46  extern VCHANNEL g_channels[];  extern VCHANNEL g_channels[];
# Line 432  sec_out_mcs_data(STREAM s) Line 433  sec_out_mcs_data(STREAM s)
433          out_uint16_le(s, 212);  /* length */          out_uint16_le(s, 212);  /* length */
434          out_uint16_le(s, g_use_rdp5 ? 4 : 1);   /* RDP version. 1 == RDP4, 4 == RDP5. */          out_uint16_le(s, g_use_rdp5 ? 4 : 1);   /* RDP version. 1 == RDP4, 4 == RDP5. */
435          out_uint16_le(s, 8);          out_uint16_le(s, 8);
436          out_uint16_le(s, width);          out_uint16_le(s, g_width);
437          out_uint16_le(s, height);          out_uint16_le(s, g_height);
438          out_uint16_le(s, 0xca01);          out_uint16_le(s, 0xca01);
439          out_uint16_le(s, 0xaa03);          out_uint16_le(s, 0xaa03);
440          out_uint32_le(s, keylayout);          out_uint32_le(s, keylayout);
# Line 474  sec_out_mcs_data(STREAM s) Line 475  sec_out_mcs_data(STREAM s)
475    
476          out_uint16_le(s, SEC_TAG_CLI_4);          out_uint16_le(s, SEC_TAG_CLI_4);
477          out_uint16_le(s, 12);          out_uint16_le(s, 12);
478          out_uint32_le(s, 9);          out_uint32_le(s, g_console_session ? 0xb : 9);
479          out_uint32(s, 0);          out_uint32(s, 0);
480    
481          /* Client encryption settings */          /* Client encryption settings */
# Line 624  sec_parse_crypt_info(STREAM s, uint32 * Line 625  sec_parse_crypt_info(STREAM s, uint32 *
625          }          }
626          else          else
627          {          {
628                    uint32 certcount;
629    
630                  DEBUG_RDP5(("We're going for the RDP5-style encryption\n"));                  DEBUG_RDP5(("We're going for the RDP5-style encryption\n"));
631                  in_uint8s(s, 4);        /* Number of certificates */                  in_uint32_le(s, certcount);     /* Number of certificates */
632    
633                    if (certcount < 2)
634                    {
635                            error("Server didn't send enough X509 certificates\n");
636                            return False;
637                    }
638    
639                    for (; certcount > 2; certcount--)
640                    {               /* ignore all the certificates between the root and the signing CA */
641                            uint32 ignorelen;
642                            X509 *ignorecert;
643    
644                            DEBUG_RDP5(("Ignored certs left: %d\n", certcount));
645    
646                            in_uint32_le(s, ignorelen);
647                            DEBUG_RDP5(("Ignored Certificate length is %d\n", ignorelen));
648                            ignorecert = d2i_X509(NULL, &(s->p), ignorelen);
649    
650                            if (ignorecert == NULL)
651                            {       /* XXX: error out? */
652                                    DEBUG_RDP5(("got a bad cert: this will probably screw up the rest of the communication\n"));
653                            }
654    
655    #ifdef WITH_DEBUG_RDP5
656                            DEBUG_RDP5(("cert #%d (ignored):\n", certcount));
657                            X509_print_fp(stdout, ignorecert);
658    #endif
659                    }
660    
661                  /* Do da funky X.509 stuffy                  /* Do da funky X.509 stuffy
662    
# Line 699  sec_process_crypt_info(STREAM s) Line 730  sec_process_crypt_info(STREAM s)
730    
731          DEBUG(("Generating client random\n"));          DEBUG(("Generating client random\n"));
732          /* Generate a client random, and hence determine encryption keys */          /* Generate a client random, and hence determine encryption keys */
733          // This is what the MS client do:          /* This is what the MS client do: */
734          memset(inr, 0, SEC_RANDOM_SIZE);          memset(inr, 0, SEC_RANDOM_SIZE);
735          /*  *ARIGL!* Plaintext attack, anyone?          /*  *ARIGL!* Plaintext attack, anyone?
736             I tried doing:             I tried doing:
# Line 843  sec_connect(char *server, char *username Line 874  sec_connect(char *server, char *username
874          if (!mcs_connect(server, &mcs_data, username))          if (!mcs_connect(server, &mcs_data, username))
875                  return False;                  return False;
876    
877          //      sec_process_mcs_data(&mcs_data);          /*      sec_process_mcs_data(&mcs_data); */
878          if (g_encryption)          if (g_encryption)
879                  sec_establish_key();                  sec_establish_key();
880          xfree(mcs_data.data);          xfree(mcs_data.data);

Legend:
Removed from v.438  
changed lines
  Added in v.580

  ViewVC Help
Powered by ViewVC 1.1.26