Esempio n. 1
0
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;
}
Esempio n. 2
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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
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
}	
Esempio n. 5
0
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;
}
Esempio n. 6
0
File: main.c Progetto: aspiers/booth
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;
}
Esempio n. 7
0
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;
}
Esempio n. 8
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;
}