Skip to content

Commit ce8d081

Browse files
authored
Ensure logfile permissions are maintained after rotation (#7246)
Update our `logroller` dependency to the new version which supports permission control. See -> alasdairpan/logroller#6
1 parent cf0f959 commit ce8d081

File tree

5 files changed

+19
-53
lines changed

5 files changed

+19
-53
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ hyper = "1"
159159
itertools = "0.10"
160160
libsecp256k1 = "0.7"
161161
log = "0.4"
162-
logroller = "0.1.4"
162+
logroller = "0.1.8"
163163
lru = "0.12"
164164
maplit = "1"
165165
milhouse = "0.5"

common/logging/src/tracing_libp2p_discv5_logging_layer.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ impl tracing_core::field::Visit for LogMessageExtractor {
5959
pub fn create_libp2p_discv5_tracing_layer(
6060
base_tracing_log_path: Option<PathBuf>,
6161
max_log_size: u64,
62+
file_mode: u32,
6263
) -> Option<Libp2pDiscv5TracingLayer> {
6364
if let Some(mut tracing_log_path) = base_tracing_log_path {
6465
// Ensure that `tracing_log_path` only contains directories.
@@ -75,12 +76,14 @@ pub fn create_libp2p_discv5_tracing_layer(
7576
let libp2p_writer =
7677
LogRollerBuilder::new(tracing_log_path.clone(), PathBuf::from("libp2p.log"))
7778
.rotation(Rotation::SizeBased(RotationSize::MB(max_log_size)))
78-
.max_keep_files(1);
79+
.max_keep_files(1)
80+
.file_mode(file_mode);
7981

8082
let discv5_writer =
8183
LogRollerBuilder::new(tracing_log_path.clone(), PathBuf::from("discv5.log"))
8284
.rotation(Rotation::SizeBased(RotationSize::MB(max_log_size)))
83-
.max_keep_files(1);
85+
.max_keep_files(1)
86+
.file_mode(file_mode);
8487

8588
let libp2p_writer = match libp2p_writer.build() {
8689
Ok(writer) => writer,

lcli/src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,7 @@ fn run<E: EthSpec>(env_builder: EnvironmentBuilder<E>, matches: &ArgMatches) ->
675675
extra_info: false,
676676
},
677677
"",
678+
0o600,
678679
);
679680

680681
let env = env_builder

lighthouse/environment/src/lib.rs

Lines changed: 4 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,7 @@ use types::{EthSpec, GnosisEthSpec, MainnetEthSpec, MinimalEthSpec};
2626
#[cfg(target_family = "unix")]
2727
use {
2828
futures::Future,
29-
std::{
30-
fs::{read_dir, set_permissions, Permissions},
31-
os::unix::fs::PermissionsExt,
32-
path::Path,
33-
pin::Pin,
34-
task::Context,
35-
task::Poll,
36-
},
29+
std::{pin::Pin, task::Context, task::Poll},
3730
tokio::signal::unix::{signal, Signal, SignalKind},
3831
};
3932

@@ -208,6 +201,7 @@ impl<E: EthSpec> EnvironmentBuilder<E> {
208201
mut self,
209202
config: LoggerConfig,
210203
logfile_prefix: &str,
204+
file_mode: u32,
211205
) -> (
212206
Self,
213207
LoggingLayer,
@@ -220,9 +214,6 @@ impl<E: EthSpec> EnvironmentBuilder<E> {
220214
_ => logfile_prefix,
221215
};
222216

223-
#[cfg(target_family = "unix")]
224-
let file_mode = if config.is_restricted { 0o600 } else { 0o644 };
225-
226217
let file_logging_layer = match config.path {
227218
None => {
228219
eprintln!("No logfile path provided, logging to file is disabled");
@@ -239,17 +230,15 @@ impl<E: EthSpec> EnvironmentBuilder<E> {
239230
.max_keep_files(config.max_log_number.try_into().unwrap_or_else(|e| {
240231
eprintln!("Failed to convert max_log_number to u64: {}", e);
241232
10
242-
}));
233+
}))
234+
.file_mode(file_mode);
243235

244236
if config.compression {
245237
appender = appender.compression(Compression::Gzip);
246238
}
247239

248240
match appender.build() {
249241
Ok(file_appender) => {
250-
#[cfg(target_family = "unix")]
251-
set_logfile_permissions(&path, filename_prefix, file_mode);
252-
253242
let (writer, guard) = tracing_appender::non_blocking(file_appender);
254243
Some(LoggingLayer::new(
255244
writer,
@@ -543,37 +532,3 @@ impl Future for SignalFuture {
543532
}
544533
}
545534
}
546-
547-
#[cfg(target_family = "unix")]
548-
fn set_logfile_permissions(log_dir: &Path, filename_prefix: &str, file_mode: u32) {
549-
let newest = read_dir(log_dir)
550-
.ok()
551-
.into_iter()
552-
.flat_map(|entries| entries.filter_map(Result::ok))
553-
.filter_map(|entry| {
554-
let path = entry.path();
555-
let fname = path.file_name()?.to_string_lossy();
556-
if path.is_file() && fname.starts_with(filename_prefix) && fname.ends_with(".log") {
557-
let modified = entry.metadata().ok()?.modified().ok()?;
558-
Some((path, modified))
559-
} else {
560-
None
561-
}
562-
})
563-
.max_by_key(|(_path, mtime)| *mtime);
564-
565-
match newest {
566-
Some((file, _mtime)) => {
567-
if let Err(e) = set_permissions(&file, Permissions::from_mode(file_mode)) {
568-
eprintln!("Failed to set permissions on {}: {}", file.display(), e);
569-
}
570-
}
571-
None => {
572-
eprintln!(
573-
"Couldn't find a newly created logfile in {} matching prefix \"{}\".",
574-
log_dir.display(),
575-
filename_prefix
576-
);
577-
}
578-
}
579-
}

lighthouse/environment/src/tracing_common.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,14 @@ pub fn construct_logger<E: EthSpec>(
3333
let subcommand_name = matches.subcommand_name();
3434
let logfile_prefix = subcommand_name.unwrap_or("lighthouse");
3535

36+
let file_mode = if logger_config.is_restricted {
37+
0o600
38+
} else {
39+
0o644
40+
};
41+
3642
let (builder, stdout_logging_layer, file_logging_layer, sse_logging_layer_opt) =
37-
environment_builder.init_tracing(logger_config.clone(), logfile_prefix);
43+
environment_builder.init_tracing(logger_config.clone(), logfile_prefix, file_mode);
3844

3945
let libp2p_discv5_layer = if let Some(subcommand_name) = subcommand_name {
4046
if subcommand_name == "beacon_node"
@@ -49,6 +55,7 @@ pub fn construct_logger<E: EthSpec>(
4955
create_libp2p_discv5_tracing_layer(
5056
logger_config.path.clone(),
5157
logger_config.max_log_size,
58+
file_mode,
5259
)
5360
}
5461
} else {

0 commit comments

Comments
 (0)