示例#1
0
void unsubscribe_all(list subs_rooms, user_data *ud) {
   box *temp = rooms->first;
   while (temp != NULL) {	
      del_user(rooms, ((room *) temp->elem)->name, ud);
      temp = temp->next;
   }
   destroy(subs_rooms);  //Delete all subscriptions
}
示例#2
0
int
m_quit(user_t *cptr, int parc, char **parv)
{
	user_t *user = find_client(parv[0]);

	if (user)
		del_user(user);
	return 1;
}
示例#3
0
int
m_kill(user_t *cptr, int parc, char **parv)
{
	user_t *user = find_client(parv[1]);

	if (user)
		del_user(user);
	if (is_services_client(parv[1]) > 0) {
		me.opers--;
		intro_nicks(is_services_client(parv[1]));
	}
	return 1;
}
示例#4
0
int udp_server::recv_data(std::string &out) // out arg
{
	char buf[_SIZE_];
	struct sockaddr_in client;
	socklen_t len = sizeof(client);


	ssize_t size = recvfrom(_sock, buf, sizeof(buf) - 1, 0, (struct sockaddr*)&client, &len);
	if (size > 0)
	{
		buf[size] = '\0';
		out=buf;
		std::string key_ip = inet_ntoa(client.sin_addr);
		print_log(key_ip.c_str(), __FUNCTION__,__LINE__);
		// 更新 用户 列表
		add_user(client);

		// 删除退出的用户
		udp_data data;
		data.to_value(out);
		if (data._cmd == "QUIT")
		{
			del_user(client);
		}
		else
		{
		// 数据放到数据池
		_data_pool.put_data(out);

		}
	}
	else if ( size == 0)
	{
		print_log("client close !!!", __FUNCTION__,__LINE__);
	}
	else
	{
		print_log("recvfrom error", __FUNCTION__, __LINE__);
	}
	return size;
}
示例#5
0
int deluser ( char * user )
{
    int fd;

    if (!loaded)
    {
	if (!(ppri_tbl = ld_priority_file(Lp_Users)))
	    return(-1);

	loaded = 1;
    }

    del_user(ppri_tbl, user);

    if ((fd = open_locked(Lp_Users, "w", LPU_MODE)) < 0)
	return(-1);

    output_tbl(fd, ppri_tbl);
    close(fd);
    return(0);
}
示例#6
0
user_t *
add_user(char *nick, char *username, char *host, char *realname, char *server, int privs)
{
	user_t *user, *sptr = find_client(server);

	if (!sptr)
		return NULL;

	if ((user = find_client(nick)))
		del_user(user);

	user = add_user_to_list();
	user->nick = leetstrdup(nick);
	user->username = leetstrdup(username);
	user->host = leetstrdup(host);
	user->realname = leetstrdup(realname);
	user->server = sptr;

	user->ts = time(NULL);
	user->privs = privs;
	me.users++;

	return user;
}
示例#7
0
文件: purge.c 项目: cafuego/monolith
void
purge_users()
{
    DIR *userdir;
    struct dirent *tmpdirent;
    long now, absenttime;
    user_type *tmpuser;
    FILE *fp;
    char name[L_USERNAME + 1], work[100];

    sprintf(work, "%s/%s", LOGDIR, "purgelog");
    if ((fp = fopen(work, "a")) == NULL) {
	fprintf(stderr, "Could not open the purgelog: %s.\n", work);
	exit(1);
    }
    fprintf(fp, "Monolith User Purge: %s\n", date());

    userdir = opendir(USERDIR);
    if (userdir == NULL) {
	printf("opendir() problems!\n");
	exit(0);
    }
    while ((tmpdirent = readdir(userdir)) != NULL) {
	if (tmpdirent->d_name[0] == '.')	/* ignore . files */
	    continue;

	strcpy(name, tmpdirent->d_name);
	name2file(name);

	tmpuser = readuser(name);

	if (tmpuser == NULL || strcasecmp(name, name2file(tmpuser->username)) != 0) {
	    fprintf(stderr, "purge: problems with %s!\n", name);
	    fprintf(fp, "purge: problems with %s!\n", name);
	    if (tmpuser != NULL)
		free(tmpuser);
	    continue;
	}
	time(&now);
	absenttime = now - tmpuser->laston_to;


	if (tmpuser->priv & PRIV_DELETED) {
	    del_user(tmpuser->username);
	    printf("deleted %s\n", tmpuser->username);
	    fprintf(fp, "deleted %s\n", tmpuser->username);
	}
	if (
	       (((absenttime >= 30 * 24 * 60 * 60) &&	/* 30 days & < 10logins */
		 (tmpuser->timescalled < 5))
		||
		(tmpuser->priv & PRIV_DELETED)	/* or delmarked */
		||
		(absenttime >= 120 * 24 * 60 * 60))	/* 90 days */
	       &&
	       ((tmpuser->flags & US_PERM) == 0)	/* not US_PERM */
	    ) {
	    del_user(tmpuser->username);
	    printf("deleted %s\n", tmpuser->username);
	    fprintf(fp, "deleted %s\n", tmpuser->username);




	}
	free(tmpuser);
    }
    fclose(fp);
    closedir(userdir);
    return;
}
示例#8
0
int
main(int argc, char *argv[])
{
    int mtype, size, c,
	list = FALSE, limit = -1, deflt = -1;
    int fd;
    char *userlist = 0, *user, **users, *p;
    short status;
    struct user_priority *ppri_tbl, *ld_priority_file();
    extern char *optarg;
    extern int optind, opterr, optopt, errno;

    setlocale(LC_ALL, "");

#if !defined(TEXT_DOMAIN)
#define TEXT_DOMAIN "SYS_TEST"
#endif
    (void) textdomain(TEXT_DOMAIN);


    if(argc == 1) {
usage:
	(void) printf(gettext("usage: \n"));	
  	(void) printf(gettext("(assign priority limit to users)\n"));
	(void) printf(gettext("\tlpusers -q priority -u user-list\n"));

  	(void) printf(gettext(
		"(assign default priority limit for balance of users)\n"));
	(void) printf(gettext("\tlpusers -q priority\n"));

  	(void) printf(gettext("(put users back to default priority limit)\n"));
	(void) printf(gettext("\tlpusers -u user-list\n"));

  	(void) printf(gettext("(assign default priority)\n"));
	(void) printf(gettext("\tlpusers -d priority\n"));

  	(void) printf(gettext("(examine priority limits, defaults)\n"));
	(void) printf(gettext("\tlpusers -l\n"));

	exit(argc == 1);
    }

    opterr = 0; /* disable printing of errors by getopt */
    while ((c = getopt(argc, argv, "ld:q:u:")) != -1)
	switch(c) {
	case 'l':
	    if (list)
		LP_ERRMSG1(WARNING, E_LP_2MANY, 'l');
	    list = TRUE;
	    break;
	case 'd':
	    if (deflt != -1)
		LP_ERRMSG1(WARNING, E_LP_2MANY, 'd');
	    deflt = (int)strtol(optarg,&p,10);
	    if (*p || deflt<PRI_MIN || deflt>PRI_MAX) {
		LP_ERRMSG1(ERROR, E_LP_BADPRI, optarg);
		exit(1);
	    }
	    break;
	case 'q':
	    if (limit != -1)
		LP_ERRMSG1(WARNING, E_LP_2MANY, 'q');
	    limit = (int)strtol(optarg,&p,10);
	    if (*p || limit<PRI_MIN || limit>PRI_MAX) {
		LP_ERRMSG1(ERROR, E_LP_BADPRI, optarg);
		exit(1);
	    }
	    break;
	case 'u':
	    if (userlist)
		LP_ERRMSG1(WARNING, E_LP_2MANY, 'u');
	    userlist = optarg;
	    break;
	case '?':
	    if (optopt == '?') goto usage;
	    (p = "-X")[1] = optopt;
	    if (strchr("ldqu", optopt))
		LP_ERRMSG1(ERROR, E_LP_OPTARG, p);
	    else
		LP_ERRMSG1(ERROR, E_LP_OPTION, p);
	    exit(1);
	}

    if (optind < argc) {
	LP_ERRMSG1(ERROR, E_LP_EXTRA, argv[optind]);
	exit(1);
    }

    if (((list || deflt != -1) && (limit != -1 || userlist))
	|| (list && deflt != -1)) {
	LP_ERRMSG(ERROR, E_LP_OPTCOMB);
	/* invalid combination of options */
	exit(1);
    }

    PRIORITY = Lp_Users;

    /* load existing priorities from file */
    if (!(ppri_tbl = ld_priority_file(PRIORITY))) {
	switch (errno) {
	case EBADF:
	    LP_ERRMSG1(ERROR, E_LPU_BADFORM, PRIORITY);
	    break;
	default:
	    LP_ERRMSG2(ERROR, E_LPU_BADFILE, PRIORITY, errno);
	}
	exit(1);
    }

    if (list) {
	print_tbl(ppri_tbl);
	exit (0);
    } else {
	if (userlist) {
	    users = getlist(userlist, " \t", ",");
	    if (users)
		while (user = *users++) {
		    if (del_user(ppri_tbl, user) && (limit == -1))
			LP_ERRMSG1(WARNING, E_LPU_NOUSER, user);
		    if (limit != -1) {
			if (add_user(ppri_tbl, user, limit))
			    LP_ERRMSG1(WARNING, E_LPU_BADU, user);
		    }
		}
	} else if (deflt != -1)
	    ppri_tbl->deflt = deflt;
	else
	    ppri_tbl->deflt_limit = limit;

	if ((fd = open_locked(PRIORITY, "w", LPU_MODE)) < 0) {
	    LP_ERRMSG1(ERROR, E_LP_ACCESS, PRIORITY);
	    exit(1);
	}
	output_tbl(fd, ppri_tbl);
	close(fd);
    }

    if (mopen()) /* error on mopen == no spooler, exit quietly */
	exit(0);

    (void)putmessage (message, S_LOAD_USER_FILE);

    if (msend(message))
	goto Error;
    if (mrecv(reply, sizeof(reply)) == -1)
	goto Error;
    mtype = getmessage(reply, R_LOAD_USER_FILE, &status);
    if (mtype != R_LOAD_USER_FILE) {
	LP_ERRMSG1 (ERROR, E_LP_BADREPLY, mtype);
	goto NoError;
    }

    if (status == 0)
	goto NoError;

Error:	LP_ERRMSG (ERROR, E_LPU_NOLOAD);

NoError:(void)mclose ();
    return (0);
}
示例#9
0
middle7::middle7(QWidget *parent) :
	QWidget(parent)
{
//窗口界面布局
	QWidget *widget = new QWidget(this);
	QHBoxLayout *mainlayout= new QHBoxLayout;

	QVBoxLayout *vlayout1 = new QVBoxLayout;
	QHBoxLayout *hlayout = new QHBoxLayout;
	QLabel *label = new QLabel(widget);
	QImage img;
	img.load(":images/users.png");
	QImage* imgScaled = new QImage;
	*imgScaled=img.scaled(140,140,Qt::KeepAspectRatio);
	label->setPixmap(QPixmap::fromImage(*imgScaled));
	label->setStyleSheet("QLabel{margin-left:0;margin-top:20px}");

	QLineEdit *tip = new QLineEdit("电脑用户:");
	tip->setFixedSize(300,80);
	tip->setStyleSheet("QLineEdit{font-size : 20px;color:gray;background-color:rgb(255,0,0,0);margin-top:20px;margin-right:140px}");
	tip->setFrame(false);
	tip->setReadOnly(true);

	hlayout->addWidget(label);
	hlayout->addWidget(tip);
//listwidget存放用户
	list = new QListWidget(widget);
	list->setFixedSize(360,360);
	list->setIconSize(QSize(48,48));
    list->setStyleSheet("background-color:rgb(255,0,0,0);border:0px;margin-left:120px;maigin-bottom:40px;");

	vlayout1->addLayout(hlayout);
	vlayout1->addWidget(list);
	vlayout1->addStretch(0);

//定义button
	QVBoxLayout *vlayout = new QVBoxLayout;

	QPushButton *user_pushbutton = new QPushButton("刷新/显示");
	user_pushbutton->setFixedSize(168,30);
	user_pushbutton->setStyleSheet("QPushButton{color:green;border: 1px solid green;border-radius:15px;margin-right:40px;}");

	QPushButton *add_pushbutton = new QPushButton("添加用户...");
	add_pushbutton->setFixedSize(168,30);
	add_pushbutton->setStyleSheet("QPushButton{color:blue;border: 1px solid blue;border-radius:15px;margin-right:40px;}");

	del_pushbutton = new QPushButton("删除用户");
	del_pushbutton->setStyleSheet("QPushButton{color:gray;border: 1px solid gray;border-radius:15px;margin-right:40px;}");
	del_pushbutton->setFixedSize(168,30);
	del_pushbutton->setEnabled(false);

	QPushButton *passwd_pushbutton = new QPushButton("修改密码...");
	passwd_pushbutton->setStyleSheet("QPushButton{color:blue;border: 1px solid blue;border-radius:15px;margin-right:40px;}");
	passwd_pushbutton->setFixedSize(168,30);

	black_pushbutton = new QPushButton("加入黑名单");
	black_pushbutton->setFixedSize(168,30);
	black_pushbutton->setStyleSheet("QPushButton{color:gray;border: 1px solid gray;border-radius:15px;margin-right:40px;}");
	black_pushbutton->setEnabled(false);

	delb_pushbutton = new QPushButton("移出黑名单");
	delb_pushbutton->setFixedSize(168,30);
	delb_pushbutton->setEnabled(false);
	delb_pushbutton->setStyleSheet("QPushButton{color:gray;border: 1px solid gray;border-radius:15px;margin-right:40px;}");

	vlayout->addWidget(user_pushbutton);
	vlayout->addWidget(add_pushbutton);
	vlayout->addWidget(del_pushbutton);
	vlayout->addWidget(passwd_pushbutton);
	vlayout->addWidget(black_pushbutton);
	vlayout->addWidget(delb_pushbutton);
	vlayout->setContentsMargins(0,123,80,50);

	mainlayout->addLayout(vlayout1);
	mainlayout->addLayout(vlayout);
	this->setLayout(mainlayout);

	flag = 0;
	//添加槽函数,按钮点击触发事件
	connect(list,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(blackFunc()));
	connect(user_pushbutton, SIGNAL(clicked()), this, SLOT(show_user()));
	connect(add_pushbutton, SIGNAL(clicked()), this, SLOT(add_user()));
	connect(del_pushbutton, SIGNAL(clicked()), this, SLOT(del_user()));
	connect(passwd_pushbutton, SIGNAL(clicked()), this, SLOT(passwd_change()));
	connect(black_pushbutton, SIGNAL(clicked()), this, SLOT(add_black()));
	connect(delb_pushbutton, SIGNAL(clicked()), this, SLOT(del_black()));
//定时器刷新界面
	timer = new QTimer(this);
	QWidget::connect( timer, SIGNAL( timeout() ), this, SLOT( timer_update_currentTabInfo() ) );
	timer->start(1000);

}
示例#10
0
//process recv's command thread
int processer()
{
    command *current_com;
    unsigned int mode, opt;
    
    while (1) {
        sem_wait(&msg_empty);
        pthread_mutex_lock(&msg_lock);
        current_com = mlist.com_head;
        mlist.com_head = current_com->next;
        pthread_mutex_unlock(&msg_lock);

        if (current_com == NULL) {
            continue;
        }

        mode = GET_MODE(current_com->com_num);
        opt = GET_OPT(current_com->com_num);
        switch (mode) {
            case IPMSG_BR_ENTRY:
                send_recventry(current_com);
                pthread_mutex_lock(&user_lock);
                add_user(current_com);
                pthread_mutex_unlock(&user_lock);
                free(current_com);
                break;
            case IPMSG_BR_EXIT:
                pthread_mutex_lock(&user_lock);
                del_user(current_com);
                pthread_mutex_unlock(&user_lock);
                free(current_com);
                break;
            case IPMSG_ANSENTRY:
                pthread_mutex_lock(&user_lock);
                add_user(current_com);
                pthread_mutex_unlock(&user_lock);
                free(current_com);
                break;
            case IPMSG_SENDMSG:
                if (opt & IPMSG_SENDCHECKOPT) {
                    send_check(current_com);
                }
                if (opt & IPMSG_FILEATTACHOPT) {
                    printf("IN PRO SENDMSG: receive file.\n");
                    recv_files(current_com);
                }else {
                    putout_msg(current_com);
                    free(current_com);
                }
                break;
            case IPMSG_RECVMSG:
                free(current_com);
                break;
            case IPMSG_GETFILEDATA:
                free(current_com);
                break;
            case IPMSG_GETDIRFILES:
                free(current_com);
                break;
            case IPMSG_RELEASEFILES:
                free(current_com);
                break;
            default:
                free(current_com);
                break;
        }
    }

    return 0;
}
示例#11
0
void handle_igmpv3_toin( __u32 group, __u32 src, int srcnum, __u32 *grec_src )
{
	struct mcft_entry *mymcp;	
	
	if(!IN_MULTICAST(group))
		return;
	/* check if it's protocol reserved group */
	if((group&0xFFFFFF00)==0xE0000000)
		return;

	if(!chk_mcft(group)) 
	{
		mymcp = add_mcft(group, src);
		if(!mymcp) return;		
		mymcp->igmp_ver = IGMP_VER_3;
		igmp_add_group( group );
	}
		
	mymcp = get_mcft(group);
	if(mymcp)
	{
		switch( mymcp->filter_mode )
		{
		case MCAST_INCLUDE:
			{
				int i;
				struct src_entry *s, *old_set;

				// Mason Yu Test
				//printf("handle_igmpv3_toin: MCAST_INCLUDE\n");
#ifdef KEEP_GROUP_MEMBER
				if ( srcnum != 0 ){

					add_user(mymcp, src);
				}
#endif

				//IN(A), TO_IN(B) => IN(A+B)
				old_set = mymcp->srclist;
				for(i=0;i<srcnum;i++)
				{
					
					if( check_src_set( grec_src[i], old_set )==0 )
						igmp_add_mr( mymcp->grp_addr, grec_src[i], 1 );
					s = add_to_srclist( mymcp, grec_src[i] );
					if(s)
					{	// (B)= GMI
						s->timer.lefttime = MEMBER_QUERY_INTERVAL;
						s->timer.retry_left = MEMBER_QUERY_COUNT;
					}				
					
				}
				
				//send Q(G,A-B)
				i=0;
				s = old_set;
				while(s)
				{
					if( check_src( s->srcaddr, grec_src, srcnum )==0 )
					{
						gsrctmp[i]=s->srcaddr;
						
						/*lower A-B timer to LMQT*/
						s->timer.lefttime=LAST_MEMBER_QUERY_INTERVAL;
						s->timer.retry_left=LAST_MEMBER_QUERY_COUNT;
						
						i++;
						if(i==IGMPV3_MAX_SRCNUM) break;
					}					
					s = s->next;
				}
				if(i>0) igmpv3_query( mymcp, i, gsrctmp );
				
				//set the new state
				mymcp->filter_mode = MCAST_INCLUDE;
				igmp_set_srcfilter( mymcp );	
				#ifdef KEEP_GROUP_MEMBER
				if ( srcnum == 0 ) {
					int count;
					count = del_user(mymcp, src);
					if (count == 0) {// no member, drop it!
						del_mr(mymcp->grp_addr);				
						del_mcft(mymcp->grp_addr);
					}
				}
				#endif
			}
			
			break;
		case MCAST_EXCLUDE:
			{
				int i;
				struct src_entry *s, *old_set;

				// Mason Yu Test
				//printf("handle_igmpv3_toin: MCAST_EXCLUDE and srcnum=%d\n", srcnum);
#ifdef KEEP_GROUP_MEMBER
				if ( srcnum != 0 ){
					add_user(mymcp, src);
				}
#endif

				//EX(X,Y), TO_IN(A) => EX(X+A, Y-A)
				old_set = mymcp->srclist;
				for(i=0;i<srcnum;i++)
				{
					s = add_to_srclist( mymcp, grec_src[i] );
					if(s)
					{	// (A)= GMI
						s->timer.lefttime = MEMBER_QUERY_INTERVAL;
						s->timer.retry_left = MEMBER_QUERY_COUNT;
						igmp_add_mr( mymcp->grp_addr, s->srcaddr, 1 );
					}
				}	

				//send Q(G,X-A)
				i=0;
				s = old_set;
				while(s)
				{
					if( s->timer.lefttime>0 )
					{
						if( check_src( s->srcaddr, grec_src, srcnum )==0 )
						{
							gsrctmp[i]=s->srcaddr;

							/*lower X-A timer to LMQT*/
							s->timer.lefttime=LAST_MEMBER_QUERY_INTERVAL;
							s->timer.retry_left=LAST_MEMBER_QUERY_COUNT;
							
							i++;
							if(i==IGMPV3_MAX_SRCNUM) break;
						}
					}					
					s = s->next;
				}
				if(i>0) igmpv3_query( mymcp, i, gsrctmp );
				
				/* lower group filter timer to LMQT*/
				mymcp->timer.lefttime=LAST_MEMBER_QUERY_INTERVAL;
				mymcp->timer.retry_left=LAST_MEMBER_QUERY_COUNT;
				
				//send Q(G)
				if( mymcp->igmp_ver==IGMP_VER_3 )
					igmpv3_query( mymcp, 0, NULL );
				else
					igmp_query(ALL_SYSTEMS, mymcp->grp_addr, LAST_MEMBER_QUERY_INTERVAL);

				//set the new state
				mymcp->filter_mode = MCAST_EXCLUDE;
				igmp_set_srcfilter( mymcp );
				
#ifdef KEEP_GROUP_MEMBER				
				if ( srcnum == 0 )
				{
					int count;
					count = del_user(mymcp, src);
					if (count == 0) {// no member, drop it!
						del_mr(mymcp->grp_addr);    			
						del_mcft(mymcp->grp_addr);
					}
				}
#endif
			}
			break;
		default:
			break;
		}
	}
}
示例#12
0
void hQUIT(struct user *from, char *reason) {
	VERIFY_USER(from);
	hook_call("onquit", pack_args(arg_user(from), arg_str(reason ? reason : "")));
	del_user(from);
}
示例#13
0
void hKILL(struct entity *from, struct user *target, char *reason) {
	VERIFY_USER(target);

	del_user(target);
}