From 379b5d27d7bc864249fc75c12438de131e3cd634 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Sat, 10 Nov 2001 17:25:25 +0000
Subject: [PATCH] This update actually works like a real finger service.

---
 exec/fingerservice.js | 76 +++++++++++++++++++++++++++++++++++++------
 1 file changed, 66 insertions(+), 10 deletions(-)

diff --git a/exec/fingerservice.js b/exec/fingerservice.js
index 3484f403b4..9a7805afff 100644
--- a/exec/fingerservice.js
+++ b/exec/fingerservice.js
@@ -1,21 +1,77 @@
 // fingerservice.js
 
+// Synchronet Service for the Finger protocol (RFC 1288)
+
 load("nodedefs.js");
 
+// This is just an example of how you access command-line args
+for(i=0;i<argc;i++)
+	log(format("argv[%d]=%s",i,argv[i]));
+// End of example :-)
+
+// Write a string to the client socket
 function write(str)
 {
 	client.socket.send(str);
 }
 
-var user = new User(1);
-for(n=0;n<system.node_list.length;n++) {
-	write(format("Node %2d ",n+1));
-	if(system.node_list[n].status==NODE_INUSE) {
+// Get Finger Request
+request = client.socket.recvline(128 /*maxlen*/, 3 /*timeout*/);
+
+if(request==null) {
+	log("!TIMEOUT waiting for request");
+	exit();
+}
+
+if(request=="") {	/* no specific user requested, give list of active users */
+	log("client requested active user list");
+	write(format("%-25.25s %-40.40s Node Age Sex\r\n","Name","Action"));
+	write("-------------------------------------------------------------------------------\r\n");
+	var user = new User(1);
+	for(n=0;n<system.node_list.length;n++) {
+		if(system.node_list[n].status!=NODE_INUSE)
+			continue;
 		user.number=system.node_list[n].useron;
-		write(format("%s (%u %s) ", user.alias, user.age, user.gender));
-		write(format(NodeAction[system.node_list[n].action],system.node_list[n].aux));
-	} else
-		write(format(NodeStatus[system.node_list[n].status],system.node_list[n].aux));
+		var action=format(NodeAction[system.node_list[n].action],system.node_list[n].aux);
+		write(format("%-25.25s %-40.40s %4d %3d %3s\r\n"
+			,user.alias
+			,action
+			,n+1
+			,user.age
+			,user.gender));
+	}
+	exit();
+}
+
+log(format("client request: '%s'",request));
+
+var usernum=Number(request);
+if(!usernum) {
+	var at = request.indexOf('@');
+	if(at>0)
+		request = request.substr(0,at-1);
+
+	usernum = system.matchuser(request);
+	if(!usernum) {
+		log("!UNKNOWN USER: " + request);
+		exit();
+	}
+}
+var user = new User(usernum);
+if(user == null) {
+	log(format("!INVALID USER NUMBER: %d",usernum));
+	exit();
+}
+
+write(format("Site: %s\r\n"
+	  ,system.inetaddr));
+write(format("Login name: %-30s In real life: %s\r\n"
+	  ,user.alias,user.name));
+write(format("Shell: %s\r\n",user.command_shell));
+write(format("Last login %s via %s from %s [%s]\r\n"
+	  ,system.timestr()
+	  ,user.connection
+	  ,user.host_name
+	  ,user.ip_address));
 
-	write("\r\n");
-}
\ No newline at end of file
+/* End of fingerservice.js */
-- 
GitLab