MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能: - ✅ Categories/Series双视图管理(category_view.rs + import_markdown.rs) - ✅ FUSE Multi-Volume支持(tree_type参数) - ✅ SSH/SFTP/SCP/rsync协议完整实现(4042行) - ✅ NFS/SMB Module Phase 1-3完成 - ✅ Archive Module Phase 1-4完成(2916行) - ✅ Download Center API完整实现 - ✅ S3兼容API实现(560行) Git配置修正: - ✅ 删除错误origin(gitea.momentry.ddns.net) - ✅ 删除m5max128(指向机器名) - ✅ 设置origin = m5max128gitea.momentry.ddns.net/admin/markbase - ✅ 设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase 数据清理: - ✅ 删除38个临时SQLite(保留accusys.sqlite、demo.sqlite) - ✅ 删除.bak、test_*.bin、调试脚本等临时文件 - ✅ 删除临时目录(build/、download files/、raid_test/等) - ✅ 更新.gitignore排除临时文件 架构优化: - 52个文件修改,2434行新增,4739行删除 - Workspace成员整合(16个crate) - 数据库状态:accusys.sqlite保留(主demo测试) 远程同步: - ✅ 准备推送到m5max128gitea(远程Gitea) - ✅ 准备推送到m4minigitea(本地Gitea)
This commit is contained in:
2609
markbase-sftp-poc/Cargo.lock
generated
Normal file
2609
markbase-sftp-poc/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
18
markbase-sftp-poc/Cargo.toml
Normal file
18
markbase-sftp-poc/Cargo.toml
Normal file
@@ -0,0 +1,18 @@
|
||||
[package]
|
||||
name = "markbase-sftp-poc"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[workspace]
|
||||
|
||||
[dependencies]
|
||||
russh = "0.61"
|
||||
russh-sftp = "2.3"
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
anyhow = "1"
|
||||
bcrypt = "0.16"
|
||||
rusqlite = { version = "0.32", features = ["bundled"] }
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
serde_json = "1"
|
||||
log = "0.4"
|
||||
env_logger = "0.11"
|
||||
41
markbase-sftp-poc/src/auth.rs
Normal file
41
markbase-sftp-poc/src/auth.rs
Normal file
@@ -0,0 +1,41 @@
|
||||
use anyhow::Result;
|
||||
|
||||
pub struct MockAuthDb {
|
||||
users: Vec<MockUser>,
|
||||
}
|
||||
|
||||
pub struct MockUser {
|
||||
username: String,
|
||||
password_hash: String,
|
||||
}
|
||||
|
||||
impl MockAuthDb {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
users: vec![
|
||||
MockUser {
|
||||
username: "warren".to_string(),
|
||||
password_hash: bcrypt::hash("demo123", bcrypt::DEFAULT_COST).unwrap(),
|
||||
},
|
||||
MockUser {
|
||||
username: "demo".to_string(),
|
||||
password_hash: bcrypt::hash("demo123", bcrypt::DEFAULT_COST).unwrap(),
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
|
||||
pub fn verify_password(&self, username: &str, password: &str) -> Result<bool> {
|
||||
let user = self.users.iter().find(|u| u.username == username);
|
||||
|
||||
if let Some(user) = user {
|
||||
Ok(bcrypt::verify(password, &user.password_hash)?)
|
||||
} else {
|
||||
Ok(false)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_user_dir(&self, username: &str) -> String {
|
||||
format!("/Users/accusys/momentry/var/sftpgo/data/{}/", username)
|
||||
}
|
||||
}
|
||||
22
markbase-sftp-poc/src/main.rs
Normal file
22
markbase-sftp-poc/src/main.rs
Normal file
@@ -0,0 +1,22 @@
|
||||
use anyhow::Result;
|
||||
use log::{info, LevelFilter};
|
||||
|
||||
mod server;
|
||||
mod auth;
|
||||
mod shell_handler;
|
||||
mod sftp_handler;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
// 初始化日志
|
||||
env_logger::Builder::from_default_env()
|
||||
.filter_level(LevelFilter::Info)
|
||||
.init();
|
||||
|
||||
info!("🚀 MarkBase SFTP POC Server starting...");
|
||||
|
||||
// 启动SSH服务器(支持shell + SFTP)
|
||||
server::run_server().await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
78
markbase-sftp-poc/src/server.rs
Normal file
78
markbase-sftp-poc/src/server.rs
Normal file
@@ -0,0 +1,78 @@
|
||||
use anyhow::Result;
|
||||
use russh::server::{Server, Config};
|
||||
use russh::*;
|
||||
use russh_sftp::server::SftpServer;
|
||||
use std::sync::Arc;
|
||||
use tokio::net::TcpListener;
|
||||
use log::{info, error};
|
||||
|
||||
use crate::auth::MockAuthDb;
|
||||
use crate::shell_handler::ShellSession;
|
||||
|
||||
// MarkBase SSH服务器
|
||||
pub struct MarkBaseSshServer {
|
||||
auth_db: Arc<MockAuthDb>,
|
||||
config: Arc<Config>,
|
||||
}
|
||||
|
||||
impl MarkBaseSshServer {
|
||||
pub fn new(auth_db: Arc<MockAuthDb>) -> Self {
|
||||
// 创建服务器配置
|
||||
let config = Config {
|
||||
// 简化配置,实际使用时需要生成host key
|
||||
keys: vec![],
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
Self {
|
||||
auth_db,
|
||||
config: Arc::new(config),
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn run_server() -> Result<()> {
|
||||
info!("Creating SSH server...");
|
||||
|
||||
// 1. 创建认证数据库
|
||||
let auth_db = Arc::new(MockAuthDb::new());
|
||||
|
||||
// 2. 创建服务器实例
|
||||
let server = MarkBaseSshServer::new(auth_db);
|
||||
|
||||
// 3. 监听2022端口(避免与SFTPGo冲突)
|
||||
let listener = TcpListener::bind("0.0.0.0:2022").await?;
|
||||
info!("SSH server listening on port 2022");
|
||||
|
||||
// 4. 接受连接
|
||||
loop {
|
||||
let (socket, addr) = listener.accept().await?;
|
||||
info!("New connection from {}", addr);
|
||||
|
||||
// 5. 处理连接(spawn异步任务)
|
||||
tokio::spawn(async move {
|
||||
if let Err(e) = server.handle_connection(socket).await {
|
||||
error!("Connection error: {}", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async fn handle_connection(&self, socket: tokio::net::TcpStream) -> Result<()> {
|
||||
// SSH握手和处理
|
||||
// 实际实现需要调用russh server API
|
||||
// POC阶段简化,Phase 2完整实现
|
||||
|
||||
info!("Connection handled (POC simplified)");
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
// russh Server trait实现
|
||||
impl Server for MarkBaseSshServer {
|
||||
type Handler = ShellSession;
|
||||
|
||||
fn new_client(&mut self, _peer_addr: Option<std::net::SocketAddr>) -> Self::Handler {
|
||||
// 创建客户端handler(shell + SFTP支持)
|
||||
ShellSession::new(self.auth_db.clone(), "unknown".to_string())
|
||||
}
|
||||
}
|
||||
10
markbase-sftp-poc/src/sftp_handler.rs
Normal file
10
markbase-sftp-poc/src/sftp_handler.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
use anyhow::Result;
|
||||
use russh_sftp::server::SftpHandler;
|
||||
use log::info;
|
||||
|
||||
// SFTP处理器(简化版本,POC只实现基本操作)
|
||||
pub struct MockSftpHandler;
|
||||
|
||||
impl SftpHandler for MockSftpHandler {
|
||||
// POC阶段只实现基本操作,后续Phase 2完整实现
|
||||
}
|
||||
143
markbase-sftp-poc/src/shell_handler.rs
Normal file
143
markbase-sftp-poc/src/shell_handler.rs
Normal file
@@ -0,0 +1,143 @@
|
||||
use anyhow::{Error, Result};
|
||||
use russh::server::{Auth, Session, Sig};
|
||||
use russh::{ChannelId, SigId};
|
||||
use tokio::process::Command;
|
||||
use std::sync::Arc;
|
||||
use log::{info, warn, error};
|
||||
|
||||
use crate::auth::MockAuthDb;
|
||||
|
||||
pub struct ShellSession {
|
||||
auth_db: Arc<MockAuthDb>,
|
||||
user: String,
|
||||
}
|
||||
|
||||
impl ShellSession {
|
||||
pub fn new(auth_db: Arc<MockAuthDb>, user: String) -> Self {
|
||||
Self { auth_db, user }
|
||||
}
|
||||
|
||||
// 关键方法:exec_request(rsync使用)
|
||||
async fn exec_request(&mut self, channel: ChannelId, command: &str) -> Result<()> {
|
||||
info!("Shell exec_request: user={}, command={}", self.user, command);
|
||||
|
||||
// 1. 安全检查:只允许特定命令
|
||||
if !self.is_command_allowed(command) {
|
||||
warn!("Command not allowed: {}", command);
|
||||
return Err(Error::msg("Command not allowed"));
|
||||
}
|
||||
|
||||
// 2. rsync命令特殊处理
|
||||
if command.starts_with("rsync --server") {
|
||||
return self.handle_rsync(channel, command).await;
|
||||
}
|
||||
|
||||
// 3. 其他允许的shell命令执行
|
||||
let parts: Vec<&str> = command.split_whitespace().collect();
|
||||
if parts.is_empty() {
|
||||
return Err(Error::msg("Empty command"));
|
||||
}
|
||||
|
||||
let cmd = Command::new(parts[0])
|
||||
.args(&parts[1..])
|
||||
.stdin(std::process::Stdio::piped())
|
||||
.stdout(std::process::Stdio::piped())
|
||||
.stderr(std::process::Stdio::piped())
|
||||
.spawn()?;
|
||||
|
||||
// 4. 等待命令执行完成
|
||||
let status = cmd.wait().await?;
|
||||
info!("Command exit status: {}", status);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// 安全检查:命令白名单
|
||||
fn is_command_allowed(&self, command: &str) -> bool {
|
||||
// 允许的命令列表
|
||||
let allowed_commands = [
|
||||
"ls", "pwd", "cd", "echo", "cat", "rsync",
|
||||
];
|
||||
|
||||
let cmd_name = command.split_whitespace().next().unwrap_or("");
|
||||
allowed_commands.contains(&cmd_name)
|
||||
}
|
||||
|
||||
// rsync命令处理(核心功能)
|
||||
async fn handle_rsync(&mut self, channel: ChannelId, command: &str) -> Result<()> {
|
||||
info!("Handling rsync command: {}", command);
|
||||
|
||||
// 1. 解析rsync命令
|
||||
let parts: Vec<&str> = command.split_whitespace().collect();
|
||||
|
||||
// 2. 提取路径参数(最后一个参数)
|
||||
let path = parts.last().unwrap_or(".");
|
||||
|
||||
// 3. 用户目录限制
|
||||
let user_dir = self.auth_db.get_user_dir(&self.user);
|
||||
|
||||
// 4. 路径安全检查
|
||||
if path.starts_with("/") && !path.starts_with(&user_dir) {
|
||||
warn!("Path access denied: user={}, path={}", self.user, path);
|
||||
return Err(Error::msg("Path access denied"));
|
||||
}
|
||||
|
||||
// 5. 执行rsync命令
|
||||
let mut cmd = Command::new("rsync");
|
||||
cmd.args(&parts[1..parts.len()-1]) // rsync参数
|
||||
.arg(&user_dir); // 替换为用户目录
|
||||
|
||||
let child = cmd.spawn()?;
|
||||
let status = child.wait().await?;
|
||||
|
||||
info!("rsync exit status: {}", status);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
// russh server Session实现
|
||||
impl Session for ShellSession {
|
||||
// shell子系统(交互式shell)
|
||||
async fn shell_request(&mut self, channel: ChannelId) -> Result<()> {
|
||||
info!("Shell request received for user: {}", self.user);
|
||||
|
||||
// 创建交互式shell进程
|
||||
let shell = Command::new("/bin/bash")
|
||||
.stdin(std::process::Stdio::piped())
|
||||
.stdout(std::process::Stdio::piped())
|
||||
.stderr(std::process::Stdio::piped())
|
||||
.spawn()?;
|
||||
|
||||
shell.wait().await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// exec子系统(执行命令,rsync使用)
|
||||
async fn exec_request(&mut self, channel: ChannelId, command: &str) -> Result<()> {
|
||||
self.exec_request(channel, command).await
|
||||
}
|
||||
|
||||
// 信号处理
|
||||
async fn signal(&mut self, channel: ChannelId, signal: Sig) -> Result<()> {
|
||||
info!("Signal received: {:?}", signal);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
// russh server Auth实现
|
||||
impl Auth for ShellSession {
|
||||
// 密码认证
|
||||
async fn auth_password(&mut self, user: &str, password: &str) -> russh::server::AuthResult {
|
||||
info!("Auth password attempt: user={}", user);
|
||||
|
||||
if self.auth_db.verify_password(user, password).unwrap_or(false) {
|
||||
info!("Auth success: user={}", user);
|
||||
russh::server::AuthResult::Accept
|
||||
} else {
|
||||
warn!("Auth failed: user={}", user);
|
||||
russh::server::AuthResult::Reject
|
||||
}
|
||||
}
|
||||
}
|
||||
1
markbase-sftp-poc/target/.rustc_info.json
Normal file
1
markbase-sftp-poc/target/.rustc_info.json
Normal file
@@ -0,0 +1 @@
|
||||
{"rustc_fingerprint":14863386792066319258,"outputs":{"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/accusys/.rustup/toolchains/stable-aarch64-apple-darwin\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"aarch64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"aes\"\ntarget_feature=\"crc\"\ntarget_feature=\"dit\"\ntarget_feature=\"dotprod\"\ntarget_feature=\"dpb\"\ntarget_feature=\"dpb2\"\ntarget_feature=\"fcma\"\ntarget_feature=\"fhm\"\ntarget_feature=\"flagm\"\ntarget_feature=\"fp16\"\ntarget_feature=\"frintts\"\ntarget_feature=\"jsconv\"\ntarget_feature=\"lor\"\ntarget_feature=\"lse\"\ntarget_feature=\"neon\"\ntarget_feature=\"paca\"\ntarget_feature=\"pacg\"\ntarget_feature=\"pan\"\ntarget_feature=\"pmuv3\"\ntarget_feature=\"ras\"\ntarget_feature=\"rcpc\"\ntarget_feature=\"rcpc2\"\ntarget_feature=\"rdm\"\ntarget_feature=\"sb\"\ntarget_feature=\"sha2\"\ntarget_feature=\"sha3\"\ntarget_feature=\"ssbs\"\ntarget_feature=\"vh\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.95.0 (59807616e 2026-04-14)\nbinary: rustc\ncommit-hash: 59807616e1fa2540724bfbac14d7976d7e4a3860\ncommit-date: 2026-04-14\nhost: aarch64-apple-darwin\nrelease: 1.95.0\nLLVM version: 22.1.2\n","stderr":""}},"successes":{}}
|
||||
3
markbase-sftp-poc/target/CACHEDIR.TAG
Normal file
3
markbase-sftp-poc/target/CACHEDIR.TAG
Normal file
@@ -0,0 +1,3 @@
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by cargo.
|
||||
# For information about cache directory tags see https://bford.info/cachedir/
|
||||
0
markbase-sftp-poc/target/debug/.cargo-lock
Normal file
0
markbase-sftp-poc/target/debug/.cargo-lock
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
c025a17f9e7b1cd5
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[]","declared_features":"[\"core\", \"default\", \"rustc-dep-of-std\", \"std\"]","target":6569825234462323107,"profile":8276155916380437441,"path":15149082351976033191,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/adler2-553450e4e87a4ba3/dep-lib-adler2","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
01bcf05765d96ca1
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[]","declared_features":"[\"alloc\", \"arrayvec\", \"blobby\", \"bytes\", \"default\", \"dev\", \"getrandom\", \"rand_core\"]","target":6981280515311811772,"profile":8276155916380437441,"path":1935952218460787360,"deps":[[6101016705997077623,"common",false,4926097424917122193],[16354886752318960942,"inout",false,14865410946108881910]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aead-c32aa52746d4bc7a/dep-lib-aead","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
4f1f4e6892ce536e
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"zeroize\"]","declared_features":"[\"hazmat\", \"zeroize\"]","target":5459170400304923493,"profile":10077673839301227645,"path":14985265178238667016,"deps":[[2288974999941787579,"cipher",false,10261545985533414713],[5188881107892628925,"cpubits",false,3142373751393977803],[12865141776541797048,"zeroize",false,5962372450467381381],[16378603989457970572,"cpufeatures",false,8536132442148017962]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aes-c084980af35d0ca5/dep-lib-aes","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
1d1ed6af0bd5647a
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"aes\", \"zeroize\"]","declared_features":"[\"aes\", \"alloc\", \"arrayvec\", \"bytes\", \"default\", \"getrandom\", \"hazmat\", \"rand_core\", \"zeroize\"]","target":6236693753682709139,"profile":8276155916380437441,"path":7559040117629751852,"deps":[[2288974999941787579,"cipher",false,10261545985533414713],[2521235026910468869,"aes",false,7949924895449554767],[2614088067171064252,"ctr",false,17395765039244440177],[3385210585109517016,"ghash",false,283128027882879615],[12865141776541797048,"zeroize",false,5962372450467381381],[17003143334332120809,"subtle",false,2526683259001610679],[17147282198804793305,"aead",false,11631910966881467393]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aes-gcm-689d2ab1f561b786/dep-lib-aes_gcm","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
22def29278d13d1a
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[]","declared_features":"[\"atomic-polyfill\", \"compile-time-rng\", \"const-random\", \"default\", \"getrandom\", \"nightly-arm-aes\", \"no-rng\", \"runtime-rng\", \"serde\", \"std\"]","target":17883862002600103897,"profile":3033921117576893,"path":6439213914983663315,"deps":[[5398981501050481332,"version_check",false,9583281529569366680]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/ahash-b58ed7985fa25d96/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
00f120ea850a25d7
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[966925859616469517,"build_script_build",false,1890897734357147170]],"local":[{"RerunIfChanged":{"output":"debug/build/ahash-d5d2748bcf948acb/output","paths":["build.rs"]}}],"rustflags":[],"config":0,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
d19ee6bc51bee4c8
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[]","declared_features":"[\"atomic-polyfill\", \"compile-time-rng\", \"const-random\", \"default\", \"getrandom\", \"nightly-arm-aes\", \"no-rng\", \"runtime-rng\", \"serde\", \"std\"]","target":8470944000320059508,"profile":8276155916380437441,"path":1081476511437088200,"deps":[[966925859616469517,"build_script_build",false,15502808862567756032],[5855319743879205494,"once_cell",false,9114068518568479544],[7389615562241813548,"zerocopy",false,13642067811823511178],[7667230146095136825,"cfg_if",false,2765267642471535251]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/ahash-ff2f37e02875b6fd/dep-lib-ahash","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
0e2be368c030dd3e
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"perf-literal\", \"std\"]","declared_features":"[\"default\", \"logging\", \"perf-literal\", \"std\"]","target":7534583537114156500,"profile":8276155916380437441,"path":2498799609881310857,"deps":[[1878358664874549836,"memchr",false,18023433521374908803]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aho-corasick-72efee5240f3fda8/dep-lib-aho_corasick","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
0f413ae7265f56d6
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"auto\", \"wincon\"]","declared_features":"[\"auto\", \"default\", \"test\", \"wincon\"]","target":11278316191512382530,"profile":790325420539221616,"path":14237504360179493621,"deps":[[2608044744973004659,"anstyle_parse",false,2154366831545217262],[5652275617566266604,"anstyle_query",false,17143893402103126010],[7098682853475662231,"anstyle",false,13665136591499059267],[7711617929439759244,"colorchoice",false,9550937696018591860],[7727459912076845739,"is_terminal_polyfill",false,5927032144061118771],[17716308468579268865,"utf8parse",false,5035348475422024307]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstream-c321dc44540d4ff2/dep-lib-anstream","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
43607e375451a4bd
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"default\", \"std\"]","declared_features":"[\"default\", \"std\"]","target":6165884447290141869,"profile":790325420539221616,"path":1622006416877328561,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-b8bed29a0d9dd511/dep-lib-anstyle","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
eef0220e38d9e51d
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"default\", \"utf8\"]","declared_features":"[\"core\", \"default\", \"utf8\"]","target":10225663410500332907,"profile":790325420539221616,"path":13053215332907560763,"deps":[[17716308468579268865,"utf8parse",false,5035348475422024307]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-parse-853571d14a5c181c/dep-lib-anstyle_parse","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
fa17858b3758ebed
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[]","declared_features":"[]","target":10705714425685373190,"profile":3560010784079834850,"path":4316627989718112974,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-query-d797dcf67f058f8e/dep-lib-anstyle_query","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
2f33e007bfb91853
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"default\", \"std\"]","declared_features":"[\"backtrace\", \"default\", \"std\"]","target":5408242616063297496,"profile":3033921117576893,"path":15975461479635710502,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anyhow-1973ce3adc01d0da/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
0fe993ae6603d23e
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"default\", \"std\"]","declared_features":"[\"backtrace\", \"default\", \"std\"]","target":1563897884725121975,"profile":8276155916380437441,"path":8136069237744135612,"deps":[[12478428894219133322,"build_script_build",false,3082079114375166820]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anyhow-4bab4d01512a9227/dep-lib-anyhow","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
647bfbfd9fbec52a
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[12478428894219133322,"build_script_build",false,5987739934711100207]],"local":[{"RerunIfChanged":{"output":"debug/build/anyhow-70cd94bdc0ada339/output","paths":["src/nightly.rs"]}},{"RerunIfEnvChanged":{"var":"RUSTC_BOOTSTRAP","val":null}}],"rustflags":[],"config":0,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
8c07d9bdbad7a4d6
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"alloc\"]","declared_features":"[\"alloc\", \"default\", \"getrandom\", \"kdf\", \"parallel\", \"password-hash\", \"rand_core\", \"zeroize\"]","target":3068779195362107554,"profile":834304019374322081,"path":3916712729359494256,"deps":[[5799347126265914943,"base64ct",false,4561947274419089634],[8918189419445535102,"blake2",false,8223429615814189301]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/argon2-52513085fa886e56/dep-lib-argon2","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
dde89834e92054a2
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[]","declared_features":"[]","target":6962977057026645649,"profile":3033921117576893,"path":3241725489583692330,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/autocfg-836b8e3c03ff3cb2/dep-lib-autocfg","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
8f516527aee72a12
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"alloc\", \"aws-lc-sys\", \"default\", \"ring-io\", \"ring-sig-verify\"]","declared_features":"[\"alloc\", \"asan\", \"aws-lc-sys\", \"bindgen\", \"default\", \"dev-tests-only\", \"fips\", \"legacy-des\", \"non-fips\", \"prebuilt-nasm\", \"ring-io\", \"ring-sig-verify\", \"test_logging\", \"unstable\"]","target":18300691495230371829,"profile":8276155916380437441,"path":9387269368027568811,"deps":[[2317793503723491507,"untrusted",false,6669382756954579321],[7886471800061524671,"build_script_build",false,11285547816819035862],[12857944478329125325,"aws_lc_sys",false,2223726533337774314],[12865141776541797048,"zeroize",false,5962372450467381381]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aws-lc-rs-4e49c6d833812c85/dep-lib-aws_lc_rs","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
d60e2f2df2519e9c
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[7886471800061524671,"build_script_build",false,12884825944052417345],[12857944478329125325,"build_script_main",false,17034751450369061235]],"local":[{"RerunIfEnvChanged":{"var":"AWS_LC_RS_DISABLE_SLOW_TESTS","val":null}},{"RerunIfEnvChanged":{"var":"AWS_LC_RS_DEV_TESTS_ONLY","val":null}}],"rustflags":[],"config":0,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
4143fbebed18d0b2
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"alloc\", \"aws-lc-sys\", \"default\", \"ring-io\", \"ring-sig-verify\"]","declared_features":"[\"alloc\", \"asan\", \"aws-lc-sys\", \"bindgen\", \"default\", \"dev-tests-only\", \"fips\", \"legacy-des\", \"non-fips\", \"prebuilt-nasm\", \"ring-io\", \"ring-sig-verify\", \"test_logging\", \"unstable\"]","target":5408242616063297496,"profile":3033921117576893,"path":5187408754690908050,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aws-lc-rs-b3a9145c95548fc1/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
737151ac309867ec
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
36efb3d166b932de
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[]","declared_features":"[\"all-bindings\", \"asan\", \"bindgen\", \"default\", \"disable-prebuilt-nasm\", \"fips\", \"prebuilt-nasm\", \"ssl\"]","target":10419965325687163515,"profile":3033921117576893,"path":14156631067830895806,"deps":[[4151278100815730087,"cc",false,3114240066273833842],[6778462791484060249,"cmake",false,7673354247918902048],[11989259058781683633,"dunce",false,13708074371239497381],[13866570822711233627,"fs_extra",false,15297132985358323770]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aws-lc-sys-5cbd8b3d9797fada/dep-build-script-build-script-main","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
ea7835118043dc1e
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[]","declared_features":"[\"all-bindings\", \"asan\", \"bindgen\", \"default\", \"disable-prebuilt-nasm\", \"fips\", \"prebuilt-nasm\", \"ssl\"]","target":9251307146641742440,"profile":8276155916380437441,"path":6188831467363813755,"deps":[[12857944478329125325,"build_script_main",false,17034751450369061235]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aws-lc-sys-7a0c9c0528f778c1/dep-lib-aws_lc_sys","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
92aa1210bd0c0185
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":2179919275645516985,"features":"[\"alloc\"]","declared_features":"[\"alloc\"]","target":14978767957795436750,"profile":8276155916380437441,"path":2994852085829867426,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/base16ct-fff26558302870c4/dep-lib-base16ct","checksum":false}}],"rustflags":[],"config":8247474407144887393,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user