/[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 79 by astrand, Mon Jul 29 20:35:13 2002 UTC revision 211 by matthewc, Fri Oct 4 14:28:14 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, "   -P: askpass-program (autologon)\n");
64          printf("   -e: disable encryption (French TS)\n");          fprintf(stderr, "   -n: client hostname\n");
65          printf("   -m: do not send motion events\n");          fprintf(stderr, "   -k: keyboard layout on terminal server (us,sv,gr etc.)\n");
66          printf("   -l: do not request licence\n");          fprintf(stderr, "   -g: desktop geometry (WxH)\n");
67          printf("   -t: rdp tcp port\n");          fprintf(stderr, "   -f: full-screen mode\n");
68          printf("   -K: keep window manager key bindings\n");          fprintf(stderr, "   -b: force bitmap updates\n");
69            fprintf(stderr, "   -e: disable encryption (French TS)\n");
70            fprintf(stderr, "   -m: do not send motion events\n");
71            fprintf(stderr, "   -l: do not request licence\n");
72            fprintf(stderr, "   -t: rdp tcp port\n");
73            fprintf(stderr, "   -K: keep window manager key bindings\n");
74            fprintf(stderr, "   -w: window title\n");
75    }
76    
77    static BOOL
78    read_password(char *password, int size)
79    {
80            struct termios tios;
81            BOOL ret = False;
82            int istty = 0;
83            char *p;
84    
85            if (tcgetattr(STDIN_FILENO, &tios) == 0)
86            {
87                    fprintf(stderr, "Password: ");
88                    tios.c_lflag &= ~ECHO;
89                    tcsetattr(STDIN_FILENO, TCSANOW, &tios);
90                    istty = 1;
91            }
92    
93            if (fgets(password, size, stdin) != NULL)
94            {
95                    ret = True;
96    
97                    /* strip final newline */
98                    p = strchr(password, '\n');
99                    if (p != NULL)
100                            *p = 0;
101            }
102    
103            if (istty)
104            {
105                    tios.c_lflag |= ECHO;
106                    tcsetattr(STDIN_FILENO, TCSANOW, &tios);
107                    fprintf(stderr, "\n");
108            }
109    
110            return ret;
111  }  }
112    
113  /* Client program */  /* Client program */
# Line 74  main(int argc, char *argv[]) Line 117  main(int argc, char *argv[])
117          char fullhostname[64];          char fullhostname[64];
118          char domain[16];          char domain[16];
119          char password[16];          char password[16];
120            char *askpass_result;
121          char shell[32];          char shell[32];
122          char directory[32];          char directory[32];
123          char title[32];          BOOL prompt_password;
124          struct passwd *pw;          struct passwd *pw;
125          char *server, *p;          char *server, *p;
126          uint32 flags;          uint32 flags;
127          int c;          int c;
128    
         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");  
   
