nomask void StartQuery() { int i; object board, env; string envnam; if (!this_interactive() || !IS_ELDER(this_interactive())) { write("Das darf nur ein Erzmagier!\n"); return; } for (i=sizeof(BOARD_ROOMS)-1; i>=0; i--) { envnam = BOARD_ROOMS[i]; catch(call_other(envnam, "???")); if (env = find_object(envnam)) { if (!present("PartyBrett", env)) { board = clone_object("/p/service/rochus/party/brett"); board->move(env, M_NOCHECK); OBJECTD->AddObject(board, envnam); printf("Partybrett in '%s.c' aufgestellt.\n", envnam); } else printf("In '%s.c' befindet sich schon ein Partybrett!\n", envnam); } else printf("Kann kein Partybrett in '%s.c' aufstellen!\nDer Raum laesst sich " "nicht laden!\n", envnam); }
int secure() { if (!previous_object()) return 0; if (geteuid(previous_object())==ROOTID) return 1; if (geteuid(previous_object()) != geteuid(this_interactive())) return 0; if (this_interactive() != this_player()) return 0; if (!ARCH_SECURITY) return 0; return 1; }
/* ************************************************************************** * cat - display the contents of a file */ int cat_file(string path) { CHECK_SO_WIZ; if (!path) { notify_fail("What file do you want to cat?\n"); return 0; } path = FTPATH((string)this_interactive()->query_path(), path); if (!stringp(path)) { notify_fail("Bad file name format.\n"); return 0; } if (!(SECURITY->valid_read(path, geteuid(), "cat"))) { notify_fail("You have no read access to: " + path + "\n"); return 0; } if (file_size(path) <= 0) { notify_fail("No such file: " + path + "\n"); return 0; } cat(path); write("EOF\n"); return 1; }
int do_mail(string str) { object mailer; if (this_interactive()!=this_player()) return 0; mailer=clone_object(MAILER); mailer->SetOfficeName(short()); mailer->do_mail(str); return 1; }
debug(what,arg) { string log; if (!environment()) return; log=sprintf("%s %s %O PO=%O PPO=%O TO=%O TI=%O verb=%O\n", dtime(time()), what, arg, previous_object(), previous_object(1), this_object(), this_interactive(), (this_interactive()||this_player()||this_object())->_unparsed_args()); log_file("NDEAD",log); if (find_player("jof")) tell_object(find_player("jof"),log); if (previous_object() && (!interactive(PO)||IS_LEARNER(PO)) && getuid(PO)!=ROOTID && PO!=this_object()) { log_file("NDEAD",sprintf("DELETED %O\n",PO)); catch(PO->remove());
/* ************************************************************************** * cd - change current directory */ int cd(string str) { string old_path; string new_path; string *parts; object ob; int auto; auto = this_player()->query_option(OPT_AUTO_PWD); CHECK_SO_WIZ; old_path = this_interactive()->query_path(); if (!stringp(str)) { new_path = SECURITY->query_wiz_path(this_player()->query_real_name()); } else switch(str) { case ".": new_path = old_path; if (auto) write("CWD: " + new_path + "\n"); else write("Ok.\n"); return 1; case "-": if (!(new_path = this_player()->query_prop(WIZARD_S_LAST_DIR))) { new_path = SECURITY->query_wiz_path( this_player()->query_real_name()); } break; default: new_path = FTPATH(old_path, str); break; }
nomask int find_source(string docfile, string argv) { string docs, str, src; int line; if (file_size(docfile) < 0) return 0; docs = read_file(docfile); if (sscanf(docs, "%d:%s %s", line, src, str) == 3) { write("File: " + src + " Line: " + line + "\n\n"); if (argv == "-s") { this_player()->more(src, line); return 1; } if (SECURITY->query_wiz_rank(this_interactive()-> query_real_name()) < WIZ_NORMAL) { write("Only true wizards can use the -e option.\n"); } else { ed(src); } return 1; } return 0; }
/* ************************************************************************** * lman - Give information on 'local' source code */ nomask varargs int lman(string entry, string docdir) { mixed *argv, *man_arr; int argc, i, num, flag; string *sdirarr, path, *p_parts, man_chapt, str; CHECK_SO_WIZ; if (!entry) { notify_fail("Syntax error, for instructions on usage, " + "do 'help lman'.\n"); return 0; } if (!strlen(docdir)) docdir = this_player()->query_path(); if (!SRCMAN->valid_docdir(docdir)) { notify_fail("The directory: " + docdir + " is not a valid documentation directory\n"); return 0; } argv = explode(entry, " "); argc = sizeof(argv); switch(argv[0]) { case "-k": if (argc == 2) { sdirarr = (string *)SRCMAN->get_subdirs(docdir); if (member_array(argv[1], sdirarr) < 0) { for (i = 0 ; i < sizeof(sdirarr) ; i++) { man_arr = SRCMAN->get_keywords(docdir, sdirarr[i], argv[1])[1]; if (sizeof(man_arr)) { write("--- " + sdirarr[i] + ":\n" + sprintf("%-*#s\n", 76, implode(man_arr, "\n")) + "\n"); flag = 1; } } if (!flag) write("No match.\n"); } else { man_chapt = argv[1]; man_arr = SRCMAN->get_index(docdir, man_chapt)[1]; this_interactive()->add_prop(WIZARD_S_SMAN_SEL_DIR, man_chapt); this_interactive()->add_prop(WIZARD_AM_SMAN_SEL_ARR, man_arr); g_mannum = 2; str = process_string("#1:" + implode(man_arr, "@@man_num@@")); str = "Available functions:\n" + sprintf("%-*#s\n", 76, str); if (strlen(str) > 5000) { this_player()->more(str + "\n"); } else { write(str); } } } if (argc == 3) { if (member_array(argv[1], SRCMAN->get_subdirs(docdir)) < 0) { write("No such subdir '" + argv[1] + "' available.\n"); break; } man_chapt = argv[1]; man_arr = SRCMAN->get_keywords(docdir, man_chapt, argv[2])[1]; this_interactive()->add_prop(WIZARD_S_SMAN_SEL_DIR, man_chapt); this_interactive()->add_prop(WIZARD_AM_SMAN_SEL_ARR, man_arr); g_mannum = 2; str = process_string("#1:" + implode(man_arr, "@@man_num@@")); str = "Available subjects:\n" + sprintf("%-*#s\n", 76, str); if (strlen(str) > 5000) { this_player()->more(str + "\n"); } else { write(str); } } break; case "-?": man_chapt = this_interactive()-> query_prop(WIZARD_S_SMAN_SEL_DIR); if (!man_chapt) { write("You haven't made any selection yet.\n" + "Do 'lman -k <dir>' to select a directory.\n"); break; } man_arr = this_interactive()->query_prop(WIZARD_AM_SMAN_SEL_ARR); g_mannum = 2; str = process_string("#1:" + implode(man_arr, "@@man_num@@")); write("Selected functions (" + man_chapt + "):\n" + sprintf("%-*#s\n", 76, str)); break; case "-c": write("Available subdirs:\n" + sprintf("%-*#s\n", 76, implode(SRCMAN->get_subdirs(docdir), "\n"))); break; case "-u": SRCMAN->update_index(docdir); write("Ok.\n"); break; case "-s": case "-e": if (argc > 1) { sscanf(argv[1], "#%d", num); if (num) { man_chapt = this_interactive()-> query_prop(WIZARD_S_SMAN_SEL_DIR); man_arr = this_interactive()-> query_prop(WIZARD_AM_SMAN_SEL_ARR); if (!man_chapt) { write("You haven't made any selection yet.\n"); break; } if (num < 1 || num > sizeof(man_arr)) { write("The possible interval is 1-" + sizeof(man_arr) + ".\n"); break; } path = docdir + man_chapt + "/" + man_arr[num - 1]; if (!find_source(path, argv[0])) { write("No such source code found.\n"); break; } break; } else if (file_size(docdir + argv[1]) < 0) { sdirarr = SRCMAN->get_subdirs(docdir); if (argc == 3) { if (member_array(argv[1], sdirarr) < 0) { write("No such subdir '" + argv[1] + "' available.\n"); break; } man_chapt = argv[1]; man_arr = SRCMAN->get_keywords(docdir, man_chapt, argv[2])[1]; } else { for (i = 0; i < sizeof(sdirarr); i++) { man_chapt = sdirarr[i]; man_arr = SRCMAN->get_keywords(docdir, man_chapt, argv[1])[1]; if (sizeof(man_arr) > 0) break; } } if (sizeof(man_arr) == 0) write("No command: " + argv[1] + "\n"); else { path = docdir + man_chapt + "/" + man_arr[0]; if (file_size(path) < 0) write("Function not found.\n"); else find_source(path, argv[0]); } break; } else { find_source(docdir + argv[1], argv[0]); } break; } default: sscanf(argv[0], "#%d", num); if (num) { man_chapt = this_interactive()-> query_prop(WIZARD_S_SMAN_SEL_DIR); man_arr = this_interactive()-> query_prop(WIZARD_AM_SMAN_SEL_ARR); if (!man_chapt) { write("You haven't made any selection yet.\n"); break; } if (num < 1 || num > sizeof(man_arr)) { write("The possible interval is 1-" + sizeof(man_arr) + ".\n"); break; } path = docdir + man_chapt + "/" + man_arr[num - 1]; write("File: " + path + "\n"); this_player()->more(path, 1); break; } if (file_size(docdir + argv[0]) < 0) { sdirarr = (string *)SRCMAN->get_subdirs(docdir); if (argc == 2) { if (member_array(argv[0], sdirarr) < 0) { write("No such subdir '" + argv[0] + "' available.\n"); break; } man_chapt = argv[0]; man_arr = (mixed *)SRCMAN->get_keywords(docdir, man_chapt, argv[1])[1]; this_interactive()->add_prop(WIZARD_S_SMAN_SEL_DIR, man_chapt); this_interactive()->add_prop(WIZARD_AM_SMAN_SEL_ARR, man_arr); } else { for (i = 0 ; i < sizeof(sdirarr) ; i++) { man_chapt = sdirarr[i]; man_arr = (mixed *)SRCMAN->get_keywords(docdir, man_chapt, argv[0])[1]; if (sizeof(man_arr) > 0) break; } } if (sizeof(man_arr) == 0) write("No command: " + argv[0] + "\n"); else { path = docdir + man_chapt + "/" + man_arr[0]; if (file_size(path) < 0) write("No command: " + argv[0] + "\n"); else { write("File: " + path + "\n"); this_player()->more(path, 1); } } break; } else { write("File: " + docdir + argv[0] + "\n"); this_player()->more((docdir + argv[0]), 1); } break; } return 1; }
/* ************************************************************************** * man - display a manual page */ nomask int man(string entry) { mixed *argv, *man_arr; int argc, i, num, wr_flag; string *chaparr, path, *p_parts, man_chapt, str; CHECK_SO_WIZ; if (!entry) { notify_fail("Syntax error, for instructions on usage, do 'help man'.\n") ; return 0; } argv = explode(entry, " "); argc = sizeof(argv); switch(argv[0]) { case "-k": if (argc == 2) { chaparr = (string *)MANCTRL->get_chapters(); if (member_array(argv[1], chaparr) < 0) { for (i = 0 ; i < sizeof(chaparr) ; i++) { man_arr = MANCTRL->get_keywords(chaparr[i], argv[1])[1]; if (sizeof(man_arr)) { write("--- " + chaparr[i] + ":\n" + sprintf("%-*#s\n", 76, implode(man_arr, "\n")) + "\n"); wr_flag = 1; } } if (!wr_flag) write("No such chapter.\n"); } else { man_chapt = argv[1]; man_arr = MANCTRL->get_index(man_chapt)[1]; this_interactive()->add_prop(WIZARD_S_MAN_SEL_CHAPT, man_chapt); this_interactive()->add_prop(WIZARD_AM_MAN_SEL_ARR, man_arr); g_mannum = 2; str = process_string("#1:" + implode(man_arr, "@@man_num@@")); write("Available subjects:\n" + sprintf("%-*#s\n", 76, str)); } } else if (argc == 3) { if (member_array(argv[1], MANCTRL->get_chapters()) < 0) { write("No such chapter '" + argv[1] + "' available.\n"); break; } man_chapt = argv[1]; man_arr = MANCTRL->get_keywords(man_chapt, argv[2])[1]; this_interactive()->add_prop(WIZARD_S_MAN_SEL_CHAPT, man_chapt); this_interactive()->add_prop(WIZARD_AM_MAN_SEL_ARR, man_arr); g_mannum = 2; str = process_string("#1:" + implode(man_arr, "@@man_num@@")); write("Available subjects:\n" + sprintf("%-*#s\n", 76, str)); } else { write("Try 'man -c' to see possible chapters.\n"); } break; case "-?": man_chapt = this_interactive()->query_prop(WIZARD_S_MAN_SEL_CHAPT); if (!man_chapt) { write("You haven't made any selection yet.\n"); break; } man_arr = this_interactive()->query_prop(WIZARD_AM_MAN_SEL_ARR); g_mannum = 1; str = process_string("#1:" + implode(man_arr, "@@man_num@@")); write("Selected subjects (" + man_chapt + "):\n" + sprintf("%-*#s\n", 76, str)); break; case "-c": write("Available chapters:\n" + sprintf("%-*#s\n", 76, implode(MANCTRL->get_chapters(), "\n"))); break; case "-u": if (find_object(MANCTRL)) find_object(MANCTRL)->remove_object(); write("Ok.\n"); break; default: sscanf(argv[0], "#%d", num); if (num) { man_chapt = this_interactive()-> query_prop(WIZARD_S_MAN_SEL_CHAPT); man_arr = this_interactive()-> query_prop(WIZARD_AM_MAN_SEL_ARR); if (!man_chapt) { write("You haven't made any selection yet.\n"); break; } if (num < 1 || num > sizeof(man_arr)) { write("The possible interval is 1-" + sizeof(man_arr) + ".\n"); break; } path = MANHEAD + man_chapt + "/" + man_arr[num - 1]; write("File: " + path + "\n"); this_player()->more(path, 1); break; } if (file_size(MANHEAD + argv[0]) < 0) { chaparr = (string *)MANCTRL->get_chapters(); if (argc == 2) { if (member_array(argv[0], chaparr) < 0) { write("No such chapter '" + argv[0] + "' available.\n"); break; } man_chapt = argv[0]; man_arr = (mixed *)MANCTRL->get_keywords(man_chapt, argv[1])[1]; this_interactive()->add_prop(WIZARD_S_MAN_SEL_CHAPT, man_chapt); this_interactive()->add_prop(WIZARD_AM_MAN_SEL_ARR, man_arr); } else { for (i = 0 ; i < sizeof(chaparr) ; i++) { man_chapt = chaparr[i]; man_arr = (mixed *)MANCTRL->get_keywords(man_chapt, argv[0])[1]; if (sizeof(man_arr) > 0) break; } if (!sizeof(man_arr) && member_array(argv[0], chaparr) >= 0) { man_arr = MANCTRL->get_index(argv[0])[1]; g_mannum = 2; str = process_string("#1:" + implode(man_arr, "@@man_num@@")); write("Available subjects:\n" + sprintf("%-*#s\n", 76, str)); return 1; } } if (sizeof(man_arr) == 0) write("No command: " + argv[0] + "\n"); else { path = MANHEAD + man_chapt + "/" + man_arr[0]; if (file_size(path) < 0) write("No command: " + argv[0] + "\n"); else { write("File: " + path + "\n"); this_player()->more(path, 1); } } break; } else { write("File: " + MANHEAD + argv[0] + "\n"); this_player()->more((MANHEAD + argv[0]), 1); } break; } return 1; }
ok() { return ((geteuid()==geteuid(previous_object())) || IS_ELDER(this_interactive())); }