Mercurial > dropbear
annotate dbmulti.c @ 1400:238a439670f5 coverity
merge
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Sat, 03 Jun 2017 00:10:58 +0800 |
parents | 11f645c3715b |
children | 0dcc5b0d93fa |
rev | line source |
---|---|
74
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
1 /* |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
2 * Dropbear SSH |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
3 * |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
4 * Copyright (c) 2002,2003 Matt Johnston |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
5 * All rights reserved. |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
6 * |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
7 * Permission is hereby granted, free of charge, to any person obtaining a copy |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
8 * of this software and associated documentation files (the "Software"), to deal |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
9 * in the Software without restriction, including without limitation the rights |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
11 * copies of the Software, and to permit persons to whom the Software is |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
12 * furnished to do so, subject to the following conditions: |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
13 * |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
14 * The above copyright notice and this permission notice shall be included in |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
15 * all copies or substantial portions of the Software. |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
16 * |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
23 * SOFTWARE. */ |
e3adf4cf5465
License boilerplate etc, add Mihnea as an author to some of the files
Matt Johnston <matt@ucc.asn.au>
parents:
33
diff
changeset
|
24 |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
25 #include "includes.h" |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
26 |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
27 /* definitions are cleanest if we just put them here */ |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
28 int dropbear_main(int argc, char ** argv); |
1235
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
29 int cli_main(int argc, char ** argv); |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
30 int dropbearkey_main(int argc, char ** argv); |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
31 int dropbearconvert_main(int argc, char ** argv); |
30
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
32 int scp_main(int argc, char ** argv); |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
33 |
1235
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
34 static int runprog(const char *progname, int argc, char ** argv, int *match) { |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
35 *match = DROPBEAR_SUCCESS; |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
36 |
30
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
37 #ifdef DBMULTI_dropbear |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
38 if (strcmp(progname, "dropbear") == 0) { |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
39 return dropbear_main(argc, argv); |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
40 } |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
41 #endif |
33 | 42 #ifdef DBMULTI_dbclient |
86 | 43 if (strcmp(progname, "dbclient") == 0 |
44 || strcmp(progname, "ssh") == 0) { | |
33 | 45 return cli_main(argc, argv); |
46 } | |
47 #endif | |
30
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
48 #ifdef DBMULTI_dropbearkey |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
49 if (strcmp(progname, "dropbearkey") == 0) { |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
50 return dropbearkey_main(argc, argv); |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
51 } |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
52 #endif |
30
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
53 #ifdef DBMULTI_dropbearconvert |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
54 if (strcmp(progname, "dropbearconvert") == 0) { |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
55 return dropbearconvert_main(argc, argv); |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
56 } |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
57 #endif |
30
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
58 #ifdef DBMULTI_scp |
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
59 if (strcmp(progname, "scp") == 0) { |
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
60 return scp_main(argc, argv); |
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
61 } |
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
62 #endif |
1235
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
63 *match = DROPBEAR_FAILURE; |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
64 return 1; |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
65 } |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
66 |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
67 int main(int argc, char ** argv) { |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
68 int i; |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
69 for (i = 0; i < 2; i++) { |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
70 /* Try symlink first, then try as an argument eg "dropbearmulti dbclient host ..." */ |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
71 if (argc > i) { |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
72 int match, res; |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
73 /* figure which form we're being called as */ |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
74 const char* progname = basename(argv[i]); |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
75 res = runprog(progname, argc-i, &argv[i], &match); |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
76 if (match == DROPBEAR_SUCCESS) { |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
77 return res; |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
78 } |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
79 } |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
80 } |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
81 |
716 | 82 fprintf(stderr, "Dropbear SSH multi-purpose v%s\n" |
1235
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
83 "Make a symlink pointing at this binary with one of the\n" |
11f645c3715b
allow specifying dropbearmulti command as an argument
Matt Johnston <matt@ucc.asn.au>
parents:
716
diff
changeset
|
84 "following names or run 'dropbearmulti <command>'.\n" |
30
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
85 #ifdef DBMULTI_dropbear |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
86 "'dropbear' - the Dropbear server\n" |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
87 #endif |
33 | 88 #ifdef DBMULTI_dbclient |
110
9b7fc71039cd
Add help text that a symlink to "ssh" works
Matt Johnston <matt@ucc.asn.au>
parents:
86
diff
changeset
|
89 "'dbclient' or 'ssh' - the Dropbear client\n" |
33 | 90 #endif |
30
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
91 #ifdef DBMULTI_dropbearkey |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
92 "'dropbearkey' - the key generator\n" |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
93 #endif |
30
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
94 #ifdef DBMULTI_dropbearconvert |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
95 "'dropbearconvert' - the key converter\n" |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
96 #endif |
30
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
97 #ifdef DBMULTI_scp |
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
98 "'scp' - secure copy\n" |
223b0f5f8dce
Switching to the magical new Makefile, and new dbmulti style
Matt Johnston <matt@ucc.asn.au>
parents:
4
diff
changeset
|
99 #endif |
4
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
100 , |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
101 DROPBEAR_VERSION); |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
102 exit(1); |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
103 |
fe6bca95afa7
Makefile.in contains updated files required
Matt Johnston <matt@ucc.asn.au>
parents:
diff
changeset
|
104 } |