/[rdesktop]/sourceforge.net/trunk/rdesktop/rdesktop.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/rdesktop.c

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

revision 82 by astrand, Tue Jul 30 07:18:48 2002 UTC revision 213 by matthewc, Sun Oct 6 13:30:30 2002 UTC
# Line 1  Line 1 
1  /*  /*
2     rdesktop: A Remote Desktop Protocol client.     rdesktop: A Remote Desktop Protocol client.
3     Entrypoint and utility functions     Entrypoint and utility functions
4     Copyright (C) Matthew Chapman 1999-2001     Copyright (C) Matthew Chapman 1999-2002
5      
6     This program is free software; you can redistribute it and/or modify     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.     (at your option) any later version.
10      
11     This program is distributed in the hope that it will be useful,     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.     GNU General Public License for more details.
15      
16     You should have received a copy of the GNU General Public License     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software     along with this program; if not, write to the Free Software
18     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  */  */
20    
 #include <stdlib.h>             /* malloc realloc free */  
21  #include <stdarg.h>             /* va_list va_start va_end */  #include <stdarg.h>             /* va_list va_start va_end */
22  #include <unistd.h>             /* read close getuid getgid getpid getppid gethostname */  #include <unistd.h>             /* read close getuid getgid getpid getppid gethostname */
23  #include <fcntl.h>              /* open */  #include <fcntl.h>              /* open */
24  #include <pwd.h>                /* getpwuid */  #include <pwd.h>                /* getpwuid */
25  #include <limits.h>             /* PATH_MAX */  #include <limits.h>             /* PATH_MAX */
26    #include <termios.h>            /* tcgetattr tcsetattr */
27  #include <sys/stat.h>           /* stat */  #include <sys/stat.h>           /* stat */
28  #include <sys/time.h>           /* gettimeofday */  #include <sys/time.h>           /* gettimeofday */
29  #include <sys/times.h>          /* times */  #include <sys/times.h>          /* times */
30  #include "rdesktop.h"  #include "rdesktop.h"
31    
32    char title[32] = "";
33  char username[16];  char username[16];
34  char hostname[16];  char hostname[16];
35  char keymapname[16];  char keymapname[16];
36  int keylayout = 0x409;          /* Defaults to US keyboard layout */  int keylayout = 0x409;          /* Defaults to US keyboard layout */
37  int width;  int width = 800;
38  int height;  int height = 600;
39  int tcp_port_rdp = TCP_PORT_RDP;  int tcp_port_rdp = TCP_PORT_RDP;
40  BOOL bitmap_compression = True;  BOOL bitmap_compression = True;
41  BOOL sendmotion = True;  BOOL sendmotion = True;
# Line 49  BOOL grab_keyboard = True; Line 50  BOOL grab_keyboard = True;
50  static void  static void
51  usage(char *program)  usage(char *program)
52  {  {
53          printf("Usage: %s [options] server\n", program);          fprintf(stderr, "rdesktop: A Remote Desktop Protocol client.\n");
54          printf("   -u: user name\n");          fprintf(stderr, "Version " VERSION ". Copyright (C) 1999-2002 Matt Chapman.\n");
55          printf("   -d: domain\n");          fprintf(stderr, "See http://www.rdesktop.org/ for more information.\n\n");
56          printf("   -s: shell\n");  
57          printf("   -c: working directory\n");          fprintf(stderr, "Usage: %s [options] server\n", program);
58          printf("   -p: password (autologon)\n");          fprintf(stderr, "   -u: user name\n");
59          printf("   -n: client hostname\n");          fprintf(stderr, "   -d: domain\n");
60          printf("   -k: keyboard layout on terminal server (us,sv,gr etc.)\n");          fprintf(stderr, "   -s: shell\n");
61          printf("   -g: desktop geometry (WxH)\n");          fprintf(stderr, "   -c: working directory\n");
62          printf("   -f: full-screen mode\n");          fprintf(stderr, "   -p: password (- to prompt)\n");
63          printf("   -b: force bitmap updates\n");          fprintf(stderr, "   -n: client hostname\n");
64          printf("   -e: disable encryption (French TS)\n");          fprintf(stderr, "   -k: keyboard layout on terminal server (us,sv,gr etc.)\n");
65          printf("   -m: do not send motion events\n");          fprintf(stderr, "   -g: desktop geometry (WxH)\n");
66          printf("   -l: do not request licence\n");          fprintf(stderr, "   -f: full-screen mode\n");
67          printf("   -t: rdp tcp port\n");          fprintf(stderr, "   -b: force bitmap updates\n");
68          printf("   -K: keep window manager key bindings\n");          fprintf(stderr, "   -e: disable encryption (French TS)\n");
69            fprintf(stderr, "   -m: do not send motion events\n");
70            fprintf(stderr, "   -l: do not request licence\n");
71            fprintf(stderr, "   -t: rdp tcp port\n");
72            fprintf(stderr, "   -K: keep window manager key bindings\n");
73            fprintf(stderr, "   -w: window title\n");
74    }
75    
76    static BOOL
77    read_password(char *password, int size)
78    {
79            struct termios tios;
80            BOOL ret = False;
81            int istty = 0;
82            char *p;
83    
84            if (tcgetattr(STDIN_FILENO, &tios) == 0)
85            {
86                    fprintf(stderr, "Password: ");
87                    tios.c_lflag &= ~ECHO;
88                    tcsetattr(STDIN_FILENO, TCSANOW, &tios);
89                    istty = 1;
90            }
91    
92            if (fgets(password, size, stdin) != NULL)
93            {
94                    ret = True;
95    
96                    /* strip final newline */
97                    p = strchr(password, '\n');
98                    if (p != NULL)
99                            *p = 0;
100            }
101    
102            if (istty)
103            {
104                    tios.c_lflag |= ECHO;
105                    tcsetattr(STDIN_FILENO, TCSANOW, &tios);
106                    fprintf(stderr, "\n");
107            }
108    
109            return ret;
110  }  }
111    
112  /* Client program */  /* Client program */
# Line 76  main(int argc, char *argv[]) Line 118  main(int argc, char *argv[])
118          char password[16];          char password[16];
119          char shell[32];          char shell[32];
120          char directory[32];          char directory[32];
121          char title[32];          BOOL prompt_password;
122          struct passwd *pw;          struct passwd *pw;
123          char *server, *p;          char *server, *p;
124          uint32 flags;          uint32 flags;
125          int c;          int c;
126    
         printf("rdesktop: A Remote Desktop Protocol client.\n");  
         printf("Version " VERSION ". Copyright (C) 1999-2001 Matt Chapman.\n");  
         printf("See http://www.rdesktop.org/ for more information.\n\n");  
   
