/* * Copyright 2008 Red Hat, Inc. * * This Program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This Program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this Program; if not, write to the * * Free Software Foundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * */ #ifdef HAVE_CONFIG_H #include "../config.h" #endif #include #include #include #include "defaults.h" #define DEFAULT_ENTRY_FILTER "(&(nisMapName=%m)(objectClass=nisObject))" #define DEFAULT_KEY_FORMAT "%{cn}" #define DEFAULT_VALUE_FORMAT "%{nisMapEntry}" #define DEFAULT_MAP_SECURE FALSE static const char *default_key_formats[] = {DEFAULT_KEY_FORMAT, NULL}; static struct configuration { char *map; enum { config_exact, config_glob } config_match; bool_t secure; char *filter, *key_formats[3], *value_format, *disallowed_chars; } config[] = { {"passwd.byname", config_exact, FALSE, "(objectClass=posixAccount)", {"%{uid}", NULL, NULL}, "%{uid}:%regsub(\"userPassword\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%{uidNumber}:%{gidNumber}:%{gecos:-%{cn}}:%{homeDirectory:-/}:%{loginShell}", ":"}, {"passwd.byuid", config_exact, FALSE, "(objectClass=posixAccount)", {"%{uidNumber}", NULL, NULL}, "%{uid}:%regsub(\"userPassword\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%{uidNumber}:%{gidNumber}:%{gecos:-%{cn}}:%{homeDirectory:-/}:%{loginShell}", ":"}, {"group.byname", config_exact, FALSE, "(objectClass=posixGroup)", {"%{cn}", NULL, NULL}, "%{cn}:%regsub(\"userPassword\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%{gidNumber}:%merge(\",\",\"%list(\\\",\\\",\\\"memberUid\\\")\",\"%deref(\\\",\\\",\\\"member\\\",\\\"uid\\\")\",\"%deref(\\\",\\\",\\\"uniqueMember\\\",\\\"uid\\\")\",\"%referred(\\\",\\\",\\\"passwd.byname\\\",\\\"memberOf\\\",\\\"uid\\\")\")", ":,"}, {"group.bygid", config_exact, FALSE, "(objectClass=posixGroup)", {"%{gidNumber}", NULL, NULL}, "%{cn}:%regsub(\"userPassword\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%{gidNumber}:%merge(\",\",\"%list(\\\",\\\",\\\"memberUid\\\")\",\"%deref(\\\",\\\",\\\"member\\\",\\\"uid\\\")\",\"%deref(\\\",\\\",\\\"uniqueMember\\\",\\\"uid\\\")\",\"%referred(\\\",\\\",\\\"passwd.byuid\\\",\\\"memberOf\\\",\\\"uid\\\")\")", ":,"}, {"netgroup", config_exact, FALSE, "(objectClass=nisNetgroup)", {"%{cn}", NULL, NULL}, "%list(\" \",\"nisNetgroupTriple\",\"memberNisNetgroup\")", NULL}, {"auto.*", config_glob, FALSE, "(objectClass=automount)", {"%{automountKey}", NULL, NULL}, "%{automountInformation}", NULL}, }; void defaults_get_map_config(const char *mapname, bool_t *secure, const char **filter, const char ***key_formats, const char **value_format, const char **disallowed_chars) { unsigned int i; if (filter) { *filter = DEFAULT_ENTRY_FILTER; } if (secure) { *secure = DEFAULT_MAP_SECURE; } if (key_formats) { *key_formats = default_key_formats; } if (value_format) { *value_format = DEFAULT_VALUE_FORMAT; } for (i = 0; i < sizeof(config) / sizeof(config[0]); i++) { switch (config[i].config_match) { case config_exact: if (strcmp(config[i].map, mapname) == 0) { if (secure) { *secure = config[i].secure; } if (filter) { *filter = config[i].filter; } if (key_formats) { *key_formats = (const char **) config[i].key_formats; } if (value_format) { *value_format = config[i].value_format; } if (disallowed_chars) { *disallowed_chars = config[i].disallowed_chars; } } break; case config_glob: if (fnmatch(config[i].map, mapname, FNM_NOESCAPE) == 0) { if (secure) { *secure = config[i].secure; } if (filter) { *filter = config[i].filter; } if (key_formats) { *key_formats = (const char **) config[i].key_formats; } if (value_format) { *value_format = config[i].value_format; } if (disallowed_chars) { *disallowed_chars = config[i].disallowed_chars; } } break; } } }