2003-04-29 11:40:52 +00:00
/*
Unix SMB / CIFS implementation .
ID Mapping
Copyright ( C ) Simo Sorce 2003
2006-07-11 18:01:26 +00:00
Copyright ( C ) Jeremy Allison 2006
2003-04-29 11:40:52 +00: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
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 0213 9 , USA . */
# include "includes.h"
# undef DBGC_CLASS
# define DBGC_CLASS DBGC_IDMAP
/*****************************************************************
2003-07-07 20:00:29 +00:00
Returns SID pointer .
2003-04-29 11:40:52 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-06-08 22:10:34 +00:00
NTSTATUS idmap_uid_to_sid ( DOM_SID * sid , uid_t uid , int flags )
2003-04-29 11:40:52 +00:00
{
unid_t id ;
2003-07-22 04:31:20 +00:00
DEBUG ( 10 , ( " idmap_uid_to_sid: uid = [%lu] \n " , ( unsigned long ) uid ) ) ;
2003-04-29 11:40:52 +00:00
2003-05-01 11:47:48 +00:00
id . uid = uid ;
2003-07-07 05:11:10 +00:00
2006-07-11 18:01:26 +00:00
return idmap_get_sid_from_id ( sid , id , ID_USERID , flags ) ;
2003-04-29 11:40:52 +00:00
}
/*****************************************************************
2003-05-01 11:47:48 +00:00
Group mapping is used for gids that maps to Wellknown SIDs
2003-04-29 11:40:52 +00:00
Returns SID pointer .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2005-06-08 22:10:34 +00:00
NTSTATUS idmap_gid_to_sid ( DOM_SID * sid , gid_t gid , int flags )
2003-04-29 11:40:52 +00:00
{
unid_t id ;
2003-07-22 04:31:20 +00:00
DEBUG ( 10 , ( " idmap_gid_to_sid: gid = [%lu] \n " , ( unsigned long ) gid ) ) ;
2003-04-29 11:40:52 +00:00
2003-05-01 11:47:48 +00:00
id . gid = gid ;
2005-06-08 22:10:34 +00:00
2006-07-11 18:01:26 +00:00
return idmap_get_sid_from_id ( sid , id , ID_GROUPID , flags ) ;
2003-04-29 11:40:52 +00:00
}
/*****************************************************************
2003-05-01 11:47:48 +00:00
if it is a foreign sid or it is in idmap rid range check idmap ,
otherwise falls back to the legacy algorithmic mapping .
2003-04-29 11:40:52 +00:00
Returns True if this name is a user sid and the conversion
2003-05-01 11:47:48 +00:00
was done correctly , False if not .
2003-04-29 11:40:52 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-07-11 18:01:26 +00:00
NTSTATUS idmap_sid_to_uid ( const DOM_SID * sid , uid_t * uid , int flags )
2003-04-29 11:40:52 +00:00
{
2006-07-11 18:01:26 +00:00
NTSTATUS ret ;
enum idmap_type id_type ;
2003-04-29 11:40:52 +00:00
unid_t id ;
2003-07-07 05:11:10 +00:00
DEBUG ( 10 , ( " idmap_sid_to_uid: sid = [%s] \n " , sid_string_static ( sid ) ) ) ;
2003-05-03 01:29:18 +00:00
2006-07-11 18:01:26 +00:00
/* For the LDAP and tdb backends we must *KNOW* what we're looking for.
This interface design * SUCKS * ! JRA . */
2003-05-03 01:29:18 +00:00
2006-07-11 18:01:26 +00:00
id_type = ID_USERID ;
ret = idmap_get_id_from_sid ( & id , & id_type , sid , flags ) ;
if ( ! NT_STATUS_IS_OK ( ret ) ) {
return ret ;
}
if ( id_type ! = ID_USERID ) {
return NT_STATUS_NONE_MAPPED ;
}
2003-05-03 01:29:18 +00:00
2006-07-11 18:01:26 +00:00
DEBUG ( 10 , ( " idmap_sid_to_uid: uid = [%lu] \n " , ( unsigned long ) id . uid ) ) ;
* uid = id . uid ;
2003-07-07 05:11:10 +00:00
2006-07-11 18:01:26 +00:00
return NT_STATUS_OK ;
2003-04-29 11:40:52 +00:00
}
/*****************************************************************
* THE CANONICAL * convert SID to gid function .
2003-05-01 11:47:48 +00:00
if it is a foreign sid or it is in idmap rid range check idmap ,
otherwise falls back to the legacy algorithmic mapping .
Group mapping is used for gids that maps to Wellknown SIDs
2003-04-29 11:40:52 +00:00
Returns True if this name is a user sid and the conversion
was done correctly , False if not .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-07-11 18:01:26 +00:00
NTSTATUS idmap_sid_to_gid ( const DOM_SID * sid , gid_t * gid , int flags )
2003-04-29 11:40:52 +00:00
{
2006-07-11 18:01:26 +00:00
NTSTATUS ret ;
enum idmap_type id_type ;
2003-04-29 11:40:52 +00:00
unid_t id ;
2003-04-30 16:35:17 +00:00
DEBUG ( 10 , ( " sid_to_gid: sid = [%s] \n " , sid_string_static ( sid ) ) ) ;
2003-04-29 11:40:52 +00:00
2006-07-11 18:01:26 +00:00
/* For the LDAP and tdb backends we must *KNOW* what we're looking for.
This interface design * SUCKS * ! JRA . */
2003-05-01 11:47:48 +00:00
2006-07-11 18:01:26 +00:00
id_type = ID_GROUPID ;
ret = idmap_get_id_from_sid ( & id , & id_type , sid , flags ) ;
2003-07-07 05:11:10 +00:00
2006-07-11 18:01:26 +00:00
if ( ! NT_STATUS_IS_OK ( ret ) ) {
return ret ;
}
if ( id_type ! = ID_GROUPID ) {
return NT_STATUS_NONE_MAPPED ;
2003-04-29 11:40:52 +00:00
}
2006-07-11 18:01:26 +00:00
DEBUG ( 10 , ( " idmap_sid_to_gid: gid = [%lu] \n " , ( unsigned long ) id . gid ) ) ;
* gid = id . gid ;
return NT_STATUS_OK ;
2003-04-29 11:40:52 +00:00
}