static int mo_grant(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { struct Client *target_p; if(!IsOperGrant(source_p)) { sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "grant"); return 0; } target_p = find_named_person(parv[1]); if(target_p == NULL) { sendto_one_numeric(source_p, ERR_NOSUCHNICK, form_str(ERR_NOSUCHNICK), parv[1]); return 0; } if(MyClient(target_p)) { do_grant(source_p, target_p, parv[2]); } else { sendto_one(target_p, ":%s ENCAP %s GRANT %s %s", get_id(source_p, target_p), target_p->servptr->name, get_id(target_p, target_p), parv[2]); } return 0; }
static int do_client(void) { int rv = -1; rv = setup_config(CLIENT); if (rv < 0) { log_error("cannot read config"); goto out; } switch (cl.op) { case CMD_LIST: rv = query_get_string_answer(CMD_LIST); break; case CMD_GRANT: rv = do_grant(); break; case CMD_REVOKE: rv = do_revoke(); break; } out: return rv; }
static int me_grant(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { struct Client *target_p; target_p = find_person(parv[1]); if (target_p == NULL) { sendto_one_numeric(source_p, ERR_NOSUCHNICK, form_str(ERR_NOSUCHNICK), "grant"); return 0; } if (!find_shared_conf(source_p->username, source_p->host, source_p->servptr->name, SHARED_GRANT)) { sendto_one(source_p, ":%s NOTICE %s :You don't have an appropriate shared" "block to grant privilege on this server.", me.name, source_p->name); return 0; } if (MyClient(target_p)) send_oper_motd(target_p); do_grant(source_p, target_p, parv[2], 0); return 0; }
void iSLIP_schedule(int *accept,int *request,int *grant,int *ai,int *gi,int *ql,int numPort) { init(accept,request,grant,numPort); send_request(request,ql,numPort); #ifdef DEBUG print_request(request,numPort); #endif do_grant(request,grant,gi,numPort); #ifdef DEBUG print_grant(grant,gi,numPort); #endif do_accept(accept,grant,ai,numPort); update_priorityPointers(grant,accept,gi,numPort); #ifdef DEBUG print_accept(accept,ai,numPort); print_pointers(gi,numPort); #endif }
static int me_grant(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { struct Client *target_p; int addflags = 0, removeflags = 0, dooper = 0, dodeoper = 0, add_snomask = 0, remove_snomask = 0; int i = 0; const char *p; target_p = find_person(parv[1]); if (target_p == NULL) { sendto_one_numeric(source_p, ERR_NOSUCHNICK, form_str(ERR_NOSUCHNICK), parv[1]); return 0; } if(!find_shared_conf(source_p->username, source_p->host, source_p->user->server, SHARED_GRANT)) return 0; p = parv[2]; for (i = 0; oper_flagtable[i].flag; ++i) { if (*p == oper_flagtable[i].has) addflags |= oper_flagtable[i].flag; else if (*p == oper_flagtable[i].hasnt) removeflags |= oper_flagtable[i].flag; else if (*p == '\0' || *p == '.') break; else continue; ++p; } dooper = atoi(parv[3]); dodeoper = atoi(parv[4]); add_snomask = parse_snobuf_to_mask(0, parv[5]); remove_snomask = ~parse_snobuf_to_mask(~0, parv[5]); do_grant(source_p, target_p, addflags, removeflags, dooper, dodeoper, add_snomask, remove_snomask); return 0; }
static int do_client(void) { int rv = -1; switch (cl.op) { case OP_LIST: rv = do_list(); break; case OP_GRANT: rv = do_grant(); break; case OP_REVOKE: rv = do_revoke(); break; } return rv; }
static int mo_grant(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { struct Client *target_p; int addflags = 0, removeflags = 0; int dooper = 0, dodeoper = 0; int i, j; int dir; const char *p; char *q; int add_snomask = 0, remove_snomask = 0; char oper_flag_changes[32], snomask_changes[64]; if(!IsOperGrant(source_p)) { sendto_one(source_p, form_str(ERR_NOPRIVS), me.name, source_p->name, "grant"); return 0; } target_p = find_named_person(parv[1]); if (target_p == NULL) { sendto_one_numeric(source_p, ERR_NOSUCHNICK, form_str(ERR_NOSUCHNICK), parv[1]); return 0; } for (i = 2; i < parc; i++) { p = parv[i]; if (*p == '-') dir = MODE_DEL, p++; else if (*p == '+') dir = MODE_ADD, p++; else dir = MODE_ADD; if (!irccmp(p, "oper")) { if (dir == MODE_ADD) dooper = 1, dodeoper = 0; else dodeoper = 1, dooper = 0; continue; } if (!irccmp(p, "snomask")) { add_snomask = parse_snobuf_to_mask(0, parv[++i]); remove_snomask = ~parse_snobuf_to_mask(~0, parv[i]); continue; } for (j = 0; flag_table[j].name != NULL; j++) { if (!irccmp(p, flag_table[j].name)) { if (dir == MODE_ADD) addflags |= flag_table[j].mode, removeflags &= ~flag_table[j].mode; else removeflags |= flag_table[j].mode, addflags &= ~flag_table[j].mode; break; } } if (flag_table[j].name == NULL) { sendto_one_notice(source_p, ":Unknown GRANT keyword '%s'", p); return 0; } } if (((addflags | removeflags) & source_p->operflags) != (addflags | removeflags)) { sendto_one_notice(source_p, ":You may not change flags you do not have access to"); return 0; } if (MyClient(target_p)) { do_grant(source_p, target_p, addflags, removeflags, dooper, dodeoper, add_snomask, remove_snomask); } else { q = oper_flag_changes; for (i = 0; oper_flagtable[i].flag; ++i) { if (addflags & oper_flagtable[i].flag) *q++ = oper_flagtable[i].has; else if (removeflags & oper_flagtable[i].flag) *q++ = oper_flagtable[i].hasnt; } if(q == oper_flag_changes) *q++ = '.'; *q++ = '\0'; strlcpy(snomask_changes, construct_snobuf_changes(add_snomask, remove_snomask), sizeof(snomask_changes)); sendto_realops_snomask(SNO_DEBUG, L_NETWIDE, "Sending ENCAP GRANT %s %s %d %d %s to %s", get_id(target_p, target_p), oper_flag_changes, dooper, dodeoper, snomask_changes, target_p->servptr->name); sendto_one(target_p, ":%s ENCAP %s GRANT %s %s %d %d %s", get_id(source_p, target_p), target_p->servptr->name, get_id(target_p, target_p), oper_flag_changes, dooper, dodeoper, snomask_changes); } return 0; }
void do_grant(CHAR_DATA *ch, char *argument) { int cmd; CHAR_DATA * victim; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); if(arg1[0]=='\0') { send_to_char("\n\r{WSyntax:{C grant {Y<player>{B <command>{x\n\r", ch); return; } if((victim=get_char_world(ch, arg1))==NULL) { send_to_char("\n\r{CThat Player is not online.{x\n\r", ch); return; } if(IS_NPC(victim)) { send_to_char("\n\r{RNot on NPC's.{x\n\r", ch ); return; } if(arg2[0]=='\0') { sprintf(buf, "\n\r{CPlayer {W%s{C has been granted the following commands:{x\n\r", victim->name); send_to_char(buf, ch); show_granted_to_char(victim, ch); return; } if(!strcmp(arg2, "builder")) { sprintf(buf, "%s alist", victim->name); do_grant(ch, buf); sprintf(buf, "%s asave", victim->name); do_grant(ch, buf); sprintf(buf, "%s force", victim->name); do_grant(ch, buf); sprintf(buf, "%s fvlist", victim->name); do_grant(ch, buf); sprintf(buf, "%s goto", victim->name); do_grant(ch, buf); sprintf(buf, "%s grab", victim->name); do_grant(ch, buf); sprintf(buf, "%s hedit", victim->name); do_grant(ch, buf); sprintf(buf, "%s holylight", victim->name); do_grant(ch, buf); sprintf(buf, "%s medit", victim->name); do_grant(ch, buf); sprintf(buf, "%s mlevel", victim->name); do_grant(ch, buf); sprintf(buf, "%s mload", victim->name); do_grant(ch, buf); sprintf(buf, "%s mpedit", victim->name); do_grant(ch, buf); sprintf(buf, "%s msearch", victim->name); do_grant(ch, buf); sprintf(buf, "%s mstat", victim->name); do_grant(ch, buf); sprintf(buf, "%s oedit", victim->name); do_grant(ch, buf); sprintf(buf, "%s oload", victim->name); do_grant(ch, buf); sprintf(buf, "%s olevel", victim->name); do_grant(ch, buf); sprintf(buf, "%s osearch", victim->name); do_grant(ch, buf); sprintf(buf, "%s ostat", victim->name); do_grant(ch, buf); sprintf(buf, "%s otype", victim->name); do_grant(ch, buf); sprintf(buf, "%s peace", victim->name); do_grant(ch, buf); sprintf(buf, "%s purge", victim->name); do_grant(ch, buf); sprintf(buf, "%s redit", victim->name); do_grant(ch, buf); sprintf(buf, "%s resets", victim->name); do_grant(ch, buf); sprintf(buf, "%s rstat", victim->name); do_grant(ch, buf); sprintf(buf, "%s slay", victim->name); do_grant(ch, buf); sprintf(buf, "%s stat", victim->name); do_grant(ch, buf); sprintf(buf, "%s vlist", victim->name); do_grant(ch, buf); sprintf(buf, "%s vnumlist", victim->name); do_grant(ch, buf); } for(cmd=0;cmd_table[cmd].name[0]!='\0';cmd++) { if(!str_prefix(arg2, cmd_table[cmd].name)) break; } if(cmd_table[cmd].name[0]=='\0') { send_to_char("\n\r{RNo valid command found.{x\n\r", ch); return; } if(strcmp(cmd_table[cmd].name, "wizhelp") && array_find(victim->pcdata->granted, "wizhelp")==-1) { sprintf(buf, "%s wizhelp", victim->name); do_grant(ch, buf); } if(array_find(victim->pcdata->granted, cmd_table[cmd].name)!=-1) { sprintf(buf, "\n\r{W%s{R already has the {W%s{R command!{x\n\r", victim->name, cmd_table[cmd].name); send_to_char(buf, ch); return; } victim->pcdata->granted = array_append(victim->pcdata->granted, cmd_table[cmd].name); sprintf(buf, "\n\r{GCommand {W%s{G was granted to player {W%s{x\n\r", cmd_table[cmd].name, victim->name); send_to_char(buf, ch); sprintf(buf, "\n\r{GYou have been granted the command: {W%s{x\n\r", cmd_table[cmd].name); send_to_char(buf, victim); return; }