127          flags = RDP_LOGON_NORMAL;          flags = RDP_LOGON_NORMAL;
128            prompt_password = False;
129          domain[0] = password[0] = shell[0] = directory[0] = 0;          domain[0] = password[0] = shell[0] = directory[0] = 0;
130          strcpy(keymapname, "us");          strcpy(keymapname, "us");
131    
132          while ((c = getopt(argc, argv, "u:d:s:c:p:n:k:g:t:fbemlKh?")) != -1)          while ((c = getopt(argc, argv, "u:d:s:c:p:n:k:g:t:fbemlKw:h?")) != -1)
133          {          {
134                  switch (c)                  switch (c)
135                  {                  {
# Line 111  main(int argc, char *argv[]) Line 150  main(int argc, char *argv[])
150                                  break;                                  break;
151    
152                          case 'p':                          case 'p':
153                                    if ((optarg[0] == '-') && (optarg[1] == 0))
154                                    {
155                                            prompt_password = True;
156                                            break;
157                                    }
158    
159                                  STRNCPY(password, optarg, sizeof(password));                                  STRNCPY(password, optarg, sizeof(password));
160                                  flags |= RDP_LOGON_AUTO;                                  flags |= RDP_LOGON_AUTO;
161    
162                                    /* try to overwrite argument so it won't appear in ps */
163                                    p = optarg;
164                                    while (*p)
165                                            *(p++) = 'X';
166                                  break;                                  break;
167    
168                          case 'n':                          case 'n':
# Line 163  main(int argc, char *argv[]) Line 213  main(int argc, char *argv[])
213                                  grab_keyboard = False;                                  grab_keyboard = False;
214                                  break;                                  break;
215    
216                            case 'w':
217                                    strncpy(title, optarg, sizeof(title));
218                                    break;
219    
220                          case 'h':                          case 'h':
221                          case '?':                          case '?':
222                          default:                          default:
# Line 206  main(int argc, char *argv[]) Line 260  main(int argc, char *argv[])
260                  STRNCPY(hostname, fullhostname, sizeof(hostname));                  STRNCPY(hostname, fullhostname, sizeof(hostname));
261          }          }
262    
263          if (!strcmp(password, "-"))          if (prompt_password && read_password(password, sizeof(password)))
264          {                  flags |= RDP_LOGON_AUTO;
                 p = getpass("Password: ");  
                 if (p == NULL)  
                 {  
                         error("failed to read password\n");  
                         return 0;  
                 }  
                 STRNCPY(password, p, sizeof(password));  
         }  
265    
266          if ((width == 0) || (height == 0))          if (title[0] == 0)
267          {          {
268                  width = 800;                  strcpy(title, "rdesktop - ");
269                  height = 600;                  strncat(title, server, sizeof(title) - sizeof("rdesktop - "));
270          }          }
271    
         strcpy(title, "rdesktop - ");  
         strncat(title, server, sizeof(title) - sizeof("rdesktop - "));  
   
         xkeymap_init1();  
272          if (!ui_init())          if (!ui_init())
273                  return 1;                  return 1;
274    
275          if (!rdp_connect(server, flags, domain, password, shell, directory))          if (!rdp_connect(server, flags, domain, password, shell, directory))
276                  return 1;                  return 1;
277    
278          printf("Connection successful.\n");          DEBUG(("Connection successful.\n"));
279            memset(password, 0, sizeof(password));
280    
281          if (ui_create_window(title))          if (ui_create_window())
282          {          {
283                  rdp_main_loop();                  rdp_main_loop();
284                  ui_destroy_window();                  ui_destroy_window();
285          }          }
286    
287          printf("Disconnecting...\n");          DEBUG(("Disconnecting...\n"));
288          rdp_disconnect();          rdp_disconnect();
289            ui_deinit();
290          return 0;          return 0;
291  }  }
292    
# Line 364  hexdump(unsigned char *p, unsigned int l Line 408  hexdump(unsigned char *p, unsigned int l
408          }          }
409  }  }
410    
411    #ifdef SAVE_LICENCE
412  int  int
413  load_licence(unsigned char **data)  load_licence(unsigned char **data)
414  {  {
# Line 417  save_licence(unsigned char *data, int le Line 462  save_licence(unsigned char *data, int le
462          write(fd, data, length);          write(fd, data, length);
463          close(fd);          close(fd);
464  }  }
465    #endif

Legend:
Removed from v.82  
changed lines
  Added in v.213

  ViewVC Help
Powered by ViewVC 1.1.26