int main(int argc, char **argv) { prog_name = argv[0]; decode_arguments(argc, argv); switch (operation) { /* calls to libdlm; pass a command to dlm-kernel */ case OP_JOIN: do_join(lsname); break; case OP_LEAVE: do_leave(lsname); break; case OP_JOINLEAVE: do_join(lsname); do_leave(lsname); break; /* calls to libdlmcontrol; pass a command/query to dlm_controld */ case OP_LIST: do_list(lsname); break; case OP_DUMP: do_dump(); break; case OP_LOG_PLOCK: do_log_plock(); break; case OP_PLOCKS: do_plocks(lsname); break; case OP_DEADLOCK_CHECK: do_deadlock_check(lsname); break; /* calls to read debugfs; query info from dlm-kernel */ case OP_LOCKDUMP: do_lockdump(lsname); break; case OP_LOCKDEBUG: do_lockdebug(lsname); break; } return 0; }
static int cb_join(aClient *sptr, aChannel *chptr, char *parv[]) { aModeB *p = NULL; if (!can_join(sptr, sptr, chptr, NULL, NULL, parv)) /* test for operoverride or invite */ { return HOOK_CONTINUE; } if (chptr->mode.extmode & EXTCMODE_BANLINK) /* mode +B set? */ { if (is_banned(sptr, chptr, BANCHK_JOIN)) /* user is banned? */ { p = (aModeB *) extcmode_get_struct(chptr->mode.extmodeparam, 'B'); if (p && p->val) { sendto_one(sptr, ":%s 470 %s %s (you are banned) transferring you to %s", me.name, sptr->name, chptr->chname, p->val); parv[0] = sptr->name; parv[1] = p->val; do_join(sptr, sptr, 2, parv); return HOOK_DENY; } } } return HOOK_CONTINUE; }
int xanadu_event_join(char *source, int ac, char **av) { if (ac != 1) return MOD_CONT; do_join(source, ac, av); return MOD_CONT; }
void process_indicators(tokens fields) { interp_list *current; interp_list *previous; /* Loop through each node in the list of interpretations */ current = interp_header->next_interp; previous = interp_header; while (current != NULL) { /* Perform the action corresponding to the indicator */ switch(current->indicator) { case '^': current = do_split(current); break; case '-': current = do_terminate(current,previous); break; case 'x': current = do_exchange(current); break; case 'v': current = do_join(current); break; case '+': current = do_add(current); break; } previous = current; current = current->next_interp; } }
/* ABAAB J #ircops 1098031328 */ int denora_event_join(char *source, int ac, char **av) { if (denora->protocoldebug) { protocol_debug(source, ac, av); } do_join(source, ac, av); return MOD_CONT; }
/** Handle a JOIN message from a client connection. * See @ref m_functions for discussion of the arguments. * @param[in] cptr Client that sent us the message. * @param[in] sptr Original source of message. * @param[in] parc Number of arguments. * @param[in] parv Argument vector. */ int m_join(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) { struct JoinBuf join; struct JoinBuf create; char *p = 0; char *chanlist; char *name; char *keys; if (parc < 2 || *parv[1] == '\0') return need_more_params(sptr, "JOIN"); if (!IsAnOper(sptr) && IsRestrictJoin(sptr)) { send_reply(sptr, ERR_BANNEDFROMCHAN, parv[1]); return 0; } joinbuf_init(&join, sptr, cptr, JOINBUF_TYPE_JOIN, 0, 0); joinbuf_init(&create, sptr, cptr, JOINBUF_TYPE_CREATE, 0, TStime()); chanlist = last0(cptr, sptr, parv[1]); /* find last "JOIN 0" */ keys = parv[2]; /* remember where keys are */ for (name = ircd_strtok(&p, chanlist, ","); name; name = ircd_strtok(&p, 0, ",")) { char *key = 0; /* If we have any more keys, take the first for this channel. */ if (!BadPtr(keys) && (keys = strchr(key = keys, ','))) *keys++ = '\0'; /* Empty keys are the same as no keys. */ if (key && !key[0]) key = 0; if (!IsChannelName(name) || !strIsIrcCh(name)) { /* bad channel name */ send_reply(sptr, ERR_NOSUCHCHANNEL, name); continue; } if (cli_user(sptr)->joined >= get_client_maxchans(sptr) && !HasPriv(sptr, PRIV_CHAN_LIMIT)) { send_reply(sptr, ERR_TOOMANYCHANNELS, name); break; /* no point processing the other channels */ } do_join(cptr, sptr, &join, &create, name, key, 0); } joinbuf_flush(&join); /* must be first, if there's a JOIN 0 */ joinbuf_flush(&create); return 0; }
/** * kick every user off the channel */ void do_mkick(channel *c, char *reason) { if(c != NULL) { do_join(cs_name,c->name); do_op(cs_name,cs_name,c->name); chanuser *cu = c->users; while(cu) { kick(cs_name,cu->u->nick,c->name,reason); cu = cu->next; } do_part(cs_name,c->name,"Leaving"); } }
/* ** m_join ** parv[0] = sender prefix ** parv[1] = channel ** parv[2] = channel password (key) */ DLLFUNC CMD_FUNC(m_join) { int r; if (bouncedtimes) sendto_realops("m_join: bouncedtimes=%d??? [please report at http://bugs.unrealircd.org/]", bouncedtimes); bouncedtimes = 0; if (IsServer(sptr)) return 0; r = do_join(cptr, sptr, parc, parv); bouncedtimes = 0; return r; }
int denora_event_svsjoin(char *source, int ac, char **av) { char *newav[127]; if (denora->protocoldebug) { protocol_debug(source, ac, av); } if (ac != 1) return MOD_CONT; newav[0] = av[1]; do_join(av[0], 1, newav); return MOD_CONT; }
void coopth_join(int tid, void (*helper)(void)) { struct coopth_t *thr; struct coopth_per_thread_t *pth; /* since main thread can call this, we have to use helper * function instead of just coopth_sched(). As a result, * recursion into run_vm86() can happen. Hope its safe. */ assert(!_coopth_is_in_thread_nowarn() || is_detached()); check_tid(tid); thr = &coopthreads[tid]; pth = current_thr(thr); assert(pth->data.attached); do_join(pth, helper); }
u8 r8712_set_802_11_bssid(struct _adapter *padapter, u8 *bssid) { unsigned long irqL; u8 status = true; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; if ((bssid[0] == 0x00 && bssid[1] == 0x00 && bssid[2] == 0x00 && bssid[3] == 0x00 && bssid[4] == 0x00 && bssid[5] == 0x00) || (bssid[0] == 0xFF && bssid[1] == 0xFF && bssid[2] == 0xFF && bssid[3] == 0xFF && bssid[4] == 0xFF && bssid[5] == 0xFF)) { status = false; return status; } spin_lock_irqsave(&pmlmepriv->lock, irqL); if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING) == true) { status = check_fwstate(pmlmepriv, _FW_UNDER_LINKING); goto _Abort_Set_BSSID; } if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE) == true) { if (!memcmp(&pmlmepriv->cur_network.network.MacAddress, bssid, ETH_ALEN)) { if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) == false) goto _Abort_Set_BSSID; /* driver is in * WIFI_ADHOC_MASTER_STATE */ } else { r8712_disassoc_cmd(padapter); if (check_fwstate(pmlmepriv, _FW_LINKED) == true) r8712_ind_disconnect(padapter); r8712_free_assoc_resources(padapter); if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))) { _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE); set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); } } } memcpy(&pmlmepriv->assoc_bssid, bssid, ETH_ALEN); pmlmepriv->assoc_by_bssid = true; status = do_join(padapter); goto done; _Abort_Set_BSSID: done: spin_unlock_irqrestore(&pmlmepriv->lock, irqL); return status; }
/* ABAAB J #ircops 1098031328 */ int denora_event_join(char *source, int ac, char **av) { User *u; if (denora->protocoldebug) protocol_debug(source, ac, av); if (ac != 2) return MOD_CONT; u = find_byuid(source); do_join((u ? u->nick : source), ac, av); return MOD_CONT; }
static int join_action(char *glb[2],char *epoch[2],setup_params_t *setup, ibeid_t *id, prefls_t *pfixlist) { int rv=0; action_data_t *act_p = NULL; if(!setup || !id ||!pfixlist ) { errno = EINVAL; return -1; } //join init rv = join_init(&act_p,setup,pfixlist); if(rv < 0) pbgp_die("join initialization failed. Aborting. \n"); //ids load rv = ids_load(glb[0],act_p->glb.act); rv -= ids_load(glb[1],act_p->glb.rvk); rv -= ids_load(epoch[0],act_p->epoch.act); rv -= ids_load(epoch[1],act_p->epoch.rvk); if(rv < 0) pbgp_die("init_ids fid_load \n"); //idarray init idarray_init(act_p->glb.act,act_p->glb.rvk,setup); idarray_init(act_p->epoch.act,act_p->epoch.rvk,setup); //set prefix list act_p->ibk->id->asnum=id->asnum; //do join do_join(act_p,setup); //id_save ids_dump(act_p->epoch.act,act_p->epoch.rvk,epoch[0],epoch[1]); pbgp_info("%d successfully joined\n",act_p->ibk->id->asnum); //join clear join_clear(act_p); //idarray clear idarray_clear(); pfix_clear(pfixlist); return 0; }
/* * Mob autonomous action. * This function takes 25% to 35% of ALL Merc cpu time. * -- Furey */ void mobile_update (void) { CHAR_DATA *ch; CHAR_DATA *ch_next; CHAR_DATA *rch; /* Examine all mobs. */ for (ch = char_list; ch != NULL; ch = ch_next) { ch_next = ch->next; if (!IS_NPC (ch) || ch->in_room == NULL) continue; if (ch->in_room->area->empty && !IS_SET (ch->act, ACT_UPDATE_ALWAYS)) continue; if (ch->pIndexData->pShop != NULL) /* give him some gold */ if ((ch->gold * 100 + ch->silver) < ch->pIndexData->wealth) { ch->gold += ch->pIndexData->wealth * number_range (1, 20) / 5000000; ch->silver += ch->pIndexData->wealth * number_range (1, 20) / 50000; } /* That's all for sleeping / busy monster, and empty zones */ if (ch->position != POS_STANDING) continue; for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room) { if(rch->infight && !ch->infight && IS_NPC(ch) && !ch->pIndexData->pShop) { do_autodisp(ch," "); do_join(ch,"none"); } } if(IS_NPC(ch) && ch->infight && TURN(ch)) ai_move(ch); } return; }
/* ABAAA C #ircops 1098031328 */ int denora_event_create(char *source, int ac, char **av) { char *newav[3]; if (denora->protocoldebug) { protocol_debug(source, ac, av); } do_join(source, ac, av); newav[0] = av[0]; newav[1] = (char *) "+o"; newav[2] = source; do_cmode(source, 3, newav); return MOD_CONT; }
/* desperate cleanup attempt, not extremely reliable */ int coopth_flush(void (*helper)(void)) { struct coopth_t *thr; assert(!_coopth_is_in_thread_nowarn() || is_detached()); while (threads_joinable) { struct coopth_per_thread_t *pth; /* the sleeping threads are unlikely to be found here. * This is mainly to flush zombies. */ thr = on_thread(); if (!thr) break; pth = current_thr(thr); assert(pth->data.attached); do_cancel(thr, pth); do_join(pth, helper); } if (threads_joinable) g_printf("Coopth: %i threads stalled\n", threads_joinable); return threads_joinable; }
static bool process(int argc,char **argv,int start) { int i; bool success; char *filename; input_init(start,argc,argv); input_read_all_files(); numfiles = input_get_file_count(); if (numfiles < 2) st_help("need two or more files to process"); if (NULL == (files = malloc((numfiles + 1) * sizeof(wave_info *)))) st_error("could not allocate memory for file info array"); for (i=0;i<numfiles;i++) { filename = input_get_filename(); if (NULL == (files[i] = new_wave_info(filename))) { st_error("could not open file: [%s]",filename); } } files[numfiles] = NULL; check_headers(); reorder_files(files,numfiles); success = do_join(); for (i=0;i<numfiles;i++) st_free(files[i]); st_free(files); return success; }
int main(int argc, char *argv[]) { prog_name = basename(argv[0]); decode_arguments(argc, argv); switch (operation) { case OP_JOIN: do_join(argc, argv); break; case OP_LEAVE: do_leave(); break; case OP_DUMP: do_dump(); break; case OP_LIST: do_list(); break; } return EXIT_FAILURE; }
void r8712_set_802_11_ssid(struct _adapter *padapter, struct ndis_802_11_ssid *ssid) { unsigned long irqL; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct wlan_network *pnetwork = &pmlmepriv->cur_network; if (!padapter->hw_init_completed) return; spin_lock_irqsave(&pmlmepriv->lock, irqL); if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING)) { check_fwstate(pmlmepriv, _FW_UNDER_LINKING); goto _Abort_Set_SSID; } if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE)) { if ((pmlmepriv->assoc_ssid.SsidLength == ssid->SsidLength) && (!memcmp(&pmlmepriv->assoc_ssid.Ssid, ssid->Ssid, ssid->SsidLength))) { if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { if (!r8712_is_same_ibss(padapter, pnetwork)) { /* if in WIFI_ADHOC_MASTER_STATE or * WIFI_ADHOC_STATE, create bss or * rejoin again */ r8712_disassoc_cmd(padapter); if (check_fwstate(pmlmepriv, _FW_LINKED) == true) r8712_ind_disconnect(padapter); r8712_free_assoc_resources(padapter); if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) { _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE); set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); } } else goto _Abort_Set_SSID; /* driver is in * WIFI_ADHOC_MASTER_STATE */ } } else { r8712_disassoc_cmd(padapter); if (check_fwstate(pmlmepriv, _FW_LINKED) == true) r8712_ind_disconnect(padapter); r8712_free_assoc_resources(padapter); if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == true) { _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE); set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); } } } if (padapter->securitypriv.btkip_countermeasure == true) goto _Abort_Set_SSID; if (!validate_ssid(ssid)) goto _Abort_Set_SSID; memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(struct ndis_802_11_ssid)); pmlmepriv->assoc_by_bssid = false; do_join(padapter); goto done; _Abort_Set_SSID: done: spin_unlock_irqrestore(&pmlmepriv->lock, irqL); }
DLLFUNC int _can_join(aClient *cptr, aClient *sptr, aChannel *chptr, char *key, char *link, char *parv[]) { Link *lp; Ban *banned; if ((chptr->mode.mode & MODE_ONLYSECURE) && !(sptr->umodes & UMODE_SECURE)) { if (IsAnOper(sptr)) { /* Yeah yeah.. duplicate code.. * Anyway: if the channel is +z we still allow an ircop to bypass it * if they are invited. */ for (lp = sptr->user->invited; lp; lp = lp->next) if (lp->value.chptr == chptr) return 0; } return (ERR_SECUREONLYCHAN); } if ((chptr->mode.mode & MODE_OPERONLY) && !IsAnOper(sptr)) return (ERR_OPERONLY); if ((chptr->mode.mode & MODE_ADMONLY) && !IsSkoAdmin(sptr)) return (ERR_ADMONLY); /* Admin, Coadmin, Netadmin, and SAdmin can still walk +b in +O */ banned = is_banned(sptr, chptr, BANCHK_JOIN); if (banned && (chptr->mode.mode & MODE_OPERONLY) && IsAnOper(sptr) && !IsSkoAdmin(sptr) && !IsCoAdmin(sptr)) return (ERR_BANNEDFROMCHAN); /* Only NetAdmin/SAdmin can walk +b in +A */ if (banned && (chptr->mode.mode & MODE_ADMONLY) && IsAnOper(sptr) && !IsNetAdmin(sptr) && !IsSAdmin(sptr)) return (ERR_BANNEDFROMCHAN); for (lp = sptr->user->invited; lp; lp = lp->next) if (lp->value.chptr == chptr) return 0; if ((chptr->mode.limit && chptr->users >= chptr->mode.limit)) { if (chptr->mode.link) { if (*chptr->mode.link != '\0') { /* We are linked. */ sendto_one(sptr, err_str(ERR_LINKCHANNEL), me.name, sptr->name, chptr->chname, chptr->mode.link); parv[0] = sptr->name; parv[1] = (chptr->mode.link); do_join(cptr, sptr, 2, parv); return -1; } } /* We check this later return (ERR_CHANNELISFULL); */ } if ((chptr->mode.mode & MODE_RGSTRONLY) && !IsLoggedIn(sptr)) return (ERR_NEEDREGGEDNICK); if (*chptr->mode.key && (BadPtr(key) || strcmp(chptr->mode.key, key))) return (ERR_BADCHANNELKEY); if ((chptr->mode.mode & MODE_INVITEONLY) && !find_invex(chptr, sptr)) return (ERR_INVITEONLYCHAN); if ((chptr->mode.limit && chptr->users >= chptr->mode.limit)) return (ERR_CHANNELISFULL); if (banned) return (ERR_BANNEDFROMCHAN); #ifndef NO_OPEROVERRIDE #ifdef OPEROVERRIDE_VERIFY if (IsOper(sptr) && (chptr->mode.mode & MODE_SECRET || chptr->mode.mode & MODE_PRIVATE) && !is_autojoin_chan(chptr->chname)) return (ERR_OPERSPVERIFY); #endif #endif #ifdef JOINTHROTTLE if (!IsAnOper(cptr) && (chptr->mode.extmode & EXTMODE_JOINTHROTTLE) && isjthrottled(cptr, chptr)) return ERR_TOOMANYJOINS; #endif return 0; }
bool IRCdMessage::OnJoin(const Anope::string &source, const std::vector<Anope::string> ¶ms) { if (!params.empty()) do_join(source, params[0], params.size() > 1 ? params[1] : ""); return true; }
void do_join(struct Client *cptr, struct Client *sptr, struct JoinBuf *join, struct JoinBuf *create, char *chan, char *key, int level) { struct Channel *chptr; struct Gline *gline; /* BADCHANed channel */ if ((gline = gline_find(chan, GLINE_BADCHAN | GLINE_EXACT)) && GlineIsActive(gline) && !IsAnOper(sptr)) { send_reply(sptr, ERR_BANNEDFROMCHAN, chan); return; } /* Bouncy +L joins */ if (level > feature_int(FEAT_MAX_BOUNCE)) { sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :*** Couldn't join %s ! - Redirection (+L) setting was too bouncy", sptr, chan); return; } if (!(chptr = FindChannel(chan))) { if (((chan[0] == '&') && !feature_bool(FEAT_LOCAL_CHANNELS)) || strlen(chan) > IRCD_MIN(CHANNELLEN, feature_int(FEAT_CHANNELLEN))) { send_reply(sptr, ERR_NOSUCHCHANNEL, chan); return; } if (feature_bool(FEAT_CHANNEL_CREATE_IRCOPONLY) && !IsAnOper(sptr) && !IsChannelService(sptr)) { send_reply(sptr, ERR_NOSUCHCHANNEL, chan); return; } if (!(chptr = get_channel(sptr, chan, CGT_CREATE))) return; /* Try to add the new channel as a recent target for the user. */ if (check_target_limit(sptr, chptr, chptr->chname, 0)) { chptr->members = 0; destruct_channel(chptr); return; } joinbuf_join(create, chptr, CHFL_CHANOP | CHFL_CHANNEL_MANAGER); } else if (find_member_link(chptr, sptr)) { return; /* already on channel */ } else if (check_target_limit(sptr, chptr, chptr->chname, 0)) { return; } else { int flags = CHFL_DEOPPED; int err = 0; int excepted = 0; int exceptkli = 0; struct Ban *ban = NULL; if (*chptr->mode.redir && (*chptr->mode.redir != '\0')) { if (chptr->users >= chptr->mode.limit) { if (IsNoLink(sptr)) send_reply(sptr, ERR_LINKCHAN, chptr->chname, chptr->mode.redir); else if (!IsChannelName(chptr->mode.redir) || !strIsIrcCh(chptr->mode.redir)) send_reply(sptr, ERR_NOSUCHCHANNEL, chptr->mode.redir); else { send_reply(sptr, ERR_LINKSET, chptr->chname, chptr->chname, chptr->mode.redir); do_join(cptr, sptr, join, create, chptr->mode.redir, key, level+1); } return; } } if (find_ban(sptr, chptr->exceptlist, EBAN_EXCEPTLIST, 0)) { if (feature_bool(FEAT_CHMODE_e_CHMODEEXCEPTION)) exceptkli = 1; excepted = 1; } /* Check Apass/Upass -- since we only ever look at a single * "key" per channel now, this hampers brute force attacks. */ if (feature_bool(FEAT_CHMODE_Z_STRICT) && (chptr->mode.exmode & EXMODE_SSLONLY) && !IsSSL(sptr)) err = ERR_SSLONLYCHAN; else if (key && !strcmp(key, chptr->mode.apass)) flags = CHFL_CHANOP | CHFL_CHANNEL_MANAGER; else if (key && !strcmp(key, chptr->mode.upass)) flags = CHFL_CHANOP; else if (chptr->users == 0 && !chptr->mode.apass[0] && !(chptr->mode.exmode & EXMODE_PERSIST)) { /* Joining a zombie channel (zannel): give ops and increment TS. */ flags = CHFL_CHANOP; chptr->creationtime++; } else if (IsXtraOp(sptr)) { /* XtraOp bypasses all other checks. */ } else if ((chptr->mode.exmode & EXMODE_SSLONLY) && !IsSSL(sptr)) err = ERR_SSLONLYCHAN; else if (IsInvited(sptr, chptr)) { /* Invites bypass these other checks. */ } else if (*chptr->mode.key && (!key || strcmp(key, chptr->mode.key)) && !exceptkli) err = ERR_BADCHANNELKEY; else if (*chptr->mode.key && feature_bool(FEAT_FLEXIBLEKEYS) && (key && !strcmp(key, chptr->mode.key))) { /* Assume key checked by previous condition was found to be correct and allow join because FEAT_FLEXIBLEKEYS was enabled */ } else if ((chptr->mode.mode & MODE_INVITEONLY) && !exceptkli) err = ERR_INVITEONLYCHAN; else if (chptr->mode.limit && (chptr->users >= chptr->mode.limit) && !exceptkli) err = ERR_CHANNELISFULL; else if ((chptr->mode.mode & MODE_REGONLY) && !IsAccount(sptr)) err = ERR_NEEDREGGEDNICK; else if ((chptr->mode.exmode & EXMODE_ADMINONLY) && !IsAdmin(sptr)) err = ERR_ADMINONLYCHAN; else if ((chptr->mode.exmode & EXMODE_OPERONLY) && !IsAnOper(sptr)) err = ERR_OPERONLYCHAN; else if ((ban = find_ban(sptr, chptr->banlist, EBAN_NONE, 0)) && !excepted) err = ERR_BANNEDFROMCHAN; /* An oper with WALK_LCHAN privilege can join a local channel * he otherwise could not join by using "OVERRIDE" as the key. * This will generate a HACK(4) notice, but fails if the oper * could normally join the channel. */ if (IsLocalChannel(chptr->chname) && HasPriv(sptr, PRIV_WALK_LCHAN) && !(flags & CHFL_CHANOP) && key && !strcmp(key, "OVERRIDE")) { switch (err) { case 0: if (strcmp(chptr->mode.key, "OVERRIDE") && strcmp(chptr->mode.apass, "OVERRIDE") && strcmp(chptr->mode.upass, "OVERRIDE")) { send_reply(sptr, ERR_DONTCHEAT, chptr->chname); return; } break; case ERR_INVITEONLYCHAN: err = 'i'; break; case ERR_CHANNELISFULL: err = 'l'; break; case ERR_BANNEDFROMCHAN: err = 'b'; break; case ERR_BADCHANNELKEY: err = 'k'; break; case ERR_NEEDREGGEDNICK: err = 'r'; break; case ERR_ADMINONLYCHAN: err = 'a'; break; case ERR_OPERONLYCHAN: err = 'O'; break; case ERR_SSLONLYCHAN: err = 'Z'; break; default: err = '?'; break; } /* send accountability notice */ if (err) sendto_opmask_butone(0, SNO_HACK4, "OPER JOIN: %C JOIN %H " "(overriding +%c)", sptr, chptr, err); err = 0; } /* Is there some reason the user may not join? */ if (err) { switch(err) { case ERR_NEEDREGGEDNICK: send_reply(sptr, ERR_NEEDREGGEDNICK, chptr->chname, feature_str(FEAT_URLREG)); break; default: send_reply(sptr, err, chptr->chname); break; } return; } joinbuf_join(join, chptr, flags); if (flags & CHFL_CHANOP) { struct ModeBuf mbuf; /* Always let the server op him: this is needed on a net with older servers because they 'destruct' channels immediately when they become empty without sending out a DESTRUCT message. As a result, they would always bounce a mode (as HACK(2)) when the user ops himself. (There is also no particularly good reason to have the user op himself.) */ modebuf_init(&mbuf, &me, cptr, chptr, MODEBUF_DEST_SERVER); modebuf_mode_client(&mbuf, MODE_ADD | MODE_CHANOP, sptr, chptr->mode.apass[0] ? ((flags & CHFL_CHANNEL_MANAGER) ? 0 : 1) : MAXOPLEVEL); modebuf_flush(&mbuf); } } del_invite(sptr, chptr); if (chptr->topic[0]) { send_reply(sptr, RPL_TOPIC, chptr->chname, chptr->topic); send_reply(sptr, RPL_TOPICWHOTIME, chptr->chname, chptr->topic_nick, chptr->topic_time); } do_names(sptr, chptr, NAMES_ALL|NAMES_EON); /* send /names list */ }
void gen_random_battle(CHAR_DATA *ch) { int monsters[10]; int i=0; CHAR_DATA *leader; CHAR_DATA *crone; CHAR_DATA *wch; int mob_top=0; char buf[50]; int total=0; int charcnt = 0; MOB_INDEX_DATA *pMobIndex; for (wch = ch->in_room->people; wch != NULL; wch = wch->next_in_room) charcnt++; pMobIndex = get_mob_index (number_range(20,30)); leader = create_mobile(pMobIndex); total = ch->level + number_range(-6,4); if(total > 100) total = 99; for(i=0;i<total;i++) advance_level(leader,FALSE); char_to_room (leader, ch->in_room); charcnt--; while(charcnt!=0) { pMobIndex = get_mob_index (number_range(20,30)); crone = create_mobile(pMobIndex); total = ch->level + number_range(-6,4); if(total > 100) total = 99; for(i=0;i<total;i++) advance_level(crone,FALSE); char_to_room (crone, ch->in_room); charcnt--; } send_to_char("\n\r{c******{RRANDOM BATTLE!!!!{c******{x\n\r",ch); sprintf(buf,"%s",ch->name); do_kill(leader,buf); sprintf(buf,"%d",leader->team); charcnt += number_range(-2,3); if(charcnt<1) charcnt = 1; for (wch = ch->in_room->people; wch != NULL; wch = wch->next_in_room) { switch(atoi(buf)) { case TEAM_BLUE: do_join(wch,"red"); break; case TEAM_RED: do_join(wch,"blue"); break; default: do_join(wch,"none"); break; } } for (i=0;i!=charcnt-1;i++) { CHAR_DATA *mob; pMobIndex = get_mob_index (monsters[number_range(0,mob_top-1)]); if(pMobIndex == NULL) continue; mob = create_mobile(pMobIndex); char_to_room (mob, ch->in_room); total = ch->level + number_range(-6,4); for(i=0;i<total;i++) advance_level(mob,FALSE); switch(atoi(buf)) { case TEAM_BLUE: do_join(mob,"blue"); break; case TEAM_RED: do_join(mob,"red"); break; default: do_join(mob,"none"); break; } mob->in_room->turn=mob; mob->AttackLeft=1; mob->MoveLeft=3; } }
u8 set_802_11_ssid(_adapter *padapter, NDIS_802_11_SSID *ssid) { _irqL irqL; u8 status = _TRUE; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct wlan_network *pnetwork = &pmlmepriv->cur_network; _queue *queue = &pmlmepriv->scanned_queue; #ifdef PLATFORM_WINDOWS LARGE_INTEGER sys_time; u32 diff_time, cur_time; #endif _func_enter_; RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_notice_, ("+set_802_11_ssid: ssid=[%s] fw_state=0x%08x\n", ssid->Ssid, get_fwstate(pmlmepriv))); if (padapter->hw_init_completed == _FALSE) { RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("set_ssid: hw_init_completed==_FALSE=>exit!!!\n")); return _FALSE; } _enter_critical(&pmlmepriv->lock, &irqL); if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE) { RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("Set SSID is not allowed under surveying || adhoc master || under linking\n")); status = check_fwstate(pmlmepriv, _FW_UNDER_LINKING); goto _Abort_Set_SSID; } if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE) == _TRUE) { RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, ("set_ssid: _FW_LINKED||WIFI_ADHOC_MASTER_STATE\n")); if ((pmlmepriv->assoc_ssid.SsidLength == ssid->SsidLength) && (_memcmp(&pmlmepriv->assoc_ssid.Ssid, ssid->Ssid, ssid->SsidLength) == _TRUE)) { if ((check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _FALSE)) { RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("Set SSID is the same ssid, fw_state=0x%08x\n", get_fwstate(pmlmepriv))); if (is_same_ibss(padapter, pnetwork) == _FALSE) { //if in WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE, create bss or rejoin again disassoc_cmd(padapter); if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) indicate_disconnect(padapter); free_assoc_resources(padapter); if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) { _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE); set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); } } else { goto _Abort_Set_SSID;//it means driver is in WIFI_ADHOC_MASTER_STATE, we needn't create bss again. } } } else { RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("Set SSID not the same ssid\n")); RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_ssid=[%s] len=0x%x\n", ssid->Ssid, (unsigned int)ssid->SsidLength)); RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("assoc_ssid=[%s] len=0x%x\n", pmlmepriv->assoc_ssid.Ssid, (unsigned int)pmlmepriv->assoc_ssid.SsidLength)); disassoc_cmd(padapter); if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) indicate_disconnect(padapter); free_assoc_resources(padapter); if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) { _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE); set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); } } } #ifdef PLATFORM_WINDOWS if (padapter->securitypriv.btkip_countermeasure == _TRUE) { RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_802_11_ssid:padapter->securitypriv.btkip_countermeasure==_TRUE\n")); NdisGetCurrentSystemTime(&sys_time); cur_time=(u32)(sys_time.QuadPart/10); // In micro-second. RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_802_11_ssid:cur_time=0x%x\n",cur_time)); RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_802_11_ssid:psecuritypriv->last_mic_err_time=0x%x\n",padapter->securitypriv.btkip_countermeasure_time)); diff_time = cur_time -padapter->securitypriv.btkip_countermeasure_time; // In micro-second. RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_802_11_ssid:diff_time=0x%x\n",diff_time)); if (diff_time > 60000000) { RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_802_11_ssid(): countermeasure time >60s.\n")); padapter->securitypriv.btkip_countermeasure = _FALSE; // Update MIC error time. padapter->securitypriv.btkip_countermeasure_time = 0; } else { // can't join in 60 seconds. status = _FALSE; RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_802_11_ssid(): countermeasure time <60s.\n")); goto _Abort_Set_SSID; } } #endif #ifdef PLATFORM_LINUX if (padapter->securitypriv.btkip_countermeasure == _TRUE) { status = _FALSE; goto _Abort_Set_SSID; } #endif if (validate_ssid(ssid) == _FALSE) { status = _FALSE; goto _Abort_Set_SSID; } _memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(NDIS_802_11_SSID)); pmlmepriv->assoc_by_bssid = _FALSE; status = do_join(padapter); goto done; _Abort_Set_SSID: RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("-set_802_11_ssid: _Abort_Set_SSID: status=%d\n", status)); done: _exit_critical(&pmlmepriv->lock, &irqL); _func_exit_; return status; }
u8 set_802_11_bssid(_adapter *padapter, u8 *bssid) { _irqL irqL; u8 status = _TRUE; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; _queue *queue = &pmlmepriv->scanned_queue; _func_enter_; RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_notice_, ("+set_802_11_bssid: bssid=%02x:%02x:%02x:%02x:%02x:%02x\n", bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5])); if ((bssid[0]==0x00 && bssid[1]==0x00 && bssid[2]==0x00 && bssid[3]==0x00 && bssid[4]==0x00 &&bssid[5]==0x00) || (bssid[0]==0xFF && bssid[1]==0xFF && bssid[2]==0xFF && bssid[3]==0xFF && bssid[4]==0xFF &&bssid[5]==0xFF)) { status = _FALSE; return status; } _enter_critical(&pmlmepriv->lock, &irqL); if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE) { RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("Set BSSID is not allowed under surveying || adhoc master || under linking, fw_state=0x%08x\n", get_fwstate(pmlmepriv))); status = check_fwstate(pmlmepriv, _FW_UNDER_LINKING); goto _Abort_Set_BSSID; } if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE) == _TRUE) { RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, ("set_bssid: _FW_LINKED||WIFI_ADHOC_MASTER_STATE\n")); if (_memcmp(&pmlmepriv->cur_network.network.MacAddress, bssid, ETH_ALEN) == _TRUE) { if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _FALSE) goto _Abort_Set_BSSID;//it means driver is in WIFI_ADHOC_MASTER_STATE, we needn't create bss again. } else { RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("Set BSSID not the same ssid\n")); RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_bssid=%02x:%02x:%02x:%02x:%02x:%02x\n", bssid[0],bssid[1],bssid[2],bssid[3],bssid[4],bssid[5])); RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("cur_bssid=%02x:%02x:%02x:%02x:%02x:%02x\n", pmlmepriv->cur_network.network.MacAddress[0],pmlmepriv->cur_network.network.MacAddress[1],pmlmepriv->cur_network.network.MacAddress[2], pmlmepriv->cur_network.network.MacAddress[3],pmlmepriv->cur_network.network.MacAddress[4],pmlmepriv->cur_network.network.MacAddress[5])); disassoc_cmd(padapter); if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) indicate_disconnect(padapter); free_assoc_resources(padapter); if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE)) { _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE); set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); } } } _memcpy(&pmlmepriv->assoc_bssid, bssid, ETH_ALEN); pmlmepriv->assoc_by_bssid = _TRUE; status = do_join(padapter); goto done; _Abort_Set_BSSID: RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("set_802_11_bssid: _Abort_Set_BSSID\n")); done: _exit_critical(&pmlmepriv->lock, &irqL); _func_exit_; return status; }