#define CMD_SETTIME "SETTIME"
#define CMD_SHUN "SHUN"
#define CMD_SILENCE "SILENCE"
+#define CMD_SNO "SNO"
#define CMD_SQUERY "SQUERY"
#define CMD_SQUIT "SQUIT"
#define CMD_STATS "STATS"
#define TOK_SETTIME "SE"
#define TOK_SHUN "SU"
#define TOK_SILENCE "U"
+#define TOK_SNO "SNO"
#define TOK_SQUERY "SQUERY"
#define TOK_SQUIT "SQ"
#define TOK_STATS "R"
#define P10_SETTIME TYPE(SETTIME)
#define P10_SHUN TYPE(SHUN)
#define P10_SILENCE TYPE(SILENCE)
+#define P10_SNO TYPE(SNO)
#define P10_SQUERY TYPE(SQUERY)
#define P10_SQUIT TYPE(SQUIT)
#define P10_STATS TYPE(STATS)
}
}
-static void
+void
irc_p10_pton(irc_in_addr_t *ip, const char *input)
{
if (strlen(input) == 6) {
}
}
-static void
+void
irc_p10_ntop(char *output, const irc_in_addr_t *ip)
{
if (!irc_in_addr_is_valid(*ip)) {
modes[modelen++] = 'f';
if (IsHiddenHost(user))
modes[modelen++] = 'x';
+ if (IsBotM(user))
+ modes[modelen++] = 'B';
+ if (IsHideChans(user))
+ modes[modelen++] = 'n';
+ if (IsHideIdle(user))
+ modes[modelen++] = 'I';
+ if (IsXtraOp(user))
+ modes[modelen++] = 'X';
+
modes[modelen] = 0;
/* we don't need to put the + in modes because it's in the format string. */
if(!strcmp(argv[2],"C"))
{
- if((hi = loc_auth(argv[4], argv[5])))
+ if((hi = loc_auth(argv[4], argv[5], NULL)))
+ {
+ /* Return a AC A */
+ putsock("%s " P10_ACCOUNT " %s A %s %lu", self->numeric, server->numeric , argv[3], hi->registered);
+
+ }
+ else
+ {
+ /* Return a AC D */
+ putsock("%s " P10_ACCOUNT " %s D %s", self->numeric, server->numeric , argv[3]);
+ }
+ return 1;
+ }
+ else if(!strcmp(argv[2],"H")) /* New enhanced (host) version of C */
+ {
+ if((hi = loc_auth(argv[5], argv[6], argv[4] )))
{
/* Return a AC A */
putsock("%s " P10_ACCOUNT " %s A %s %lu", self->numeric, server->numeric , argv[3], hi->registered);
static char exemptlist[MAXLEN], banlist[MAXLEN];
unsigned int next = 3, res = 1;
int ctype = 0, echeck = 0, bcheck = 0;
+ struct chanData *cData;
struct chanNode *cNode;
struct userNode *un;
struct modeNode *mNode;
irc_burst(cNode);
}
cNode = AddChannel(argv[1], in_timestamp, modes, banlist, exemptlist);
+ cData = cNode->channel_info;
+
+ if (!cData) {
+ if (cNode->modes & MODE_REGISTERED) {
+ irc_join(opserv, cNode);
+ irc_mode(opserv, cNode, "-z");
+ irc_part(opserv, cNode, "");
+ }
+ }
/* Burst channel members in now. */
for (user = members, sep = *members, mode = 0; sep; user = end) {
return 0;
}
- target->version_reply = strdup(unsplit_string(argv + 3, argc - 3, NULL));
+ char *version = unsplit_string(argv + 3, argc - 3, NULL);
+ if(!version)
+ version = "";
+
+ target->version_reply = strdup(version);
+
+ if(match_ircglob(version, "WebTV;*"))
+ target->no_notice = true; /* webbies cant see notices */
+
return 1;
}
/* unknown type of mark */
dict_insert(irc_func_dict, TOK_VERSION, cmd_version);
dict_insert(irc_func_dict, CMD_ADMIN, cmd_admin);
dict_insert(irc_func_dict, TOK_ADMIN, cmd_admin);
+ dict_insert(irc_func_dict, CMD_SNO, cmd_dummy);
+ dict_insert(irc_func_dict, TOK_SNO, cmd_dummy);
dict_insert(irc_func_dict, CMD_RPING, cmd_rping);
dict_insert(irc_func_dict, TOK_RPING, cmd_rping);
case 'd': do_user_mode(FLAGS_DEAF); break;
case 'k': do_user_mode(FLAGS_SERVICE); break;
case 'g': do_user_mode(FLAGS_GLOBAL); break;
- // sethost - reed/apples
- // case 'h': do_user_mode(FLAGS_HELPER); break;
- // I check if there's an 'h' in the first part, and if there,
- // then everything after the space becomes their new host.
+ case 'B': do_user_mode(FLAGS_BOT); break;
+ case 'n': do_user_mode(FLAGS_HIDECHANS); break;
+ case 'I': do_user_mode(FLAGS_HIDEIDLE); break;
+ case 'X': do_user_mode(FLAGS_XTRAOP); break;
case 'C': do_user_mode(FLAGS_CLOAKHOST);
if (*word) {
char cloakhost[MAXLEN];
safestrncpy(user->cryptip, cloakip, sizeof(user->cryptip));
}
break;
+ // sethost - reed/apples
+ // case 'h': do_user_mode(FLAGS_HELPER); break;
+ // I check if there's an 'h' in the first part, and if there,
+ // then everything after the space becomes their new host.
case 'h': do_user_mode(FLAGS_SETHOST);
if (*word) {
char sethost[MAXLEN];