diff options
Diffstat (limited to 'source3/lib/util_pwdb.c')
-rw-r--r-- | source3/lib/util_pwdb.c | 435 |
1 files changed, 0 insertions, 435 deletions
diff --git a/source3/lib/util_pwdb.c b/source3/lib/util_pwdb.c deleted file mode 100644 index 3de1829da3..0000000000 --- a/source3/lib/util_pwdb.c +++ /dev/null @@ -1,435 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 1.9. - Password and authentication handling - Copyright (C) Jeremy Allison 1996-1998 - Copyright (C) Luke Kenneth Casson Leighton 1996-1998 - - 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; either version 2 of the License, or - (at your option) any later version. - - 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., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" -#include "nterr.h" - -extern int DEBUGLEVEL; -extern DOM_SID global_sam_sid; -extern fstring global_sam_name; - -extern DOM_SID global_member_sid; -extern fstring global_myworkgroup; - -extern DOM_SID global_sid_S_1_5_20; - -extern pstring global_myname; - -typedef struct -{ - uint32 rid; - char *defaultname; - char *name; -} rid_name; - -/* - * A list of the rids of well known BUILTIN and Domain users - * and groups. - */ - -static rid_name builtin_alias_rids[] = -{ - { BUILTIN_ALIAS_RID_ADMINS , "Administrators" , NULL }, - { BUILTIN_ALIAS_RID_USERS , "Users" , NULL }, - { BUILTIN_ALIAS_RID_GUESTS , "Guests" , NULL }, - { BUILTIN_ALIAS_RID_POWER_USERS , "Power Users" , NULL }, - - { BUILTIN_ALIAS_RID_ACCOUNT_OPS , "Account Operators" , NULL }, - { BUILTIN_ALIAS_RID_SYSTEM_OPS , "System Operators" , NULL }, - { BUILTIN_ALIAS_RID_PRINT_OPS , "Print Operators" , NULL }, - { BUILTIN_ALIAS_RID_BACKUP_OPS , "Backup Operators" , NULL }, - { BUILTIN_ALIAS_RID_REPLICATOR , "Replicator" , NULL }, - { 0 , NULL , NULL} -}; - -/* array lookup of well-known Domain RID users. */ -static rid_name domain_user_rids[] = -{ - { DOMAIN_USER_RID_ADMIN , "Administrator" , NULL }, - { DOMAIN_USER_RID_GUEST , "Guest" , NULL }, - { 0 , NULL , NULL} -}; - -/* array lookup of well-known Domain RID groups. */ -static rid_name domain_group_rids[] = -{ - { DOMAIN_GROUP_RID_ADMINS , "Domain Admins" , NULL }, - { DOMAIN_GROUP_RID_USERS , "Domain Users" , NULL }, - { DOMAIN_GROUP_RID_GUESTS , "Domain Guests" , NULL }, - { 0 , NULL , NULL} -}; - -/******************************************************************* - make an entry in wk name map - the name is strdup()ed! - *******************************************************************/ -static BOOL make_alias_entry(rid_name *map, char *defaultname, char *name) -{ - if(isdigit(*defaultname)) - { - long rid = -1; - char *s; - - if(*defaultname == '0') - { - if(defaultname[1] == 'x') - { - s = "%lx"; - defaultname += 2; - } - else - { - s = "%lo"; - } - } - else - { - s = "%ld"; - } - - sscanf(defaultname, s, &rid); - - for( ; map->rid; map++) - { - if(map->rid == rid) { - map->name = strdup(name); - DEBUG(5, ("make_alias_entry: mapping %s (rid 0x%x) to %s\n", - map->defaultname, map->rid, map->name)); - return True; - } - } - return False; - } - - for( ; map->rid; map++) - { - if(!StrCaseCmp(map->name, defaultname)) { - map->name = strdup(name); - DEBUG(5, ("make_alias_entry: mapping %s (rid 0x%x) to %s\n", - map->defaultname, map->rid, map->name)); - return True; - } - } - return False; -} - -/******************************************************************* - reset wk map to default values - *******************************************************************/ -static void reset_wk_map(rid_name *map) -{ - for( ; map->rid; map++) - { - if(map->name != NULL && map->name != map->defaultname) - free(map->name); - map->name = map->defaultname; - } -} - -/******************************************************************* - reset all wk maps - *******************************************************************/ -static void reset_wk_maps(void) -{ - DEBUG(4, ("reset_wk_maps: Initializing maps\n")); - reset_wk_map(builtin_alias_rids); - reset_wk_map(domain_user_rids); - reset_wk_map(domain_group_rids); -} - -/******************************************************************* - Load builtin alias map - *******************************************************************/ -static BOOL load_wk_rid_map(void) -{ - static int map_initialized = 0; - static time_t builtin_rid_file_last_modified = (time_t)0; - char *builtin_rid_file = lp_builtinrid_file(); - - FILE *fp; - char *s; - pstring buf; - - if (!map_initialized) - { - reset_wk_maps(); - map_initialized = 1; - } - - if (!*builtin_rid_file) - { - return False; - } - - fp = open_file_if_modified(builtin_rid_file, "r", &builtin_rid_file_last_modified); - if(!fp) - { - DEBUG(0,("load_wk_rid_map: can't open name map %s. Error was %s\n", - builtin_rid_file, strerror(errno))); - return False; - } - - reset_wk_maps(); - DEBUG(4,("load_wk_rid_map: Scanning builtin rid map %s\n",builtin_rid_file)); - - while ((s = fgets_slash(buf, sizeof(buf), fp)) != NULL) - { - pstring defaultname; - pstring name; - - DEBUG(10,("Read line |%s|\n", s)); - - if (!*s || strchr("#;",*s)) - continue; - - if (!next_token(&s,name, "\t\n\r=", sizeof(defaultname))) - continue; - - if (!next_token(&s,defaultname, "\t\n\r=", sizeof(name))) - continue; - - trim_string(defaultname, " ", " "); - trim_string(name, " ", " "); - - if (!*defaultname || !*name) - continue; - - if(make_alias_entry(builtin_alias_rids, defaultname, name)) - continue; - if(make_alias_entry(domain_user_rids, defaultname, name)) - continue; - if(make_alias_entry(domain_group_rids, defaultname, name)) - continue; - - DEBUG(0,("load_wk_rid_map: Unknown alias %s in map %s\n", - defaultname, builtin_rid_file)); - } - - fclose(fp); - return True; -} - -/******************************************************************* - lookup_wk_group_name - ********************************************************************/ -uint32 lookup_wk_group_name(const char *group_name, const char *domain, - DOM_SID *sid, uint8 *type) -{ - char *grp_name; - int i = -1; /* start do loop at -1 */ - uint32 rid; - (*type) = SID_NAME_DOM_GRP; - - if (strequal(domain, global_sam_name)) - { - sid_copy(sid, &global_sam_sid); - } - else if (strequal(domain, "BUILTIN")) - { - sid_copy(sid, &global_sid_S_1_5_20); - } - else - { - return 0xC0000000 | NT_STATUS_NONE_MAPPED; - } - - load_wk_rid_map(); - - do /* find, if it exists, a group rid for the group name */ - { - i++; - rid = domain_group_rids[i].rid; - grp_name = domain_group_rids[i].name; - - if (strequal(grp_name, group_name)) - { - sid_append_rid(sid, rid); - - return 0x0; - } - - } while (grp_name != NULL); - - return 0xC0000000 | NT_STATUS_NONE_MAPPED; -} - -/******************************************************************* - lookup_wk_user_name - ********************************************************************/ -uint32 lookup_wk_user_name(const char *user_name, const char *domain, - DOM_SID *sid, uint8 *type) -{ - char *usr_name; - int i = -1; /* start do loop at -1 */ - (*type) = SID_NAME_USER; - - if (strequal(domain, global_sam_name)) - { - sid_copy(sid, &global_sam_sid); - } - else if (strequal(domain, "BUILTIN")) - { - sid_copy(sid, &global_sid_S_1_5_20); - } - else - { - return 0xC0000000 | NT_STATUS_NONE_MAPPED; - } - - load_wk_rid_map(); - - do /* find, if it exists, a alias rid for the alias name */ - { - i++; - usr_name = domain_user_rids[i].name; - - } while (usr_name != NULL && !strequal(usr_name, user_name)); - - if (usr_name != NULL) - { - sid_append_rid(sid, domain_user_rids[i].rid); - return 0; - } - - return 0xC0000000 | NT_STATUS_NONE_MAPPED; -} - -/******************************************************************* - lookup_builtin_alias_name - ********************************************************************/ -uint32 lookup_builtin_alias_name(const char *alias_name, const char *domain, - DOM_SID *sid, uint8 *type) -{ - char *als_name; - int i = 0; - uint32 rid; - - if (strequal(domain, "BUILTIN")) - { - if (sid != NULL) - { - sid_copy(sid, &global_sid_S_1_5_20); - } - } - else - { - return 0xC0000000 | NT_STATUS_NONE_MAPPED; - } - - load_wk_rid_map(); - - do /* find, if it exists, a alias rid for the alias name*/ - { - rid = builtin_alias_rids[i].rid; - als_name = builtin_alias_rids[i].name; - - if (strequal(als_name, alias_name)) - { - if (sid != NULL) - { - sid_append_rid(sid, rid); - } - - if (type != NULL) - { - (*type) = SID_NAME_ALIAS; - } - - return 0x0; - } - - i++; - - } while (als_name != NULL); - - return 0xC0000000 | NT_STATUS_NONE_MAPPED; -} - -/************************************************************* - initialise password databases, domain names, domain sid. -**************************************************************/ -BOOL pwdb_initialise(BOOL is_server) -{ - get_sam_domain_name(); - - if (!init_myworkgroup()) - { - return False; - } - - generate_wellknown_sids(); - - if (is_server) - { - if (!generate_sam_sid(global_sam_name, &global_sam_sid)) - { - DEBUG(0,("ERROR: Samba cannot create a SAM SID for its domain (%s).\n", - global_sam_name)); - return False; - } - } - else - { - if (!get_domain_sids(lp_workgroup(), &global_member_sid, - &global_sam_sid)) - { - return False; - } - } - - create_sidmap_table(); - - return initialise_password_db(); -} - -/************************************************************* - the following functions lookup wk rid's. - these may be unnecessary... -**************************************************************/ -static char *lookup_wk_rid(uint32 rid, rid_name *table) -{ - load_wk_rid_map(); - for( ; table->rid ; table++) - { - if(table->rid == rid) - { - return table->name; - } - } - return NULL; -} - -char *lookup_wk_alias_rid(uint32 rid) -{ - return lookup_wk_rid(rid, builtin_alias_rids); -} - -char *lookup_wk_user_rid(uint32 rid) -{ - return lookup_wk_rid(rid, domain_user_rids); -} - -char *lookup_wk_group_rid(uint32 rid) -{ - return lookup_wk_rid(rid, domain_group_rids); -} - |