userid.c

来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 130 行

C
130
字号
#pragma save_binary//      File    :  /adm/daemons/userid.c//	Creator	:  Watcher@TMI-2  (5/93)////	Based on the general design concepts of Pinkfish@DiscWorld's//	IDENT server.  All Bing Pinkfish!!////      This daemon will connect up to an authorization daemon and//      and return a user's login name.#include <priv.h>#include <config.h>#include <net/socket.h>#include <net/daemons.h>#include <mudlib.h>inherit DAEMON ; mapping requests;void create() {	seteuid(getuid(this_object()));	requests = ([ ]);}void query_userid() {   string socket, address;   int port, line, tmp;   //	Check to make sure we have pulled the local port from    //	the mud's name server.    //	Get socket source info from the requesting user.    socket = socket_address( previous_object() );    if(!socket)  return;    //	Parse out address and port from source socket    if(sscanf(socket, "%s %d", address, port) != 2)  return;    line = socket_create(STREAM, "socket_shutdown");   if(line < 0)  return;    if(socket_connect(line, address + " 113","receive_data","write_data") < 0) {	previous_object()->query_link()->set("userid", 0);	socket_close(line);   return ; }    requests[line] = ({ previous_object(), port }); } void write_data(int line) {   int ret;   //	Okay, send the userid request protocol.    ret = socket_write(line, requests[line][1] + "," + mud_port() + "\n");    //	Hmmm....is there an IDENT server listening ?    if(ret < 0) {     socket_close(line);     requests[line][0]->query_link()->set("userid", 0);     map_delete(requests, line);   }} void receive_data(int line, string info) {   string tmp, machine, name, userid;    //	Okay ... we got a response. Are we sure its from the driver   //	and is the info we actually want...    if(previous_object() || !requests[line] || !requests[line][0] || !info ||      sscanf(info, "%s : USERID : %s : %s\r\n", tmp, machine, name) != 3) {     socket_close(line);     map_delete(requests, line);   return; }   userid = name + "@" + query_ip_name(requests[line][0]);    requests[line][0]->query_link()->set("userid", userid);   socket_close(line);   map_delete(requests, line); } mapping query_requests() {  return requests;  } 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?