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