diff --git a/lib/platform_compat.h b/lib/platform_compat.h index 2a9664f8..39a8e0c7 100644 --- a/lib/platform_compat.h +++ b/lib/platform_compat.h @@ -192,6 +192,15 @@ int get_interface_ipv6_by_index(uint32_t netif_index, int temporary, uint8_t* ad uint32_t get_default_route_netif_index(int family); +// Cross-platform mkdir +#ifdef _WIN32 + #include + #define utun_mkdir(path, mode) _mkdir(path) +#else + #include + #define utun_mkdir(path, mode) mkdir(path, mode) +#endif + #ifdef __cplusplus } #endif diff --git a/src/utun_instance.c b/src/utun_instance.c index ead3e984..65f14d8e 100644 --- a/src/utun_instance.c +++ b/src/utun_instance.c @@ -30,6 +30,7 @@ #include "../lib/platform_compat.h" #include "../lib/mem.h" #include "../lib/ll_queue.h" +#include @@ -92,6 +93,11 @@ static int instance_init_common(struct UTUN_INSTANCE* instance, struct UASYNC* u DEBUG_ERROR(DEBUG_CATEGORY_CRYPTO, "Failed to derive Ed25519 pubkey"); return -1; } + { + uint8_t ed_priv_hash[SHA512_DIGEST_LENGTH]; + SHA512(instance->my_keys.private_key, SC_PRIVKEY_SIZE, ed_priv_hash); + memcpy(instance->my_ed25519_privkey, ed_priv_hash, SC_PRIVKEY_SIZE); + } DEBUG_INFO(DEBUG_CATEGORY_CRYPTO, "Ed25519 pubkey derived successfully"); // Initialize networks queue (indexed by 56-bit network id) @@ -287,7 +293,7 @@ struct UTUN_INSTANCE* utun_instance_create(struct UASYNC* ua, const char *config } int remaining = (int)(sizeof(instance->stats_dir) - dir_len - 8); if (remaining > 0) snprintf(instance->stats_dir + dir_len, remaining, "/stats"); - mkdir(instance->stats_dir, 0755); + utun_mkdir(instance->stats_dir, 0755); DEBUG_INFO(DEBUG_CATEGORY_GENERAL, "Metrics stats dir: %s", instance->stats_dir); } diff --git a/tests/test_db_sync.c b/tests/test_db_sync.c index 607c84e8..61bf2591 100644 --- a/tests/test_db_sync.c +++ b/tests/test_db_sync.c @@ -67,10 +67,10 @@ static int create_temp_configs(void) { // Create LMDB directories (parent first, then child) char db_path[320]; - snprintf(db_path, sizeof(db_path), "%s/db_a", temp_dir); mkdir(db_path, 0755); - snprintf(db_path, sizeof(db_path), "%s/db_a/sync", temp_dir); mkdir(db_path, 0755); - snprintf(db_path, sizeof(db_path), "%s/db_b", temp_dir); mkdir(db_path, 0755); - snprintf(db_path, sizeof(db_path), "%s/db_b/sync", temp_dir); mkdir(db_path, 0755); + snprintf(db_path, sizeof(db_path), "%s/db_a", temp_dir); utun_mkdir(db_path, 0755); + snprintf(db_path, sizeof(db_path), "%s/db_a/sync", temp_dir); utun_mkdir(db_path, 0755); + snprintf(db_path, sizeof(db_path), "%s/db_b", temp_dir); utun_mkdir(db_path, 0755); + snprintf(db_path, sizeof(db_path), "%s/db_b/sync", temp_dir); utun_mkdir(db_path, 0755); if (write_file(config_a, "[global]\n"