/*
* Copyright (c) 2004, 2006 Sendmail, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*/
#include "sm/generic.h"
SM_RCSID("@(#)$Id: t-nameok.c,v 1.7 2006/12/27 23:41:09 ca Exp $")
#include "sm/assert.h"
#include "sm/error.h"
#include "sm/test.h"
#include "sm/string.h"
#include "nameok.h"
#include <stdio.h>
static void
test(void)
{
uchar c;
uchar h[256];
SM_TEST(validdnsdomain((const uchar *) "a", 0));
SM_TEST(validdnsdomain((const uchar *) "1", 0));
SM_TEST(validdnsdomain((const uchar *) ".", DNS_DOT));
SM_TEST(validdnsdomain((const uchar *) "a.", 0));
SM_TEST(validdnsdomain((const uchar *) "2.", 0));
SM_TEST(validdnsdomain((const uchar *) "a.b", 0));
SM_TEST(validdnsdomain((const uchar *) "a.b.c", 0));
SM_TEST(!validdnsdomain((const uchar *) ".", 0));
SM_TEST(!validdnsdomain((const uchar *) "..", 0));
SM_TEST(!validdnsdomain((const uchar *) "..b", 0));
SM_TEST(!validdnsdomain((const uchar *) "a..b", 0));
SM_TEST(!validdnsdomain((const uchar *) "a.b..", 0));
SM_TEST(!validdnsdomain((const uchar *) "a.b-.", 0));
SM_TEST(!validdnsdomain((const uchar *) "_", 0));
SM_TEST(!validdnsdomain((const uchar *) "a_", 0));
SM_TEST(!validdnsdomain((const uchar *) "a_b", 0));
SM_TEST(!validdnsdomain((const uchar *) "-", 0));
SM_TEST(!validdnsdomain((const uchar *) "a-", 0));
SM_TEST(!validdnsdomain((const uchar *) "a-.", 0));
SM_TEST(validdnsdomain((const uchar *) "a-b", 0));
SM_TEST(!validdnsdomain((const uchar *) "-.", 0));
SM_TEST(!validdnsdomain((const uchar *) ".-", 0));
SM_TEST(!validdnsdomain((const uchar *) "a-.", 0));
SM_TEST(validdnsdomain((const uchar *) "a-b.", 0));
SM_TEST(!validdnsdomain((const uchar *) "a--b", 0));
SM_TEST(!validdnsdomain((const uchar *) "a-.-b", 0));
SM_TEST(!validdnsdomain((const uchar *) "lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllla", 0));
SM_TEST(validdnsdomain((const uchar *) "llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll", 0));
SM_TEST(validdnsdomain((const uchar *) "llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll.llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll.llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll.llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll", 0));
SM_TEST(!validdnsdomain((const uchar *) "llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll.llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll.llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll.llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll.a", 0));
SM_TEST(!validdnsdomain((const uchar *) ".", 0));
SM_TEST(!validdnsdomain((const uchar *) "_", 0));
SM_TEST(!validdnsdomain((const uchar *) "a_", 0));
SM_TEST(!validdnsdomain((const uchar *) "a_b", 0));
SM_TEST(!validdnsdomain((const uchar *) "!", 0));
SM_TEST(!validdnsdomain((const uchar *) "a!", 0));
SM_TEST(!validdnsdomain((const uchar *) "a!b", 0));
SM_TEST(!validdnsdomain((const uchar *) "%", 0));
SM_TEST(!validdnsdomain((const uchar *) "a%", 0));
SM_TEST(!validdnsdomain((const uchar *) "a%b", 0));
SM_TEST(!validdnsdomain((const uchar *) "$", 0));
SM_TEST(!validdnsdomain((const uchar *) "a$", 0));
SM_TEST(!validdnsdomain((const uchar *) "a$b", 0));
SM_TEST(!validdnsdomain((const uchar *) "*", 0));
SM_TEST(!validdnsdomain((const uchar *) "a*", 0));
SM_TEST(!validdnsdomain((const uchar *) "a*b", 0));
SM_TEST(!validdnsdomain((const uchar *) "(", 0));
SM_TEST(!validdnsdomain((const uchar *) "a(", 0));
SM_TEST(!validdnsdomain((const uchar *) "a(b", 0));
for (c = '!'; c < '0'; c++)
{
if (c == '.' || c == '-')
continue;
sm_snprintf((char *)h, sizeof(h), "%c", c);
SM_TEST(!validdnsdomain(h, 0));
sm_snprintf((char *)h, sizeof(h), "a%c", c);
SM_TEST(!validdnsdomain(h, 0));
sm_snprintf((char *)h, sizeof(h), "a%cb", c);
SM_TEST(!validdnsdomain(h, 0));
}
for (c = '['; c < '`'; c++)
{
sm_snprintf((char *)h, sizeof(h), "%c", c);
SM_TEST(!validdnsdomain(h, 0));
sm_snprintf((char *)h, sizeof(h), "a%c", c);
SM_TEST(!validdnsdomain(h, 0));
sm_snprintf((char *)h, sizeof(h), "a%cb", c);
SM_TEST(!validdnsdomain(h, 0));
}
for (c = '{'; c < 255; c++)
{
sm_snprintf((char *)h, sizeof(h), "%c", c);
SM_TEST(!validdnsdomain(h, 0));
sm_snprintf((char *)h, sizeof(h), "a%c", c);
SM_TEST(!validdnsdomain(h, 0));
sm_snprintf((char *)h, sizeof(h), "a%cb", c);
SM_TEST(!validdnsdomain(h, 0));
}
c = 255;
sm_snprintf((char *)h, sizeof(h), "%c", c);
SM_TEST(!validdnsdomain(h, 0));
sm_snprintf((char *)h, sizeof(h), "a%c", c);
SM_TEST(!validdnsdomain(h, 0));
sm_snprintf((char *)h, sizeof(h), "a%cb", c);
SM_TEST(!validdnsdomain(h, 0));
SM_TEST(validdnsdomain((const uchar *) "a--b", DNS_HYPHENS));
SM_TEST(!validdnsdomain((const uchar *) "a--", DNS_HYPHENS));
SM_TEST(validdnsdomain((const uchar *) "_", DNS__OK));
SM_TEST(validdnsdomain((const uchar *) "a_", DNS__OK));
SM_TEST(validdnsdomain((const uchar *) "a_b", DNS__OK));
return;
}
int
main(int argc, char *argv[])
{
int i, c;
uint flags;
bool b;
flags = 0;
while ((c = getopt(argc, argv, "f:")) != -1)
{
switch (c)
{
case 'f':
flags = (uint) atoi(optarg);
break;
default:
/*
usage(argv[0]);
*/
return 1;
}
}
sm_test_begin(argc, argv, "test nameok");
argc -= optind;
argv += optind;
if (argc > 0)
{
for (i = 0; i < argc; i++)
{
b = validdnsdomain((const uchar *) argv[i], flags);
fprintf(stderr, "validdnsdomain(%s)=%s\n", argv[i],
b ? "true" : "false");
}
}
else
test();
return sm_test_end();
}
syntax highlighted by Code2HTML, v. 0.9.1