129          flags = RDP_LOGON_NORMAL;          flags = RDP_LOGON_NORMAL;
130            prompt_password = False;
131          domain[0] = password[0] = shell[0] = directory[0] = 0;          domain[0] = password[0] = shell[0] = directory[0] = 0;
132          strcpy(keymapname, "us");          strcpy(keymapname, "us");
133    
134          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:P:n:k:g:t:fbemlKw:h?")) != -1)
135          {          {
136                  switch (c)                  switch (c)
137                  {                  {
# Line 112  main(int argc, char *argv[]) Line 152  main(int argc, char *argv[])
152                                  break;                                  break;
153    
154                          case 'p':                          case 'p':
155                                    if ((optarg[0] == '-') && (optarg[1] == 0))
156                                    {
157                                            prompt_password = True;
158                                            break;
159                                    }
160    
161                                  STRNCPY(password, optarg, sizeof(password));                                  STRNCPY(password, optarg, sizeof(password));
162                                  flags |= RDP_LOGON_AUTO;                                  flags |= RDP_LOGON_AUTO;
163    
164                                    /* try to overwrite argument so it won't appear in ps */
165                                    p = optarg;
166                                    while (*p)
167                                            *(p++) = 'X';
168                                    break;
169    
170                            case 'P':
171                                    askpass_result = askpass(optarg, "Enter password");
172                                    if (askpass_result == NULL)
173                                            exit(1);
174    
175                                    STRNCPY(password, askpass_result, sizeof(password));
176                                    free(askpass_result);
177                                    flags |= RDP_LOGON_AUTO;
178                                  break;                                  break;
179    
180                          case 'n':                          case 'n':
# Line 121  main(int argc, char *argv[]) Line 182  main(int argc, char *argv[])
182                                  break;                                  break;
183    
184                          case 'k':                          case 'k':
185                                  STRNCPY(keymapname, optarg,                                  STRNCPY(keymapname, optarg, sizeof(keymapname));
                                         sizeof(keymapname));  
186                                  break;                                  break;
187    
188                          case 'g':                          case 'g':
# Line 165  main(int argc, char *argv[]) Line 225  main(int argc, char *argv[])
225                                  grab_keyboard = False;                                  grab_keyboard = False;
226                                  break;                                  break;
227    
228                            case 'w':
229                                    strncpy(title, optarg, sizeof(title));
230                                    break;
231    
232                          case 'h':                          case 'h':
233                          case '?':                          case '?':
234                          default:                          default:
# Line 208  main(int argc, char *argv[]) Line 272  main(int argc, char *argv[])
272                  STRNCPY(hostname, fullhostname, sizeof(hostname));                  STRNCPY(hostname, fullhostname, sizeof(hostname));
273          }          }
274    
275          if (!strcmp(password, "-"))          if (prompt_password && read_password(password, sizeof(password)))
276          {                  flags |= RDP_LOGON_AUTO;
                 p = getpass("Password: ");  
                 if (p == NULL)  
                 {  
                         error("failed to read password\n");  
                         return 0;  
                 }  
                 STRNCPY(password, p, sizeof(password));  
         }  
277    
278          if ((width == 0) || (height == 0))          if (title[0] == 0)
279          {          {
280                  width = 800;                  strcpy(title, "rdesktop - ");
281                  height = 600;                  strncat(title, server, sizeof(title) - sizeof("rdesktop - "));
282          }          }
283    
284          strcpy(title, "rdesktop - ");          if (!ui_init())
285          strncat(title, server, sizeof(title) - sizeof("rdesktop - "));                  return 1;
   
         xkeymap_init1();  
286    
287          if (!rdp_connect(server, flags, domain, password, shell, directory))          if (!rdp_connect(server, flags, domain, password, shell, directory))
288                  return 1;                  return 1;
289    
290          printf("Connection successful.\n");          DEBUG(("Connection successful.\n"));
291            memset(password, 0, sizeof(password));
292    
293          if (ui_create_window(title))          if (ui_create_window())
294          {          {
295                  rdp_main_loop();                  rdp_main_loop();
296                  ui_destroy_window();                  ui_destroy_window();
297          }          }
298    
299          printf("Disconnecting...\n");          DEBUG(("Disconnecting...\n"));
300          rdp_disconnect();          rdp_disconnect();
301            ui_deinit();
302          return 0;          return 0;
303  }  }
304    
# Line 356  hexdump(unsigned char *p, unsigned int l Line 412  hexdump(unsigned char *p, unsigned int l
412                          printf("   ");                          printf("   ");
413    
414                  for (i = 0; i < thisline; i++)                  for (i = 0; i < thisline; i++)
415                          printf("%c",                          printf("%c", (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.');
                                (line[i] >= 0x20  
                                 && line[i] < 0x7f) ? line[i] : '.');  
416    
417                  printf("\n");                  printf("\n");
418                  offset += thisline;                  offset += thisline;
# Line 366  hexdump(unsigned char *p, unsigned int l Line 420  hexdump(unsigned char *p, unsigned int l
420          }          }
421  }  }
422    
423    #ifdef SAVE_LICENCE
424  int  int
425  load_licence(unsigned char **data)  load_licence(unsigned char **data)
426  {  {
# Line 419  save_licence(unsigned char *data, int le Line 474  save_licence(unsigned char *data, int le
474          write(fd, data, length);          write(fd, data, length);
475          close(fd);          close(fd);
476  }  }
477    #endif

Legend:
Removed from v.79  
changed lines
  Added in v.211

  ViewVC Help
Powered by ViewVC 1.1.26