Ejemplo n.º 1
0
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);
  }
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
/* **************************************************************************
 * 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;
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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());
Ejemplo n.º 6
0
/* **************************************************************************
 * 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;
    }
Ejemplo n.º 7
0
Archivo: manual.c Proyecto: xxx/cdlib
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;
}
Ejemplo n.º 8
0
Archivo: manual.c Proyecto: xxx/cdlib
/* **************************************************************************
 * 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;
}
Ejemplo n.º 9
0
Archivo: manual.c Proyecto: xxx/cdlib
/* **************************************************************************
 * 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;
}
Ejemplo n.º 10
0
ok()
{
  return ((geteuid()==geteuid(previous_object()))
	  || IS_ELDER(this_interactive()));
}