Ejemplo n.º 1
0
RELATION UnSet(KEY leftKey, RELATION id, KEY rightKey)
{
    register struct relationDef *rd = FindRelation(id);

    if (rd && CompareKey) {
	register struct relation *r;
	register struct relation **h;

	h = &rd->rd_relationsTable;

	for (r = rd->rd_relationsTable; r; r = r->r_next) {
	    if (CompareKey(r->r_leftKey, leftKey)
		&& CompareKey(r->r_rightKey, rightKey)) {
		*h = r->r_next;

		TCFreeMem(r, sizeof(*r));
		return id;
	    }

	    h = &r->r_next;
	}
    }

    return 0;
}
Ejemplo n.º 2
0
RELATION SetP(KEY leftKey, RELATION id, KEY rightKey, PARAMETER parameter)
{
    register struct relationDef *rd = FindRelation(id);

    if (rd && CompareKey) {
	register struct relation *r;

	for (r = rd->rd_relationsTable; r; r = r->r_next) {
	    if (CompareKey(r->r_leftKey, leftKey)
		&& CompareKey(r->r_rightKey, rightKey)) {
		if (parameter != NO_PARAMETER)
		    r->r_parameter = parameter;
		return id;
	    }
	}

	if ((r = (struct relation *) TCAllocMem(sizeof(*r), 0))) {
	    r->r_next = rd->rd_relationsTable;
	    rd->rd_relationsTable = r;

	    r->r_leftKey = leftKey;
	    r->r_rightKey = rightKey;
	    r->r_parameter = parameter;

	    return id;
	}
    }

    return 0;
}
Ejemplo n.º 3
0
TEST(keyFile, ReadHexKeys) {
	const char* path;
	struct key* keys = NULL;
	struct key* result = NULL;
	char data[15];

	path = CreatePath("key-test-hex", INPUT_DIR);
	TEST_ASSERT_EQUAL(3, auth_init(path, &keys));
	free((void*) path);

	TEST_ASSERT_TRUE(keys != NULL);

	get_key(10, &result);
	TEST_ASSERT_TRUE(result != NULL);
	TEST_ASSERT_TRUE(CompareKey(10, 13, "MD5",
		 "\x01\x23\x45\x67\x89\xab\xcd\xef\x01\x23\x45\x67\x89", result));

	result = NULL;
	get_key(20, &result);
	TEST_ASSERT_TRUE(result != NULL);
	memset(data, 0x11, 15);
	TEST_ASSERT_TRUE(CompareKey(20, 15, "MD5", data, result));

	result = NULL;
	get_key(30, &result);
	TEST_ASSERT_TRUE(result != NULL);
	memset(data, 0x01, 13);
	TEST_ASSERT_TRUE(CompareKey(30, 13, "MD5", data, result));
}
Ejemplo n.º 4
0
PARAMETER GetP(KEY leftKey, RELATION id, KEY rightKey)
{
    register struct relationDef *rd = FindRelation(id);

    if (rd && CompareKey) {
	register struct relation *r;

	for (r = rd->rd_relationsTable; r; r = r->r_next) {
	    if (CompareKey(r->r_leftKey, leftKey)
		&& CompareKey(r->r_rightKey, rightKey))
		return r->r_parameter;
	}
    }

    return NO_PARAMETER;
}
Ejemplo n.º 5
0
TEST(keyFile, ReadASCIIKeys) {
	const char* path;
	struct key* keys = NULL;
	struct key* result = NULL;
	path = CreatePath("key-test-ascii", INPUT_DIR);
	TEST_ASSERT_EQUAL(2, auth_init(path, &keys));
	free((void*) path);
	TEST_ASSERT_TRUE(keys != NULL);
	get_key(40, &result);
	TEST_ASSERT_TRUE(result != NULL);
	TEST_ASSERT_TRUE(CompareKey(40, 11, "MD5", "asciikeyTwo", result));
	result = NULL;
	get_key(50, &result);
	TEST_ASSERT_TRUE(result != NULL);
	TEST_ASSERT_TRUE(CompareKey(50, 11, "MD5", "asciikeyOne", result));
}
Ejemplo n.º 6
0
TEST(keyFile, ReadKeyFileWithComments) {
	const char* path;
	struct key* keys = NULL;
	struct key* result = NULL;
	char data[15];

	path = CreatePath("key-test-comments", INPUT_DIR);
	TEST_ASSERT_EQUAL(2, auth_init(path, &keys));
	free((void*) path);

	TEST_ASSERT_TRUE(keys != NULL);

	get_key(10, &result);
	TEST_ASSERT_TRUE(result != NULL);
	memset(data, 0x01, 15);
	TEST_ASSERT_TRUE(CompareKey(10, 15, "MD5", data, result));

	result = NULL;
	get_key(34, &result);
	TEST_ASSERT_TRUE(result != NULL);
	TEST_ASSERT_TRUE(CompareKey(34, 3, "MD5", "xyz", result));
}
Ejemplo n.º 7
0
void UnSetAll(KEY key, void (*UseKey) (KEY))
{
    register struct relationDef *rd;

    for (rd = relationsDefBase; rd; rd = rd->rd_next) {
	register struct relation *r;
	register struct relation **h;

	h = &rd->rd_relationsTable;

	for (r = rd->rd_relationsTable; r; r = r->r_next) {
	    if (CompareKey(r->r_leftKey, key) || CompareKey(r->r_rightKey, key)) {
		if (UseKey)
		    UseKey(key);

		*h = r->r_next;

		TCFreeMem(r, sizeof(*r));
	    }

	    h = &r->r_next;
	}
    }
}
Ejemplo n.º 8
0
void AskAll(KEY leftKey, RELATION id, void (*UseKey) (void *))
{
    register struct relationDef *rd = FindRelation(id);

    if (rd && CompareKey) {
	register struct relation *r;

	for (r = rd->rd_relationsTable; r; r = r->r_next) {
	    if (CompareKey(r->r_leftKey, leftKey)) {
		if (UseKey)
		    UseKey(r->r_rightKey);
	    }
	}
    }
}
Ejemplo n.º 9
0
RELATION AskP(KEY leftKey, RELATION id, KEY rightKey, PARAMETER parameter,
	      COMPARSION comparsion)
{
    register struct relationDef *rd = FindRelation(id);

    if (rd && CompareKey) {
	register struct relation *r;

	for (r = rd->rd_relationsTable; r; r = r->r_next) {
	    if (CompareKey(r->r_leftKey, leftKey)
		&& CompareKey(r->r_rightKey, rightKey)) {
		if (comparsion && (parameter != NO_PARAMETER)) {
		    if (comparsion & CMP_EQUAL) {
			if (comparsion & CMP_HIGHER)
			    return (r->r_parameter >= parameter ? id : 0);
			else if (comparsion & CMP_LOWER)
			    return (r->r_parameter <= parameter ? id : 0);

			return (r->r_parameter == parameter ? id : 0);
		    } else if (comparsion & CMP_HIGHER)
			return (r->r_parameter > parameter ? id : 0);
		    else if (comparsion & CMP_LOWER)
			return (r->r_parameter < parameter ? id : 0);
		    else if (comparsion & CMP_NOT_EQUAL)
			return (r->r_parameter != parameter ? id : 0);

		    return 0;
		}

		return id;
	    }
	}
    }

    return 0;
}
Ejemplo n.º 10
0
TEST(keyFile, ReadKeyFileWithInvalidHex) {
	const char* path;
	struct key* keys = NULL;
	struct key* result = NULL;
	char data[15];

	path = CreatePath("key-test-invalid-hex", INPUT_DIR);
	TEST_ASSERT_EQUAL(1, auth_init(path, &keys));
	free((void*) path);

	TEST_ASSERT_TRUE(keys != NULL);

	get_key(10, &result);
	TEST_ASSERT_TRUE(result != NULL);
	memset(data, 0x01, 15);
	TEST_ASSERT_TRUE(CompareKey(10, 15, "MD5", data, result));

	result = NULL;
	get_key(30, &result); /* Should not exist, and result should remain NULL. */
	TEST_ASSERT_TRUE(result == NULL);
}