help in F_AUTH

These are old archives. They are kept for historic purposes only.
Post Reply
4mIRC
Posts: 57
Joined: Sat Mar 13, 2010 8:24 pm

help in F_AUTH

Post by 4mIRC » Sun Nov 11, 2012 3:16 pm

hello all

im using the module F_AUTH

and its work good ... my question is :

can any one make it to send the code private not in status ?

i want it because some of my clients are using there own scripts

so when they connect the script will join them to there auto connect channel

and then they cant see the code...

is i want it to send the code private better :)

here is my code

Code: Select all

/*
 * f_auth.c
 * by fez (c) 2007 - provides authentication requirement for IRC
 * this module is only a proof of concept.  It should be expanded for
 * specific authentication schema.  f_auth_local_connect() and
 * f_auth_command() would be the places to do those.
 */

// includes
#include "config.h"
#include "struct.h"
#include "common.h"
#include "sys.h"
#include "numeric.h"
#include "msg.h"
#include "proto.h"
#include "channel.h"
#include <time.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
#include <io.h>
#endif
#include <fcntl.h>
#include "h.h"
#ifdef STRIPBADWORDS
#include "badwords.h"
#endif
#ifdef _WIN32
#include "version.h"
#endif

// ***** module-specific defines *****
#define MOD_AUTH_NAME		"f_auth"
#define MOD_AUTH_VERS		"$Id: f_auth.c, v1.0.2 2007/10/16 20:43:00 fez Exp $"
#define MOD_AUTH_DESC		"require AUTH before registering"
// defines:
#define MSG_AUTH		"AUTH"
#define TOK_AUTH		NULL
#define AUTH_DIRECTIVE		"require-auth"
#define MSG_NOTICE		"NOTICE"

// ***** Function Declarations *****
// config loading hook functions
DLLFUNC int f_auth_config_test(ConfigFile *cf, ConfigEntry *ce, int type, int *errs);
DLLFUNC int f_auth_config_posttest(int *errs);
DLLFUNC int f_auth_config_run(ConfigFile *cf, ConfigEntry *ce, int type);
DLLFUNC int f_auth_config_rehash();
// Hook functions:
DLLFUNC int f_auth_local_connect(aClient *sptr);
// commands:
DLLFUNC int f_auth_command(aClient *cptr, aClient *sptr, int parc, char *parv[]);

// ***** Global Variables *****
ModuleInfo *AuthModInfo = NULL;		// for local storage of modinfo
static int auth_conf_counter = 0;	// for config file
static Hook *AuthHookTest = NULL;	// for config hashiing
static Hook *AuthHookPosttest = NULL;	//
static Hook *AuthHookRun = NULL;	//
static Hook *AuthHookRehash = NULL;	//
static Hook *AuthHookLocalConnect = NULL;	// for local connection hook
static Command *AuthCmd;		// to store command hook status
static int auth_require = 0;		// whether to require AUTH

// a description of this module
ModuleHeader MOD_HEADER(f_auth)
  = {
	MOD_AUTH_NAME,
	MOD_AUTH_VERS,
	MOD_AUTH_DESC,
	"3.2.3",
	NULL
  };

// called before config test
DLLFUNC int MOD_TEST(f_auth)(ModuleInfo *modinfo)
{
	int ret = MOD_SUCCESS;
	AuthHookTest = HookAddEx(modinfo->handle, HOOKTYPE_CONFIGTEST, f_auth_config_test);
	AuthHookPosttest = HookAddEx(modinfo->handle, HOOKTYPE_CONFIGPOSTTEST, f_auth_config_posttest);
	auth_conf_counter = 0;
	return ret;
}

// called during module initialization
DLLFUNC int MOD_INIT(f_auth)(ModuleInfo *modinfo)
{
	int ret = MOD_SUCCESS;
	AuthModInfo = modinfo;
	AuthHookRun = HookAddEx(modinfo->handle, HOOKTYPE_CONFIGRUN, f_auth_config_run);
	AuthHookRehash = HookAddEx(modinfo->handle, HOOKTYPE_REHASH, f_auth_config_rehash);
	AuthHookLocalConnect = HookAddEx(modinfo->handle, HOOKTYPE_LOCAL_CONNECT, f_auth_local_connect);
	AuthCmd = CommandAdd(modinfo->handle, MSG_AUTH, TOK_AUTH, f_auth_command, MAXPARA, M_UNREGISTERED|M_USER);
	if (!AuthCmd)
		ret = MOD_FAILED;
	return ret;
}

// called when ircd is 100% ready
DLLFUNC int MOD_LOAD(f_auth)(int module_load)
{
	int ret = MOD_SUCCESS;
	return ret;
}

// called when unloading a module
DLLFUNC int MOD_UNLOAD(f_auth)(int module_unload)
{
	int ret = MOD_SUCCESS;
	CommandDel(AuthCmd);
	HookDel(AuthHookTest);
	HookDel(AuthHookPosttest);
	HookDel(AuthHookRun);
	HookDel(AuthHookRehash);
	HookDel(AuthHookLocalConnect);
	AuthCmd = NULL;
	AuthHookLocalConnect =
	AuthHookTest = AuthHookPosttest = AuthHookRun = AuthHookRehash = NULL;
	return ret;
}

