1150956Sbrooks/* 2150956Sbrooks * Copyright (C) 2005 Brooks Davis. All rights reserved. 3150956Sbrooks * 4150956Sbrooks * Redistribution and use in source and binary forms, with or without 5150956Sbrooks * modification, are permitted provided that the following conditions 6150956Sbrooks * are met: 7150956Sbrooks * 1. Redistributions of source code must retain the above copyright 8150956Sbrooks * notice, this list of conditions and the following disclaimer. 9150956Sbrooks * 2. Redistributions in binary form must reproduce the above copyright 10150956Sbrooks * notice, this list of conditions and the following disclaimer in the 11150956Sbrooks * documentation and/or other materials provided with the distribution. 12150956Sbrooks * 13150956Sbrooks * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14150956Sbrooks * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15150956Sbrooks * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16150956Sbrooks * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 17150956Sbrooks * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18150956Sbrooks * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19150956Sbrooks * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20150956Sbrooks * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21150956Sbrooks * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22150956Sbrooks * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23150956Sbrooks * SUCH DAMAGE. 24150956Sbrooks */ 25150956Sbrooks 26150956Sbrooks#include <sys/cdefs.h> 27150956Sbrooks__FBSDID("$FreeBSD: releng/10.2/lib/libutil/tests/trimdomain_test.c 269904 2014-08-13 04:56:27Z ngie $"); 28150956Sbrooks 29150956Sbrooks#include <sys/types.h> 30150956Sbrooks#include <sys/param.h> 31150956Sbrooks#include <errno.h> 32150956Sbrooks#include <libutil.h> 33150956Sbrooks#include <stdio.h> 34150956Sbrooks#include <stdlib.h> 35150956Sbrooks#include <string.h> 36150956Sbrooks#include <unistd.h> 37150956Sbrooks 38150956Sbrooks#define TESTDOMAIN ".domain.example.com" 39150956Sbrooks#define TESTHOST "testhost" 40150956Sbrooks#define TESTFQDN "testhost" TESTDOMAIN 41150956Sbrooks 42150956Sbrooksint failures = 0; 43150956Sbrooksint tests = 0; 44150956Sbrooks 45150956Sbrooks/* 46150956Sbrooks * Evily override gethostname(3) so trimdomain always gets the same result. 47150956Sbrooks * This makes the tests much easier to write and less likely to fail on 48150956Sbrooks * oddly configured systems. 49150956Sbrooks */ 50199211Sdesint 51199211Sdesgethostname(char *name, size_t namelen) 52150956Sbrooks{ 53150956Sbrooks if (strlcpy(name, TESTFQDN, namelen) > namelen) { 54150956Sbrooks errno = ENAMETOOLONG; 55150956Sbrooks return (-1); 56150956Sbrooks } 57150956Sbrooks return (0); 58150956Sbrooks} 59150956Sbrooks 60150956Sbrooksvoid 61150956Sbrookstestit(const char *input, int hostsize, const char *output, const char *test) 62150956Sbrooks{ 63150956Sbrooks char *testhost; 64150956Sbrooks const char *expected = (output == NULL) ? input : output; 65150956Sbrooks 66150956Sbrooks testhost = strdup(input); 67199211Sdes trimdomain(testhost, hostsize < 0 ? (int)strlen(testhost) : hostsize); 68150956Sbrooks tests++; 69150956Sbrooks if (strcmp(testhost, expected) != 0) { 70150956Sbrooks printf("not ok %d - %s\n", tests, test); 71150956Sbrooks printf("# %s -> %s (expected %s)\n", input, testhost, expected); 72150956Sbrooks } else 73150956Sbrooks printf("ok %d - %s\n", tests, test); 74150956Sbrooks free(testhost); 75150956Sbrooks return; 76150956Sbrooks} 77150956Sbrooks 78150956Sbrooksint 79199211Sdesmain(void) 80150956Sbrooks{ 81150956Sbrooks 82150956Sbrooks printf("1..5\n"); 83150956Sbrooks 84150956Sbrooks testit(TESTFQDN, -1, TESTHOST, "self"); 85150956Sbrooks testit("XXX" TESTDOMAIN, -1, "XXX", "different host, same domain"); 86150956Sbrooks testit("XXX" TESTDOMAIN, 1, NULL, "short hostsize"); 87150956Sbrooks testit("bogus.example.net", -1, NULL, "arbitrary host"); 88150956Sbrooks testit("XXX." TESTFQDN, -1, NULL, "domain is local hostname"); 89150956Sbrooks 90150956Sbrooks return (0); 91150956Sbrooks} 92