RSA-Toolkit

 view release on metacpan or  search on metacpan

Toolkit.xs  view on Meta::CPAN

		Sd_ListGroups("", group, MAX_RESULT_MSG_SIZE);
		if (strcmp(group,"Done") == 0) break;
		av_store(av_group, i++, newSVpv(group, 0));
	} while (1);
	
	return av_group;
}

void
_Sd_ListUserByGroup(char *group, char *user)
{
	Sd_ListUserByGroup(group, "-s", "|", "", user, MAX_RESULT_MSG_SIZE);
}

SV *
_fetch_user_raw(char *login)
{
	char pre_login[MAX_RESULT_MSG_SIZE+1] = {0};
	char token[MAX_RESULT_MSG_SIZE] = {0};

	HV* stash;
	SV* object;
	HV* user_hash;

	SV* sv_inf;
	AV* av_inf_ext;
	AV* av_group;

/* The login has at least one token */
	_Sd_GetSerialByLogin(login, token);
	if (strcmp(token,"Done") == 0) return object;
			
/* Get further information */
	_prefixed_login(login, pre_login);
	sv_inf = _Sd_ListUserInfoExt(pre_login);
	av_inf_ext = _Sd_ListExtensionsForUser(pre_login);
	av_group = _Sd_ListGroupMembership(pre_login);
			
	user_hash = newHV();
	hv_store(user_hash, "login", 5, newSVpv(login,0),0);
	hv_store(user_hash, "token", 5, newSVpv(token,0),0);
	hv_store(user_hash, "inf", 3, sv_inf, 0);
	hv_store(user_hash, "inf_ext", 7, newRV_noinc((SV*)av_inf_ext),0);
	hv_store(user_hash, "group", 5, newRV_noinc((SV*)av_group),0);
		
	stash = gv_stashpv("RSA::Toolkit::User", GV_ADDWARN);
	object = newRV_inc((SV*)user_hash);
	sv_bless(object, stash);
		
	return object;
}



MODULE = RSA::Toolkit		PACKAGE = RSA::Toolkit		

void
connect(class)
	PREINIT:
		char msgBuf[MAX_RESULT_MSG_SIZE];
	PPCODE:
		Sd_ApiInit("","","1", msgBuf, MAX_RESULT_MSG_SIZE);

SV *
_fetch_users(class, field, type, value)
		int field
		int type
		char *value
	PREINIT:
		char login[MAX_RESULT_MSG_SIZE] = {0};
		char pre_login[MAX_RESULT_MSG_SIZE+1] = {0};
		char token[MAX_RESULT_MSG_SIZE] = {0};

		HV* stash;
		SV* object;
		HV* user_hash;

		SV* sv_inf;
		AV* av_inf_ext;
		AV* av_group;
	CODE:
		do
		{
			/* Get login list */
			_Sd_ListUsersByField(login, field,type,value);
			if (strcmp(login,"Done") == 0) exit(0);
printf("%s\n", login);

			/* The login has at least one token */
			_Sd_GetSerialByLogin(login, token);
			if (strcmp(token,"Done") == 0) continue;
			
			/* Get further information */
			_prefixed_login(login, pre_login);
			sv_inf = _Sd_ListUserInfoExt(pre_login);
			av_inf_ext = _Sd_ListExtensionsForUser(pre_login);
			av_group = _Sd_ListGroupMembership(pre_login);
			
			if (strcmp(token,"Done") != 0) break;
		} while (1);	

		user_hash = newHV();
		hv_store(user_hash, "login", 5, newSVpv(login,0),0);
		hv_store(user_hash, "token", 5, newSVpv(token,0),0);
		hv_store(user_hash, "inf", 3, sv_inf, 0);
		hv_store(user_hash, "inf_ext", 7, newRV_noinc((SV*)av_inf_ext),0);
		hv_store(user_hash, "group", 5, newRV_noinc((SV*)av_group),0);
		
		stash = gv_stashpv("RSA::Toolkit::User", GV_ADDWARN);
		object = newRV_inc((SV*)user_hash);
		sv_bless(object, stash);
		
		RETVAL = object;
	OUTPUT:
		RETVAL

SV *
_fetch_groups(class)
	CODE:
		RETVAL = newRV_noinc((SV*)_Sd_ListGroups());
	OUTPUT:



( run in 2.072 seconds using v1.01-cache-2.11-cpan-5511b514fd6 )