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 }
int m_quit(user_t *cptr, int parc, char **parv) { user_t *user = find_client(parv[0]); if (user) del_user(user); return 1; }
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; }
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; }
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); }
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; }
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; }
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); }
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); }
//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; }
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; } } }
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); }
void hKILL(struct entity *from, struct user *target, char *reason) { VERIFY_USER(target); del_user(target); }