From 390e0ffb0af02908483d696001a7c1b0fd29fc7f Mon Sep 17 00:00:00 2001 From: Emil Date: Sun, 6 Aug 2023 21:56:07 -0600 Subject: [PATCH] Add IDENT support --- README.md | 5 +++++ include/parse.h | 2 ++ src/irc.c | 23 ++++++++++++++++------- src/main.c | 3 +++ src/parse.c | 26 +++++++++++++------------- 5 files changed, 39 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 41ef6ba..d8ae21c 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,11 @@ non-developmental deployments. This'll require a few libraries: libircclient-dev libsqlite3-dev build-essentials +* Hosting + +https://git.lain.church/emil/probotic +https://bis64wqhh3louusbd45iyj76kmn4rzw5ysawyan5bkxwyzihj67c5lid.onion/emil/probotic + * License Copyright 2023 https://git.lain.church/anon , diff --git a/include/parse.h b/include/parse.h index 6bb3147..543401f 100644 --- a/include/parse.h +++ b/include/parse.h @@ -10,6 +10,8 @@ typedef struct } creds_t; VARDECL creds_t creds; +/* nickserv identify password */ +VARDECL char * ident_password = NULL; /* DECL char ** str_split(char const * s, char c); */ /* DECL void split_clean(char ** split); */ diff --git a/src/irc.c b/src/irc.c index 2353064..13db8a4 100644 --- a/src/irc.c +++ b/src/irc.c @@ -52,7 +52,7 @@ get_username(const char * origin) } DECL void -ircmsg(const char* fmt, +ircmsg(char const * reciever, char const * fmt, ...) { va_list args; @@ -72,7 +72,7 @@ ircmsg(const char* fmt, do { swp = irc_color_convert_to_mirc(data); - IRCMSG(swp); + irc_cmd_msg(session, reciever, swp); free(swp); } while((data = strtok(NULL, delim), data)); @@ -80,11 +80,13 @@ ircmsg(const char* fmt, va_end(args); } + + DECL void event_connect(irc_session_t * lsession, - const char * event, - const char * origin, - const char ** params, + char const * event, + char const * origin, + char const ** params, unsigned int count) { (void) event; @@ -93,13 +95,20 @@ event_connect(irc_session_t * lsession, (void) count; /* msg ChanServ IDENTIFY? */ irc_cmd_join(lsession, creds.channel, 0); + if (ident_password) + { + if (ircmsg("NickServ", "IDENTIFY %s" ident_password)) + { exit(1); } + memset(ident_password, '\0', strlen(indent_password)); + } + #ifdef INITIAL_ASSIGNMENT_MESSAGE if(is_no_assignment(creds.channel)) { - ircmsg(IRC_RED "No assignment for this channel. Finding a new..." IRC_STOP); + ircmsg(creds.channel, IRC_RED "No assignment for this channel. Finding a new..." IRC_STOP); random_assign(creds.channel); } - ircmsg(remind(creds.channel)); + ircmsg(creds.channel, remind(creds.channel)); #endif /* INITIAL_ASSIGNMENT_MESSAGE */ } diff --git a/src/main.c b/src/main.c index 2eed5bf..a4254e8 100644 --- a/src/main.c +++ b/src/main.c @@ -60,6 +60,9 @@ main (int argc, /* { creds.port = atoi(argv[1]); } */ else if (strcmp(arg, "channel") == 0) { free(creds.channel); creds.channel = strdup(argv[1]); } + else if (strcmp(arg, "identify") == 0) + { ident_password = argv[1]; } + /* else if (strcmp(arg, "username") == 0) */ /* { free(creds.username); creds.username = strdup(argv[1]); } */ /* else if (strcmp(arg, "password") == 0) */ diff --git a/src/parse.c b/src/parse.c index 3a279aa..dcb9816 100644 --- a/src/parse.c +++ b/src/parse.c @@ -117,28 +117,28 @@ parse_command(char const * cmd) if (strcmp(cmd, "remind") == 0) { msgswp = remind(current_username); - ircmsg("%s: %s", current_username, msgswp); + ircmsg(creds.channel, "%s: %s", current_username, msgswp); } else if (strcmp(cmd, "help") == 0) - { ircmsg(help_msg); } + { ircmsg(creds.channel, help_msg); } else if (strcmp(cmd, "magic") == 0) - { ircmsg("%s: " IRC_YELLOW "%d" IRC_STOP, current_username, (rand() % 100) + 1); } + { ircmsg(creds.channel, "%s: " IRC_YELLOW "%d" IRC_STOP, current_username, (rand() % 100) + 1); } else if (strcmp(cmd, "dump") == 0) { #ifndef NO_VULN_COMMANDS - ircmsg("%s: All projects:", current_username); + ircmsg(creds.channel, "%s: All projects:", current_username); msgswp = dump(); - ircmsg(msgswp); + ircmsg(creds.channel, msgswp); #else - ircmsg("%s: dump disabled", current_username); + ircmsg(creds.channel, "%s: dump disabled", current_username); #endif /* !NO_VULN_COMMANDS */ } else if (strcmp(cmd, "reroll") == 0) { - /* ircmsg("%s: Rerolling...", current_username); */ + /* ircmsg(creds.channel, "%s: Rerolling...", current_username); */ purge_assignments(current_username); random_assign(current_username); - ircmsg("%s: %s", current_username, remind(current_username)); + ircmsg(creds.channel, "%s: %s", current_username, remind(current_username)); } } else @@ -148,19 +148,19 @@ parse_command(char const * cmd) if (strncmp(cmd, "raw", i) == 0) { #ifndef NO_VULN_COMMANDS - /* ircmsg("%s: Executing SQL `%s'.", current_username, arg); */ + /* ircmsg(creds.channel, "%s: Executing SQL `%s'.", current_username, arg); */ msgswp = raw(arg); - ircmsg(msgswp); + ircmsg(creds.channel, msgswp); #else - ircmsg("%s: raw disabled", current_username); + ircmsg(creds.channel, "%s: raw disabled", current_username); #endif /* !NO_VULN_COMMANDS */ } else if (strncmp(cmd, "repo", i) == 0) { - /* ircmsg("%s: Setting project repository...", current_username); */ + /* ircmsg(creds.channel, "%s: Setting project repository...", current_username); */ set_repo(creds.channel, arg); msgswp = remind(creds.channel); - ircmsg("%s: %s", current_username, msgswp); + ircmsg(creds.channel, "%s: %s", current_username, msgswp); } } free(msgswp);