summary refs log tree commit diff
diff options
context:
space:
mode:
authorNakidai <nakidai@disroot.org>2026-02-01 21:04:07 +0300
committerNakidai <nakidai@disroot.org>2026-02-01 21:04:07 +0300
commitefd4526d3043f82bf349e76031c2607d8f45a64b (patch)
tree27534793a86b00ff67c525dedcc00a673363d67b
parenta7298f097c6e899dfc4cd91468cd3256f024870a (diff)
downloadlibreircd-efd4526d3043f82bf349e76031c2607d8f45a64b.tar.gz
libreircd-efd4526d3043f82bf349e76031c2607d8f45a64b.zip
Enhance registration messages
Now ircd responds with all replies up to 4

Plus memchr was wrong, yep
-rw-r--r--config.h3
-rw-r--r--peer.c4
-rw-r--r--reply.c19
-rw-r--r--user.c4
4 files changed, 26 insertions, 4 deletions
diff --git a/config.h b/config.h
index cf86c7d..f960b08 100644
--- a/config.h
+++ b/config.h
@@ -1,3 +1,6 @@
+#define CREATION_DATE "Thu Jan 1 1970 at 00:00:00 UTC"
+#define IRCD_VERSION "0.1.0"
+
 #define PARAM_MAX 15
 
 #define MESSAGE_MAX 512
diff --git a/peer.c b/peer.c
index 13d0f2a..e737f82 100644
--- a/peer.c
+++ b/peer.c
@@ -47,8 +47,8 @@ handle(struct Peer *peer)
 		}
 
 		*p = 0;
-		if (memchr(peer->buf, '\n', sizeof(peer->buf))
-		 || memchr(peer->buf, '\r', sizeof(peer->buf))
+		if (strchr(peer->buf, '\n')
+		 || strchr(peer->buf, '\r')
 		 || parse_message(peer->buf, &msg))
 		{
 			warnx("malformed input from %d", peer->fd);
diff --git a/reply.c b/reply.c
index c8d526b..2cd8c04 100644
--- a/reply.c
+++ b/reply.c
@@ -67,13 +67,30 @@ vreply(const struct Peer *peer, int number, va_list ap)
 	{
 #define WRITE(...) writef(peer->fd, __VA_ARGS__)
 	REPLY(1, WRITE(
-		":%s 001 %s Welcome to the Internet Relay Network %s!%s@%s",
+		":%s 001 %s :Welcome to the Internet Relay Network %s!%s@%s",
 		hostname,
 		getnick(peer),
 		getnick(peer),
 		peer->user,
 		peer->host
 	), _);
+	REPLY(2, WRITE(
+		":%s 002 %s :Your host is %s, running version " IRCD_VERSION,
+		hostname,
+		getnick(peer),
+		hostname
+	), _);
+	REPLY(3, WRITE(
+		":%s 003 %s :This server was created " CREATION_DATE,
+		hostname,
+		getnick(peer)
+	), _);
+	REPLY(4, WRITE(
+		":%s 004 %s :%s libreircd-" IRCD_VERSION " aiwroOs :",
+		hostname,
+		getnick(peer),
+		hostname
+	), _);
 	REPLY(221, WRITE(
 		":%s 221 %s +%s%s%s%s%s%s%s",
 		hostname,
diff --git a/user.c b/user.c
index ba88beb..719c60e 100644
--- a/user.c
+++ b/user.c
@@ -51,6 +51,7 @@ user_reg(struct Peer *peer, const char *nick, const char *user, const char *real
 {
 	int was_registered;
 	unsigned long m;
+	size_t i;
 	/* c language is stupid shit: declaring p correctly (as const char *, as mode points
 	 * to a const char) causes a warning, so to silence it p should be char * */
 	char *p;
@@ -79,7 +80,8 @@ skip:
 	if (!was_registered && *peer->nick && *peer->user && *peer->real)
 	{
 		peer->type = CLIENT;
-		reply(peer, 1);
+		for (i = 1; i < 5; ++i)
+			reply(peer, i);
 	}
 }