Beispiel #1
0
//////////////////
// return functor
//
kstring Term::get_funct() const
{
	if (type(f_ATOM))
		return kstring(ivalue());
	if (type(f_STRUCT))
		return (*m_structs[ivalue()])->funct;
	if (type(f_LIST))
		return kstring(KSTRING_LIST);

	return kstring(MSR_NULL);
}
BOOL KScriptManager::UpdateStatInfo(DWORD dwScriptID, const char cszFuncName[], uint64_t uCostTime)
{
    BOOL                bResult         = false;
    KStatInfoNode*      pNode           = NULL;
    char                szKey[128];
    KFUNC_STAT_TABLE::iterator it;

    snprintf(szKey, sizeof(szKey), "%u:%s", dwScriptID, cszFuncName);
    szKey[sizeof(szKey) - 1] = '\0';

    it = m_StatTable.find(szKey);
    if (it == m_StatTable.end())
    {
        std::pair<KFUNC_STAT_TABLE::iterator, BOOL> InsRet = m_StatTable.insert(
            std::make_pair(kstring(szKey), KStatInfoNode())
            );
        KGLOG_PROCESS_ERROR(InsRet.second);

        it = InsRet.first;

        it->second.dwScriptID = dwScriptID;
        it->second.sFunction  = cszFuncName;
    }

    pNode = &it->second;

    pNode->dwCount++;
    pNode->uTime += uCostTime;

    bResult = true;
Exit0:
    return true;
}
Beispiel #3
0
BOOL KStatDataManager::LoadDataName(const char szName[], int nID)
{
    BOOL                                        bResult = false;
    KDATA_NAME_TABLE::iterator                  it;
    std::pair<KDATA_NAME_TABLE::iterator, BOOL> InsRet;

    assert(szName);
    KGLOG_PROCESS_ERROR(nID > 0 && nID <= MAX_STAT_DATA_COUNT);
    
    it = m_DataNameTable.find(szName);
    KGLOG_PROCESS_ERROR(it == m_DataNameTable.end());

    InsRet = m_DataNameTable.insert(std::make_pair(kstring(szName), nID));
    KGLOG_PROCESS_ERROR(InsRet.second);

    bResult = true;
Exit0:
    return bResult;
}
Beispiel #4
0
/////////////////////////
// initialize environment
//
EngineHandlers::EngineHandlers(ostream *msgStream)
{
	// global string table
	kstring::initMem();

	// local operator table
	OpTbl = new OperTable;
	AddStdOpers(OpTbl);

	// initialize streams
	IntlogIOStreams::setuser(kstring("user"), MSR_NULL);

	// global messages table
	MsgTbl = new MsgTable(msgStream);
	AddStdMsg(MsgTbl);

	// shared parser
	ParseG = new IntlogParser(OpTbl);

	// install system wide builtins
	DbIntlog::_pGlobalBuiltins = new DbIntlog;
	BuiltIn::Initialize(DbIntlog::_pGlobalBuiltins, get_msgtbl());
}
Beispiel #5
0
//------------------------------------------------------------------------
// install standard operators
//	for convenction on constant mapping of kstring/functors_operators
//	the call order MUST follow that of Operator::tag as declared
//	in operator.h
//
void AddStdOpers(OperTable *tbl)
{
	tbl->Add(kstring(":-"),		255,	Operator::XFX,	Operator::RULE);
	tbl->Add(kstring("?-"),		255,	Operator::FX,	Operator::QUERY);
	tbl->Add(kstring(";"),		254,	Operator::XFY,	Operator::OR);
	tbl->Add(kstring(","),		253,	Operator::XFY,	Operator::AND);
	tbl->Add(kstring("spy"),	240,	Operator::FX,	Operator::SPY);
	tbl->Add(kstring("nospy"),	240,	Operator::FX,	Operator::NOSPY);
	tbl->Add(kstring("not"),	60,		Operator::FX,	Operator::NOT);
	tbl->Add(kstring("is"),		40,		Operator::XFX,	Operator::IS);
	tbl->Add(kstring(":="),		40,		Operator::XFX,	Operator::ASS);
	tbl->Add(kstring("=.."),	40,		Operator::XFX,	Operator::UNIV);
	tbl->Add(kstring("="),		40,		Operator::XFX,	Operator::EQ);
	tbl->Add(kstring("\\="),	40,		Operator::XFX,	Operator::NE);
	tbl->Add(kstring("<"),		40,		Operator::XFX,	Operator::LT);
	tbl->Add(kstring("=<"),		40,		Operator::XFX,	Operator::LE);
	tbl->Add(kstring(">="),		40,		Operator::XFX,	Operator::GE);
	tbl->Add(kstring(">"),		40,		Operator::XFX,	Operator::GT);
	tbl->Add(kstring("=="),		40,		Operator::XFX,	Operator::STRICTEQ);
	tbl->Add(kstring("\\=="),	40,		Operator::XFX,	Operator::STRICTNE);
	tbl->Add(kstring("-"),		31,		Operator::YFX,	Operator::SUB);
	tbl->Add(kstring("+"),		31,		Operator::YFX,	Operator::ADD);
	tbl->Add(kstring("/"),		21,		Operator::YFX,	Operator::DIV);
	tbl->Add(kstring("*"),		21,		Operator::YFX,	Operator::MUL);
	tbl->Add(kstring("mod"),	11,		Operator::XFX,	Operator::MOD);
	tbl->Add(kstring("^"),		10,		Operator::XFY,	Operator::POT);
	tbl->Add(kstring("\\"),		50,		Operator::XFY,	Operator::PATHNAME);

	tbl->Add(kstring(":-", 1),	255,	Operator::FX,	Operator::RULEUNARY);
	tbl->Add(kstring("-", 1),	31,		Operator::FX,	Operator::SUBUNARY);
	tbl->Add(kstring("+", 1),	31,		Operator::FX,	Operator::ADDUNARY);

	tbl->Add(kstring(":{", 1),	31,		Operator::XF,	Operator::I_BEGIN);
	tbl->Add(kstring(":}", 1),	31,		Operator::XF,	Operator::I_END);
	tbl->Add(kstring(":<", 1),	31,		Operator::FX,	Operator::I_INHERIT);
	tbl->Add(kstring(":/", 1),	31,		Operator::FX,	Operator::I_IMPORT);
	tbl->Add(kstring(":\\", 1),	31,		Operator::FX,	Operator::I_EXPORT);
	tbl->Add(kstring(":+", 1),	31,		Operator::FX,	Operator::I_DYNAMIC);
	tbl->Add(kstring(":$", 1),	31,		Operator::FX,	Operator::I_HANDLER);

	tbl->Add(kstring(":@", 1),	31,		Operator::XFX,	Operator::I_CREATE);
	tbl->Add(kstring(":", 1),	241,	Operator::XFX,	Operator::I_CALL);
	tbl->Add(kstring(":*", 1),	241,	Operator::XFX,	Operator::I_GCALL);
	tbl->Add(kstring(":~", 1),	31,		Operator::FX,	Operator::I_DESTROY);

	tbl->Add(kstring(":^", 1),	31,		Operator::XFX,	Operator::I_PROPLIST);
	tbl->Add(kstring(":&", 1),	31,		Operator::XFX,	Operator::I_ISA);

	kstring kl("."), kc("!");
}
Beispiel #6
0
// class Font
Font::Font(){
  File *file = fs->fopen(kstring((char *)"/hankaku.bin"));
  fonts = new char[4096];
  file->read(0,4096,fonts);
}
Beispiel #7
0
/*	Given krb5 service name in KSSL_CTX *kssl_ctx (typically "kssl"),
**		and krb5 AP_REQ message & message length,
**	Return Kerberos session key and client principle
**		to SSL Server in KSSL_CTX *kssl_ctx.
**
**	19990702	VRS 	Started.
*/
krb5_error_code
kssl_sget_tkt(
	/* UPDATE */	KSSL_CTX		*kssl_ctx,
	/* IN     */	krb5_data		*indata,
	/* OUT    */	krb5_ticket_times	*ttimes,
	/* OUT    */	KSSL_ERR		*kssl_err  )
{
        krb5_error_code			krb5rc = KRB5KRB_ERR_GENERIC;
        static krb5_context		krb5context = NULL;
	static krb5_auth_context	krb5auth_context = NULL;
	krb5_ticket 			*krb5ticket = NULL;
	KRB5_TKTBODY 			*asn1ticket = NULL;
	const unsigned char		*p;
	krb5_keytab 			krb5keytab = NULL;
	krb5_keytab_entry		kt_entry;
	krb5_principal			krb5server;
        krb5_rcache                     rcache = NULL;

	kssl_err_set(kssl_err, 0, "");

	if (!kssl_ctx) {
		kssl_err_set(kssl_err, SSL_R_KRB5_S_INIT,
		    "No kssl_ctx defined.\n");
		goto err;
	}

#ifdef KSSL_DEBUG
	printf("in kssl_sget_tkt(%s)\n", kstring(kssl_ctx->service_name));
#endif	/* KSSL_DEBUG */

	if (!krb5context && (krb5rc = krb5_init_context(&krb5context))) {
		kssl_err_set(kssl_err, SSL_R_KRB5_S_INIT,
		    "krb5_init_context() fails.\n");
		goto err;
	}
	if (krb5auth_context &&
	    (krb5rc = krb5_auth_con_free(krb5context, krb5auth_context))) {
		kssl_err_set(kssl_err, SSL_R_KRB5_S_INIT,
		    "krb5_auth_con_free() fails.\n");
		goto err;
	} else
		krb5auth_context = NULL;
	if (!krb5auth_context &&
	    (krb5rc = krb5_auth_con_init(krb5context, &krb5auth_context))) {
		kssl_err_set(kssl_err, SSL_R_KRB5_S_INIT,
		    "krb5_auth_con_init() fails.\n");
		goto err;
	}

	if ((krb5rc = krb5_auth_con_getrcache(krb5context, krb5auth_context,
	    &rcache))) {
		kssl_err_set(kssl_err, SSL_R_KRB5_S_INIT,
		    "krb5_auth_con_getrcache() fails.\n");
		goto err;
	}

	if ((krb5rc = krb5_sname_to_principal(krb5context, NULL,
	    (kssl_ctx->service_name) ? kssl_ctx->service_name : KRB5SVC,
	    KRB5_NT_SRV_HST, &krb5server)) != 0) {
		kssl_err_set(kssl_err, SSL_R_KRB5_S_INIT,
		    "krb5_sname_to_principal() fails.\n");
		goto err;
	}

	if (rcache == NULL) {
		if ((krb5rc = krb5_get_server_rcache(krb5context,
		    krb5_princ_component(krb5context, krb5server, 0),
		    &rcache))) {
			kssl_err_set(kssl_err, SSL_R_KRB5_S_INIT,
			    "krb5_get_server_rcache() fails.\n");
			goto err;
		}
	}

	if ((krb5rc = krb5_auth_con_setrcache(krb5context, krb5auth_context,
	    rcache))) {
		kssl_err_set(kssl_err, SSL_R_KRB5_S_INIT,
		    "krb5_auth_con_setrcache() fails.\n");
		goto err;
	}


	/*	kssl_ctx->keytab_file == NULL ==> use Kerberos default
	*/
	if (kssl_ctx->keytab_file) {
		krb5rc = krb5_kt_resolve(krb5context, kssl_ctx->keytab_file,
		    &krb5keytab);
		if (krb5rc) {
			kssl_err_set(kssl_err, SSL_R_KRB5_S_INIT,
			    "krb5_kt_resolve() fails.\n");
			goto err;
		}
	} else {
		krb5rc = krb5_kt_default(krb5context, &krb5keytab);
		if (krb5rc) {
			kssl_err_set(kssl_err, SSL_R_KRB5_S_INIT,
			    "krb5_kt_default() fails.\n");
			goto err;
		}
	}

	/*	Actual Kerberos5 krb5_recvauth() has initial conversation here
	**	o	check KRB5_SENDAUTH_BADAUTHVERS
	**		unless KRB5_RECVAUTH_SKIP_VERSION
	**	o	check KRB5_SENDAUTH_BADAPPLVERS
	**	o	send "0" msg if all OK
	*/

	/*  20010411 was using AP_REQ instead of true KerberosWrapper
	**
	**  if ((krb5rc = krb5_rd_req(krb5context, &krb5auth_context,
	**			&krb5in_data, krb5server, krb5keytab,
	**			&ap_option, &krb5ticket)) != 0)  { Error }
	*/

	p = (unsigned char *)indata->data;
	if ((asn1ticket = (KRB5_TKTBODY *) d2i_KRB5_TICKET(NULL, &p,
	    (long)indata->length)) == NULL) {
		(void) snprintf(kssl_err->text, KSSL_ERR_MAX,
		    "d2i_KRB5_TICKET() ASN.1 decode failure.\n");
		kssl_err->reason = SSL_R_KRB5_S_RD_REQ;
		goto err;
	}

	/* Was:  krb5rc = krb5_decode_ticket(krb5in_data,&krb5ticket)) != 0) */
	if ((krb5rc = kssl_TKT2tkt(krb5context, asn1ticket, &krb5ticket,
	    kssl_err)) != 0) {
		(void) snprintf(kssl_err->text, KSSL_ERR_MAX,
		    "Error converting ASN.1 ticket to krb5_ticket.\n");
		kssl_err->reason = SSL_R_KRB5_S_RD_REQ;
		goto err;
	}

	if (!krb5_principal_compare(krb5context, krb5server,
	    krb5ticket->server))  {
		krb5rc = KRB5_PRINC_NOMATCH;
		(void) snprintf(kssl_err->text, KSSL_ERR_MAX,
		    "server principal != ticket principal\n");
		kssl_err->reason = SSL_R_KRB5_S_RD_REQ;
		goto err;
	}
	if ((krb5rc = krb5_kt_get_entry(krb5context, krb5keytab,
	    krb5ticket->server, krb5ticket->enc_part.kvno,
	    krb5ticket->enc_part.enctype, &kt_entry)) != 0)  {
		(void) snprintf(kssl_err->text, KSSL_ERR_MAX,
		    "krb5_kt_get_entry() fails with %x.\n", krb5rc);
		kssl_err->reason = SSL_R_KRB5_S_RD_REQ;
		goto err;
	}
	if ((krb5rc = krb5_decrypt_tkt_part(krb5context, &kt_entry.key,
	    krb5ticket)) != 0)  {
		(void) snprintf(kssl_err->text, KSSL_ERR_MAX,
		    "krb5_decrypt_tkt_part() failed.\n");
		kssl_err->reason = SSL_R_KRB5_S_RD_REQ;
		goto err;
	} else {
		krb5_kt_free_entry(krb5context, &kt_entry);
#ifdef KSSL_DEBUG
		{
			int i;
			krb5_address **paddr = krb5ticket->enc_part2->caddrs;
			printf("Decrypted ticket fields:\n");
			printf("\tflags: %X, transit-type: %X",
			krb5ticket->enc_part2->flags,
			krb5ticket->enc_part2->transited.tr_type);
			print_krb5_data("\ttransit-data: ",
			&(krb5ticket->enc_part2->transited.tr_contents));
			printf("\tcaddrs: %p, authdata: %p\n",
			krb5ticket->enc_part2->caddrs,
			krb5ticket->enc_part2->authorization_data);
			if (paddr) {
				printf("\tcaddrs:\n");
				for (i = 0; paddr[i] != NULL; i++) {
					krb5_data d;
					d.length = paddr[i]->length;
					d.data = paddr[i]->contents;
					print_krb5_data("\t\tIP: ", &d);
				}
			}
			printf("\tstart/auth/end times: %d / %d / %d\n",
			krb5ticket->enc_part2->times.starttime,
			krb5ticket->enc_part2->times.authtime,
			krb5ticket->enc_part2->times.endtime);
		}
#endif	/* KSSL_DEBUG */
	}

	krb5rc = KRB5_NO_TKT_SUPPLIED;
	if (!krb5ticket || !krb5ticket->enc_part2 ||
	    !krb5ticket->enc_part2->client ||
	    !krb5ticket->enc_part2->client->data ||
	    !krb5ticket->enc_part2->session) {
		kssl_err_set(kssl_err, SSL_R_KRB5_S_BAD_TICKET,
		    "bad ticket from krb5_rd_req.\n");
	} else if (kssl_ctx_setprinc(kssl_ctx, KSSL_CLIENT,
	    &krb5ticket->enc_part2->client->realm,
	    krb5ticket->enc_part2->client->data,
	    krb5ticket->enc_part2->client->length)) {
		kssl_err_set(kssl_err, SSL_R_KRB5_S_BAD_TICKET,
		    "kssl_ctx_setprinc() fails.\n");
	} else if (kssl_ctx_setkey(kssl_ctx, krb5ticket->enc_part2->session)) {
		kssl_err_set(kssl_err, SSL_R_KRB5_S_BAD_TICKET,
		    "kssl_ctx_setkey() fails.\n");
	} else if (krb5ticket->enc_part2->flags & TKT_FLG_INVALID) {
		krb5rc = KRB5KRB_AP_ERR_TKT_INVALID;
		kssl_err_set(kssl_err, SSL_R_KRB5_S_BAD_TICKET,
		    "invalid ticket from krb5_rd_req.\n");
	} else
		krb5rc = 0;

	kssl_ctx->enctype = krb5ticket->enc_part.enctype;
	ttimes->authtime = krb5ticket->enc_part2->times.authtime;
	ttimes->starttime = krb5ticket->enc_part2->times.starttime;
	ttimes->endtime = krb5ticket->enc_part2->times.endtime;
	ttimes->renew_till = krb5ticket->enc_part2->times.renew_till;

	err:
#ifdef KSSL_DEBUG
	kssl_ctx_show(kssl_ctx);
#endif	/* KSSL_DEBUG */

	if (asn1ticket)
		KRB5_TICKET_free((KRB5_TICKET *) asn1ticket);
	if (krb5keytab)
		krb5_kt_close(krb5context, krb5keytab);
	if (krb5ticket)
		krb5_free_ticket(krb5context, krb5ticket);
	if (krb5server)
		krb5_free_principal(krb5context, krb5server);
	return (krb5rc);
}
Beispiel #8
0
DbIntlog::DbIntlog(DbIntlog *father) : hashtable(DIMBASE)
{
    m_name = kstring(MSR_NULL);
    m_father = father;
}
Beispiel #9
0
/////////////////////////////////////////////
// i_proplist(NameInt,Property,List) (+,+,?)
// retrieve property name/arity list
//	for required interface e property
//
BtFImpl(i_proplist, t, p)
{
	Term NameInt = p->eval_term(t.getarg(0)),
		 Prop = p->eval_term(t.getarg(1)),
		 ListProp(ListNULL);
	DbIntlog *db;

	if (	!NameInt.type(f_ATOM) ||
			!Prop.type(f_ATOM) ||
			(db = findint(p->get_db(), NameInt.kstr())) == 0)
	{ err:
		p->BtErr(BTERR_INVALID_ARG_TYPE);
		return 0;
	}

	// search for property
	DbEntry::scopemode prop;

	BuiltIn* bt = p->get_db()->is_builtin(Prop, 1);
	if (!bt)
		goto err;

	if (bt->eval == i_export)	prop = DbEntry::exported;
	else
	if (bt->eval == i_import)	prop = DbEntry::import;
	else
	if (bt->eval == i_dynamic)	prop = DbEntry::dynamic;
	else
	if (bt->eval == i_begin)	prop = DbEntry::local;
	else goto err;

	slist lprop;
	db->EntriesWithProperty(prop, lprop);

	// transform the slist in Prolog List
	if (lprop.numel() > 0) {

		Term tail(f_NOTERM);
		slist_iter it(lprop);
		DbIntlog::EntryWithProp *pEntry;
		while ((pEntry = (DbIntlog::EntryWithProp *)it.next()) != 0) {

			// build the name/arity structure
			Term sProp = Term(kstring(Operator::DIV), 2);
			sProp.setarg(0, Term(kstring(pEntry->id)));
			sProp.setarg(1, Term(Int(pEntry->arity)));

			Term elem = Term(sProp, Term(ListNULL));
			if (tail.type(f_NOTERM))
				tail = ListProp = elem;
			else {
				tail.setarg(1, elem);
				tail = elem;
			}
		}

		ListProp = p->save(ListProp);
	}

	return p->unify(t.getarg(2), ListProp);
}
Beispiel #10
0
inline kstring Term::kstr() const
{
	ASSERT(type(f_ATOM));
	return kstring(ivalue());
}
Beispiel #11
0
/*
inline Term::operator kstring() const
{
	ASSERT(type(f_ATOM));
	return kstring(ivalue());
}
*/
inline Term::operator CCP() const
{
	ASSERT(type(f_ATOM));
	return kstring(ivalue());
}