⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 telnetd.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
字号:
 //	File	:  /adm/daemons/telnetd.c//	Creator	:  Watcher@TMI  (03/28/93)////	This daemon handles all outgoing telnet socket use approval,#include <mudlib.h>#include <net/telnet.h>#include <net/socket.h>#include <uid.h>inherit DAEMON ; void load_sites(); string *SITES; create() {  seteuid(getuid(this_object()));  load_sites();  } void load_sites() {   string *tmp, file;   int loop;    SITES = ({ });    //  Read in the list of approved sites.    file = read_file( APPROVED_SITES );     //  Check to see if there is such a file and if it has any addresses.    if(!file)  return;    tmp = explode(file, "\n");   for(loop=0; loop<sizeof(tmp); loop++)	if(tmp[loop][0] == '#' || tmp[loop][0] == '\n' || tmp[loop] == "")	   continue;	else SITES += ({ tmp[loop] });} //  Whenever a socket command is initiated, master.c's valid_socket()//  will ask the telnet daemon to see if the action is permitted.//  The info array passes the following information://	info[0]	= int fd//	info[1] = object owner//	info[2] = string ip_address//	info[3] = int port int telnet_permission(object caller, string func, mixed *info) {   string eff_user, tmp1, tmp2, tmp3;   int loop; #if 0   log_file("telnetd","Caller: " + identify(caller) + "  Func: " + identify(func) + "  Info: " + identify(info) + "\n");#endif    //	If approved sites aren't loaded yet ... load em.    if(!SITES)  load_sites();    //	Get calling object's Euid ...   eff_user = geteuid(caller);     //	If the caller is an Admin, or they are using a ROOT_UID    //	calling object ... approve the telnet attempt.   //   Mobydick added the socket group and gave it access on 4-11-93.   if(member_group(eff_user, "admin") || eff_user == ROOT_UID ||	member_group(eff_user, "socket"))	return 1;     //	If telnet object is an approved client ... approve telnet attempt.    if(caller && member_array(base_name(caller), APPROVED_TELNET) != -1)	return 1;     //	If no ip number is given by the request ... tentatively approve it.    if(!info[2])  return 1;     //	Check to see if requested site matches a permitted telnet site.   for(loop=0; loop<sizeof(SITES); loop++) {    if(SITES[loop] == info[2])  return 1;	// Positive direct match    else if(SITES[loop] == "*.*.*.*")  return 1;	// Full wildcard match   //	Check for pattern wildcard matching    else if(sscanf(SITES[loop],"%s.*.*.*", tmp1) == 1) {	if(sscanf(info[2], tmp1 + ".%s.%s.%s", tmp1, tmp2, tmp3) == 3)		return 1;   }   else if(sscanf(SITES[loop], "%s.%s.*.*", tmp1, tmp2) == 2) {	if(sscanf(info[2], tmp1 + "." + tmp2 + ".%s.%s", tmp1, tmp2) == 2)		return 1;   }   else if(sscanf(SITES[loop], "%s.%s.%s.*", tmp1, tmp2, tmp3) == 3) {	if(sscanf(info[2], tmp1 + "." + tmp2 + "." + tmp3 + ".%s", tmp1) == 1)		return 1;    }    }return 0; } 

⌨️ 快捷键说明

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