comparison cli-runopts.c @ 1069:2fa71c3b2827 pam

merge pam branch up to date
author Matt Johnston <matt@ucc.asn.au>
date Mon, 16 Mar 2015 21:34:05 +0800
parents 47643024fc90
children ad14e2e71190
comparison
equal deleted inserted replaced
1068:9a6395ddb1b6 1069:2fa71c3b2827
36 static void printhelp(); 36 static void printhelp();
37 static void parse_hostname(const char* orighostarg); 37 static void parse_hostname(const char* orighostarg);
38 static void parse_multihop_hostname(const char* orighostarg, const char* argv0); 38 static void parse_multihop_hostname(const char* orighostarg, const char* argv0);
39 static void fill_own_user(); 39 static void fill_own_user();
40 #ifdef ENABLE_CLI_PUBKEY_AUTH 40 #ifdef ENABLE_CLI_PUBKEY_AUTH
41 static void loadidentityfile(const char* filename); 41 static void loadidentityfile(const char* filename, int warnfail);
42 #endif 42 #endif
43 #ifdef ENABLE_CLI_ANYTCPFWD 43 #ifdef ENABLE_CLI_ANYTCPFWD
44 static void addforward(const char* str, m_list *fwdlist); 44 static void addforward(const char* str, m_list *fwdlist);
45 #endif 45 #endif
46 #ifdef ENABLE_CLI_NETCAT 46 #ifdef ENABLE_CLI_NETCAT
63 "-f Run in background after auth\n" 63 "-f Run in background after auth\n"
64 "-y Always accept remote host key if unknown\n" 64 "-y Always accept remote host key if unknown\n"
65 "-y -y Don't perform any remote host key checking (caution)\n" 65 "-y -y Don't perform any remote host key checking (caution)\n"
66 "-s Request a subsystem (use by external sftp)\n" 66 "-s Request a subsystem (use by external sftp)\n"
67 #ifdef ENABLE_CLI_PUBKEY_AUTH 67 #ifdef ENABLE_CLI_PUBKEY_AUTH
68 "-i <identityfile> (multiple allowed)\n" 68 "-i <identityfile> (multiple allowed, default %s)\n"
69 #endif 69 #endif
70 #ifdef ENABLE_CLI_AGENTFWD 70 #ifdef ENABLE_CLI_AGENTFWD
71 "-A Enable agent auth forwarding\n" 71 "-A Enable agent auth forwarding\n"
72 #endif 72 #endif
73 #ifdef ENABLE_CLI_LOCALTCPFWD 73 #ifdef ENABLE_CLI_LOCALTCPFWD
93 "-V Version\n" 93 "-V Version\n"
94 #ifdef DEBUG_TRACE 94 #ifdef DEBUG_TRACE
95 "-v verbose (compiled with DEBUG_TRACE)\n" 95 "-v verbose (compiled with DEBUG_TRACE)\n"
96 #endif 96 #endif
97 ,DROPBEAR_VERSION, cli_opts.progname, 97 ,DROPBEAR_VERSION, cli_opts.progname,
98 #ifdef ENABLE_CLI_PUBKEY_AUTH
99 DROPBEAR_DEFAULT_CLI_AUTHKEY,
100 #endif
98 DEFAULT_RECV_WINDOW, DEFAULT_KEEPALIVE, DEFAULT_IDLE_TIMEOUT); 101 DEFAULT_RECV_WINDOW, DEFAULT_KEEPALIVE, DEFAULT_IDLE_TIMEOUT);
99 102
100 } 103 }
101 104
102 void cli_getopts(int argc, char ** argv) { 105 void cli_getopts(int argc, char ** argv) {
151 #endif 154 #endif
152 #ifdef ENABLE_CLI_PROXYCMD 155 #ifdef ENABLE_CLI_PROXYCMD
153 cli_opts.proxycmd = NULL; 156 cli_opts.proxycmd = NULL;
154 #endif 157 #endif
155 #ifndef DISABLE_ZLIB 158 #ifndef DISABLE_ZLIB
156 opts.enable_compress = 1; 159 opts.compress_mode = DROPBEAR_COMPRESS_ON;
157 #endif 160 #endif
158 #ifdef ENABLE_USER_ALGO_LIST 161 #ifdef ENABLE_USER_ALGO_LIST
159 opts.cipher_list = NULL; 162 opts.cipher_list = NULL;
160 opts.mac_list = NULL; 163 opts.mac_list = NULL;
161 #endif 164 #endif
172 /* Iterate all the arguments */ 175 /* Iterate all the arguments */
173 for (i = 1; i < (unsigned int)argc; i++) { 176 for (i = 1; i < (unsigned int)argc; i++) {
174 #ifdef ENABLE_CLI_PUBKEY_AUTH 177 #ifdef ENABLE_CLI_PUBKEY_AUTH
175 if (nextiskey) { 178 if (nextiskey) {
176 /* Load a hostkey since the previous argument was "-i" */ 179 /* Load a hostkey since the previous argument was "-i" */
177 loadidentityfile(argv[i]); 180 loadidentityfile(argv[i], 1);
178 nextiskey = 0; 181 nextiskey = 0;
179 continue; 182 continue;
180 } 183 }
181 #endif 184 #endif
182 #ifdef ENABLE_CLI_REMOTETCPFWD 185 #ifdef ENABLE_CLI_REMOTETCPFWD
229 break; 232 break;
230 #ifdef ENABLE_CLI_PUBKEY_AUTH 233 #ifdef ENABLE_CLI_PUBKEY_AUTH
231 case 'i': /* an identityfile */ 234 case 'i': /* an identityfile */
232 /* Keep scp happy when it changes "-i file" to "-ifile" */ 235 /* Keep scp happy when it changes "-i file" to "-ifile" */
233 if (strlen(argv[i]) > 2) { 236 if (strlen(argv[i]) > 2) {
234 loadidentityfile(&argv[i][2]); 237 loadidentityfile(&argv[i][2], 1);
235 } else { 238 } else {
236 nextiskey = 1; 239 nextiskey = 1;
237 } 240 }
238 break; 241 break;
239 #endif 242 #endif
442 if (cli_opts.cmd && cli_opts.netcat_host) { 445 if (cli_opts.cmd && cli_opts.netcat_host) {
443 dropbear_log(LOG_INFO, "Ignoring command '%s' in netcat mode", cli_opts.cmd); 446 dropbear_log(LOG_INFO, "Ignoring command '%s' in netcat mode", cli_opts.cmd);
444 } 447 }
445 #endif 448 #endif
446 449
450 #ifdef DROPBEAR_DEFAULT_CLI_AUTHKEY
451 {
452 char *expand_path = expand_tilde(DROPBEAR_DEFAULT_CLI_AUTHKEY);
453 loadidentityfile(expand_path, 0);
454 m_free(expand_path);
455 }
456 #endif
457
447 /* The hostname gets set up last, since 458 /* The hostname gets set up last, since
448 * in multi-hop mode it will require knowledge 459 * in multi-hop mode it will require knowledge
449 * of other flags such as -i */ 460 * of other flags such as -i */
450 #ifdef ENABLE_CLI_MULTIHOP 461 #ifdef ENABLE_CLI_MULTIHOP
451 parse_multihop_hostname(host_arg, argv[0]); 462 parse_multihop_hostname(host_arg, argv[0]);
453 parse_hostname(host_arg); 464 parse_hostname(host_arg);
454 #endif 465 #endif
455 } 466 }
456 467
457 #ifdef ENABLE_CLI_PUBKEY_AUTH 468 #ifdef ENABLE_CLI_PUBKEY_AUTH
458 static void loadidentityfile(const char* filename) { 469 static void loadidentityfile(const char* filename, int warnfail) {
459 sign_key *key; 470 sign_key *key;
460 enum signkey_type keytype; 471 enum signkey_type keytype;
472
473 TRACE(("loadidentityfile %s", filename))
461 474
462 key = new_sign_key(); 475 key = new_sign_key();
463 keytype = DROPBEAR_SIGNKEY_ANY; 476 keytype = DROPBEAR_SIGNKEY_ANY;
464 if ( readhostkey(filename, key, &keytype) != DROPBEAR_SUCCESS ) { 477 if ( readhostkey(filename, key, &keytype) != DROPBEAR_SUCCESS ) {
465 fprintf(stderr, "Failed loading keyfile '%s'\n", filename); 478 if (warnfail) {
479 fprintf(stderr, "Failed loading keyfile '%s'\n", filename);
480 }
466 sign_key_free(key); 481 sign_key_free(key);
467 } else { 482 } else {
468 key->type = keytype; 483 key->type = keytype;
469 key->source = SIGNKEY_SOURCE_RAW_FILE; 484 key->source = SIGNKEY_SOURCE_RAW_FILE;
470 key->filename = m_strdup(filename); 485 key->filename = m_strdup(filename);
592 snprintf(cli_opts.proxycmd, cmd_len, "%s -B %s:%s %s %s", 607 snprintf(cli_opts.proxycmd, cmd_len, "%s -B %s:%s %s %s",
593 argv0, cli_opts.remotehost, cli_opts.remoteport, 608 argv0, cli_opts.remotehost, cli_opts.remoteport,
594 passthrough_args, remainder); 609 passthrough_args, remainder);
595 #ifndef DISABLE_ZLIB 610 #ifndef DISABLE_ZLIB
596 /* The stream will be incompressible since it's encrypted. */ 611 /* The stream will be incompressible since it's encrypted. */
597 opts.enable_compress = 0; 612 opts.compress_mode = DROPBEAR_COMPRESS_OFF;
598 #endif 613 #endif
599 m_free(passthrough_args); 614 m_free(passthrough_args);
600 } 615 }
601 m_free(hostbuf); 616 m_free(hostbuf);
602 } 617 }