mirror of
				https://github.com/nitnelave/lldap.git
				synced 2023-04-12 14:25:13 +00:00 
			
		
		
		
	Remove outdated examples
This commit is contained in:
		
							parent
							
								
									e90ef2737c
								
							
						
					
					
						commit
						04dafe1f4a
					
				@ -1,150 +0,0 @@
 | 
			
		||||
use tokio::net::{TcpListener, TcpStream};
 | 
			
		||||
// use tokio::stream::StreamExt;
 | 
			
		||||
use futures::SinkExt;
 | 
			
		||||
use futures::StreamExt;
 | 
			
		||||
use std::convert::TryFrom;
 | 
			
		||||
use std::net;
 | 
			
		||||
use std::str::FromStr;
 | 
			
		||||
use tokio_util::codec::{FramedRead, FramedWrite};
 | 
			
		||||
 | 
			
		||||
use ldap3_server::simple::*;
 | 
			
		||||
use ldap3_server::LdapCodec;
 | 
			
		||||
 | 
			
		||||
pub struct LdapSession {
 | 
			
		||||
    dn: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl LdapSession {
 | 
			
		||||
    pub fn do_bind(&mut self, sbr: &SimpleBindRequest) -> LdapMsg {
 | 
			
		||||
        if sbr.dn == "cn=Directory Manager" && sbr.pw == "password" {
 | 
			
		||||
            self.dn = sbr.dn.to_string();
 | 
			
		||||
            sbr.gen_success()
 | 
			
		||||
        } else if sbr.dn == "" && sbr.pw == "" {
 | 
			
		||||
            self.dn = "Anonymous".to_string();
 | 
			
		||||
            sbr.gen_success()
 | 
			
		||||
        } else {
 | 
			
		||||
            sbr.gen_invalid_cred()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn do_search(&mut self, lsr: &SearchRequest) -> Vec<LdapMsg> {
 | 
			
		||||
        vec![
 | 
			
		||||
            lsr.gen_result_entry(LdapSearchResultEntry {
 | 
			
		||||
                dn: "cn=hello,dc=example,dc=com".to_string(),
 | 
			
		||||
                attributes: vec![
 | 
			
		||||
                    LdapPartialAttribute {
 | 
			
		||||
                        atype: "objectClass".to_string(),
 | 
			
		||||
                        vals: vec!["cursed".to_string()],
 | 
			
		||||
                    },
 | 
			
		||||
                    LdapPartialAttribute {
 | 
			
		||||
                        atype: "cn".to_string(),
 | 
			
		||||
                        vals: vec!["hello".to_string()],
 | 
			
		||||
                    },
 | 
			
		||||
                ],
 | 
			
		||||
            }),
 | 
			
		||||
            lsr.gen_result_entry(LdapSearchResultEntry {
 | 
			
		||||
                dn: "cn=world,dc=example,dc=com".to_string(),
 | 
			
		||||
                attributes: vec![
 | 
			
		||||
                    LdapPartialAttribute {
 | 
			
		||||
                        atype: "objectClass".to_string(),
 | 
			
		||||
                        vals: vec!["cursed".to_string()],
 | 
			
		||||
                    },
 | 
			
		||||
                    LdapPartialAttribute {
 | 
			
		||||
                        atype: "cn".to_string(),
 | 
			
		||||
                        vals: vec!["world".to_string()],
 | 
			
		||||
                    },
 | 
			
		||||
                ],
 | 
			
		||||
            }),
 | 
			
		||||
            lsr.gen_success(),
 | 
			
		||||
        ]
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn do_whoami(&mut self, wr: &WhoamiRequest) -> LdapMsg {
 | 
			
		||||
        wr.gen_success(format!("dn: {}", self.dn).as_str())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async fn handle_client(socket: TcpStream, _paddr: net::SocketAddr) {
 | 
			
		||||
    // Configure the codec etc.
 | 
			
		||||
    let (r, w) = tokio::io::split(socket);
 | 
			
		||||
    let mut reqs = FramedRead::new(r, LdapCodec);
 | 
			
		||||
    let mut resp = FramedWrite::new(w, LdapCodec);
 | 
			
		||||
 | 
			
		||||
    let mut session = LdapSession {
 | 
			
		||||
        dn: "Anonymous".to_string(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    while let Some(msg) = reqs.next().await {
 | 
			
		||||
        let server_op = match msg
 | 
			
		||||
            .map_err(|_e| ())
 | 
			
		||||
            .and_then(|msg| ServerOps::try_from(msg))
 | 
			
		||||
        {
 | 
			
		||||
            Ok(v) => v,
 | 
			
		||||
            Err(_) => {
 | 
			
		||||
                let _err = resp
 | 
			
		||||
                    .send(DisconnectionNotice::gen(
 | 
			
		||||
                        LdapResultCode::Other,
 | 
			
		||||
                        "Internal Server Error",
 | 
			
		||||
                    ))
 | 
			
		||||
                    .await;
 | 
			
		||||
                let _err = resp.flush().await;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        let result = match server_op {
 | 
			
		||||
            ServerOps::SimpleBind(sbr) => vec![session.do_bind(&sbr)],
 | 
			
		||||
            ServerOps::Search(sr) => session.do_search(&sr),
 | 
			
		||||
            ServerOps::Unbind(_) => {
 | 
			
		||||
                // No need to notify on unbind (per rfc4511)
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            ServerOps::Whoami(wr) => vec![session.do_whoami(&wr)],
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        for rmsg in result.into_iter() {
 | 
			
		||||
            if let Err(_) = resp.send(rmsg).await {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if let Err(_) = resp.flush().await {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    // Client disconnected
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async fn acceptor(listener: Box<TcpListener>) {
 | 
			
		||||
    println!("start function");
 | 
			
		||||
    loop {
 | 
			
		||||
        println!("loop");
 | 
			
		||||
        match listener.accept().await {
 | 
			
		||||
            Ok((socket, paddr)) => {
 | 
			
		||||
                println!("OK listener");
 | 
			
		||||
                tokio::spawn(handle_client(socket, paddr));
 | 
			
		||||
            }
 | 
			
		||||
            Err(_e) => {
 | 
			
		||||
                println!("Err listener");
 | 
			
		||||
                //pass
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[tokio::main]
 | 
			
		||||
async fn main() -> () {
 | 
			
		||||
    let addr = net::SocketAddr::from_str("0.0.0.0:12345").unwrap();
 | 
			
		||||
    let listener = Box::new(TcpListener::bind(&addr).await.unwrap());
 | 
			
		||||
 | 
			
		||||
    // Initiate the acceptor task.
 | 
			
		||||
    let _handle = tokio::spawn(async move {
 | 
			
		||||
        println!("inside tokio");
 | 
			
		||||
        acceptor(listener).await
 | 
			
		||||
    })
 | 
			
		||||
    .await
 | 
			
		||||
    .expect("tokio should start");
 | 
			
		||||
 | 
			
		||||
    println!("started ldap://127.0.0.1:12345 ...");
 | 
			
		||||
    tokio::signal::ctrl_c().await.unwrap();
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user