From 82228fe471987dbbc27605f9b55b2024b05b1733 Mon Sep 17 00:00:00 2001 From: cheatfate Date: Thu, 27 Aug 2020 21:23:41 +0300 Subject: [PATCH] Fix last createDir. --- beacon_chain/beacon_node.nim | 11 +++++++++-- beacon_chain/conf.nim | 19 +++++++++++-------- beacon_chain/deposit_contract.nim | 13 ++++++++++--- beacon_chain/nimbus_binary_common.nim | 9 +++++---- beacon_chain/validator_duties.nim | 2 ++ 5 files changed, 37 insertions(+), 17 deletions(-) diff --git a/beacon_chain/beacon_node.nim b/beacon_chain/beacon_node.nim index c6ac8c32a..8f6b8e733 100644 --- a/beacon_chain/beacon_node.nim +++ b/beacon_chain/beacon_node.nim @@ -1262,8 +1262,15 @@ programMain: swap(mnemonic, walletRes.get.mnemonic) walletPath = walletRes.get.walletPath - createDir(config.outValidatorsDir) - createDir(config.outSecretsDir) + let vres = createPath(config.outValidatorsDir, 0o750) + if vres.isErr(): + fatal "Could not create directory", path = config.outValidatorsDir + quit QuitFailure + + let sres = createPath(config.outSecretsDir, 0o750) + if sres.isErr(): + fatal "Could not create directory", path = config.outSecretsDir + quit QuitFailure let deposits = generateDeposits( config.runtimePreset, diff --git a/beacon_chain/conf.nim b/beacon_chain/conf.nim index faf5e0397..78528c979 100644 --- a/beacon_chain/conf.nim +++ b/beacon_chain/conf.nim @@ -5,7 +5,8 @@ import chronicles, chronicles/options as chroniclesOptions, confutils, confutils/defs, confutils/std/net, stew/shims/net as stewNet, json_serialization, web3/[ethtypes, confutils_defs], - spec/[crypto, keystore, digest, datatypes, network], network_metadata + spec/[crypto, keystore, digest, datatypes, network], network_metadata, + stew/io2 export defaultEth2TcpPort, enabledLogLevel, ValidIpAddress, @@ -440,13 +441,15 @@ func dumpDirOutgoing*(conf: BeaconNodeConf|ValidatorClientConf): string = proc createDumpDirs*(conf: BeaconNodeConf) = if conf.dumpEnabled: - try: - createDir(conf.dumpDirInvalid) - createDir(conf.dumpDirIncoming) - createDir(conf.dumpDirOutgoing) - except CatchableError as err: - # Dumping is mainly a debugging feature, so ignore these.. - warn "Cannot create dump directories", msg = err.msg + let resInv = createPath(conf.dumpDirInvalid, 0o750) + if resInv.isErr(): + warn "Could not create dump directory", path = conf.dumpDirInvalid + let resInc = createPath(conf.dumpDirIncoming, 0o750) + if resInc.isErr(): + warn "Could not create dump directory", path = conf.dumpDirIncoming + let resOut = createPath(conf.dumpDirOutgoing, 0o750) + if resOut.isErr(): + warn "Could not create dump directory", path = conf.dumpDirOutgoing func parseCmdArg*(T: type GraffitiBytes, input: TaintedString): T {.raises: [ValueError, Defect].} = diff --git a/beacon_chain/deposit_contract.nim b/beacon_chain/deposit_contract.nim index c162a090f..eb1948e5f 100644 --- a/beacon_chain/deposit_contract.nim +++ b/beacon_chain/deposit_contract.nim @@ -2,7 +2,7 @@ import os, sequtils, strutils, options, json, terminal, random, chronos, chronicles, confutils, stint, json_serialization, ../beacon_chain/network_metadata, - web3, web3/confutils_defs, eth/keys, + web3, web3/confutils_defs, eth/keys, stew/io2, spec/[datatypes, crypto, presets], ssz/merkleization, keystore_management # Compiled version of /scripts/depositContract.v.py in this repo @@ -178,8 +178,15 @@ proc main() {.async.} = mnemonic = generateMnemonic(rng[]) runtimePreset = getRuntimePresetForNetwork(cfg.eth2Network) - createDir(string cfg.outValidatorsDir) - createDir(string cfg.outSecretsDir) + let vres = createPath(string cfg.outValidatorsDir, 0o750) + if vres.isErr(): + warn "Could not create validators folder", + path = string cfg.outValidatorsDir, err = ioErrorMsg(vres.error) + + let sres = createPath(string cfg.outSecretsDir, 0o750) + if sres.isErr(): + warn "Could not create secrets folder", + path = string cfg.outSecretsDir, err = ioErrorMsg(sres.error) let deposits = generateDeposits( runtimePreset, diff --git a/beacon_chain/nimbus_binary_common.nim b/beacon_chain/nimbus_binary_common.nim index 44fff3218..2021c4072 100644 --- a/beacon_chain/nimbus_binary_common.nim +++ b/beacon_chain/nimbus_binary_common.nim @@ -14,6 +14,7 @@ import # Nimble packages chronos, confutils/defs, chronicles, chronicles/helpers as chroniclesHelpers, + stew/io2, # Local modules spec/[datatypes, crypto, helpers], eth2_network, time @@ -36,10 +37,10 @@ proc setupLogging*(logLevel: string, logFile: Option[OutFile]) = let logFile = logFile.get.string logFileDir = splitFile(logFile).dir - try: - createDir logFileDir - except CatchableError as err: - error "Failed to create directory for log file", path = logFileDir, err = err.msg + let lres = createPath(logFileDir, 0o750) + if lres.isErr(): + error "Failed to create directory for log file", + path = logFileDir, err = ioErrorMsg(lres.error) break openLogFile if not defaultChroniclesStream.outputs[1].open(logFile): diff --git a/beacon_chain/validator_duties.nim b/beacon_chain/validator_duties.nim index d438bb9dc..3ba687aca 100644 --- a/beacon_chain/validator_duties.nim +++ b/beacon_chain/validator_duties.nim @@ -35,6 +35,8 @@ declareCounter beacon_blocks_proposed, logScope: topics = "beacval" +# TODO: This procedure follows insecure scheme of creating directory without +# any permissions and writing file without any permissions. proc saveValidatorKey*(keyName, key: string, conf: BeaconNodeConf) = let validatorsDir = conf.validatorsDir let outputFile = validatorsDir / keyName