|
|
@@ -282,23 +282,6 @@ static int msg_invite(char *nick, char *host, struct userrec *u, char *par)
|
|
|
return BIND_RET_BREAK;
|
|
|
}
|
|
|
|
|
|
-static void reply(char *, struct chanset_t *, const char *, ...) __attribute__((format(printf, 3, 4)));
|
|
|
-
|
|
|
-static void reply(char *nick, struct chanset_t *chan, const char *format, ...)
|
|
|
-{
|
|
|
- va_list va;
|
|
|
- char buf[1024] = "";
|
|
|
-
|
|
|
- va_start(va, format);
|
|
|
- egg_vsnprintf(buf, sizeof buf, format, va);
|
|
|
- va_end(va);
|
|
|
-
|
|
|
- if (chan)
|
|
|
- privmsg(chan->name, buf, DP_HELP);
|
|
|
- else
|
|
|
- notice(nick, buf, DP_HELP);
|
|
|
-}
|
|
|
-
|
|
|
static void logc(const char *cmd, Auth *a, char *chname, char *par)
|
|
|
{
|
|
|
if (chname && chname[0])
|
|
|
@@ -491,299 +474,3 @@ static cmd_t C_msg[] =
|
|
|
{"bewm", "", (Function) msg_bewm, NULL, LEAF},
|
|
|
{NULL, NULL, NULL, NULL, 0}
|
|
|
};
|
|
|
-
|
|
|
-static int msgc_test(Auth *a, char *chname, char *par)
|
|
|
-{
|
|
|
- char *cmd = NULL;
|
|
|
-
|
|
|
- LOGC("TEST");
|
|
|
-
|
|
|
- cmd = newsplit(&par);
|
|
|
-
|
|
|
- if (a->GetIdx(chname)) {
|
|
|
- check_auth_dcc(a, cmd, par);
|
|
|
- }
|
|
|
-
|
|
|
- return BIND_RET_BREAK;
|
|
|
-}
|
|
|
-
|
|
|
-static int msgc_op(Auth *a, char *chname, char *par)
|
|
|
-{
|
|
|
- struct chanset_t *chan = NULL;
|
|
|
- struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 };
|
|
|
- int force = 0;
|
|
|
- memberlist *m = NULL;
|
|
|
-
|
|
|
- if (chname && chname[0]) {
|
|
|
- chan = findchan_by_dname(chname);
|
|
|
- if (chan)
|
|
|
- m = ismember(chan, a->nick);
|
|
|
- }
|
|
|
-
|
|
|
- LOGC("OP");
|
|
|
-
|
|
|
- if (par[0] == '-') { /* we have an option! */
|
|
|
- char *tmp = NULL;
|
|
|
-
|
|
|
- par++;
|
|
|
- tmp = newsplit(&par);
|
|
|
- if (!strcasecmp(tmp, "force") || !strcasecmp(tmp, "f"))
|
|
|
- force = 1;
|
|
|
- else {
|
|
|
- bd::String msg;
|
|
|
- msg.printf("Invalid option: %s", tmp);
|
|
|
- notice(a->nick, msg.c_str(), DP_HELP);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- }
|
|
|
- if (par[0] || chan) {
|
|
|
- if (!chan)
|
|
|
- chan = findchan_by_dname(par);
|
|
|
- if (chan && channel_active(chan)) {
|
|
|
- get_user_flagrec(a->user, &fr, chan->dname, chan);
|
|
|
- if (chk_op(fr, chan)) {
|
|
|
- if (do_op(a->nick, chan, 0, force))
|
|
|
- stats_add(a->user, 0, 1);
|
|
|
- }
|
|
|
- return BIND_RET_BREAK;
|
|
|
- }
|
|
|
- } else {
|
|
|
- for (chan = chanset; chan; chan = chan->next) {
|
|
|
- get_user_flagrec(a->user, &fr, chan->dname, chan);
|
|
|
- if (chk_op(fr, chan)) {
|
|
|
- if (do_op(a->nick, chan, 0, force))
|
|
|
- stats_add(a->user, 0, 1);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return BIND_RET_BREAK;
|
|
|
-}
|
|
|
-
|
|
|
-static int msgc_voice(Auth *a, char *chname, char *par)
|
|
|
-{
|
|
|
- struct chanset_t *chan = NULL;
|
|
|
- struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 };
|
|
|
- int force = 0;
|
|
|
- memberlist *m = NULL;
|
|
|
-
|
|
|
- if (chname && chname[0]) {
|
|
|
- chan = findchan_by_dname(chname);
|
|
|
- if (chan)
|
|
|
- m = ismember(chan, a->nick);
|
|
|
- }
|
|
|
- LOGC("VOICE");
|
|
|
-
|
|
|
- if (par[0] == '-') { /* we have an option! */
|
|
|
- char *tmp = NULL;
|
|
|
-
|
|
|
- par++;
|
|
|
- tmp = newsplit(&par);
|
|
|
- if (!strcasecmp(tmp, "force") || !strcasecmp(tmp, "f"))
|
|
|
- force = 1;
|
|
|
- else {
|
|
|
- bd::String msg;
|
|
|
- msg.printf("Invalid option: %s", tmp);
|
|
|
- notice(a->nick, msg.c_str(), DP_HELP);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- }
|
|
|
- if (par[0] || chan) {
|
|
|
- if (!chan)
|
|
|
- chan = findchan_by_dname(par);
|
|
|
- if (chan && channel_active(chan)) {
|
|
|
- get_user_flagrec(a->user, &fr, chan->dname, chan);
|
|
|
- if (!chk_devoice(fr)) { /* dont voice +q */
|
|
|
- add_mode(chan, '+', 'v', a->nick);
|
|
|
- }
|
|
|
- return BIND_RET_BREAK;
|
|
|
- }
|
|
|
- } else {
|
|
|
- for (chan = chanset; chan; chan = chan->next) {
|
|
|
- get_user_flagrec(a->user, &fr, chan->dname, chan);
|
|
|
- if (!chk_devoice(fr)) { /* dont voice +q */
|
|
|
- add_mode(chan, '+', 'v', a->nick);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return BIND_RET_BREAK;
|
|
|
-}
|
|
|
-
|
|
|
-static int msgc_channels(Auth *a, char *chname, char *par)
|
|
|
-{
|
|
|
- struct chanset_t *chan = NULL;
|
|
|
- struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 };
|
|
|
- char list[1024] = "";
|
|
|
-
|
|
|
- LOGC("CHANNELS");
|
|
|
- for (chan = chanset; chan; chan = chan->next) {
|
|
|
- get_user_flagrec(a->user, &fr, chan->dname, chan);
|
|
|
- if (chk_op(fr, chan)) {
|
|
|
- if (me_op(chan))
|
|
|
- strlcat(list, "@", sizeof(list));
|
|
|
- strlcat(list, chan->dname, sizeof(list));
|
|
|
- strlcat(list, " ", sizeof(list));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (list[0])
|
|
|
- reply(a->nick, NULL, "You have access to: %s\n", list);
|
|
|
- else
|
|
|
- reply(a->nick, NULL, "You do not have access to any channels.\n");
|
|
|
-
|
|
|
- return BIND_RET_BREAK;
|
|
|
-}
|
|
|
-
|
|
|
-static int msgc_getkey(Auth *a, char *chname, char *par)
|
|
|
-{
|
|
|
- struct chanset_t *chan = NULL;
|
|
|
- struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 };
|
|
|
-
|
|
|
- if (chname && chname[0])
|
|
|
- return 0;
|
|
|
-
|
|
|
- if (!par[0])
|
|
|
- return 0;
|
|
|
-
|
|
|
- LOGC("GETKEY");
|
|
|
- chan = findchan_by_dname(par);
|
|
|
- if (chan && channel_active(chan) && !channel_pending(chan)) {
|
|
|
- get_user_flagrec(a->user, &fr, chan->dname, chan);
|
|
|
- if (chk_op(fr, chan)) {
|
|
|
- if (chan->channel.key[0]) {
|
|
|
- reply(a->nick, NULL, "Key for %s is: %s\n", chan->name, chan->channel.key);
|
|
|
- } else {
|
|
|
- reply(a->nick, NULL, "%s has no key set.\n", chan->name);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return BIND_RET_BREAK;
|
|
|
-}
|
|
|
-
|
|
|
-static int msgc_help(Auth *a, char *chname, char *par)
|
|
|
-{
|
|
|
- LOGC("HELP");
|
|
|
-
|
|
|
- char outbuf[201] = "";
|
|
|
- struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 };
|
|
|
- bind_entry_t *entry = NULL;
|
|
|
- bind_table_t *table = NULL;
|
|
|
-
|
|
|
- get_user_flagrec(a->user, &fr, chname ? chname : NULL);
|
|
|
-
|
|
|
- table = bind_table_lookup("msgc");
|
|
|
-
|
|
|
- for (entry = table->entries; entry && entry->next; entry = entry->next)
|
|
|
- if (((chname && chname[0] && entry->cflags & AUTH_CHAN) ||
|
|
|
- ((!chname || !chname[0]) && entry->cflags & AUTH_MSG)) && flagrec_ok(&entry->user_flags, &fr)) {
|
|
|
- if (outbuf[0])
|
|
|
- strlcat(outbuf, " ", sizeof(outbuf));
|
|
|
- strlcat(outbuf, entry->mask, sizeof(outbuf));
|
|
|
- }
|
|
|
-
|
|
|
- reply(a->nick, NULL, "%s\n", outbuf);
|
|
|
- return BIND_RET_BREAK;
|
|
|
-}
|
|
|
-
|
|
|
-static int msgc_md5(Auth *a, char *chname, char *par)
|
|
|
-{
|
|
|
- struct chanset_t *chan = NULL;
|
|
|
-
|
|
|
- LOGC("MD5");
|
|
|
- if (chname && chname[0])
|
|
|
- chan = findchan_by_dname(chname);
|
|
|
-
|
|
|
- reply(a->nick, chan, "MD5(%s) = %s\n", par, MD5(par));
|
|
|
- return BIND_RET_BREAK;
|
|
|
-}
|
|
|
-
|
|
|
-static int msgc_sha1(Auth *a, char *chname, char *par)
|
|
|
-{
|
|
|
- struct chanset_t *chan = NULL;
|
|
|
-
|
|
|
- LOGC("SHA1");
|
|
|
-
|
|
|
- if (chname && chname[0])
|
|
|
- chan = findchan_by_dname(chname);
|
|
|
-
|
|
|
- reply(a->nick, chan, "SHA1(%s) = %s\n", par, SHA1(par));
|
|
|
- return BIND_RET_BREAK;
|
|
|
-}
|
|
|
-
|
|
|
-static int msgc_sha256(Auth *a, char *chname, char *par)
|
|
|
-{
|
|
|
- struct chanset_t *chan = NULL;
|
|
|
-
|
|
|
- LOGC("SHA256");
|
|
|
-
|
|
|
- if (chname && chname[0])
|
|
|
- chan = findchan_by_dname(chname);
|
|
|
-
|
|
|
- reply(a->nick, chan, "SHA256(%s) = %s\n", par, SHA256(par));
|
|
|
- return BIND_RET_BREAK;
|
|
|
-}
|
|
|
-
|
|
|
-static int msgc_invite(Auth *a, char *chname, char *par)
|
|
|
-{
|
|
|
- struct chanset_t *chan = NULL;
|
|
|
- struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0 };
|
|
|
- int force = 0;
|
|
|
-
|
|
|
- if (chname && chname[0])
|
|
|
- return 0;
|
|
|
-
|
|
|
- LOGC("INVITE");
|
|
|
- if (par[0] == '-') {
|
|
|
- char *tmp = NULL;
|
|
|
-
|
|
|
- par++;
|
|
|
- tmp = newsplit(&par);
|
|
|
- if (!strcasecmp(tmp, "force") || !strcasecmp(tmp, "f"))
|
|
|
- force = 1;
|
|
|
- else {
|
|
|
- bd::String msg;
|
|
|
- msg.printf("Invalid option: %s", tmp);
|
|
|
- notice(a->nick, msg.c_str(), DP_HELP);
|
|
|
- return 0;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (par[0] && (!chname || (chname && !chname[0]))) {
|
|
|
- chan = findchan_by_dname(par);
|
|
|
- if (chan && channel_active(chan) && !ismember(chan, a->nick)) {
|
|
|
- if ((!(chan->channel.mode & CHANINV) && force) || (chan->channel.mode & CHANINV)) {
|
|
|
- get_user_flagrec(a->user, &fr, chan->dname, chan);
|
|
|
- if (chk_op(fr, chan)) {
|
|
|
- cache_invite(chan, a->nick, a->host, a->handle, 0, 0);
|
|
|
- }
|
|
|
- return BIND_RET_BREAK;
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- for (chan = chanset; chan; chan = chan->next) {
|
|
|
- if (channel_active(chan) && !ismember(chan, a->nick)) {
|
|
|
- if ((!(chan->channel.mode & CHANINV) && force) || (chan->channel.mode & CHANINV)) {
|
|
|
- get_user_flagrec(a->user, &fr, chan->dname, chan);
|
|
|
- if (chk_op(fr, chan)) {
|
|
|
- cache_invite(chan, a->nick, a->host, a->handle, 0, 0);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return BIND_RET_BREAK;
|
|
|
-}
|
|
|
-
|
|
|
-static cmd_t C_msgc[] =
|
|
|
-{
|
|
|
- {"test", "a", (Function) msgc_test, NULL, LEAF|AUTH_CHAN|AUTH_MSG},
|
|
|
- {"channels", "", (Function) msgc_channels, NULL, LEAF|AUTH_CHAN|AUTH_MSG},
|
|
|
- {"getkey", "", (Function) msgc_getkey, NULL, LEAF|AUTH_MSG},
|
|
|
- {"help", "", (Function) msgc_help, NULL, LEAF|AUTH_CHAN|AUTH_MSG},
|
|
|
- {"invite", "", (Function) msgc_invite, NULL, LEAF|AUTH_MSG},
|
|
|
- {"md5", "", (Function) msgc_md5, NULL, LEAF|AUTH_MSG|AUTH_CHAN},
|
|
|
- {"op", "", (Function) msgc_op, NULL, LEAF|AUTH_CHAN|AUTH_MSG},
|
|
|
- {"sha1", "", (Function) msgc_sha1, NULL, LEAF|AUTH_CHAN|AUTH_MSG},
|
|
|
- {"sha256", "", (Function) msgc_sha256, NULL, LEAF|AUTH_CHAN|AUTH_MSG},
|
|
|
- {"voice", "", (Function) msgc_voice, NULL, LEAF|AUTH_CHAN|AUTH_MSG},
|
|
|
- {NULL, NULL, NULL, NULL, 0}
|
|
|
-};
|