// this is where we TEST the config file
DLLFUNC int f_auth_config_test(ConfigFile *cf, ConfigEntry *ce, int type, int *errs)
{
	int errors = 0;
	if (type != CONFIG_SET)
		return 0;
	if (!strcmp(ce->ce_varname, AUTH_DIRECTIVE))
	{
		if (ce->ce_vardata)
		{
			config_error("%s:%i: set::%s with unnecessary value",
				ce->ce_fileptr->cf_filename,
				ce->ce_varlinenum, ce->ce_varname );
			errors++;
		}
		else if (auth_conf_counter)
		{
			config_error("%s:%i: set::%s already defined on line %i",
				ce->ce_fileptr->cf_filename,
				ce->ce_varlinenum, ce->ce_varname,
				auth_conf_counter );
				errors++;
		}
		else
		{
			auth_conf_counter = ce->ce_varlinenum;
			!auth_conf_counter && ++auth_conf_counter;
		}
		*errs = errors;
		return errors ? -1 : 1;
	}
	return 0;
}

// this is run AFTER testing the config file
DLLFUNC int f_auth_config_posttest(int *errs)
{
	int errors = 0;
	if (!auth_conf_counter)
	{
		//config_error("set::%s not set.", AUTH_DIRECTIVE );
		//errors++;
		////or...
		auth_require = 0;
	}
	*errs = errors;
	return errors ? -1 : 1;
}

// this is run WHEN LOADING SETTINGS from the config file
DLLFUNC int f_auth_config_run(ConfigFile *cf, ConfigEntry *ce, int type)
{
	if (type != CONFIG_SET)
		return 0;
	if (!strcmp(ce->ce_varname, AUTH_DIRECTIVE))
	{
		auth_require = 1;
		return 1;
	}
	return 0;
}

// this is run when REHASHING the config file
DLLFUNC int f_auth_config_rehash()
{
	auth_conf_counter = 0;
	return 1;
}

// this is the local connect hook function
DLLFUNC int f_auth_local_connect(aClient *sptr)
{
	if (!auth_require || !MyConnect(sptr) || !IsClient(sptr))
		return 0;
	sendto_one(sptr, "%s %s %s :To connect please type /quote %s %X",
		me.name, MSG_NOTICE, sptr->name,
		MSG_AUTH, sptr->firsttime );
	SetUnknown(sptr);
	IRCstats.unknown++;
	IRCstats.clients--;
	IRCstats.me_clients--;
	me.serv->users--;
	return 0;
}

// this is the AUTH command
DLLFUNC int f_auth_command(aClient *cptr, aClient *sptr, int parc, char *parv[])
{
	char authcode[32];
	if (!auth_require || !MyConnect(sptr) || !IsUnknown(sptr))
		return 0;
	sprintf(authcode, "%X", sptr->firsttime);
	if (parc > 1 && !strcmp(parv[1], authcode))
	{
		sendto_one(sptr, "%s %s %s :%s code accepted.",
			me.name, MSG_NOTICE, sptr->name, MSG_AUTH );
		SetClient(sptr);
		IRCstats.unknown--;
		IRCstats.clients++;
		IRCstats.me_clients++;
		me.serv->users++;
	}
	else
	{
		sendto_one(sptr, "%s %s %s :%s code invalid.",
			me.name, MSG_NOTICE, sptr->name, MSG_AUTH );
	}
	return 0;
}

/* end of code */
thanks

4mIRC
Posts: 57
Joined: Sat Mar 13, 2010 8:24 pm

Re: help in F_AUTH

Post by 4mIRC » Tue Nov 13, 2012 5:29 pm

hello ,,,,

is there any idea how to fix it?

Thanks

Jobe1986
Official supporter
Posts: 1177
Joined: Wed May 03, 2006 7:09 pm
Location: United Kingdom

Re: help in F_AUTH

Post by Jobe1986 » Wed Nov 14, 2012 8:33 pm

The NOTICE is sent ONLY to the user. So although the user's client may display it in the channel window, the other users in that channel CANNOT see it.

And in addition to that, UnrealIRCd has absolutely NO choice where a client chooses to display a NOTICE sent privately to a user (such as this one is)

4mIRC
Posts: 57
Joined: Sat Mar 13, 2010 8:24 pm

Re: help in F_AUTH

Post by 4mIRC » Sun Nov 18, 2012 7:49 pm

Jobe1986 wrote:The NOTICE is sent ONLY to the user. So although the user's client may display it in the channel window, the other users in that channel CANNOT see it.

And in addition to that, UnrealIRCd has absolutely NO choice where a client chooses to display a NOTICE sent privately to a user (such as this one is)
Thanks for the reply

i want to change the idea from notice to private msg
example :
FROM define MSG_NOTICE "NOTICE"
TO define MSG_NOTICE "PRIVATE"

im not asking to make the notice sent to private
im asking how to change the code from notice the user to private msg to the user


Thanks

katsklaw
Official supporter
Posts: 1114
Joined: Sun Apr 18, 2004 5:06 pm

Re: help in F_AUTH

Post by katsklaw » Sun Nov 18, 2012 8:33 pm

The proper name of the command is PRIVMSG, however conventionally IRCd should not sent private message to nicks and its extremely annoying to most users to the point you may lose them.

It is never a good idea to make the ircd or services cater to client scripts. I have found that in nearly every case the problem is a simple case of some "scripter" not knowing how to parse the messages in question which is a poor excuse to change how irc is supposed to work.

Post Reply