2002-07-03 11:37:54 +04:00
/*
Unix SMB / CIFS implementation .
2006-02-20 23:09:36 +03:00
struct samu access routines
2002-07-03 11:37:54 +04:00
Copyright ( C ) Jeremy Allison 1996 - 2001
Copyright ( C ) Luke Kenneth Casson Leighton 1996 - 1998
Copyright ( C ) Gerald ( Jerry ) Carter 2000 - 2001
Copyright ( C ) Andrew Bartlett 2001 - 2002
Copyright ( C ) Stefan ( metze ) Metzmacher 2002
2011-02-12 21:52:05 +03:00
2002-07-03 11:37:54 +04:00
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
2007-07-09 23:25:36 +04:00
the Free Software Foundation ; either version 3 of the License , or
2002-07-03 11:37:54 +04:00
( at your option ) any later version .
2011-02-12 21:52:05 +03:00
2002-07-03 11:37:54 +04:00
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 .
2011-02-12 21:52:05 +03:00
2002-07-03 11:37:54 +04:00
You should have received a copy of the GNU General Public License
2007-07-10 04:52:41 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2002-07-03 11:37:54 +04:00
*/
# include "includes.h"
2010-10-12 08:27:50 +04:00
# include "../libcli/security/security.h"
2002-07-03 11:37:54 +04:00
# undef DBGC_CLASS
# define DBGC_CLASS DBGC_PASSDB
2006-02-20 23:09:36 +03:00
uint32 pdb_get_user_rid ( const struct samu * sampass )
2002-07-03 11:37:54 +04:00
{
uint32 u_rid ;
if ( sampass )
if ( sid_peek_check_rid ( get_global_sam_sid ( ) , pdb_get_user_sid ( sampass ) , & u_rid ) )
return u_rid ;
2011-02-12 21:52:05 +03:00
2002-07-03 11:37:54 +04:00
return ( 0 ) ;
}
2006-02-25 00:36:40 +03:00
uint32 pdb_get_group_rid ( struct samu * sampass )
2002-07-03 11:37:54 +04:00
{
uint32 g_rid ;
if ( sampass )
if ( sid_peek_check_rid ( get_global_sam_sid ( ) , pdb_get_group_sid ( sampass ) , & g_rid ) )
return g_rid ;
return ( 0 ) ;
}
2007-10-19 04:40:25 +04:00
bool pdb_set_user_sid_from_rid ( struct samu * sampass , uint32 rid , enum pdb_value_state flag )
2002-07-03 11:37:54 +04:00
{
2010-05-21 05:25:01 +04:00
struct dom_sid u_sid ;
const struct dom_sid * global_sam_sid ;
2011-02-12 21:52:05 +03:00
2002-07-03 11:37:54 +04:00
if ( ! sampass )
return False ;
if ( ! ( global_sam_sid = get_global_sam_sid ( ) ) ) {
DEBUG ( 1 , ( " pdb_set_user_sid_from_rid: Could not read global sam sid! \n " ) ) ;
return False ;
}
2010-01-10 19:39:27 +03:00
if ( ! sid_compose ( & u_sid , global_sam_sid , rid ) ) {
2002-07-03 11:37:54 +04:00
return False ;
2010-01-10 19:39:27 +03:00
}
2002-07-03 11:37:54 +04:00
2002-11-02 06:47:48 +03:00
if ( ! pdb_set_user_sid ( sampass , & u_sid , flag ) )
2002-07-03 11:37:54 +04:00
return False ;
DEBUG ( 10 , ( " pdb_set_user_sid_from_rid: \n \t setting user sid %s from rid %d \n " ,
2007-12-15 23:11:36 +03:00
sid_string_dbg ( & u_sid ) , rid ) ) ;
2002-07-03 11:37:54 +04:00
return True ;
}
2007-10-19 04:40:25 +04:00
bool pdb_set_group_sid_from_rid ( struct samu * sampass , uint32 grid , enum pdb_value_state flag )
2002-07-03 11:37:54 +04:00
{
2010-05-21 05:25:01 +04:00
struct dom_sid g_sid ;
const struct dom_sid * global_sam_sid ;
2002-07-03 11:37:54 +04:00
if ( ! sampass )
return False ;
2011-02-12 21:52:05 +03:00
2002-07-03 11:37:54 +04:00
if ( ! ( global_sam_sid = get_global_sam_sid ( ) ) ) {
DEBUG ( 1 , ( " pdb_set_user_sid_from_rid: Could not read global sam sid! \n " ) ) ;
return False ;
}
2010-01-10 19:39:27 +03:00
if ( ! sid_compose ( & g_sid , global_sam_sid , grid ) ) {
2002-07-03 11:37:54 +04:00
return False ;
2010-01-10 19:39:27 +03:00
}
2002-07-03 11:37:54 +04:00
2002-11-02 06:47:48 +03:00
if ( ! pdb_set_group_sid ( sampass , & g_sid , flag ) )
2002-07-03 11:37:54 +04:00
return False ;
DEBUG ( 10 , ( " pdb_set_group_sid_from_rid: \n \t setting group sid %s from rid %d \n " ,
2007-12-15 23:11:36 +03:00
sid_string_dbg ( & g_sid ) , grid ) ) ;
2002-07-03 11:37:54 +04:00
return True ;
}