/* Hamlet, Jan 1996. -- This gets cloned to do the ident command. The Command is now more complex so integration can be truly simple. */ #include <inquire_err.h> #define LORD_ONLY #define IDENTD "/net/identd" #define SECURITY_FAIL -301 #define BROKEN_INQUIRED -302 #define LOST_SUBJECT -303 object toident, querier; string pname; string ipname; void dest_me(); string error_msg(int err); void do_ident(string name, object me) { int ret; #ifdef LORD_ONLY if(!"/secure/master"->query_lord(geteuid(me))) { tell_object(me, "You do not have the authority to do an ident.\n"); dest_me(); return; } #endif toident = find_player(name); querier = me; pname = name; ipname = query_ip_name(toident); if(!ipname) ipname = query_ip_number(toident); if(catch(load_object(IDENTD))) { tell_object(me, "ident: " + IDENTD + " will not load.\n"); dest_me(); return; } if( (ret = IDENTD->do_ident(toident, this_object())) <= 0 ) { tell_object(me, "ident: Query failed for " + capitalize(name) + ".\n" " " + error_msg(ret) + "\n"); dest_me(); } else tell_object(me, "Please wait...\n"); } void receive_ident_data(string userid, string hosttype) { if(!querier) { dest_me(); return; } if( userid == "!error!" ) tell_object(querier , "\nident: Query failed for " + capitalize(pname) + ".\n" " " + hosttype + "\n"); else tell_object(querier,"\nident: "+capitalize(pname) + " is " + userid + "@" + ipname + " (" + hosttype + ")\n"); dest_me(); } string error_msg(int err) { if(err < -300) switch(err) { case SECURITY_FAIL : return "You are not authorized to " "use identd."; case BROKEN_INQUIRED : return "inquired is broken."; case LOST_SUBJECT : return "The target player logged out."; } else return inquire_error(err); } void dest_me() { destruct(this_object()); } void create() { seteuid("Network stuff"); }