Mercurial > dropbear
annotate common-runopts.c @ 1912:8b4274d34fe8
Use buf_burn_free() instead of two calls
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Tue, 29 Mar 2022 23:47:30 +0800 |
parents | 94dc11094e26 |
children | 70f05f7d4d11 |
rev | line source |
---|---|
33 | 1 /* |
2 * Dropbear - a SSH2 server | |
3 * | |
4 * Copyright (c) 2002,2003 Matt Johnston | |
5 * All rights reserved. | |
6 * | |
7 * Permission is hereby granted, free of charge, to any person obtaining a copy | |
8 * of this software and associated documentation files (the "Software"), to deal | |
9 * in the Software without restriction, including without limitation the rights | |
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
11 * copies of the Software, and to permit persons to whom the Software is | |
12 * furnished to do so, subject to the following conditions: | |
13 * | |
14 * The above copyright notice and this permission notice shall be included in | |
15 * all copies or substantial portions of the Software. | |
16 * | |
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
23 * SOFTWARE. */ | |
24 | |
25 #include "includes.h" | |
26 #include "runopts.h" | |
47 | 27 #include "signkey.h" |
28 #include "buffer.h" | |
29 #include "dbutil.h" | |
30 #include "auth.h" | |
682
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
31 #include "algo.h" |
858
220f55d540ae
rename random.h to dbrandom.h since some OSes have a system random.h
Matt Johnston <matt@ucc.asn.au>
parents:
841
diff
changeset
|
32 #include "dbrandom.h" |
33 | 33 |
34 runopts opts; /* GLOBAL */ | |
47 | 35 |
36 /* returns success or failure, and the keytype in *type. If we want | |
37 * to restrict the type, type can contain a type to return */ | |
841
d4ce5269a439
Fix specifying a keysize for key generation, fix key name arguments
Matt Johnston <matt@ucc.asn.au>
parents:
713
diff
changeset
|
38 int readhostkey(const char * filename, sign_key * hostkey, |
d4ce5269a439
Fix specifying a keysize for key generation, fix key name arguments
Matt Johnston <matt@ucc.asn.au>
parents:
713
diff
changeset
|
39 enum signkey_type *type) { |
47 | 40 |
41 int ret = DROPBEAR_FAILURE; | |
42 buffer *buf; | |
43 | |
44 buf = buf_new(MAX_PRIVKEY_SIZE); | |
45 | |
46 if (buf_readfile(buf, filename) == DROPBEAR_FAILURE) { | |
47 goto out; | |
48 } | |
49 buf_setpos(buf, 0); | |
687 | 50 |
51 addrandom(buf_getptr(buf, buf->len), buf->len); | |
52 | |
47 | 53 if (buf_get_priv_key(buf, hostkey, type) == DROPBEAR_FAILURE) { |
54 goto out; | |
55 } | |
56 | |
57 ret = DROPBEAR_SUCCESS; | |
58 out: | |
59 | |
1912
8b4274d34fe8
Use buf_burn_free() instead of two calls
Matt Johnston <matt@ucc.asn.au>
parents:
1834
diff
changeset
|
60 buf_burn_free(buf); |
47 | 61 return ret; |
62 } | |
682
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
63 |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
948
diff
changeset
|
64 #if DROPBEAR_USER_ALGO_LIST |
682
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
65 void |
1687
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
66 parse_ciphers_macs() { |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
67 int printed_help = 0; |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
68 if (opts.cipher_list) { |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
69 if (strcmp(opts.cipher_list, "help") == 0) { |
682
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
70 char *ciphers = algolist_string(sshciphers); |
1687
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
71 dropbear_log(LOG_INFO, "Available ciphers: %s", ciphers); |
682
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
72 m_free(ciphers); |
1687
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
73 printed_help = 1; |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
74 } else { |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
75 if (check_user_algos(opts.cipher_list, sshciphers, "cipher") == 0) { |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
76 dropbear_exit("No valid ciphers specified for '-c'"); |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
77 } |
682
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
78 } |
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
79 } |
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
80 |
1687
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
81 if (opts.mac_list) { |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
82 if (strcmp(opts.mac_list, "help") == 0) { |
682
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
83 char *macs = algolist_string(sshhashes); |
1687
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
84 dropbear_log(LOG_INFO, "Available MACs: %s", macs); |
682
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
85 m_free(macs); |
1687
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
86 printed_help = 1; |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
87 } else { |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
88 if (check_user_algos(opts.mac_list, sshhashes, "MAC") == 0) { |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
89 dropbear_exit("No valid MACs specified for '-m'"); |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
90 } |
682
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
91 } |
1687
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
92 } |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
93 if (printed_help) { |
f8d8af12ac14
Make "dbclient -m help -c help" work
Matt Johnston <matt@ucc.asn.au>
parents:
1685
diff
changeset
|
94 dropbear_exit("."); |
682
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
95 } |
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
96 } |
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
97 #endif |
4edea9f363d0
Add rough support for choosing ciphers/hashes with "-c" or "-m"
Matt Johnston <matt@ucc.asn.au>
parents:
47
diff
changeset
|
98 |
948
f92eb625c48d
- Don't use multichar constants since recent gcc complains
Matt Johnston <matt@ucc.asn.au>
parents:
946
diff
changeset
|
99 void print_version() { |
f92eb625c48d
- Don't use multichar constants since recent gcc complains
Matt Johnston <matt@ucc.asn.au>
parents:
946
diff
changeset
|
100 fprintf(stderr, "Dropbear v%s\n", DROPBEAR_VERSION); |
946 | 101 } |
102 | |
1834
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
103 void parse_recv_window(const char* recv_window_arg) { |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
104 int ret; |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
105 unsigned int rw; |
946 | 106 |
1834
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
107 ret = m_str_to_uint(recv_window_arg, &rw); |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
108 if (ret == DROPBEAR_FAILURE || rw == 0 || rw > MAX_RECV_WINDOW) { |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
109 if (rw > MAX_RECV_WINDOW) { |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
110 opts.recv_window = MAX_RECV_WINDOW; |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
111 } |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
112 dropbear_log(LOG_WARNING, "Bad recv window '%s', using %d", |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
113 recv_window_arg, opts.recv_window); |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
114 } else { |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
115 opts.recv_window = rw; |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
116 } |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
117 |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
118 } |
94dc11094e26
Increase max window size to 10MB, fallback rather than
Matt Johnston <matt@codeconstruct.com.au>
parents:
1687
diff
changeset
|
119 |