openssh-4.7p1 源码 分析

#2013_09_29   星期日   add by greshem
iso_copy_out_to_desktop.pl "sdb1:\sdb4\f8_srpm_done\iso_3.iso\\o\\op\\openssh-4.7p1-2.fc8.src.chm"
openssh-4.7p1-2.fc8.src

openssh-4.7p1-noacss/sshd.c main(int ac, char **av)
main             1227
    initialize_server_options(&options);
    SSLeay_add_all_algorithms();


    key_load_private(options.host_key_files[i], "", NULL);


    arc4random_stir();

    #inet
    server_accept_inetd(&sock_in, &sock_out);

    #stand alone
    server_listen();
    server_accept_loop(&sock_in, &sock_out,
        #fork 之后的 客户端的处理 的进程
        packet_set_connection(sock_in, sock_out);
        packet_set_server();
        get_canonical_hostname(0);

          sshd_exchange_identification(sock_in, sock_out);

        packet_set_nonblocking();

        do_ssh2_kex();
        do_authentication2(authctxt);
        do_ssh1_kex();
        do_authentication(authctxt);
    
        do_authenticated(authctxt);



do_authentication2(Authctxt *authctxt)
    dispatch_init(&dispatch_protocol_error);
    dispatch_set(SSH2_MSG_SERVICE_REQUEST, &input_service_request);
    dispatch_run(DISPATCH_BLOCK, &authctxt->success, authctxt);
        packet_read_seqnr(&seqnr);
        packet_read_poll_seqnr(&seqnr);
        (*dispatch[type])(type, seqnr, ctxt);



#dispatch_set      分发函数的注册  openssh-4.7p1-noacss/serverloop.c
    SSH2_MSG_CHANNEL_CLOSE                                     &channel_input_oclose);
    SSH2_MSG_CHANNEL_DATA                                     &channel_input_data);
    SSH2_MSG_CHANNEL_EOF                                     &channel_input_ieof);
    SSH2_MSG_CHANNEL_EXTENDED_DATA                             &channel_input_extended_data);
    SSH2_MSG_CHANNEL_OPEN                                     &server_input_channel_open);
    SSH2_MSG_CHANNEL_OPEN_CONFIRMATION                         &channel_input_open_confirmation);
    SSH2_MSG_CHANNEL_OPEN_FAILURE                             &channel_input_open_failure);
    SSH2_MSG_CHANNEL_REQUEST                                 &server_input_channel_req);
    SSH2_MSG_CHANNEL_WINDOW_ADJUST                             &channel_input_window_adjust);
    SSH2_MSG_GLOBAL_REQUEST                                     &server_input_global_request);
    SSH2_MSG_CHANNEL_FAILURE                                 &server_input_keep_alive);
    SSH2_MSG_REQUEST_SUCCESS                                &server_input_keep_alive);
    SSH2_MSG_REQUEST_FAILURE                                &server_input_keep_alive);
    SSH2_MSG_KEXINIT                                         &kex_input_kexinit);
    SSH_CMSG_EOF                                             &server_input_eof);
    SSH_CMSG_STDIN_DATA                                         &server_input_stdin_data);
    SSH_CMSG_WINDOW_SIZE                                    &server_input_window_size);
    SSH_MSG_CHANNEL_CLOSE                                    &channel_input_close);
    SSH_MSG_CHANNEL_CLOSE_CONFIRMATION                        &channel_input_close_confirmation);
    SSH_MSG_CHANNEL_DATA                                    &channel_input_data);
    SSH_MSG_CHANNEL_OPEN_CONFIRMATION                        &channel_input_open_confirmation);
    SSH_MSG_CHANNEL_OPEN_FAILURE                            &channel_input_open_failure);
    SSH_MSG_PORT_OPEN                                         &channel_input_port_open);
    SSH_MSG_CHANNEL_CLOSE                                    &channel_input_ieof);
    SSH_MSG_CHANNEL_CLOSE_CONFIRMATION                        &channel_input_oclose);




        

    

你可能感兴趣的:(openssh-4.7p1 源码 分析)