static User *
add_new_user_for_pwent (Daemon        *daemon,
                        struct passwd *pwent)
{
        User *user;

        user = user_new (daemon, pwent->pw_uid);
        user_update_from_pwent (user, pwent);
        user_register (user);

        g_hash_table_insert (daemon->priv->users,
                             g_strdup (user_get_user_name (user)),
                             user);

        accounts_accounts_emit_user_added (ACCOUNTS_ACCOUNTS (daemon), user_get_object_path (user));

        return user;
}
Пример #2
0
user *beforechat(SSL **ssl)
{
	user *ret;
	char choice[20];
	SSL *s = *ssl;
	bzero(choice,sizeof(choice));
	
	while(1)
	{
		SSL_read(s,choice,20);
		if(strcmp("LOGIN",choice) == 0)
			if((ret = login(s)) != NULL) 
				return ret;
		if(strcmp("REGISTER",choice) == 0)
			if((ret = user_register(s)) != NULL) 
				return ret;
	}
	return NULL;
}
Пример #3
0
extern "C" void handle_register(const char* request,char* feedback){
	Json::Value	feedback_root; 
	char username[32],password[32],real_name[32];
	get_user(request,username,password,real_name);

	int user_exist = user_check_exist(username);

	if (user_exist)
	{
		feedback_root["result"] = "fail";
		feedback_root["message"] = "username exists!";
		strcpy(feedback,feedback_root.toStyledString().c_str());
	} else 
	{
		user_register(username, password, real_name);
		feedback_root["result"] = "pass";
		feedback_root["message"] = "register success!";
		strcpy(feedback,feedback_root.toStyledString().c_str());
	}
}
Пример #4
0
static void* handleThread(int *fd)
{
	int sockfd;
	char buff[MAXSIZE];
	int rwsize;
	
	USER usermsg;
	
	sockfd = *fd;
	rwsize = epoll_read(sockfd, buff, MAXSIZE);
	//printf("receve:%s\n", buff);
	//epoll_write(sockfd, buff);
	
	memcpy(&usermsg, buff, sizeof(buff));
	usermsg.From_sockfd = sockfd;
	
	switch(usermsg.MsgType)
	{
		/*登陆*/
		case 1:
			user_login(&usermsg);
			memcpy(buff, &usermsg, sizeof(usermsg));
			epoll_write(sockfd, buff);
			break;
		/*注册*/
		case 2:
			user_register(&usermsg);
			memcpy(buff, &usermsg, sizeof(usermsg));
			epoll_write(sockfd, buff);
			break;
		/*找回密码*/
		case 3:
			
			break;
		
		
	}
	
	return (void*)0;
}
Пример #5
0
void process(int cmd, int connfd, std::vector<std::string> &tokens){
    // std::unique_lock<std::mutex> lck(mtx1);
    switch(cmd){
    case 1:{
        msg_all(connfd);
        break;
    }
    case 2:{
        msg_flw(connfd, tokens);
        break;
    }
    case 3:{
        login(connfd, tokens);
        break;
    }
    case 4:{
        user_register(connfd, tokens);
        break;
    }
    case 5:{
        compose(connfd, tokens);
        break;
    }
    case 6:{
        follow(connfd, tokens);
        break;
    }
    case 7:{
        unfollow(connfd, tokens);
        break;
    }
    default:{
        write(connfd, "error", 5);
        break;
    }
    }
}
Пример #6
0
void loop_process(int cfd) {

	DEBUG(" Child=======>  In child!\n");
	int acceptfd;
	int recved;
	fd_set readfds;
	int delay = 300;
	struct timeval timeout;
	timeout.tv_sec = 10;
	timeout.tv_usec = 0;
	struct sockaddr_in client_addr;
	socklen_t sock_len = sizeof(struct sockaddr);
	char buffer[512];
	ctl_hdr *hdr;
	uint16 ret_code = 0;

	//服务器对web服务器的回复报文
	struct replay_packet replay;
	replay.head.len = 2;
	replay.head.encrpyt = ENCRPYT_NO;
	replay.head.mo = MO_SERVER;
	replay.head.ttl = 0;
	replay.head.ki = KI_REPLAY;

	while (1) {
		DEBUG(" Child=======>  Waiting for connect! In child thread!\n");
		FD_ZERO(&readfds);
		FD_SET(cfd, &readfds);
		timeout.tv_sec = delay;
		timeout.tv_usec = 0;
		int tt;
		switch(tt = select(cfd + 1, &readfds, NULL, NULL, &timeout)) {
		case -1:
			//error
			continue;
			break;
		default:
			if (FD_ISSET(cfd, &readfds)) {
				acceptfd = accept(cfd,(struct sockaddr *) &client_addr, &sock_len);
				if (acceptfd <=0)  {
					DEBUG(" Child=======>  accept failed!\n");
					exit(-1);
				}
				recved = recv(acceptfd, buffer, sizeof(buffer), 0);
				DEBUG(" Child=======>  Listen socket:  %d\tAccept socket:  %d\n", cfd, acceptfd);
				struct common_packet * common = (struct common_packet *)buffer;

				DEBUG(" Child=======>  Received KI:  %d\n", common->head.ki);
				DEBUG(" Child=======>  Received data length:  %d\n", recved);

				if (recved > 0) {
					hdr = (ctl_hdr *)buffer;
					//如果是登录请求
					if (hdr->ki == KI_LOGIN) {
						//判断用户名和密码是否正确
						struct register_struct * user_struct = (struct register_struct *)buffer;
						if (user_check(&(user_struct->user_struct)) == 0) {
							//登录成功
							replay.data = RPL_LOGIN_SUCCESS;
							replay.head.extent = 111;
							writen(acceptfd, (void *)&replay, sizeof(replay));
							DEBUG(" Child=======>  Login successful!\n");
							tcp_close(acceptfd);
						} else {
							replay.data = RPL_LOGIN_FALLED;
							writen(acceptfd, (void *)&replay, sizeof(replay));
							DEBUG(" Child=======>  Login failed!\n");
							tcp_close(acceptfd);
						}
					} else if (hdr->ki == KI_REGISTER) {
						//用户注册
						struct register_struct * user_struct = (struct register_struct *)buffer;
						if (user_register(&(user_struct->user_struct)) == 0) {
							//注册成功
							replay.data = RPL_REGISTER_SUCCESS;
							writen(acceptfd, (void *)&replay, sizeof(replay));
							DEBUG("Register User Successful\n");
							tcp_close(acceptfd);
						} else {
							replay.data = RPL_REGISTER_FALLED;
							writen(acceptfd, (void *)&replay, sizeof(replay));
							DEBUG("Register User Failed\n");
							tcp_close(acceptfd);
						}
						//如果是发送的数据包,判断extent值,看是否已登录成功
					} else {
						hdr = (ctl_hdr *)buffer;
						DEBUG(" Child=======>  extent is : %d\tttl is : %d\n", hdr->extent, hdr->ttl);
						if ((hdr->extent) == 111) {
							ret_code = proc_packet(buffer, acceptfd);
							if (ret_code == RPL_NO_COMMON_REPLAY) {

							} else {
								replay.data = ret_code;
								writen(acceptfd, (void *)&replay, sizeof(replay));
							}
							tcp_close(acceptfd);
						}
					}
				}
			}
			break;
		}
		tcp_close(acceptfd);
		DEBUG(" Child=======>  tt is %d\n", tt);
	}
}
static void
reload_users (Daemon *daemon)
{
        GHashTable *users;
        GHashTable *old_users;
        GHashTable *local;
        GHashTableIter iter;
        gpointer name;
        User *user;

        /* Track the users that we saw during our (re)load */
        users = create_users_hash_table ();

        /*
         * NOTE: As we load data from all the sources, notifies are
         * frozen in load_entries() and then thawed as we process
         * them below.
         */

        /* Load the local users into our hash table */
        load_entries (daemon, users, entry_generator_fgetpwent);
        local = g_hash_table_new (g_str_hash, g_str_equal);
        g_hash_table_iter_init (&iter, users);
        while (g_hash_table_iter_next (&iter, &name, NULL))
                g_hash_table_add (local, name);

        /* Now add/update users from other sources, possibly non-local */
        load_entries (daemon, users, wtmp_helper_entry_generator);
        load_entries (daemon, users, entry_generator_cachedir);

        /* Mark which users are local, which are not */
        g_hash_table_iter_init (&iter, users);
        while (g_hash_table_iter_next (&iter, &name, (gpointer *)&user))
                user_update_local_account_property (user, g_hash_table_lookup (local, name) != NULL);

        g_hash_table_destroy (local);

        /* Swap out the users */
        old_users = daemon->priv->users;
        daemon->priv->users = users;

        /* Remove all the old users */
        g_hash_table_iter_init (&iter, old_users);
        while (g_hash_table_iter_next (&iter, &name, (gpointer *)&user)) {
                if (!g_hash_table_lookup (users, name)) {
                        user_unregister (user);
                        accounts_accounts_emit_user_deleted (ACCOUNTS_ACCOUNTS (daemon),
                                                             user_get_object_path (user));
                }
        }

        /* Register all the new users */
        g_hash_table_iter_init (&iter, users);
        while (g_hash_table_iter_next (&iter, &name, (gpointer *)&user)) {
                if (!g_hash_table_lookup (old_users, name)) {
                        user_register (user);
                        accounts_accounts_emit_user_added (ACCOUNTS_ACCOUNTS (daemon),
                                                           user_get_object_path (user));
                }
                g_object_thaw_notify (G_OBJECT (user));
        }

        g_hash_table_destroy (old_users);
}