diff options
-rw-r--r-- | source3/groupdb/aliasdb.c | 383 | ||||
-rw-r--r-- | source3/groupdb/aliasfile.c | 290 | ||||
-rw-r--r-- | source3/groupdb/groupdb.c | 379 | ||||
-rw-r--r-- | source3/groupdb/groupfile.c | 285 | ||||
-rw-r--r-- | source3/include/smb_macros.h | 1 | ||||
-rw-r--r-- | source3/libsmb/namequery.c | 179 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_pam.c | 6 | ||||
-rw-r--r-- | source3/rpc_server/srv_samr_nt.c | 2 | ||||
-rwxr-xr-x | source3/script/installdirs.sh | 25 | ||||
-rwxr-xr-x | source3/smbadduser | 10 | ||||
-rw-r--r-- | source3/smbd/mangle_hash.c | 2 |
11 files changed, 200 insertions, 1362 deletions
diff --git a/source3/groupdb/aliasdb.c b/source3/groupdb/aliasdb.c deleted file mode 100644 index 05f584f980..0000000000 --- a/source3/groupdb/aliasdb.c +++ /dev/null @@ -1,383 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Password and authentication handling - Copyright (C) Jeremy Allison 1996-1998 - Copyright (C) Luke Kenneth Caseson 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 Mases Ave, Cambridge, MA 02139, USA. -*/ - -#include "includes.h" - -extern fstring global_sam_name; - -/* - * NOTE. All these functions are abstracted into a structure - * that points to the correct function for the selected database. JRA. - */ - -static struct aliasdb_ops *aldb_ops; - -/*************************************************************** - Initialise the alias db operations. -***************************************************************/ - -BOOL initialise_alias_db(void) -{ - if (aldb_ops) - { - return True; - } - -#ifdef WITH_LDAP - aldb_ops = ldap_initialise_alias_db(); -#else - aldb_ops = file_initialise_alias_db(); -#endif - - return (aldb_ops != NULL); -} - -/* - * Functions that return/manipulate a LOCAL_GRP. - */ - -/************************************************************************ - Utility function to search alias database by gid: the LOCAL_GRP - structure does not have a gid member, so we have to convert here - from gid to alias rid. -*************************************************************************/ -LOCAL_GRP *iterate_getaliasgid(gid_t gid, LOCAL_GRP_MEMBER **mem, int *num_mem) -{ - return iterate_getaliasrid(pwdb_gid_to_alias_rid(gid), mem, num_mem); -} - -/************************************************************************ - Utility function to search alias database by rid. use this if your database - does not have search facilities. -*************************************************************************/ -LOCAL_GRP *iterate_getaliasrid(uint32 rid, LOCAL_GRP_MEMBER **mem, int *num_mem) -{ - LOCAL_GRP *als = NULL; - void *fp = NULL; - - DEBUG(10, ("search by rid: 0x%x\n", rid)); - - /* Open the alias database file - not for update. */ - fp = startaliasent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open alias database.\n")); - return NULL; - } - - while ((als = getaliasent(fp, mem, num_mem)) != NULL && als->rid != rid) - { - } - - if (als != NULL) - { - DEBUG(10, ("found alias %s by rid: 0x%x\n", als->name, rid)); - } - - endaliasent(fp); - return als; -} - -/************************************************************************ - Utility function to search alias database by name. use this if your database - does not have search facilities. -*************************************************************************/ -LOCAL_GRP *iterate_getaliasnam(char *name, LOCAL_GRP_MEMBER **mem, int *num_mem) -{ - LOCAL_GRP *als = NULL; - void *fp = NULL; - - DEBUG(10, ("search by name: %s\n", name)); - - /* Open the alias database file - not for update. */ - fp = startaliasent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open alias database.\n")); - return NULL; - } - - while ((als = getaliasent(fp, mem, num_mem)) != NULL && !strequal(als->name, name)) - { - } - - if (als != NULL) - { - DEBUG(10, ("found by name: %s\n", name)); - } - - endaliasent(fp); - return als; -} - -/************************************************************************* - Routine to return the next entry in the smbdomainalias list. - *************************************************************************/ -BOOL add_domain_alias(LOCAL_GRP **alss, int *num_alss, LOCAL_GRP *als) -{ - LOCAL_GRP *talss; - - if (alss == NULL || num_alss == NULL || als == NULL) - return False; - - talss = Realloc((*alss), ((*num_alss)+1) * sizeof(LOCAL_GRP)); - if (talss == NULL) { - SAFE_FREE(*alss); - return False; - } else - (*alss) = talss; - - DEBUG(10,("adding alias %s(%s)\n", als->name, als->comment)); - - fstrcpy((*alss)[(*num_alss)].name , als->name); - fstrcpy((*alss)[(*num_alss)].comment, als->comment); - (*alss)[(*num_alss)].rid = als->rid; - - (*num_alss)++; - - return True; -} - -/************************************************************************* - checks to see if a user is a member of a domain alias - *************************************************************************/ -static BOOL user_is_member(char *user_name, LOCAL_GRP_MEMBER *mem, int num_mem) -{ - int i; - pstring name; - slprintf(name, sizeof(name)-1, "\\%s\\%s", global_sam_name, user_name); - - for (i = 0; i < num_mem; i++) - { - DEBUG(10,("searching against user %s...\n", mem[i].name)); - if (strequal(mem[i].name, name)) - { - DEBUG(10,("searching for user %s: found\n", name)); - return True; - } - } - DEBUG(10,("searching for user %s: not found\n", name)); - return False; -} - -/************************************************************************* - gets an array of aliases that a user is in. use this if your database - does not have search facilities - *************************************************************************/ -BOOL iterate_getuseraliasnam(char *user_name, LOCAL_GRP **alss, int *num_alss) -{ - LOCAL_GRP *als; - LOCAL_GRP_MEMBER *mem = NULL; - int num_mem = 0; - void *fp = NULL; - - DEBUG(10, ("search for useralias by name: %s\n", user_name)); - - if (user_name == NULL || als == NULL || num_alss == NULL) - { - return False; - } - - (*alss) = NULL; - (*num_alss) = 0; - - /* Open the alias database file - not for update. */ - fp = startaliasent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open alias database.\n")); - return False; - } - - /* iterate through all aliases. search members for required user */ - while ((als = getaliasent(fp, &mem, &num_mem)) != NULL) - { - DEBUG(5,("alias name %s members: %d\n", als->name, num_mem)); - if (num_mem != 0 && mem != NULL) - { - BOOL ret = True; - if (user_is_member(user_name, mem, num_mem)) - { - ret = add_domain_alias(alss, num_alss, als); - } - - SAFE_FREE(mem); - num_mem = 0; - - if (!ret) - { - (*num_alss) = 0; - break; - } - } - } - - if ((*num_alss) != 0) - { - DEBUG(10, ("found %d user aliases:\n", (*num_alss))); - } - - endaliasent(fp); - return True; -} - -/************************************************************************* - gets an array of aliases that a user is in. use this if your database - does not have search facilities - *************************************************************************/ -BOOL enumdomaliases(LOCAL_GRP **alss, int *num_alss) -{ - LOCAL_GRP *als; - void *fp = NULL; - - DEBUG(10, ("enum user aliases\n")); - - if (als == NULL || num_alss == NULL) - { - return False; - } - - (*alss) = NULL; - (*num_alss) = 0; - - /* Open the alias database file - not for update. */ - fp = startaliasent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open alias database.\n")); - return False; - } - - /* iterate through all aliases. */ - while ((als = getaliasent(fp, NULL, NULL)) != NULL) - { - if (!add_domain_alias(alss, num_alss, als)) - { - DEBUG(0,("unable to add alias while enumerating\n")); - return False; - } - } - - if ((*num_alss) != 0) - { - DEBUG(10, ("found %d user aliases:\n", (*num_alss))); - } - - endaliasent(fp); - return True; -} - -/*************************************************************** - Start to enumerate the alias database list. Returns a void pointer - to ensure no modification outside this module. -****************************************************************/ - -void *startaliasent(BOOL update) -{ - return aldb_ops->startaliasent(update); -} - -/*************************************************************** - End enumeration of the alias database list. -****************************************************************/ - -void endaliasent(void *vp) -{ - aldb_ops->endaliasent(vp); -} - -/************************************************************************* - Routine to return the next entry in the alias database list. - *************************************************************************/ - -LOCAL_GRP *getaliasent(void *vp, LOCAL_GRP_MEMBER **mem, int *num_mem) -{ - return aldb_ops->getaliasent(vp, mem, num_mem); -} - -/************************************************************************ - Routine to add an entry to the alias database file. -*************************************************************************/ - -BOOL add_alias_entry(LOCAL_GRP *newals) -{ - return aldb_ops->add_alias_entry(newals); -} - -/************************************************************************ - Routine to search the alias database file for an entry matching the aliasname. - and then replace the entry. -************************************************************************/ - -BOOL mod_alias_entry(LOCAL_GRP* als) -{ - return aldb_ops->mod_alias_entry(als); -} - -/************************************************************************ - Routine to search alias database by name. -*************************************************************************/ - -LOCAL_GRP *getaliasnam(char *name, LOCAL_GRP_MEMBER **mem, int *num_mem) -{ - return aldb_ops->getaliasnam(name, mem, num_mem); -} - -/************************************************************************ - Routine to search alias database by alias rid. -*************************************************************************/ - -LOCAL_GRP *getaliasrid(uint32 alias_rid, LOCAL_GRP_MEMBER **mem, int *num_mem) -{ - return aldb_ops->getaliasrid(alias_rid, mem, num_mem); -} - -/************************************************************************ - Routine to search alias database by gid. -*************************************************************************/ - -LOCAL_GRP *getaliasgid(gid_t gid, LOCAL_GRP_MEMBER **mem, int *num_mem) -{ - return aldb_ops->getaliasgid(gid, mem, num_mem); -} - -/************************************************************************* - gets an array of aliases that a user is in. - *************************************************************************/ -BOOL getuseraliasnam(char *user_name, LOCAL_GRP **als, int *num_alss) -{ - return aldb_ops->getuseraliasnam(user_name, als, num_alss); -} - -/************************************************************* - initialises a LOCAL_GRP. - **************************************************************/ - -void aldb_init_als(LOCAL_GRP *als) -{ - if (als == NULL) return; - ZERO_STRUCTP(als); -} - diff --git a/source3/groupdb/aliasfile.c b/source3/groupdb/aliasfile.c deleted file mode 100644 index 77189fd822..0000000000 --- a/source3/groupdb/aliasfile.c +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Unix SMB/CIFS implementation. - * SMB parameters and setup - * Copyright (C) Andrew Tridgell 1992-1998 Modified by Jeremy Allison 1995. - * - * 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" - -#ifdef USE_SMBPASS_DB - -static int al_file_lock_depth = 0; - -static char s_readbuf[1024]; - -/*************************************************************** - Start to enumerate the aliasdb list. Returns a void pointer - to ensure no modification outside this module. -****************************************************************/ - -static void *startalsfilepwent(BOOL update) -{ - return startfilepwent(lp_smb_alias_file(), - s_readbuf, sizeof(s_readbuf), - &al_file_lock_depth, update); -} - -/*************************************************************** - End enumeration of the aliasdb list. -****************************************************************/ - -static void endalsfilepwent(void *vp) -{ - endfilepwent(vp, &al_file_lock_depth); -} - -/************************************************************************* - Return the current position in the aliasdb list as an SMB_BIG_UINT. - This must be treated as an opaque token. -*************************************************************************/ -static SMB_BIG_UINT getalsfilepwpos(void *vp) -{ - return getfilepwpos(vp); -} - -/************************************************************************* - Set the current position in the aliasdb list from an SMB_BIG_UINT. - This must be treated as an opaque token. -*************************************************************************/ -static BOOL setalsfilepwpos(void *vp, SMB_BIG_UINT tok) -{ - return setfilepwpos(vp, tok); -} - -static BOOL make_alias_line(char *p, int max_len, - LOCAL_GRP *als, - LOCAL_GRP_MEMBER **mem, int *num_mem) -{ - int i; - int len; - len = slprintf(p, max_len-1, "%s:%s:%d:", als->name, als->comment, als->rid); - - if (len == -1) - { - DEBUG(0,("make_alias_line: cannot create entry\n")); - return False; - } - - p += len; - max_len -= len; - - if (mem == NULL || num_mem == NULL) - { - return True; - } - - for (i = 0; i < (*num_mem); i++) - { - len = strlen((*mem)[i].name); - p = safe_strcpy(p, (*mem)[i].name, max_len); - - if (p == NULL) - { - DEBUG(0, ("make_alias_line: out of space for aliases!\n")); - return False; - } - - max_len -= len; - - if (i != (*num_mem)-1) - { - *p = ','; - p++; - max_len--; - } - } - - return True; -} - -/************************************************************************* - Routine to return the next entry in the smbdomainalias list. - *************************************************************************/ -static char *get_alias_members(char *p, int *num_mem, LOCAL_GRP_MEMBER **members) -{ - fstring name; - - if (num_mem == NULL || members == NULL) - return NULL; - - (*num_mem) = 0; - (*members) = NULL; - - while (next_token(&p, name, ",", sizeof(fstring))) { - LOCAL_GRP_MEMBER *mbrs; - DOM_SID sid; - uint8 type; - - if (lookup_sid(name, &sid, &type)) { - mbrs = Realloc((*members), ((*num_mem)+1) * sizeof(LOCAL_GRP_MEMBER)); - (*num_mem)++; - } else { - DEBUG(0,("alias database: could not resolve alias named %s\n", name)); - continue; - } - if (mbrs == NULL) { - SAFE_FREE(*members); - return NULL; - } else - (*members) = mbrs; - - fstrcpy((*members)[(*num_mem)-1].name, name); - (*members)[(*num_mem)-1].sid_use = type; - sid_copy(&(*members)[(*num_mem)-1].sid, &sid); - } - return p; -} - -/************************************************************************* - Routine to return the next entry in the smbdomainalias list. - *************************************************************************/ -static LOCAL_GRP *getalsfilepwent(void *vp, LOCAL_GRP_MEMBER **mem, int *num_mem) -{ - /* Static buffers we will return. */ - static LOCAL_GRP al_buf; - - int gidval; - - pstring linebuf; - char *p; - size_t linebuf_len; - - aldb_init_als(&al_buf); - - /* - * Scan the file, a line at a time and check if the name matches. - */ - while ((linebuf_len = getfileline(vp, linebuf, sizeof(linebuf))) > 0) - { - /* get alias name */ - - p = strncpyn(al_buf.name, linebuf, sizeof(al_buf.name), ':'); - if (p == NULL) - { - DEBUG(0, ("getalsfilepwent: malformed alias entry (no :)\n")); - continue; - } - - /* Go past ':' */ - p++; - - /* get alias comment */ - - p = strncpyn(al_buf.comment, p, sizeof(al_buf.comment), ':'); - if (p == NULL) - { - DEBUG(0, ("getalsfilepwent: malformed alias entry (no :)\n")); - continue; - } - - /* Go past ':' */ - p++; - - /* Get alias gid. */ - - p = Atoic(p, &gidval, ":"); - - if (p == NULL) - { - DEBUG(0, ("getalsfilepwent: malformed alias entry (no : after uid)\n")); - continue; - } - - /* Go past ':' */ - p++; - - /* now get the user's aliases. there are a maximum of 32 */ - - if (mem != NULL && num_mem != NULL) - { - (*mem) = NULL; - (*num_mem) = 0; - - p = get_alias_members(p, num_mem, mem); - if (p == NULL) - { - DEBUG(0, ("getalsfilepwent: malformed alias entry (no : after members)\n")); - } - } - - /* ok, set up the static data structure and return it */ - - al_buf.rid = pwdb_gid_to_alias_rid((gid_t)gidval); - - make_alias_line(linebuf, sizeof(linebuf), &al_buf, mem, num_mem); - DEBUG(10,("line: '%s'\n", linebuf)); - - return &al_buf; - } - - DEBUG(5,("getalsfilepwent: end of file reached.\n")); - return NULL; -} - -/************************************************************************ - Routine to add an entry to the aliasdb file. -*************************************************************************/ - -static BOOL add_alsfileals_entry(LOCAL_GRP *newals) -{ - DEBUG(0, ("add_alsfileals_entry: NOT IMPLEMENTED\n")); - return False; -} - -/************************************************************************ - Routine to search the aliasdb file for an entry matching the aliasname. - and then modify its alias entry. We can't use the startalspwent()/ - getalspwent()/endalspwent() interfaces here as we depend on looking - in the actual file to decide how much room we have to write data. - override = False, normal - override = True, override XXXXXXXX'd out alias or NO PASS -************************************************************************/ - -static BOOL mod_alsfileals_entry(LOCAL_GRP* als) -{ - DEBUG(0, ("mod_alsfileals_entry: NOT IMPLEMENTED\n")); - return False; -} - - -static struct aliasdb_ops file_ops = -{ - startalsfilepwent, - endalsfilepwent, - getalsfilepwpos, - setalsfilepwpos, - - iterate_getaliasnam, /* In aliasdb.c */ - iterate_getaliasgid, /* In aliasdb.c */ - iterate_getaliasrid, /* In aliasdb.c */ - getalsfilepwent, - - add_alsfileals_entry, - mod_alsfileals_entry, - - iterate_getuseraliasnam /* in aliasdb.c */ -}; - -struct aliasdb_ops *file_initialise_alias_db(void) -{ - return &file_ops; -} - -#else - /* Do *NOT* make this function static. It breaks the compile on gcc. JRA */ - void als_dummy_function(void) { } /* stop some compilers complaining */ -#endif /* USE_SMBPASS_DB */ diff --git a/source3/groupdb/groupdb.c b/source3/groupdb/groupdb.c deleted file mode 100644 index d50e4f7322..0000000000 --- a/source3/groupdb/groupdb.c +++ /dev/null @@ -1,379 +0,0 @@ -/* - Unix SMB/CIFS implementation. - 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" - -/* - * NOTE. All these functions are abstracted into a structure - * that points to the correct function for the selected database. JRA. - */ - -static struct groupdb_ops *gpdb_ops; - -/*************************************************************** - Initialise the group db operations. -***************************************************************/ - -BOOL initialise_group_db(void) -{ - if (gpdb_ops) - { - return True; - } - -#ifdef WITH_LDAP - gpdb_ops = ldap_initialise_group_db(); -#else - gpdb_ops = file_initialise_group_db(); -#endif - - return (gpdb_ops != NULL); -} - -/* - * Functions that return/manipulate a DOMAIN_GRP. - */ - -/************************************************************************ - Utility function to search group database by gid: the DOMAIN_GRP - structure does not have a gid member, so we have to convert here - from gid to group rid. -*************************************************************************/ -DOMAIN_GRP *iterate_getgroupgid(gid_t gid, DOMAIN_GRP_MEMBER **mem, int *num_mem) -{ - return iterate_getgrouprid(pwdb_gid_to_group_rid(gid), mem, num_mem); -} - -/************************************************************************ - Utility function to search group database by rid. use this if your database - does not have search facilities. -*************************************************************************/ -DOMAIN_GRP *iterate_getgrouprid(uint32 rid, DOMAIN_GRP_MEMBER **mem, int *num_mem) -{ - DOMAIN_GRP *grp = NULL; - void *fp = NULL; - - DEBUG(10, ("search by rid: 0x%x\n", rid)); - - /* Open the group database file - not for update. */ - fp = startgroupent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open group database.\n")); - return NULL; - } - - while ((grp = getgroupent(fp, mem, num_mem)) != NULL && grp->rid != rid) - { - } - - if (grp != NULL) - { - DEBUG(10, ("found group %s by rid: 0x%x\n", grp->name, rid)); - } - - endgroupent(fp); - return grp; -} - -/************************************************************************ - Utility function to search group database by name. use this if your database - does not have search facilities. -*************************************************************************/ -DOMAIN_GRP *iterate_getgroupnam(char *name, DOMAIN_GRP_MEMBER **mem, int *num_mem) -{ - DOMAIN_GRP *grp = NULL; - void *fp = NULL; - - DEBUG(10, ("search by name: %s\n", name)); - - /* Open the group database file - not for update. */ - fp = startgroupent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open group database.\n")); - return NULL; - } - - while ((grp = getgroupent(fp, mem, num_mem)) != NULL && !strequal(grp->name, name)) - { - } - - if (grp != NULL) - { - DEBUG(10, ("found by name: %s\n", name)); - } - - endgroupent(fp); - return grp; -} - -/************************************************************************* - Routine to return the next entry in the smbdomaingroup list. - *************************************************************************/ -BOOL add_domain_group(DOMAIN_GRP **grps, int *num_grps, DOMAIN_GRP *grp) -{ - DOMAIN_GRP *tgrps; - - if (grps == NULL || num_grps == NULL || grp == NULL) - return False; - - tgrps = Realloc((*grps), ((*num_grps)+1) * sizeof(DOMAIN_GRP)); - if (tgrps == NULL) { - SAFE_FREE(*grps); - return False; - } else - (*grps) = tgrps; - - DEBUG(10,("adding group %s(%s)\n", grp->name, grp->comment)); - - fstrcpy((*grps)[(*num_grps)].name , grp->name); - fstrcpy((*grps)[(*num_grps)].comment, grp->comment); - (*grps)[(*num_grps)].attr = grp->attr; - (*grps)[(*num_grps)].rid = grp->rid ; - - (*num_grps)++; - - return True; -} - -/************************************************************************* - checks to see if a user is a member of a domain group - *************************************************************************/ -static BOOL user_is_member(char *user_name, DOMAIN_GRP_MEMBER *mem, int num_mem) -{ - int i; - for (i = 0; i < num_mem; i++) - { - DEBUG(10,("searching against user %s...\n", mem[i].name)); - if (strequal(mem[i].name, user_name)) - { - DEBUG(10,("searching for user %s: found\n", user_name)); - return True; - } - } - DEBUG(10,("searching for user %s: not found\n", user_name)); - return False; -} - -/************************************************************************* - gets an array of groups that a user is in. use this if your database - does not have search facilities - *************************************************************************/ -BOOL iterate_getusergroupsnam(char *user_name, DOMAIN_GRP **grps, int *num_grps) -{ - DOMAIN_GRP *grp; - DOMAIN_GRP_MEMBER *mem = NULL; - int num_mem = 0; - void *fp = NULL; - - DEBUG(10, ("search for usergroups by name: %s\n", user_name)); - - if (user_name == NULL || grp == NULL || num_grps == NULL) - { - return False; - } - - (*grps) = NULL; - (*num_grps) = 0; - - /* Open the group database file - not for update. */ - fp = startgroupent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open group database.\n")); - return False; - } - - /* iterate through all groups. search members for required user */ - while ((grp = getgroupent(fp, &mem, &num_mem)) != NULL) - { - DEBUG(5,("group name %s members: %d\n", grp->name, num_mem)); - if (num_mem != 0 && mem != NULL) - { - BOOL ret = True; - if (user_is_member(user_name, mem, num_mem)) - { - ret = add_domain_group(grps, num_grps, grp); - } - - SAFE_FREE(mem); - num_mem = 0; - - if (!ret) - { - (*num_grps) = 0; - break; - } - } - } - - if ((*num_grps) != 0) - { - DEBUG(10, ("found %d user groups:\n", (*num_grps))); - } - - endgroupent(fp); - return True; -} - -/************************************************************************* - gets an array of groups that a user is in. use this if your database - does not have search facilities - *************************************************************************/ -BOOL enumdomgroups(DOMAIN_GRP **grps, int *num_grps) -{ - DOMAIN_GRP *grp; - void *fp = NULL; - - DEBUG(10, ("enum user groups\n")); - - if (grp == NULL || num_grps == NULL) - { - return False; - } - - (*grps) = NULL; - (*num_grps) = 0; - - /* Open the group database file - not for update. */ - fp = startgroupent(False); - - if (fp == NULL) - { - DEBUG(0, ("unable to open group database.\n")); - return False; - } - - /* iterate through all groups. */ - while ((grp = getgroupent(fp, NULL, NULL)) != NULL) - { - if (!add_domain_group(grps, num_grps, grp)) - { - DEBUG(0,("unable to add group while enumerating\n")); - return False; - } - } - - if ((*num_grps) != 0) - { - DEBUG(10, ("found %d user groups:\n", (*num_grps))); - } - - endgroupent(fp); - return True; -} - -/*************************************************************** - Start to enumerate the group database list. Returns a void pointer - to ensure no modification outside this module. -****************************************************************/ - -void *startgroupent(BOOL update) -{ - return gpdb_ops->startgroupent(update); -} - -/*************************************************************** - End enumeration of the group database list. -****************************************************************/ - -void endgroupent(void *vp) -{ - gpdb_ops->endgroupent(vp); -} - -/************************************************************************* - Routine to return the next entry in the group database list. - *************************************************************************/ - -DOMAIN_GRP *getgroupent(void *vp, DOMAIN_GRP_MEMBER **mem, int *num_mem) -{ - return gpdb_ops->getgroupent(vp, mem, num_mem); -} - -/************************************************************************ - Routine to add an entry to the group database file. -*************************************************************************/ - -BOOL add_group_entry(DOMAIN_GRP *newgrp) -{ - return gpdb_ops->add_group_entry(newgrp); -} - -/************************************************************************ - Routine to search the group database file for an entry matching the groupname. - and then replace the entry. -************************************************************************/ - -BOOL mod_group_entry(DOMAIN_GRP* grp) -{ - return gpdb_ops->mod_group_entry(grp); -} - -/************************************************************************ - Routine to search group database by name. -*************************************************************************/ - -DOMAIN_GRP *getgroupnam(char *name, DOMAIN_GRP_MEMBER **mem, int *num_mem) -{ - return gpdb_ops->getgroupnam(name, mem, num_mem); -} - -/************************************************************************ - Routine to search group database by group rid. -*************************************************************************/ - -DOMAIN_GRP *getgrouprid(uint32 group_rid, DOMAIN_GRP_MEMBER **mem, int *num_mem) -{ - return gpdb_ops->getgrouprid(group_rid, mem, num_mem); -} - -/************************************************************************ - Routine to search group database by gid. -*************************************************************************/ - -DOMAIN_GRP *getgroupgid(gid_t gid, DOMAIN_GRP_MEMBER **mem, int *num_mem) -{ - return gpdb_ops->getgroupgid(gid, mem, num_mem); -} - -/************************************************************************* - gets an array of groups that a user is in. - *************************************************************************/ -BOOL getusergroupsnam(char *user_name, DOMAIN_GRP **grp, int *num_grps) -{ - return gpdb_ops->getusergroupsnam(user_name, grp, num_grps); -} - -/************************************************************* - initialises a DOMAIN_GRP. - **************************************************************/ - -void gpdb_init_grp(DOMAIN_GRP *grp) -{ - if (grp == NULL) return; - ZERO_STRUCTP(grp); -} - diff --git a/source3/groupdb/groupfile.c b/source3/groupdb/groupfile.c deleted file mode 100644 index 4502b190aa..0000000000 --- a/source3/groupdb/groupfile.c +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Unix SMB/CIFS implementation. - * SMB parameters and setup - * Copyright (C) Andrew Tridgell 1992-1998 Modified by Jeremy Allison 1995. - * - * 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" - -#ifdef USE_SMBPASS_DB - -static int gp_file_lock_depth = 0; - -static char s_readbuf[1024]; - -/*************************************************************** - Start to enumerate the grppasswd list. Returns a void pointer - to ensure no modification outside this module. -****************************************************************/ - -static void *startgrpfilepwent(BOOL update) -{ - return startfilepwent(lp_smb_group_file(), - s_readbuf, sizeof(s_readbuf), - &gp_file_lock_depth, update); -} - -/*************************************************************** - End enumeration of the grppasswd list. -****************************************************************/ - -static void endgrpfilepwent(void *vp) -{ - endfilepwent(vp, &gp_file_lock_depth); -} - -/************************************************************************* - Return the current position in the grppasswd list as an SMB_BIG_UINT. - This must be treated as an opaque token. -*************************************************************************/ -static SMB_BIG_UINT getgrpfilepwpos(void *vp) -{ - return getfilepwpos(vp); -} - -/************************************************************************* - Set the current position in the grppasswd list from an SMB_BIG_UINT. - This must be treated as an opaque token. -*************************************************************************/ -static BOOL setgrpfilepwpos(void *vp, SMB_BIG_UINT tok) -{ - return setfilepwpos(vp, tok); -} - -static BOOL make_group_line(char *p, int max_len, - DOMAIN_GRP *grp, - DOMAIN_GRP_MEMBER **mem, int *num_mem) -{ - int i; - int len; - len = slprintf(p, max_len-1, "%s:%s:%d:", grp->name, grp->comment, grp->rid); - - if (len == -1) - { - DEBUG(0,("make_group_line: cannot create entry\n")); - return False; - } - - p += len; - max_len -= len; - - if (mem == NULL || num_mem == NULL) - { - return True; - } - - for (i = 0; i < (*num_mem); i++) - { - len = strlen((*mem)[i].name); - p = safe_strcpy(p, (*mem)[i].name, max_len); - - if (p == NULL) - { - DEBUG(0, ("make_group_line: out of space for groups!\n")); - return False; - } - - max_len -= len; - - if (i != (*num_mem)-1) - { - *p = ','; - p++; - max_len--; - } - } - - return True; -} - -/************************************************************************* - Routine to return the next entry in the smbdomaingroup list. - *************************************************************************/ -static char *get_group_members(char *p, int *num_mem, DOMAIN_GRP_MEMBER **members) -{ - fstring name; - - if (num_mem == NULL || members == NULL) - { - return NULL; - } - - (*num_mem) = 0; - (*members) = NULL; - - while (next_token(&p, name, ",", sizeof(fstring))) - { - DOMAIN_GRP_MEMBER *mbrs; - - mbrs = Realloc((*members), ((*num_mem)+1) * sizeof(DOMAIN_GRP_MEMBER)); - if (mbrs == NULL) { - SAFE_FREE(*members); - return NULL; - } - else (*members) = mbrs; - fstrcpy((*members)[(*num_mem)].name, name); - (*members)[(*num_mem)].attr = 0x07; - (*num_mem)++; - } - return p; -} - -/************************************************************************* - Routine to return the next entry in the smbdomaingroup list. - *************************************************************************/ -static DOMAIN_GRP *getgrpfilepwent(void *vp, DOMAIN_GRP_MEMBER **mem, int *num_mem) -{ - /* Static buffers we will return. */ - static DOMAIN_GRP gp_buf; - - int gidval; - - pstring linebuf; - char *p; - size_t linebuf_len; - - gpdb_init_grp(&gp_buf); - - /* - * Scan the file, a line at a time and check if the name matches. - */ - while ((linebuf_len = getfileline(vp, linebuf, sizeof(linebuf))) > 0) - { - /* get group name */ - - p = strncpyn(gp_buf.name, linebuf, sizeof(gp_buf.name), ':'); - if (p == NULL) - { - DEBUG(0, ("getgrpfilepwent: malformed group entry (no :)\n")); - continue; - } - - /* Go past ':' */ - p++; - - /* get group comment */ - - p = strncpyn(gp_buf.comment, p, sizeof(gp_buf.comment), ':'); - if (p == NULL) - { - DEBUG(0, ("getgrpfilepwent: malformed group entry (no :)\n")); - continue; - } - - /* Go past ':' */ - p++; - - /* Get group gid. */ - - p = Atoic(p, &gidval, ":"); - - if (p == NULL) - { - DEBUG(0, ("getgrpfilepwent: malformed group entry (no : after uid)\n")); - continue; - } - - /* Go past ':' */ - p++; - - /* now get the user's groups. there are a maximum of 32 */ - - if (mem != NULL && num_mem != NULL) - { - (*mem) = NULL; - (*num_mem) = 0; - - p = get_group_members(p, num_mem, mem); - if (p == NULL) - { - DEBUG(0, ("getgrpfilepwent: malformed group entry (no : after members)\n")); - } - } - - /* ok, set up the static data structure and return it */ - - gp_buf.rid = pwdb_gid_to_group_rid((gid_t)gidval); - gp_buf.attr = 0x07; - - make_group_line(linebuf, sizeof(linebuf), &gp_buf, mem, num_mem); - DEBUG(10,("line: '%s'\n", linebuf)); - - return &gp_buf; - } - - DEBUG(5,("getgrpfilepwent: end of file reached.\n")); - return NULL; -} - -/************************************************************************ - Routine to add an entry to the grppasswd file. -*************************************************************************/ - -static BOOL add_grpfilegrp_entry(DOMAIN_GRP *newgrp) -{ - DEBUG(0, ("add_grpfilegrp_entry: NOT IMPLEMENTED\n")); - return False; -} - -/************************************************************************ - Routine to search the grppasswd file for an entry matching the groupname. - and then modify its group entry. We can't use the startgrppwent()/ - getgrppwent()/endgrppwent() interfaces here as we depend on looking - in the actual file to decide how much room we have to write data. - override = False, normal - override = True, override XXXXXXXX'd out group or NO PASS -************************************************************************/ - -static BOOL mod_grpfilegrp_entry(DOMAIN_GRP* grp) -{ - DEBUG(0, ("mod_grpfilegrp_entry: NOT IMPLEMENTED\n")); - return False; -} - - -static struct groupdb_ops file_ops = -{ - startgrpfilepwent, - endgrpfilepwent, - getgrpfilepwpos, - setgrpfilepwpos, - - iterate_getgroupnam, /* In groupdb.c */ - iterate_getgroupgid, /* In groupdb.c */ - iterate_getgrouprid, /* In groupdb.c */ - getgrpfilepwent, - - add_grpfilegrp_entry, - mod_grpfilegrp_entry, - - iterate_getusergroupsnam /* in groupdb.c */ -}; - -struct groupdb_ops *file_initialise_group_db(void) -{ - return &file_ops; -} - -#else - /* Do *NOT* make this function static. It breaks the compile on gcc. JRA */ - void grppass_dummy_function(void) { } /* stop some compilers complaining */ -#endif /* USE_SMBPASS_DB */ diff --git a/source3/include/smb_macros.h b/source3/include/smb_macros.h index 95f7e05f7d..999850b8eb 100644 --- a/source3/include/smb_macros.h +++ b/source3/include/smb_macros.h @@ -100,7 +100,6 @@ /* access various service details */ #define SERVICE(snum) (lp_servicename(snum)) -#define PRINTCOMMAND(snum) (lp_printcommand(snum)) #define PRINTERNAME(snum) (lp_printername(snum)) #define CAN_WRITE(conn) (!conn->read_only) #define VALID_SNUM(snum) (lp_snum_ok(snum)) diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c index f446453b9a..342a2a2926 100644 --- a/source3/libsmb/namequery.c +++ b/source3/libsmb/namequery.c @@ -1001,6 +1001,7 @@ BOOL find_master_ip(const char *group, struct in_addr *master_ip) BOOL lookup_dc_name(const char *srcname, const char *domain, struct in_addr *dc_ip, char *ret_name) { +#if !defined(I_HATE_WINDOWS_REPLY_CODE) fstring dc_name; BOOL ret; @@ -1024,6 +1025,184 @@ BOOL lookup_dc_name(const char *srcname, const char *domain, } return False; + +#else /* defined(I_HATE_WINDOWS_REPLY_CODE) */ + +JRA - This code is broken with BDC rollover - we need to do a full +NT GETDC call, UNICODE, NT domain SID and uncle tom cobbley and all... + + int retries = 3; + int retry_time = 2000; + struct timeval tval; + struct packet_struct p; + struct dgram_packet *dgram = &p.packet.dgram; + char *ptr,*p2; + char tmp[4]; + int len; + struct sockaddr_in sock_name; + int sock_len = sizeof(sock_name); + const char *mailslot = NET_LOGON_MAILSLOT; + char *mailslot_name; + char buffer[1024]; + char *bufp; + int dgm_id = generate_trn_id(); + int sock = open_socket_in(SOCK_DGRAM, 0, 3, interpret_addr(lp_socket_address()), True ); + + if(sock == -1) + return False; + + /* Find out the transient UDP port we have been allocated. */ + if(getsockname(sock, (struct sockaddr *)&sock_name, &sock_len)<0) { + DEBUG(0,("lookup_pdc_name: Failed to get local UDP port. Error was %s\n", + strerror(errno))); + close(sock); + return False; + } + + /* + * Create the request data. + */ + + memset(buffer,'\0',sizeof(buffer)); + bufp = buffer; + SSVAL(bufp,0,QUERYFORPDC); + bufp += 2; + fstrcpy(bufp,srcname); + bufp += (strlen(bufp) + 1); + slprintf(bufp, sizeof(fstring)-1, "\\MAILSLOT\\NET\\GETDC%d", dgm_id); + mailslot_name = bufp; + bufp += (strlen(bufp) + 1); + bufp = ALIGN2(bufp, buffer); + bufp += push_ucs2(NULL, bufp, srcname, sizeof(buffer) - (bufp - buffer), STR_TERMINATE); + + SIVAL(bufp,0,1); + SSVAL(bufp,4,0xFFFF); + SSVAL(bufp,6,0xFFFF); + bufp += 8; + len = PTR_DIFF(bufp,buffer); + + memset((char *)&p,'\0',sizeof(p)); + + /* DIRECT GROUP or UNIQUE datagram. */ + dgram->header.msg_type = 0x10; + dgram->header.flags.node_type = M_NODE; + dgram->header.flags.first = True; + dgram->header.flags.more = False; + dgram->header.dgm_id = dgm_id; + dgram->header.source_ip = *iface_ip(*pdc_ip); + dgram->header.source_port = ntohs(sock_name.sin_port); + dgram->header.dgm_length = 0; /* Let build_dgram() handle this. */ + dgram->header.packet_offset = 0; + + make_nmb_name(&dgram->source_name,srcname,0); + make_nmb_name(&dgram->dest_name,domain,0x1C); + + ptr = &dgram->data[0]; + + /* Setup the smb part. */ + ptr -= 4; /* XXX Ugliness because of handling of tcp SMB length. */ + memcpy(tmp,ptr,4); + set_message(ptr,17,17 + len,True); + memcpy(ptr,tmp,4); + + CVAL(ptr,smb_com) = SMBtrans; + SSVAL(ptr,smb_vwv1,len); + SSVAL(ptr,smb_vwv11,len); + SSVAL(ptr,smb_vwv12,70 + strlen(mailslot)); + SSVAL(ptr,smb_vwv13,3); + SSVAL(ptr,smb_vwv14,1); + SSVAL(ptr,smb_vwv15,1); + SSVAL(ptr,smb_vwv16,2); + p2 = smb_buf(ptr); + pstrcpy(p2,mailslot); + p2 = skip_string(p2,1); + + memcpy(p2,buffer,len); + p2 += len; + + dgram->datasize = PTR_DIFF(p2,ptr+4); /* +4 for tcp length. */ + + p.ip = *pdc_ip; + p.port = DGRAM_PORT; + p.fd = sock; + p.timestamp = time(NULL); + p.packet_type = DGRAM_PACKET; + + GetTimeOfDay(&tval); + + if (!send_packet(&p)) { + DEBUG(0,("lookup_pdc_name: send_packet failed.\n")); + close(sock); + return False; + } + + retries--; + + while (1) { + struct timeval tval2; + struct packet_struct *p_ret; + + GetTimeOfDay(&tval2); + if (TvalDiff(&tval,&tval2) > retry_time) { + if (!retries) + break; + if (!send_packet(&p)) { + DEBUG(0,("lookup_pdc_name: send_packet failed.\n")); + close(sock); + return False; + } + GetTimeOfDay(&tval); + retries--; + } + + if ((p_ret = receive_dgram_packet(sock,90,mailslot_name))) { + struct dgram_packet *dgram2 = &p_ret->packet.dgram; + char *buf; + char *buf2; + + buf = &dgram2->data[0]; + buf -= 4; + + if (CVAL(buf,smb_com) != SMBtrans) { + DEBUG(0,("lookup_pdc_name: datagram type %u != SMBtrans(%u)\n", (unsigned int) + CVAL(buf,smb_com), (unsigned int)SMBtrans )); + free_packet(p_ret); + continue; + } + + len = SVAL(buf,smb_vwv11); + buf2 = smb_base(buf) + SVAL(buf,smb_vwv12); + + if (len <= 0) { + DEBUG(0,("lookup_pdc_name: datagram len < 0 (%d)\n", len )); + free_packet(p_ret); + continue; + } + + DEBUG(4,("lookup_pdc_name: datagram reply from %s to %s IP %s for %s of type %d len=%d\n", + nmb_namestr(&dgram2->source_name),nmb_namestr(&dgram2->dest_name), + inet_ntoa(p_ret->ip), smb_buf(buf),SVAL(buf2,0),len)); + + if(SVAL(buf2,0) != QUERYFORPDC_R) { + DEBUG(0,("lookup_pdc_name: datagram type (%u) != QUERYFORPDC_R(%u)\n", + (unsigned int)SVAL(buf,0), (unsigned int)QUERYFORPDC_R )); + free_packet(p_ret); + continue; + } + + buf2 += 2; + /* Note this is safe as it is a bounded strcpy. */ + fstrcpy(ret_name, buf2); + ret_name[sizeof(fstring)-1] = '\0'; + close(sock); + free_packet(p_ret); + return True; + } + } + + close(sock); + return False; +#endif /* defined(I_HATE_WINDOWS_REPLY_CODE) */ } /******************************************************** diff --git a/source3/nsswitch/winbindd_pam.c b/source3/nsswitch/winbindd_pam.c index b8a8c38d68..f3237f08da 100644 --- a/source3/nsswitch/winbindd_pam.c +++ b/source3/nsswitch/winbindd_pam.c @@ -185,13 +185,13 @@ enum winbindd_result winbindd_pam_auth_crap(struct winbindd_cli_state *state) goto done; } - if (pull_utf8_talloc(mem_ctx, &user, state->request.data.auth_crap.user) == -1) { + if (pull_utf8_talloc(mem_ctx, &user, state->request.data.auth_crap.user) == (size_t)-1) { DEBUG(0, ("winbindd_pam_auth_crap: pull_utf8_talloc failed!\n")); } if (*state->request.data.auth_crap.domain) { char *dom = NULL; - if (pull_utf8_talloc(mem_ctx, &dom, state->request.data.auth_crap.domain) == -1) { + if (pull_utf8_talloc(mem_ctx, &dom, state->request.data.auth_crap.domain) == (size_t)-1) { DEBUG(0, ("winbindd_pam_auth_crap: pull_utf8_talloc failed!\n")); } domain = dom; @@ -215,7 +215,7 @@ enum winbindd_result winbindd_pam_auth_crap(struct winbindd_cli_state *state) if (*state->request.data.auth_crap.workstation) { char *wrk = NULL; - if (pull_utf8_talloc(mem_ctx, &wrk, state->request.data.auth_crap.workstation) == -1) { + if (pull_utf8_talloc(mem_ctx, &wrk, state->request.data.auth_crap.workstation) == (size_t)-1) { DEBUG(0, ("winbindd_pam_auth_crap: pull_utf8_talloc failed!\n")); } workstation = wrk; diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c index b4cd8ae5b5..2896fd79e4 100644 --- a/source3/rpc_server/srv_samr_nt.c +++ b/source3/rpc_server/srv_samr_nt.c @@ -2248,7 +2248,7 @@ NTSTATUS _api_samr_create_user(pipes_struct *p, SAMR_Q_CREATE_USER *q_u, SAMR_R_ * So we go the easy way, only check after if the account exists. * JFM (2/3/2001), to clear any possible bad understanding (-: * - * We now have separate script paramaters for adding users/machines so we + * We now have seperate script paramaters for adding users/machines so we * now have some sainity-checking to match. */ diff --git a/source3/script/installdirs.sh b/source3/script/installdirs.sh index dd8f7cd19c..9557b86d3b 100755 --- a/source3/script/installdirs.sh +++ b/source3/script/installdirs.sh @@ -1,20 +1,17 @@ #!/bin/sh -BASEDIR=$1 -SBINDIR=$2 -BINDIR=$3 -LIBDIR=$4 -VARDIR=$5 -PRIVATEDIR=$6 +while ( test -n "$1" ); do + if [ ! -d $1 ]; then + mkdir -p $1 + fi -for d in $BASEDIR $SBINDIR $BINDIR $LIBDIR $VARDIR $PRIVATEDIR; do -if [ ! -d $d ]; then -mkdir $d -if [ ! -d $d ]; then - echo Failed to make directory $d - exit 1 -fi -fi + if [ ! -d $1 ]; then + echo Failed to make directory $1 + exit 1 + fi + + shift; done + diff --git a/source3/smbadduser b/source3/smbadduser index e4e1b273d1..9837413aeb 100755 --- a/source3/smbadduser +++ b/source3/smbadduser @@ -6,13 +6,15 @@ unalias * set path = ($path /usr/local/samba/bin) set smbpasswd = /usr/local/samba/private/smbpasswd +#set smbpasswd = /etc/samba/smbpasswd set user_map = /usr/local/samba/lib/users.map +#set user_map = /etc/samba/smbusers # # Set to site specific passwd command # -#set passwd = "cat /etc/passwd" +set passwd = "cat /etc/passwd" #set passwd = "niscat passwd.org_dir" -set passwd = "ypcat passwd" +#set passwd = "ypcat passwd" set line = "----------------------------------------------------------" if ($#argv == 0) then @@ -53,9 +55,7 @@ foreach one ($argv) endif echo "Adding: $unix to $smbpasswd" - eval $passwd | \ - awk -F: '$1==USR { \ - printf( "%s:%s:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:%s:%s:%s\n", $1, $3, $5, $6, $7) }' USR=$unix >> $smbpasswd + /usr/bin/smbpasswd -a -n $unix if ($unix != $ntid) then echo "Adding: {$unix = $ntid} to $user_map" echo "$unix = $ntid" >> $user_map diff --git a/source3/smbd/mangle_hash.c b/source3/smbd/mangle_hash.c index ac9c13dcac..e220d2f6d2 100644 --- a/source3/smbd/mangle_hash.c +++ b/source3/smbd/mangle_hash.c @@ -730,7 +730,7 @@ static void name_map(char *OutName, BOOL need83, BOOL cache83) DEBUG(5,("name_map( %s, need83 = %s, cache83 = %s)\n", OutName, need83 ? "True" : "False", cache83 ? "True" : "False")); - if (push_ucs2_allocate(&OutName_ucs2, OutName) == -1 ) { + if (push_ucs2_allocate(&OutName_ucs2, OutName) == (size_t)-1) { DEBUG(0, ("push_ucs2_allocate failed!\n")); return; } |