Download raw body.
update: net/icbirc
Hi,
A new version of icbirc was just released, with all patches upstreamed.
I would like to update it, and take maintainership.
Also, a question regarding pkg/MESSAGE :
icbirc does not support "CAP LS" which newer irssi versions send by
default; use 'no_cap = "yes"' in irssi server config to disable this.
the fact that icbirc doesn't support "CAP" (ircv3 feature) shouldn't be
problematic for any irc client. the CAP commands was designed for be
compatible with strict ircv2 servers.
see https://ircv3.net/specs/extensions/capability-negotiation.html
in icbirc-2.1 a warning was issued (but it was just a warning), and in
icbrc-2.2 the "CAP" command is just ignored (without warning).
could someone using irssi and icbirc test it without 'no_cap = "yes"' ?
Regards.
--
Sebastien Marie
diff /home/semarie/repos/openbsd/ports
commit - 601805c76cc60fddc086621b9056815cca5b37aa
path + /home/semarie/repos/openbsd/ports
blob - f81e0f68d9a77887b0cf447dcae860fbf296deb0
file + net/icbirc/Makefile
--- net/icbirc/Makefile
+++ net/icbirc/Makefile
@@ -1,17 +1,18 @@
COMMENT= proxy IRC client with ICB server
-DISTNAME= icbirc-2.1
-REVISION= 5
+DISTNAME = icbirc-2.2
CATEGORIES= net
SITES= https://www.benzedrine.ch/
HOMEPAGE= https://www.benzedrine.ch/icbirc.html
+MAINTAINER = Sebastien Marie <semarie@kapouay.eu.org>
+
# BSD
PERMIT_PACKAGE= Yes
# uses pledge()
-WANTLIB= c
+WANTLIB += c
NO_TEST= Yes
blob - ea9b79e98b033c27da298037a143387ecb8314bc
file + net/icbirc/distinfo
--- net/icbirc/distinfo
+++ net/icbirc/distinfo
@@ -1,2 +1,2 @@
-SHA256 (icbirc-2.1.tar.gz) = aDk0TZPABNqX7Gu12AWh234Kee/DhwRFeIBDYnFiu7E=
-SIZE (icbirc-2.1.tar.gz) = 11257
+SHA256 (icbirc-2.2.tar.gz) = 3gRbT8gmq8NI1Pg6xnShNfru5yNaSUHV2vNehag8Kz4=
+SIZE (icbirc-2.2.tar.gz) = 11410
blob - d67cf2350f01d7806d1a6ac876ffc15b375854a8
file + /dev/null
--- net/icbirc/patches/patch-Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
---- Makefile.orig Sat Apr 22 15:57:35 2017
-+++ Makefile Sat Apr 22 15:57:46 2017
-@@ -4,6 +4,6 @@ PROG= icbirc
- SRCS= icbirc.c icb.c irc.c
- MAN= icbirc.8
-
--CFLAGS+= -Wall -Werror -Wstrict-prototypes -ansi
-+CFLAGS+= -Wall -Wstrict-prototypes -ansi
-
- .include <bsd.prog.mk>
blob - 890565c5d48c52b6cf6fbdd7d03b2897508da292
file + /dev/null
--- net/icbirc/patches/patch-icb_c
+++ /dev/null
@@ -1,17 +0,0 @@
-According to RFC2815 section 5.1: The server sends Replies 001 to 004 to a user
-upon successful registration.
-
-Index: icb.c
---- icb.c.orig
-+++ icb.c
-@@ -210,6 +210,10 @@ icb_cmd(const char *cmd, unsigned char len, int fd, in
- irc_send_code(fd, icb_hostid, irc_nick, "002",
- "Your host is %s running %s protocol %s",
- icb_hostid, icb_serverid, icb_protolevel);
-+ irc_send_code(fd, icb_hostid, irc_nick, "003",
-+ "This server was created recently");
-+ irc_send_code(fd, icb_hostid, irc_nick, "004",
-+ "%s %d", icb_serverid, icb_protolevel);
- /* some clients really want to see a MOTD */
- irc_send_code(fd, icb_hostid, irc_nick, "375",
- "ICB server: %s", icb_serverid);
blob - d331dcd07943333f5f2e0329ae37f0865fd029dc
file + /dev/null
--- net/icbirc/patches/patch-irc_c
+++ /dev/null
@@ -1,198 +0,0 @@
-Index: irc.c
---- irc.c.orig
-+++ irc.c
-@@ -42,7 +42,7 @@ extern void scan(const char **, char *, size_t, const
- const char *);
- extern int sync_write(int, const char *, int);
-
--static void irc_cmd(const char *, int, int);
-+static void irc_cmd(char *, int, int);
-
- static void irc_send_pong(int, const char *);
-
-@@ -93,44 +93,55 @@ irc_recv(const char *buf, unsigned len, int client_fd,
- }
-
- static void
--irc_cmd(const char *cmd, int client_fd, int server_fd)
-+irc_cmd(char *cmd, int client_fd, int server_fd)
- {
-- if (!strncasecmp(cmd, "PASS ", 5)) {
-- cmd += 5;
-- scan(&cmd, irc_pass, sizeof(irc_pass), " ", " ");
-- } else if (!strncasecmp(cmd, "USER ", 5)) {
-- cmd += 5;
-- scan(&cmd, irc_ident, sizeof(irc_ident), " ", " ");
-+ if (!strncasecmp(cmd, "RAWICB ", 7)) {
-+ icb_send_raw(server_fd, cmd + 7);
-+ return;
-+ }
-+
-+ char *argv[10], *p;
-+ int argc = 1;
-+
-+ for (p = cmd, argv[0] = p; argc < 10 && (p = strchr(p, ' ')) != NULL;
-+ argc++) {
-+ *p = 0;
-+ p++;
-+ while (*p == ' ')
-+ p++;
-+ if (*p == ':') {
-+ argv[argc] = p + 1;
-+ argc++;
-+ break;
-+ }
-+ argv[argc] = p;
-+ }
-+
-+ if (!strcasecmp(argv[0], "PASS")) {
-+ strlcpy(irc_pass, argv[1], sizeof(irc_pass));
-+ } else if (!strcasecmp(argv[0], "USER")) {
-+ strlcpy(irc_ident, argv[1], sizeof(irc_ident));
- if (!icb_logged_in && irc_nick[0] && irc_ident[0])
- icb_send_login(server_fd, irc_nick,
- irc_ident, irc_pass);
-- } else if (!strncasecmp(cmd, "NICK ", 5)) {
-- cmd += 5;
-- scan(&cmd, irc_nick, sizeof(irc_nick), " ", " ");
-+ } else if (!strcasecmp(argv[0], "NICK")) {
-+ strlcpy(irc_nick, argv[1], sizeof(irc_nick));
- if (icb_logged_in)
- icb_send_name(server_fd, irc_nick);
- else if (irc_nick[0] && irc_ident[0])
- icb_send_login(server_fd, irc_nick,
- irc_ident, irc_pass);
-- } else if (!strncasecmp(cmd, "JOIN ", 5)) {
-- char group[128];
--
-- cmd += 5;
-- if (*cmd == '#')
-- cmd++;
-- scan(&cmd, group, sizeof(group), " ", " ");
-- icb_send_group(server_fd, group);
-- } else if (!strncasecmp(cmd, "PART ", 5)) {
-+ } else if (!strcasecmp(argv[0], "JOIN")) {
-+ icb_send_group(server_fd,
-+ argv[1] + (argv[1][0] == '#' ? 1 : 0));
-+ } else if (!strcasecmp(argv[0], "PART")) {
- in_irc_channel = 0;
-- } else if (!strncasecmp(cmd, "PRIVMSG ", 8) ||
-- !strncasecmp(cmd, "NOTICE ", 7)) {
-- char dst[128];
-+ } else if (!strcasecmp(argv[0], "PRIVMSG") ||
-+ !strcasecmp(argv[0], "NOTICE")) {
- char msg[8192];
- unsigned i, j;
-
-- cmd += strncasecmp(cmd, "NOTICE ", 7) ? 8 : 7;
-- scan(&cmd, dst, sizeof(dst), " ", " ");
-- scan(&cmd, msg, sizeof(msg), " ", "");
-+ strlcpy(msg, argv[2], sizeof(msg));
- /* strip \001 found in CTCP messages */
- i = 0;
- while (msg[i]) {
-@@ -141,73 +152,52 @@ irc_cmd(const char *cmd, int client_fd, int server_fd)
- } else
- i++;
- }
-- if (!strcmp(dst, irc_channel))
-- icb_send_openmsg(server_fd,
-- msg + (msg[0] == ':' ? 1 : 0));
-+ if (!strcmp(argv[1], irc_channel))
-+ icb_send_openmsg(server_fd, msg);
- else
-- icb_send_privmsg(server_fd, dst,
-- msg + (msg[0] == ':' ? 1 : 0));
-- } else if (!strncasecmp(cmd, "MODE ", 5)) {
-- cmd += 5;
-- if (!strcmp(cmd, irc_channel))
-+ icb_send_privmsg(server_fd, argv[1], msg);
-+ } else if (!strcasecmp(argv[0], "MODE")) {
-+ if (strcmp(argv[1], irc_channel))
-+ return;
-+ if (argc == 2)
- icb_send_names(server_fd, irc_channel);
-- else if (!strncmp(cmd, irc_channel, strlen(irc_channel))) {
-- cmd += strlen(irc_channel);
-- if (strncmp(cmd, " +o ", 4)) {
-+ else {
-+ if (strcmp(argv[2], "+o")) {
- printf("irc_cmd: invalid MODE args '%s'\n",
-- cmd);
-+ argv[2]);
- return;
- }
-- cmd += 4;
-- icb_send_pass(server_fd, cmd);
-+ icb_send_pass(server_fd, argv[3]);
- }
-- } else if (!strncasecmp(cmd, "TOPIC ", 6)) {
-- cmd += 6;
-- if (strncmp(cmd, irc_channel, strlen(irc_channel))) {
-- printf("irc_cmd: invalid TOPIC args '%s'\n", cmd);
-+ } else if (!strcasecmp(argv[0], "TOPIC")) {
-+ if (strcmp(argv[1], irc_channel)) {
-+ printf("irc_cmd: invalid TOPIC channel '%s'\n",
-+ argv[1]);
- return;
- }
-- cmd += strlen(irc_channel);
-- if (strncmp(cmd, " :", 2)) {
-- printf("irc_cmd: invalid TOPIC args '%s'\n", cmd);
-- return;
-- }
-- cmd += 2;
-- icb_send_topic(server_fd, cmd);
-- } else if (!strcasecmp(cmd, "LIST")) {
-+ icb_send_topic(server_fd, argv[2]);
-+ } else if (!strcasecmp(argv[0], "LIST")) {
- icb_send_list(server_fd);
-- } else if (!strncasecmp(cmd, "NAMES ", 6)) {
-- cmd += 6;
-- icb_send_names(server_fd, cmd);
-- } else if (!strncasecmp(cmd, "WHOIS ", 6)) {
-- cmd += 6;
-- icb_send_whois(server_fd, cmd);
-- } else if (!strncasecmp(cmd, "WHO ", 4)) {
-- cmd += 4;
-- icb_send_who(server_fd, cmd);
-- } else if (!strncasecmp(cmd, "KICK ", 5)) {
-- char channel[128], nick[128];
--
-- cmd += 5;
-- scan(&cmd, channel, sizeof(channel), " ", " ");
-- scan(&cmd, nick, sizeof(nick), " ", " ");
-- if (strcmp(channel, irc_channel)) {
-- printf("irc_cmd: invalid KICK args '%s'\n", cmd);
-+ } else if (!strcasecmp(argv[0], "NAMES")) {
-+ icb_send_names(server_fd, argv[1]);
-+ } else if (!strcasecmp(argv[0], "WHOIS")) {
-+ icb_send_whois(server_fd, argv[1]);
-+ } else if (!strcasecmp(argv[0], "WHO")) {
-+ icb_send_who(server_fd, argv[1]);
-+ } else if (!strcasecmp(argv[0], "KICK")) {
-+ if (strcmp(argv[1], irc_channel)) {
-+ printf("irc_cmd: invalid KICK args '%s'\n", argv[1]);
- return;
- }
-- icb_send_boot(server_fd, nick);
-- } else if (!strncasecmp(cmd, "PING ", 5)) {
-+ icb_send_boot(server_fd, argv[2]);
-+ } else if (!strcasecmp(argv[0], "PING")) {
- icb_send_noop(server_fd);
-- cmd += 5;
-- irc_send_pong(client_fd, cmd);
-- } else if (!strncasecmp(cmd, "RAWICB ", 7)) {
-- cmd += 7;
-- icb_send_raw(server_fd, cmd);
-- } else if (!strncasecmp(cmd, "QUIT ", 5)) {
-+ irc_send_pong(client_fd, argv[1]);
-+ } else if (!strcasecmp(argv[0], "QUIT")) {
- printf("client QUIT\n");
- terminate_client = 1;
- } else
-- printf("irc_cmd: unknown cmd '%s'\n", cmd);
-+ printf("irc_cmd: unknown command '%s'\n", argv[0]);
- }
-
- void
update: net/icbirc