|
Packit |
6bd9ab |
/*
|
|
Packit |
6bd9ab |
test_cfg.c - simple test for the cfg module
|
|
Packit |
6bd9ab |
This file is part of the nss-pam-ldapd library.
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
Copyright (C) 2007, 2009, 2011, 2012, 2013 Arthur de Jong
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
This library is free software; you can redistribute it and/or
|
|
Packit |
6bd9ab |
modify it under the terms of the GNU Lesser General Public
|
|
Packit |
6bd9ab |
License as published by the Free Software Foundation; either
|
|
Packit |
6bd9ab |
version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
This library is distributed in the hope that it will be useful,
|
|
Packit |
6bd9ab |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
6bd9ab |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
6bd9ab |
Lesser General Public License for more details.
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
You should have received a copy of the GNU Lesser General Public
|
|
Packit |
6bd9ab |
License along with this library; if not, write to the Free Software
|
|
Packit |
6bd9ab |
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
Packit |
6bd9ab |
02110-1301 USA
|
|
Packit |
6bd9ab |
*/
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
#include "config.h"
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
#include <stdio.h>
|
|
Packit |
6bd9ab |
#include <string.h>
|
|
Packit |
6bd9ab |
#include <assert.h>
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
#include "common.h"
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
/* we include cfg.c because we want to test the static methods */
|
|
Packit |
6bd9ab |
#include "nslcd/cfg.c"
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
static void test_xstrdup(void)
|
|
Packit |
6bd9ab |
{
|
|
Packit |
6bd9ab |
static const char *foo = "testString123";
|
|
Packit |
6bd9ab |
char *bar;
|
|
Packit |
6bd9ab |
bar = xstrdup(foo);
|
|
Packit |
6bd9ab |
/* we should have a new value */
|
|
Packit |
6bd9ab |
assert(bar != NULL);
|
|
Packit |
6bd9ab |
/* the contents should be the same */
|
|
Packit |
6bd9ab |
assertstreq(foo, bar);
|
|
Packit |
6bd9ab |
/* but the pointer should be different */
|
|
Packit |
6bd9ab |
assert(foo != bar);
|
|
Packit |
6bd9ab |
/* free memory */
|
|
Packit |
6bd9ab |
free(bar);
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
static void test_add_uris(void)
|
|
Packit |
6bd9ab |
{
|
|
Packit |
6bd9ab |
static struct ldap_config cfg;
|
|
Packit |
6bd9ab |
int i;
|
|
Packit |
6bd9ab |
/* set up config */
|
|
Packit |
6bd9ab |
cfg_defaults(&cfg;;
|
|
Packit |
6bd9ab |
assert(cfg.uris[0].uri == NULL);
|
|
Packit |
6bd9ab |
/* add a uri */
|
|
Packit |
6bd9ab |
add_uri(__FILE__, __LINE__, &cfg, "ldap://localhost");
|
|
Packit |
6bd9ab |
assert(cfg.uris[0].uri != NULL);
|
|
Packit |
6bd9ab |
assert(cfg.uris[1].uri == NULL);
|
|
Packit |
6bd9ab |
/* add some more uris */
|
|
Packit |
6bd9ab |
for (i = 1; i < NSS_LDAP_CONFIG_MAX_URIS; i++)
|
|
Packit |
6bd9ab |
{
|
|
Packit |
6bd9ab |
add_uri(__FILE__, __LINE__, &cfg, "ldap://localhost");
|
|
Packit |
6bd9ab |
assert(cfg.uris[i].uri != NULL);
|
|
Packit |
6bd9ab |
assert(cfg.uris[i + 1].uri == NULL);
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
/* inserting one more entry should call exit():
|
|
Packit |
6bd9ab |
add_uri(__FILE__, __LINE__, &cfg, "ldap://localhost");
|
|
Packit |
6bd9ab |
assert(cfg.uris[i] != NULL);
|
|
Packit |
6bd9ab |
assert(cfg.uris[i + 1] == NULL); */
|
|
Packit |
6bd9ab |
/* there is no cfg_free() so we have a memory leak here */
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
static void test_parse_boolean(void)
|
|
Packit |
6bd9ab |
{
|
|
Packit |
6bd9ab |
assert(parse_boolean(__FILE__, __LINE__, "True") == 1);
|
|
Packit |
6bd9ab |
assert(parse_boolean(__FILE__, __LINE__, "faLSe") == 0);
|
|
Packit |
6bd9ab |
assert(parse_boolean(__FILE__, __LINE__, "1") == 1);
|
|
Packit |
6bd9ab |
assert(parse_boolean(__FILE__, __LINE__, "oFF") == 0);
|
|
Packit |
6bd9ab |
assert(parse_boolean(__FILE__, __LINE__, "Yes") == 1);
|
|
Packit |
6bd9ab |
assert(parse_boolean(__FILE__, __LINE__, "No") == 0);
|
|
Packit |
6bd9ab |
/* most other values should call exit():
|
|
Packit |
6bd9ab |
assert(parse_boolean(__FILE__, __LINE__, "Foo") == 0); */
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
static void test_parse_scope(void)
|
|
Packit |
6bd9ab |
{
|
|
Packit |
6bd9ab |
struct ldap_config cfg;
|
|
Packit |
6bd9ab |
handle_scope(__FILE__, __LINE__, "scope", "sUb", &cfg;;
|
|
Packit |
6bd9ab |
assert(cfg.scope == LDAP_SCOPE_SUBTREE);
|
|
Packit |
6bd9ab |
handle_scope(__FILE__, __LINE__, "scope", "subtree", &cfg;;
|
|
Packit |
6bd9ab |
assert(cfg.scope == LDAP_SCOPE_SUBTREE);
|
|
Packit |
6bd9ab |
handle_scope(__FILE__, __LINE__, "scope", "ONE", &cfg;;
|
|
Packit |
6bd9ab |
assert(cfg.scope == LDAP_SCOPE_ONELEVEL);
|
|
Packit |
6bd9ab |
handle_scope(__FILE__, __LINE__, "scope", "oneLevel", &cfg;;
|
|
Packit |
6bd9ab |
assert(cfg.scope == LDAP_SCOPE_ONELEVEL);
|
|
Packit |
6bd9ab |
handle_scope(__FILE__, __LINE__, "scope", "base", &cfg;;
|
|
Packit |
6bd9ab |
assert(cfg.scope == LDAP_SCOPE_BASE);
|
|
Packit |
6bd9ab |
handle_scope(__FILE__, __LINE__, "scope", "bASe", &cfg;;
|
|
Packit |
6bd9ab |
assert(cfg.scope == LDAP_SCOPE_BASE);
|
|
Packit |
6bd9ab |
#ifdef LDAP_SCOPE_CHILDREN
|
|
Packit |
6bd9ab |
handle_scope(__FILE__, __LINE__, "scope", "children", &cfg;;
|
|
Packit |
6bd9ab |
assert(cfg.scope == LDAP_SCOPE_CHILDREN);
|
|
Packit |
6bd9ab |
#endif /* LDAP_SCOPE_CHILDREN */
|
|
Packit |
6bd9ab |
/* most other values should call exit():
|
|
Packit |
6bd9ab |
handle_scope(__FILE__, __LINE__, "scope", "BSAE", &cfg;; */
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
static void test_parse_map(void)
|
|
Packit |
6bd9ab |
{
|
|
Packit |
6bd9ab |
char *line;
|
|
Packit |
6bd9ab |
/* some general assertions */
|
|
Packit |
6bd9ab |
assert((LM_ALIASES != LM_ETHERS) && (LM_ALIASES != LM_GROUP) &&
|
|
Packit |
6bd9ab |
(LM_ALIASES != LM_HOSTS) && (LM_ALIASES != LM_NETGROUP) &&
|
|
Packit |
6bd9ab |
(LM_ALIASES != LM_NETWORKS) && (LM_ALIASES != LM_PASSWD) &&
|
|
Packit |
6bd9ab |
(LM_ALIASES != LM_PROTOCOLS) && (LM_ALIASES != LM_RPC) &&
|
|
Packit |
6bd9ab |
(LM_ALIASES != LM_SERVICES) && (LM_ALIASES != LM_SHADOW));
|
|
Packit |
6bd9ab |
assert((LM_ETHERS != LM_GROUP) && (LM_ETHERS != LM_HOSTS) &&
|
|
Packit |
6bd9ab |
(LM_ETHERS != LM_NETGROUP) && (LM_ETHERS != LM_NETWORKS) &&
|
|
Packit |
6bd9ab |
(LM_ETHERS != LM_PASSWD) && (LM_ETHERS != LM_PROTOCOLS) &&
|
|
Packit |
6bd9ab |
(LM_ETHERS != LM_RPC) && (LM_ETHERS != LM_SERVICES) &&
|
|
Packit |
6bd9ab |
(LM_ETHERS != LM_SHADOW));
|
|
Packit |
6bd9ab |
assert((LM_GROUP != LM_HOSTS) && (LM_GROUP != LM_NETGROUP) &&
|
|
Packit |
6bd9ab |
(LM_GROUP != LM_NETWORKS) && (LM_GROUP != LM_PASSWD) &&
|
|
Packit |
6bd9ab |
(LM_GROUP != LM_PROTOCOLS) && (LM_GROUP != LM_RPC) &&
|
|
Packit |
6bd9ab |
(LM_GROUP != LM_SERVICES) && (LM_GROUP != LM_SHADOW));
|
|
Packit |
6bd9ab |
assert((LM_HOSTS != LM_NETGROUP) && (LM_HOSTS != LM_NETWORKS) &&
|
|
Packit |
6bd9ab |
(LM_HOSTS != LM_PASSWD) && (LM_HOSTS != LM_PROTOCOLS) &&
|
|
Packit |
6bd9ab |
(LM_HOSTS != LM_RPC) && (LM_HOSTS != LM_SERVICES) &&
|
|
Packit |
6bd9ab |
(LM_HOSTS != LM_SHADOW));
|
|
Packit |
6bd9ab |
assert((LM_NETGROUP != LM_NETWORKS) && (LM_NETGROUP != LM_PASSWD) &&
|
|
Packit |
6bd9ab |
(LM_NETGROUP != LM_PROTOCOLS) && (LM_NETGROUP != LM_RPC) &&
|
|
Packit |
6bd9ab |
(LM_NETGROUP != LM_SERVICES) && (LM_NETGROUP != LM_SHADOW));
|
|
Packit |
6bd9ab |
assert((LM_NETWORKS != LM_PASSWD) && (LM_NETWORKS != LM_PROTOCOLS) &&
|
|
Packit |
6bd9ab |
(LM_NETWORKS != LM_RPC) && (LM_NETWORKS != LM_SERVICES) &&
|
|
Packit |
6bd9ab |
(LM_NETWORKS != LM_SHADOW));
|
|
Packit |
6bd9ab |
assert((LM_PASSWD != LM_PROTOCOLS) && (LM_PASSWD != LM_RPC) &&
|
|
Packit |
6bd9ab |
(LM_PASSWD != LM_SERVICES) && (LM_PASSWD != LM_SHADOW));
|
|
Packit |
6bd9ab |
assert((LM_PROTOCOLS != LM_RPC) && (LM_PROTOCOLS != LM_SERVICES) &&
|
|
Packit |
6bd9ab |
(LM_PROTOCOLS != LM_SHADOW));
|
|
Packit |
6bd9ab |
assert((LM_RPC != LM_SERVICES) && (LM_RPC != LM_SHADOW));
|
|
Packit |
6bd9ab |
assert((LM_SERVICES != LM_SHADOW));
|
|
Packit |
6bd9ab |
/* test supported names */
|
|
Packit |
6bd9ab |
line = "alIas"; assert(get_map(&line) == LM_ALIASES);
|
|
Packit |
6bd9ab |
line = "AliasES"; assert(get_map(&line) == LM_ALIASES);
|
|
Packit |
6bd9ab |
line = "ether"; assert(get_map(&line) == LM_ETHERS);
|
|
Packit |
6bd9ab |
line = "ethers"; assert(get_map(&line) == LM_ETHERS);
|
|
Packit |
6bd9ab |
line = "group"; assert(get_map(&line) == LM_GROUP);
|
|
Packit |
6bd9ab |
line = "host"; assert(get_map(&line) == LM_HOSTS);
|
|
Packit |
6bd9ab |
line = "hosts"; assert(get_map(&line) == LM_HOSTS);
|
|
Packit |
6bd9ab |
line = "netgroup"; assert(get_map(&line) == LM_NETGROUP);
|
|
Packit |
6bd9ab |
line = "network"; assert(get_map(&line) == LM_NETWORKS);
|
|
Packit |
6bd9ab |
line = "networks"; assert(get_map(&line) == LM_NETWORKS);
|
|
Packit |
6bd9ab |
line = "passwd"; assert(get_map(&line) == LM_PASSWD);
|
|
Packit |
6bd9ab |
line = "protocol"; assert(get_map(&line) == LM_PROTOCOLS);
|
|
Packit |
6bd9ab |
line = "protocols"; assert(get_map(&line) == LM_PROTOCOLS);
|
|
Packit |
6bd9ab |
line = "rpc"; assert(get_map(&line) == LM_RPC);
|
|
Packit |
6bd9ab |
line = "service"; assert(get_map(&line) == LM_SERVICES);
|
|
Packit |
6bd9ab |
line = "services"; assert(get_map(&line) == LM_SERVICES);
|
|
Packit |
6bd9ab |
line = "shadow"; assert(get_map(&line) == LM_SHADOW);
|
|
Packit |
6bd9ab |
line = "unknown"; assert(get_map(&line) == LM_NONE);
|
|
Packit |
6bd9ab |
line = "x"; assert(get_map(&line) == LM_NONE);
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
static void test_parse_map_statement(void)
|
|
Packit |
6bd9ab |
{
|
|
Packit |
6bd9ab |
/* TODO: implement */
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
static void test_tokenize(void)
|
|
Packit |
6bd9ab |
{
|
|
Packit |
6bd9ab |
/* this leaks memory all over the place */
|
|
Packit |
6bd9ab |
char *line = strdup("yes this is 1 simple line");
|
|
Packit |
6bd9ab |
char *str;
|
|
Packit |
6bd9ab |
int i;
|
|
Packit |
6bd9ab |
i = get_boolean(__FILE__, __LINE__, __PRETTY_FUNCTION__, &line);
|
|
Packit |
6bd9ab |
assert(i == 1);
|
|
Packit |
6bd9ab |
str = get_strdup(__FILE__, __LINE__, __PRETTY_FUNCTION__, &line);
|
|
Packit |
6bd9ab |
assertstreq(str, "this");
|
|
Packit |
6bd9ab |
str = get_strdup(__FILE__, __LINE__, __PRETTY_FUNCTION__, &line);
|
|
Packit |
6bd9ab |
assertstreq(str, "is");
|
|
Packit |
6bd9ab |
i = get_int(__FILE__, __LINE__, __PRETTY_FUNCTION__, &line);
|
|
Packit |
6bd9ab |
assert(i == 1);
|
|
Packit |
6bd9ab |
str = get_linedup(__FILE__, __LINE__, __PRETTY_FUNCTION__, &line);
|
|
Packit |
6bd9ab |
assertstreq(str, "simple line");
|
|
Packit |
6bd9ab |
get_eol(__FILE__, __LINE__, __PRETTY_FUNCTION__, &line);
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
extern const char *passwd_bases[];
|
|
Packit |
6bd9ab |
extern const char *group_filter;
|
|
Packit |
6bd9ab |
extern int passwd_scope;
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
static void test_read(void)
|
|
Packit |
6bd9ab |
{
|
|
Packit |
6bd9ab |
FILE *fp;
|
|
Packit |
6bd9ab |
struct ldap_config cfg;
|
|
Packit |
6bd9ab |
/* write some stuff to a temporary file */
|
|
Packit |
6bd9ab |
fp = fopen("temp.cfg", "w");
|
|
Packit |
6bd9ab |
assert(fp != NULL);
|
|
Packit |
6bd9ab |
fprintf(fp, "# a line of comments\n"
|
|
Packit |
6bd9ab |
"uri ldap://127.0.0.1/\n"
|
|
Packit |
6bd9ab |
"uri ldap:/// ldaps://127.0.0.1/\n"
|
|
Packit |
6bd9ab |
"base dc=test, dc=tld\n"
|
|
Packit |
6bd9ab |
"base passwd ou=Some People,dc=test,dc=tld\n"
|
|
Packit |
6bd9ab |
"map\tpasswd uid\t\tsAMAccountName\n"
|
|
Packit |
6bd9ab |
"map passwd homeDirectory \"${homeDirectory:-/home/$uid}\" \n"
|
|
Packit |
6bd9ab |
"map passwd gecos \"${givenName}. ${sn}\"\n"
|
|
Packit |
6bd9ab |
"filter group (&(objeclClass=posixGroup)(gid=1*))\n"
|
|
Packit |
6bd9ab |
"\n"
|
|
Packit |
6bd9ab |
"scope passwd one\n"
|
|
Packit |
6bd9ab |
"cache dn2uid 10m 1s\n");
|
|
Packit |
6bd9ab |
fclose(fp);
|
|
Packit |
6bd9ab |
/* parse the file */
|
|
Packit |
6bd9ab |
cfg_defaults(&cfg;;
|
|
Packit |
6bd9ab |
cfg_read("temp.cfg", &cfg;;
|
|
Packit |
6bd9ab |
/* check results */
|
|
Packit |
6bd9ab |
assert(cfg.uris[0].uri != NULL);
|
|
Packit |
6bd9ab |
assert(cfg.uris[1].uri != NULL);
|
|
Packit |
6bd9ab |
assert(cfg.uris[2].uri != NULL);
|
|
Packit |
6bd9ab |
assertstreq(cfg.uris[0].uri, "ldap://127.0.0.1/");
|
|
Packit |
6bd9ab |
assertstreq(cfg.uris[1].uri, "ldap:///");
|
|
Packit |
6bd9ab |
assertstreq(cfg.uris[2].uri, "ldaps://127.0.0.1/");
|
|
Packit |
6bd9ab |
assert(cfg.uris[3].uri == NULL);
|
|
Packit |
6bd9ab |
assertstreq(cfg.bases[0], "dc=test, dc=tld");
|
|
Packit |
6bd9ab |
assertstreq(passwd_bases[0], "ou=Some People,dc=test,dc=tld");
|
|
Packit |
6bd9ab |
assertstreq(attmap_passwd_uid, "sAMAccountName");
|
|
Packit |
6bd9ab |
assertstreq(attmap_passwd_homeDirectory, "\"${homeDirectory:-/home/$uid}\"");
|
|
Packit |
6bd9ab |
assertstreq(attmap_passwd_gecos, "\"${givenName}. ${sn}\"");
|
|
Packit |
6bd9ab |
assertstreq(group_filter, "(&(objeclClass=posixGroup)(gid=1*))");
|
|
Packit |
6bd9ab |
assert(passwd_scope == LDAP_SCOPE_ONELEVEL);
|
|
Packit |
6bd9ab |
assert(cfg.cache_dn2uid_positive == 10 * 60);
|
|
Packit |
6bd9ab |
assert(cfg.cache_dn2uid_negative == 1);
|
|
Packit |
6bd9ab |
/* remove temporary file */
|
|
Packit |
6bd9ab |
remove("temp.cfg");
|
|
Packit |
6bd9ab |
}
|
|
Packit |
6bd9ab |
|
|
Packit |
6bd9ab |
/* the main program... */
|
|
Packit |
6bd9ab |
int main(int UNUSED(argc), char UNUSED(*argv[]))
|
|
Packit |
6bd9ab |
{
|
|
Packit |
6bd9ab |
test_xstrdup();
|
|
Packit |
6bd9ab |
test_add_uris();
|
|
Packit |
6bd9ab |
test_parse_boolean();
|
|
Packit |
6bd9ab |
test_parse_scope();
|
|
Packit |
6bd9ab |
test_parse_map();
|
|
Packit |
6bd9ab |
test_parse_map_statement();
|
|
Packit |
6bd9ab |
test_tokenize();
|
|
Packit |
6bd9ab |
test_read();
|
|
Packit |
6bd9ab |
return EXIT_SUCCESS;
|
|
Packit |
6bd9ab |
}
|