/* * 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 "defaults.h" #define DEFAULT_ENTRY_FILTER "(&(nisMapName=%m)(objectClass=nisObject))" #define DEFAULT_KEY_FORMAT "%{cn}" #define DEFAULT_VALUE_FORMAT "%{nisMapEntry}" #define DEFAULT_REFERRED NULL static struct configuration { char *map; enum { config_exact, config_glob } config_match; char *filter, *key_format, *value_format; } config[] = { {"passwd.byname", config_exact, "(objectClass=posixAccount)", "%{uid}", "%{uid}:%regsub(\"userPassword\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%{uidNumber}:%{gidNumber}:%{gecos:-%{cn}}:%{homeDirectory:-/}:%{loginShell:-}"}, {"passwd.bynumber", config_exact, "(objectClass=posixAccount)", "%{uidNumber}", "%{uid}:%regsub(\"userPassword\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%{uidNumber}:%{gidNumber}:%{gecos:-%{cn}}:%{homeDirectory:-/}:%{loginShell:-}"}, {"group.byname", config_exact, "(objectClass=posixGroup)", "%{cn}", "%{cn}:%regsub(\"userPassword\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%{gidNumber}:%merge(\",\",\"%list(\\\",\\\",\\\"memberUid\\\")\",\"%deref(\\\",\\\",\\\"member\\\",\\\"uid\\\")\",\"%deref(\\\",\\\",\\\"uniqueMember\\\",\\\"uid\\\")\",\"%referred(\\\",\\\",\\\"passwd.byname\\\",\\\"memberOf\\\",\\\"uid\\\")\")"}, {"group.bynumber", config_exact, "(objectClass=posixGroup)", "%{gidNumber}", "%{cn}:%regsub(\"userPassword\",\"^\\\\{CRYPT\\\\}(..*)\",\"%1\",\"*\"):%{gidNumber}:%merge(\",\",\"%list(\\\",\\\",\\\"memberUid\\\")\",\"%deref(\\\",\\\",\\\"member\\\",\\\"uid\\\")\",\"%deref(\\\",\\\",\\\"uniqueMember\\\",\\\"uid\\\")\",\"%referred(\\\",\\\",\\\"passwd.bynumber\\\",\\\"memberOf\\\",\\\"uid\\\")\")"}, {"netgroup", config_exact, "(objectClass=nisNetgroup)", "%{cn}", "%list(\" \",\"nisNetgroupTriple\",\"memberNisNetgroup\")"}, {"auto.*", config_glob, "(objectClass=automount)", "%{automountKey}", "%{automountInformation}"}, }; void defaults_get_map_config(const char *mapname, const char **filter, const char **key_format, const char **value_format) { unsigned int i; if (filter) { *filter = DEFAULT_ENTRY_FILTER; } if (key_format) { *key_format = DEFAULT_KEY_FORMAT; } 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 (filter) { *filter = config[i].filter; } if (key_format) { *key_format = config[i].key_format; } if (value_format) { *value_format = config[i].value_format; } } break; case config_glob: if (fnmatch(config[i].map, mapname, FNM_NOESCAPE) == 0) { if (filter) { *filter = config[i].filter; } if (key_format) { *key_format = config[i].key_format; } if (value_format) { *value_format = config[i].value_format; } } break; } } }