コード例 #1
0
ファイル: app2.cpp プロジェクト: hcmoder/gatePrj
void exec(PRO* pro)
{
	int ret;
		if(pro->flag == 1)
		{
			switch(pro->cmd)
			{
				case '0':
					ret = connect(pro);
					break;
				case '1':
					ret = warning(pro);
					break;
				case '2':
					ret = jdq1(pro);
					break;
				case '3':
					ret = jdq2(pro);
					break;				
				case '4':
					ret = setTime(pro);
					break;
                case '6':
                    ret = set_host_left_right(pro);
                    break;
                case '7':
                    ret = set_disp_mode(pro);
                    break;
                case '8':
                    ret = set_num_enter_mode(pro);
                    break;
                case '9':
                    ret = set_num_out_mode(pro);
                    break;
                case 'A':
                    ret = set_local_ip(pro);
                    break;
				default :
					ret = 9;
					break;
			}
			ack(ret);
			ackBuf[4] = pro->cmd;
			msg.len =sizeof(ackBuf);
			msg.buf = ackBuf;

			udp.send(&msg);
            
			pro->flag = 0;
            pro->cmd = 0;
            pro->type = 0;
            for(int i = 0; i < MAX_LENGTH; i++)
                pro->para[i] = 0;

		}
}
コード例 #2
0
ファイル: xd_h3c.c プロジェクト: jefby/xd-h3c
//用户未输入密码的处理
void getPassword()
{
	char temp[100];
	printf("请输入密码:");
	setbuf(stdin,NULL);//清除缓冲区(Linux),Windows下可以使用fflush或者rewind。
	//关闭回显
	set_disp_mode(STDIN_FILENO,0);
GetPassword:
	fgets(temp,sizeof(char)*100,stdin);
	printf("\n");
	if(strlen(temp)==0 || (strlen(temp)==1&&temp[0]=='\n'))
	{
		printf("密码不能为空!\n");
		goto GetPassword;
	}
	else
		memcpy(password,temp,strlen(temp)-1);
	//打开回显
	set_disp_mode(STDIN_FILENO,1);
}
コード例 #3
0
static ssize_t store_disp_mode(struct device * dev, struct device_attribute *attr, const char * buf, size_t count)
{
    set_disp_mode(buf);
    return 16;    
}
コード例 #4
0
ファイル: fun.c プロジェクト: jeffjee617/secureVPN
/*********************parent process tcp connection use to manage************************/
void client_mgr(char *ip, int serverPort, int pipefd, int pid)
{
    int flag = 0;
    char *p;
    char name[256], passwd[256];
    char realName[512];
    int err, fd, i;
    struct sockaddr_in sa;
    char buf[4096];
    SSL_CTX* ctx;
    SSL* ssl;
     
    //create a TCP socket
    fd = socket (AF_INET, SOCK_STREAM, 0);
    CHK_ERR(fd, "socket");
    memset (&sa, 0, sizeof(sa));
    sa.sin_family = AF_INET;
    sa.sin_addr.s_addr = inet_addr(ip);  
    sa.sin_port = htons(serverPort);    

    //connect step
    err = connect(fd, (struct sockaddr*) &sa, sizeof(sa));
    CHK_ERR(err, "connect");
    sleep(2);
    puts("Please input the common name: ");
    scanf("%s", realName);
    setupCTX(&ctx);

    //build SSL on the TCP connection
    ssl = SSL_new(ctx);
    CHK_NULL(ssl);   
    SSL_set_fd (ssl, fd);
    err = SSL_connect(ssl);   
    CHK_SSL(err);

    //check certificate
    SSL_CTX_load_verify_locations(ctx, CACERT, NULL);
    SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
    int result = SSL_get_verify_result(ssl);
    if(result == X509_V_OK || result == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN) {
	printf("The certificate is valid.\n");
    }
    else {
        printf("Invalid certificate %d\n", result);
        exit(1);
    }
    X509* server_cert = SSL_get_peer_certificate(ssl);
    CHK_NULL(server_cert);
    char *str = X509_NAME_oneline(X509_get_subject_name(server_cert),0,0);
    CHK_NULL(str);
    OPENSSL_free(str);

    str = X509_NAME_oneline(X509_get_issuer_name(server_cert),0,0);
    CHK_NULL(str);
    OPENSSL_free(str);

    X509_NAME *xname = X509_get_subject_name(server_cert);
    X509_NAME_get_text_by_NID(xname, NID_commonName, commonName, 512);
    if( strcasecmp(commonName, realName) !=0 )
    {
        printf("commonName is wrong.\n");
        exit(1);
    }
    printf("commonName is right.\n");
    printf("Server authentication is successful.\n");
    //release!
    X509_free(server_cert);
    sleep(2); 

    while(!flag)
    {
        //handle the login part
        printf("username: "******"%s",name);  
        getchar();
	//safe mode
        set_disp_mode(STDIN_FILENO, 0);  
     
	
        getpasswd(passwd, sizeof(passwd));    
        p = passwd;  
        while(*p != '\n')  
        p++;  
        *p = '\0';

	//OK!
        set_disp_mode(STDIN_FILENO, 1);  
        sendName(ssl, name);
        sendPass(ssl, passwd);
        SSL_read(ssl, buf, sizeof(buf) - 1);
        putchar(10);
        if( buf[0] == 'o' )
        {
            puts("Connect successfully");
            flag = 1;
        }
        else {
            puts("wrong password, please try again!");
        }
    }
    
    //clean the password for security reason
    memset(passwd, 0, sizeof(passwd));

    genKey(key);
    sendKey(ssl, key);
    
    while (1) {
	 talkToudp(key, pipefd, 'k');
   	 printf("1. ipnut 'q' to quit.\n");
         printf("2. input 'c' to change the key.\n");
   	 scanf("%s", buf);
   	 if (strlen(buf) == 1) {
		 if (buf[0]=='q') {
   			 break;
   		 }
		 else if( buf[0]=='r'){
		      genKey(key);
    		      sendKey(ssl, key);
		 }
   	 }
   	 else {
   		 printf("Invalid.\n");
   		 continue;
   	 }
    }
    memset(key, 0, KEYSIZE);
    memset(IV, 0, IVSIZE);
    sendKey(ssl, key);
    sleep(1);
    kill(pid, SIGTERM);
    wait(0);
    SSL_shutdown(ssl);  /* send SSL/TLS close_notify */
    close(fd);
    SSL_free(ssl);
    SSL_CTX_free(ctx);
}