Samba Verbindung in Rust

Das Programm verwendet die Rust-Bibliothek pavao, um eine Verbindung zu einem Samba-Dateifreigabe-Server herzustellen. Es testet die Verbindung, indem es versucht, das Wurzelverzeichnis auf dem Server aufzulisten und gibt eine Meldung aus, wenn die Verbindung erfolgreich ist. Dann öffnet es eine Datei auf dem Server und zeigt ihren Inhalt auf der Konsole an. Bei Fehlern wird eine entsprechende Fehlermeldung ausgegeben, und schließlich wird die Verbindung getrennt.

Cargo.toml

[package]
name = "samba-pavao"
version = "0.1.0"
edition = "2021"

[dependencies]
pavao = "0.2.3"

main.rs

// main.rs

use pavao::{SmbClient, SmbCredentials, SmbOpenOptions};
use std::io::Read;

fn main() {
    // Samba-Verbindungsinformationen
    let server = "smb://samba.server.lan";
    let share = "Daten";
    let username = "user";
    let password = "GEHEIM";
    let workgroup = "ARBEITSGRUPPE";

    // Verbindung zum Samba-Server herstellen
    let client = SmbClient::new(
        SmbCredentials::default()
            .server(server)
            .share(share)
            .password(password)
            .username(username)
            .workgroup(workgroup),
        Default::default(),
    )
    .unwrap();

    // Versuchen Sie, das Wurzelverzeichnis aufzulisten, um die Verbindung zu testen
    if let Ok(_root_dir) = client.list_dir("/") {
        println!("Verbindung zu Samba erfolgreich hergestellt.");

        // Datei öffnen und lesen
        if let Ok(mut file) = client.open_with("/ordner/test.txt", SmbOpenOptions::default().read(true)) {
            let mut buffer = Vec::new();
            file.read_to_end(&mut buffer).expect("Failed to read file");

            // Drucken Sie den Inhalt der Datei
            println!("{}", String::from_utf8_lossy(&buffer));

            // Verbindung trennen
            drop(file);
        } else {
            eprintln!("Fehler beim Öffnen der Datei.");
        }
    } else {
        eprintln!("Verbindung zu Samba fehlgeschlagen.");
    }

    // Verbindung trennen
    drop(client);
}