@@ -1145,6 +1145,53 @@ bool AppInitInterfaces(NodeContext& node)
1145
1145
return true ;
1146
1146
}
1147
1147
1148
+ bool CheckHostPortOptions (const ArgsManager& args) {
1149
+ for (const std::string port_option : {
1150
+ " -port" ,
1151
+ " -rpcport" ,
1152
+ }) {
1153
+ if (args.IsArgSet (port_option)) {
1154
+ const std::string port = args.GetArg (port_option, " " );
1155
+ uint16_t n;
1156
+ if (!ParseUInt16 (port, &n) || n == 0 ) {
1157
+ return InitError (InvalidPortErrMsg (port_option, port));
1158
+ }
1159
+ }
1160
+ }
1161
+
1162
+ for ([[maybe_unused]] const auto & [arg, unix] : std::vector<std::pair<std::string, bool >>{
1163
+ // arg name UNIX socket support
1164
+ {" -i2psam" , false },
1165
+ {" -onion" , true },
1166
+ {" -proxy" , true },
1167
+ {" -rpcbind" , false },
1168
+ {" -torcontrol" , false },
1169
+ {" -whitebind" , false },
1170
+ {" -zmqpubhashblock" , true },
1171
+ {" -zmqpubhashtx" , true },
1172
+ {" -zmqpubrawblock" , true },
1173
+ {" -zmqpubrawtx" , true },
1174
+ {" -zmqpubsequence" , true },
1175
+ }) {
1176
+ for (const std::string& socket_addr : args.GetArgs (arg)) {
1177
+ std::string host_out;
1178
+ uint16_t port_out{0 };
1179
+ if (!SplitHostPort (socket_addr, port_out, host_out)) {
1180
+ #ifdef HAVE_SOCKADDR_UN
1181
+ // Allow unix domain sockets for some options e.g. unix:/some/file/path
1182
+ if (!unix || !socket_addr.starts_with (ADDR_PREFIX_UNIX)) {
1183
+ return InitError (InvalidPortErrMsg (arg, socket_addr));
1184
+ }
1185
+ #else
1186
+ return InitError (InvalidPortErrMsg (arg, socket_addr));
1187
+ #endif
1188
+ }
1189
+ }
1190
+ }
1191
+
1192
+ return true ;
1193
+ }
1194
+
1148
1195
bool AppInitMain (NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
1149
1196
{
1150
1197
const ArgsManager& args = *Assert (node.args );
@@ -1323,48 +1370,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
1323
1370
}
1324
1371
1325
1372
// Check port numbers
1326
- for (const std::string port_option : {
1327
- " -port" ,
1328
- " -rpcport" ,
1329
- }) {
1330
- if (args.IsArgSet (port_option)) {
1331
- const std::string port = args.GetArg (port_option, " " );
1332
- uint16_t n;
1333
- if (!ParseUInt16 (port, &n) || n == 0 ) {
1334
- return InitError (InvalidPortErrMsg (port_option, port));
1335
- }
1336
- }
1337
- }
1338
-
1339
- for ([[maybe_unused]] const auto & [arg, unix] : std::vector<std::pair<std::string, bool >>{
1340
- // arg name UNIX socket support
1341
- {" -i2psam" , false },
1342
- {" -onion" , true },
1343
- {" -proxy" , true },
1344
- {" -rpcbind" , false },
1345
- {" -torcontrol" , false },
1346
- {" -whitebind" , false },
1347
- {" -zmqpubhashblock" , true },
1348
- {" -zmqpubhashtx" , true },
1349
- {" -zmqpubrawblock" , true },
1350
- {" -zmqpubrawtx" , true },
1351
- {" -zmqpubsequence" , true },
1352
- }) {
1353
- for (const std::string& socket_addr : args.GetArgs (arg)) {
1354
- std::string host_out;
1355
- uint16_t port_out{0 };
1356
- if (!SplitHostPort (socket_addr, port_out, host_out)) {
1357
- #ifdef HAVE_SOCKADDR_UN
1358
- // Allow unix domain sockets for some options e.g. unix:/some/file/path
1359
- if (!unix || !socket_addr.starts_with (ADDR_PREFIX_UNIX)) {
1360
- return InitError (InvalidPortErrMsg (arg, socket_addr));
1361
- }
1362
- #else
1363
- return InitError (InvalidPortErrMsg (arg, socket_addr));
1364
- #endif
1365
- }
1366
- }
1367
- }
1373
+ if (!CheckHostPortOptions (args)) return false ;
1368
1374
1369
1375
for (const std::string& socket_addr : args.GetArgs (" -bind" )) {
1370
1376
std::string host_out;
0 commit comments