2007-12-21 20:57:34 +03:00
/*
Unix SMB / CIFS implementation .
Winbind client API
Copyright ( C ) Gerald ( Jerry ) Carter 2007
This library is free software ; you can redistribute it and / or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation ; either
version 3 of the License , or ( at your option ) any later version .
This library 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
Library General Public License for more details .
You should have received a copy of the GNU Lesser General Public License
along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
/* Required Headers */
# include "libwbclient.h"
/** @brief Ping winbindd to see if the daemon is running
*
* @ return # wbcErr
* */
wbcErr wbcPing ( void )
{
2007-12-23 02:33:44 +03:00
struct winbindd_request request ;
struct winbindd_response response ;
/* Initialize request */
ZERO_STRUCT ( request ) ;
ZERO_STRUCT ( response ) ;
return wbcRequestResponse ( WINBINDD_PING , & request , & response ) ;
2007-12-21 20:57:34 +03:00
}
/** @brief Lookup the current status of a trusted domain
*
* @ param domain Domain to query
2007-12-21 22:47:45 +03:00
* @ param * dinfo Pointer to returned domain_info struct
2007-12-21 20:57:34 +03:00
*
* @ return # wbcErr
*
* */
wbcErr wbcDomainInfo ( const char * domain , struct wbcDomainInfo * * dinfo )
{
struct winbindd_request request ;
struct winbindd_response response ;
wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE ;
struct wbcDomainInfo * info = NULL ;
2008-01-03 14:10:27 +03:00
2007-12-21 20:57:34 +03:00
if ( ! domain | | ! dinfo ) {
wbc_status = WBC_ERR_INVALID_PARAM ;
BAIL_ON_WBC_ERROR ( wbc_status ) ;
}
/* Initialize request */
ZERO_STRUCT ( request ) ;
ZERO_STRUCT ( response ) ;
2008-01-03 14:10:27 +03:00
strncpy ( request . domain_name , domain ,
2007-12-21 20:57:34 +03:00
sizeof ( request . domain_name ) - 1 ) ;
wbc_status = wbcRequestResponse ( WINBINDD_DOMAIN_INFO ,
& request ,
& response ) ;
BAIL_ON_WBC_ERROR ( wbc_status ) ;
info = talloc ( NULL , struct wbcDomainInfo ) ;
BAIL_ON_PTR_ERROR ( info , wbc_status ) ;
2008-01-03 14:10:27 +03:00
info - > short_name = talloc_strdup ( info ,
2007-12-21 20:57:34 +03:00
response . data . domain_info . name ) ;
BAIL_ON_PTR_ERROR ( info - > short_name , wbc_status ) ;
2008-01-03 14:10:27 +03:00
info - > dns_name = talloc_strdup ( info ,
2007-12-21 20:57:34 +03:00
response . data . domain_info . alt_name ) ;
BAIL_ON_PTR_ERROR ( info - > dns_name , wbc_status ) ;
2008-01-03 14:10:27 +03:00
wbc_status = wbcStringToSid ( response . data . domain_info . sid ,
2007-12-21 20:57:34 +03:00
& info - > sid ) ;
BAIL_ON_WBC_ERROR ( wbc_status ) ;
if ( response . data . domain_info . native_mode )
info - > flags | = WBC_DOMINFO_NATIVE ;
if ( response . data . domain_info . active_directory )
info - > flags | = WBC_DOMINFO_AD ;
if ( response . data . domain_info . primary )
info - > flags | = WBC_DOMINFO_PRIMARY ;
* dinfo = info ;
2008-01-03 14:10:27 +03:00
2007-12-21 20:57:34 +03:00
wbc_status = WBC_ERR_SUCCESS ;
done :
if ( ! WBC_ERROR_IS_OK ( wbc_status ) ) {
talloc_free ( info ) ;
}
return wbc_status ;
}