Beispiel #1
0
static void ns_cmd_status(sourceinfo_t *si, int parc, char *parv[])
{
    logcommand(si, CMDLOG_GET, "STATUS");

    if (!si->smu)
        command_success_nodata(si, _("You are not logged in."));
    else
    {
        command_success_nodata(si, _("You are logged in as \2%s\2."), entity(si->smu)->name);

        if (is_soper(si->smu))
        {
            soper_t *soper = si->smu->soper;

            command_success_nodata(si, _("You are a services operator of class %s."), soper->operclass ? soper->operclass->name : soper->classname);
        }
    }

    if (si->su != NULL)
    {
        mynick_t *mn;

        mn = mynick_find(si->su->nick);
        if (mn != NULL && mn->owner != si->smu &&
                myuser_access_verify(si->su, mn->owner))
            command_success_nodata(si, _("You are recognized as \2%s\2."), entity(mn->owner)->name);
    }

    if (si->su != NULL && is_admin(si->su))
        command_success_nodata(si, _("You are a server administrator."));

    if (si->su != NULL && is_ircop(si->su))
        command_success_nodata(si, _("You are an IRC operator."));
}
Beispiel #2
0
static void on_user_away(user_t *u)
{
	myuser_t *mu;
	mynick_t *mn;

	if (u->flags & UF_AWAY)
		return;
	mu = u->myuser;
	if (mu == NULL)
	{
		mn = mynick_find(u->nick);
		if (mn != NULL && myuser_access_verify(u, mn->owner))
			mu = mn->owner;
	}
	if (mu == NULL)
		return;
	if (mu->memoct_new > 0)
	{
		notice(memosvs->me->nick, u->nick, ngettext(N_("You have %d new memo."),
						       N_("You have %d new memos."),
						       mu->memoct_new), mu->memoct_new);
		notice(memosvs->me->nick, u->nick, _("To read them, type /%s%s READ NEW"),
					ircd->uses_rcommand ? "" : "msg ", memosvs->disp);
	}
}
Beispiel #3
0
static void
on_user_away(struct user *u)
{
	struct myuser *mu;
	struct mynick *mn;

	if (u->flags & UF_AWAY)
		return;
	mu = u->myuser;
	if (mu == NULL)
	{
		mn = mynick_find(u->nick);
		if (mn != NULL && myuser_access_verify(u, mn->owner))
			mu = mn->owner;
	}
	if (mu == NULL)
		return;
	if (mu->memoct_new > 0)
	{
		notice(memosvs->me->nick, u->nick, "You have %u new memo(s).", mu->memoct_new);
		notice(memosvs->me->nick, u->nick, "To read them, type \2/msg %s READ NEW\2", memosvs->disp);
	}
	if (mu->memos.count >= maxmemos)
	{
		notice(memosvs->me->nick, u->nick, "Your memo inbox is full! Please "
		                                   "delete memos you no longer need.");
	}
}
Beispiel #4
0
static void ns_cmd_acc(sourceinfo_t *si, int parc, char *parv[])
{
    const char *targuser = parv[0];
    const char *targaccount = parv[1];
    user_t *u;
    myuser_t *mu;
    mynick_t *mn;
    bool show_id = config_options.show_entity_id || has_priv(si, PRIV_USER_AUSPEX);

    if (!targuser)
    {
        u = si->su;
        targuser = u != NULL ? u->nick : "?";
    }
    else
        u = user_find_named(targuser);

    if (!u)
    {
        command_fail(si, fault_nosuch_target, _("%s%s%s ACC 0 (offline)"), targuser, parc >= 2 ? " -> " : "", parc >= 2 ? targaccount : "");
        return;
    }

    if (!targaccount)
        targaccount = u->nick;
    if (!strcmp(targaccount, "*"))
        mu = u->myuser;
    else
        mu = myuser_find_ext(targaccount);

    if (!mu)
    {
        command_fail(si, fault_nosuch_target, _("%s%s%s ACC 0 (not registered)"), u->nick, parc >= 2 ? " -> " : "", parc >= 2 ? targaccount : "");
        return;
    }

    if (u->myuser == mu)
        command_success_nodata(si, "%s%s%s ACC 3 %s",
                               u->nick,
                               parc >= 2 ? " -> " : "",
                               parc >= 2 ? entity(mu)->name : "",
                               show_id ? entity(mu)->id : "");
    else if ((mn = mynick_find(u->nick)) != NULL && mn->owner == mu &&
             myuser_access_verify(u, mu))
        command_success_nodata(si, "%s%s%s ACC 2 %s",
                               u->nick,
                               parc >= 2 ? " -> " : "",
                               parc >= 2 ? entity(mu)->name : "",
                               show_id ? entity(mu)->id : "");
    else
        command_success_nodata(si, "%s%s%s ACC 1 %s",
                               u->nick,
                               parc >= 2 ? " -> " : "",
                               parc >= 2 ? entity(mu)->name : "",
                               show_id ? entity(mu)->id : "");
}
Beispiel #5
0
static void nickserv_handle_nickchange(user_t *u)
{
	mynick_t *mn;
	hook_nick_enforce_t hdata;

	if (nicksvs.me == NULL || nicksvs.no_nick_ownership)
		return;

	/* They're logged in, don't send them spam -- jilles */
	if (u->myuser)
		u->flags |= UF_SEENINFO;

	/* Also don't send it if they came back from a split -- jilles */
	if (!(u->server->flags & SF_EOB))
		u->flags |= UF_SEENINFO;

	if (!(mn = mynick_find(u->nick)))
	{
		if (!nicksvs.spam)
			return;

		if (!(u->flags & UF_SEENINFO))
		{
			notice(nicksvs.nick, u->nick, "Welcome to %s, %s! Here on %s, we provide services to enable the "
			       "registration of nicknames and channels! For details, type \2/%s%s help\2 and \2/%s%s help\2.",
			       me.netname, u->nick, me.netname, (ircd->uses_rcommand == false) ? "msg " : "", nicksvs.me->disp, (ircd->uses_rcommand == false) ? "msg " : "", chansvs.me->disp);

			u->flags |= UF_SEENINFO;
		}

		return;
	}

	if (u->myuser == mn->owner)
	{
		mn->lastseen = CURRTIME;
		return;
	}

	/* OpenServices: is user on access list? -nenolod */
	if (myuser_access_verify(u, mn->owner))
	{
		notice(nicksvs.nick, u->nick, _("Please identify via \2/%s%s identify <password>\2."),
			(ircd->uses_rcommand == false) ? "msg " : "", nicksvs.me->disp);
		return;
	}

	notice(nicksvs.nick, u->nick, _("This nickname is registered. Please choose a different nickname, or identify via \2/%s%s identify <password>\2."),
		(ircd->uses_rcommand == false) ? "msg " : "", nicksvs.me->disp);
	hdata.u = u;
	hdata.mn = mn;
	hook_call_nick_enforce(&hdata);
}
Beispiel #6
0
static void hs_cmd_off(sourceinfo_t *si, int parc, char *parv[])
{
	mynick_t *mn = NULL;
	metadata_t *md;
	char buf[BUFSIZE];

	if (si->su == NULL)
	{
		command_fail(si, fault_noprivs, _("\2%s\2 can only be executed via IRC."), "OFF");
		return;
	}

	if (si->smu == NULL)
	{
		command_fail(si, fault_noprivs, _("You are not logged in."));
		return;
	}

	mn = mynick_find(si->su->nick);
	if (mn == NULL)
	{
		command_fail(si, fault_nosuch_target, _("Nick \2%s\2 is not registered."), si->su->nick);
		return;
	}
	if (mn->owner != si->smu && !myuser_access_verify(si->su, mn->owner))
	{
		command_fail(si, fault_noprivs, _("You are not recognized as \2%s\2."), mn->owner->name);
		return;
	}
	snprintf(buf, BUFSIZE, "%s:%s", "private:usercloak", mn->nick);
	md = metadata_find(si->smu, buf);
	if (md == NULL)
		md = metadata_find(si->smu, "private:usercloak");
	if (md == NULL)
	{
		command_success_nodata(si, _("Please contact an Operator to get a vhost assigned to this nick."));
		return;
	}
	do_sethost(si->su, NULL);
	command_success_nodata(si, _("Your vhost of \2%s\2 is now deactivated."), md->value);
}
Beispiel #7
0
static void cs_cmd_status(sourceinfo_t *si, int parc, char *parv[])
{
	char *chan = parv[0];

	if (chan)
	{
		mychan_t *mc = mychan_find(chan);
		unsigned int flags;

		if (*chan != '#')
		{
			command_fail(si, fault_badparams, STR_INVALID_PARAMS, "STATUS");
			return;
		}

		if (!mc)
		{
			command_fail(si, fault_nosuch_target, _("Channel \2%s\2 is not registered."), chan);
			return;
		}

		logcommand(si, CMDLOG_GET, "STATUS: \2%s\2", mc->name);
		
		if (metadata_find(mc, "private:close:closer"))
		{
			command_fail(si, fault_noprivs, _("\2%s\2 is closed."), chan);
			return;
		}

		flags = chanacs_source_flags(mc, si);
		if (flags & CA_AKICK && !(flags & CA_EXEMPT))
			command_success_nodata(si, _("You are banned from \2%s\2."), mc->name);
		else if (flags != 0)
		{
			command_success_nodata(si, _("You have access flags \2%s\2 on \2%s\2."), bitmask_to_flags(flags), mc->name);
		}
		else
			command_success_nodata(si, _("You have no special access to \2%s\2."), mc->name);

		return;
	}

	logcommand(si, CMDLOG_GET, "STATUS");
	if (!si->smu)
		command_success_nodata(si, _("You are not logged in."));
	else
	{
		command_success_nodata(si, _("You are logged in as \2%s\2."), entity(si->smu)->name);

		if (is_soper(si->smu))
		{
			soper_t *soper = si->smu->soper;

			command_success_nodata(si, _("You are a services operator of class %s."), soper->operclass ? soper->operclass->name : soper->classname);
		}
	}

	if (si->su != NULL)
	{
		mynick_t *mn;

		mn = mynick_find(si->su->nick);
		if (mn != NULL && mn->owner != si->smu &&
				myuser_access_verify(si->su, mn->owner))
			command_success_nodata(si, _("You are recognized as \2%s\2."), entity(mn->owner)->name);
	}

	if (si->su != NULL && is_admin(si->su))
		command_success_nodata(si, _("You are a server administrator."));

	if (si->su != NULL && is_ircop(si->su))
		command_success_nodata(si, _("You are an IRC operator."));
}