Esempio n. 1
0
/***********************************************************************
 *	module_find_by_name
 *
 */
struct module* module_find_by_name(const struct process* pcs, 
                                   const char* name, enum module_type type)
{
    struct module*      module;

    if (type == DMT_UNKNOWN)
    {
        if ((module = module_find_by_name(pcs, name, DMT_PE)) ||
            (module = module_find_by_name(pcs, name, DMT_ELF)))
            return module;
    }
    else
    {
        char                modname[MAX_PATH];

        for (module = pcs->lmodules; module; module = module->next)
        {
            if (type == module->type &&
                !strcasecmp(name, module->module.LoadedImageName)) 
                return module;
        }
        module_fill_module(name, modname, sizeof(modname));
        for (module = pcs->lmodules; module; module = module->next)
        {
            if (type == module->type &&
                !strcasecmp(modname, module->module.ModuleName)) 
                return module;
        }
    }
    SetLastError(ERROR_INVALID_NAME);
    return NULL;
}
Esempio n. 2
0
int module_unload(const char *name) {
	void *mod = module_find_by_name(name);
	if (mod == NULL) return 1;
	module_func unload;
	unload = dlsym(mod, "unload");
	if (dlerror()) {
		logfmt(LOG_ERROR, "Cannot call 'unload' for %s - error: %s", name, dlerror());
		return 1;
	}
	module_unregister(mod);
	int result = unload();
	return result;
}
Esempio n. 3
0
char *quiz_change_string(bot_t * bot, char *string, int opt)
{
	unique_t *bu = NULL;
	quiz_active_t **qa = NULL;
	dlist_t *dl = NULL;
	char **arg_array = NULL;

	char *str = NULL;
	char buf[MAX_BUF_SZ];

	char *sep_ptr;

	debug(bot, "quiz_change_string: Entered\n");

	if (!bot || !string)
		return NULL;

	sep_ptr = str_find_sep(string);
	if (sep_ptr)
		string = sep_ptr;

	bu = unique_create(bot, &dl_quiz_active_unique,
			   UNIQUE_ID_TAG | UNIQUE_ID_CHAN);
	if (!bu)
		return NULL;

	qa = (quiz_active_t **) & bu->data;
	if (!qa) {
	}

	_memset(buf, 0, sizeof(buf));

	if (strlen(string)) {
		dl = tokenize(bot, string,
			      TOKENIZE_NORMAL | TOKENIZE_EATWHITESPACE, " ");
		if (!dl)
			return NULL;

		arg_array = (char **)dlist_convert_dlist_to_array(dl);
		if (!arg_array)
			goto cleanup;

		capsup(arg_array[0]);
	}

	switch (opt) {
	case QUIZ_OPT_LIST:
		{
			str = quiz_op_list(bot);
			break;
		}
	case QUIZ_OPT_INFO:
		{
			str = quiz_op_info(bot, *qa);
			break;
		}
	case QUIZ_OPT_CLEAR:
		{
			str = quiz_op_clear(bot, *qa);
			break;
		}
	case QUIZ_OPT_CLEAR_WINNERS:
		{
			str = quiz_op_clear_winners(bot, *qa);
			break;
		}
	case QUIZ_OPT_WINNERS:
		{
			str = quiz_op_winners(bot, *qa);
			break;
		}

	case QUIZ_OPT_SETUP:
		{
			str = quiz_op_setup(bot, qa, string);
			if (str) {
				module_t *m_ptr = NULL;
				mod_quiz_info.timer = quiz_timer;
				m_ptr = module_find_by_name("mod_quiz");
				if (m_ptr) {
					m_ptr->timer = quiz_timer;
					module_update(m_ptr, "mod_quiz");
				}
			}
			if (*qa)
				bu->data = *qa;
			break;
		}
	case QUIZ_OPT_ANSWER:
		{
			str = quiz_op_answer(bot, *qa, string);
			break;
		}
	case QUIZ_OPT_GET:
		{
			if (!arg_array[1])
				return NULL;
			str =
			    quiz_op_get(bot, arg_array[0], atoi(arg_array[1]));
			break;
		}
	case QUIZ_OPT_DEL:
		{
			break;
		}
	case QUIZ_OPT_TIMEOUT:
		{
			str = quiz_op_timeout(bot, *qa, atoi(arg_array[0]));
			break;
		}
	case QUIZ_OPT_SIZE:
		{
			str = quiz_op_size(bot, arg_array[0]);
			break;
		}
	case QUIZ_OPT_MULTI:
		{
			str = quiz_op_multi(bot, *qa, arg_array[0]);
			break;
		}
	case QUIZ_OPT_NEWLINES:
		{
			str = quiz_op_newlines(bot, *qa, arg_array[0]);
			break;
		}
	case QUIZ_OPT_HIDEKEY:
		{
			str = quiz_op_hidekey(bot, *qa, arg_array[1]);
			break;
		}

	default:
		break;
	}

 cleanup:

	if (dl)
		tokenize_destroy(bot, &dl);

	if (arg_array)
		free(arg_array);

	if (str)
		bot->shouldsend = 1;

	return str;
}