2002-04-04 06:51:02 +04:00
/*
Unix SMB / CIFS implementation .
ads ( active directory ) utility library
Copyright ( C ) Jim McDonough 2002
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"
# ifdef HAVE_ADS
/*
find a user account
*/
ADS_STATUS ads_find_user_acct ( ADS_STRUCT * ads , void * * res , const char * user )
{
ADS_STATUS status ;
2003-07-10 12:27:55 +04:00
char * ldap_exp ;
2002-04-04 06:51:02 +04:00
const char * attrs [ ] = { " * " , NULL } ;
2003-02-01 10:59:29 +03:00
char * escaped_user = escape_ldap_string_alloc ( user ) ;
if ( ! escaped_user ) {
return ADS_ERROR ( LDAP_NO_MEMORY ) ;
}
2002-04-04 06:51:02 +04:00
2003-07-10 12:27:55 +04:00
asprintf ( & ldap_exp , " (samAccountName=%s) " , escaped_user ) ;
status = ads_search ( ads , res , ldap_exp , attrs ) ;
SAFE_FREE ( ldap_exp ) ;
2003-02-01 10:59:29 +03:00
SAFE_FREE ( escaped_user ) ;
2002-04-04 06:51:02 +04:00
return status ;
}
ADS_STATUS ads_add_user_acct ( ADS_STRUCT * ads , const char * user ,
2003-01-15 19:10:57 +03:00
const char * container , const char * fullname )
2002-04-04 06:51:02 +04:00
{
TALLOC_CTX * ctx ;
ADS_MODLIST mods ;
ADS_STATUS status ;
2002-07-15 14:35:28 +04:00
const char * upn , * new_dn , * name , * controlstr ;
const char * objectClass [ ] = { " top " , " person " , " organizationalPerson " ,
" user " , NULL } ;
2002-04-04 06:51:02 +04:00
if ( fullname & & * fullname ) name = fullname ;
else name = user ;
2002-12-20 23:21:31 +03:00
if ( ! ( ctx = talloc_init ( " ads_add_user_acct " ) ) )
2002-04-04 06:51:02 +04:00
return ADS_ERROR ( LDAP_NO_MEMORY ) ;
status = ADS_ERROR ( LDAP_NO_MEMORY ) ;
2002-08-17 21:00:51 +04:00
if ( ! ( upn = talloc_asprintf ( ctx , " %s@%s " , user , ads - > config . realm ) ) )
2002-04-04 06:51:02 +04:00
goto done ;
2003-01-15 19:10:57 +03:00
if ( ! ( new_dn = talloc_asprintf ( ctx , " cn=%s,%s,%s " , name , container ,
2002-08-17 21:00:51 +04:00
ads - > config . bind_path ) ) )
2002-04-04 06:51:02 +04:00
goto done ;
if ( ! ( controlstr = talloc_asprintf ( ctx , " %u " , UF_NORMAL_ACCOUNT ) ) )
goto done ;
if ( ! ( mods = ads_init_mods ( ctx ) ) )
goto done ;
2002-07-15 14:35:28 +04:00
ads_mod_str ( ctx , & mods , " cn " , name ) ;
ads_mod_strlist ( ctx , & mods , " objectClass " , objectClass ) ;
ads_mod_str ( ctx , & mods , " userPrincipalName " , upn ) ;
ads_mod_str ( ctx , & mods , " name " , name ) ;
ads_mod_str ( ctx , & mods , " displayName " , name ) ;
ads_mod_str ( ctx , & mods , " sAMAccountName " , user ) ;
ads_mod_str ( ctx , & mods , " userAccountControl " , controlstr ) ;
status = ads_gen_add ( ads , new_dn , mods ) ;
done :
talloc_destroy ( ctx ) ;
return status ;
}
ADS_STATUS ads_add_group_acct ( ADS_STRUCT * ads , const char * group ,
2003-01-15 19:10:57 +03:00
const char * container , const char * comment )
2002-07-15 14:35:28 +04:00
{
TALLOC_CTX * ctx ;
ADS_MODLIST mods ;
ADS_STATUS status ;
char * new_dn ;
const char * objectClass [ ] = { " top " , " group " , NULL } ;
2002-12-20 23:21:31 +03:00
if ( ! ( ctx = talloc_init ( " ads_add_group_acct " ) ) )
2002-07-15 14:35:28 +04:00
return ADS_ERROR ( LDAP_NO_MEMORY ) ;
status = ADS_ERROR ( LDAP_NO_MEMORY ) ;
2003-01-15 19:10:57 +03:00
if ( ! ( new_dn = talloc_asprintf ( ctx , " cn=%s,%s,%s " , group , container ,
2002-08-17 21:00:51 +04:00
ads - > config . bind_path ) ) )
2002-07-15 14:35:28 +04:00
goto done ;
if ( ! ( mods = ads_init_mods ( ctx ) ) )
goto done ;
ads_mod_str ( ctx , & mods , " cn " , group ) ;
ads_mod_strlist ( ctx , & mods , " objectClass " , objectClass ) ;
ads_mod_str ( ctx , & mods , " name " , group ) ;
2003-01-15 19:10:57 +03:00
if ( comment & & * comment )
2002-07-15 14:35:28 +04:00
ads_mod_str ( ctx , & mods , " description " , comment ) ;
ads_mod_str ( ctx , & mods , " sAMAccountName " , group ) ;
2002-04-04 06:51:02 +04:00
status = ads_gen_add ( ads , new_dn , mods ) ;
done :
talloc_destroy ( ctx ) ;
return status ;
}
# endif