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"
/* From wb_common.c */
NSS_STATUS winbindd_request_response ( int req_type ,
struct winbindd_request * request ,
struct winbindd_response * response ) ;
/** @brief Wrapper around Winbind's send/receive API call
*
* @ param cmd Winbind command operation to perform
* @ param request Send structure
* @ param response Receive structure
*
* @ return # wbcErr
* */
/**********************************************************************
result = = NSS_STATUS_UNAVAIL : winbind not around
result = = NSS_STATUS_NOTFOUND : winbind around , but domain missing
Due to a bad API NSS_STATUS_NOTFOUND is returned both when winbind_off
and when winbind return WINBINDD_ERROR . So the semantics of this
routine depends on winbind_on . Grepping for winbind_off I just
found 3 places where winbind is turned off , and this does not conflict
( as far as I have seen ) with the callers of is_trusted_domains .
- - Volker
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
wbcErr wbcRequestResponse ( int cmd ,
struct winbindd_request * request ,
struct winbindd_response * response )
{
wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE ;
NSS_STATUS nss_status ;
2008-01-29 23:49:38 +03:00
/* for some calls the request and/or response cna be NULL */
2007-12-21 20:57:34 +03:00
nss_status = winbindd_request_response ( cmd , request , response ) ;
switch ( nss_status ) {
case NSS_STATUS_SUCCESS :
wbc_status = WBC_ERR_SUCCESS ;
break ;
case NSS_STATUS_UNAVAIL :
2008-01-19 13:08:49 +03:00
wbc_status = WBC_ERR_WINBIND_NOT_AVAILABLE ;
2007-12-21 20:57:34 +03:00
break ;
case NSS_STATUS_NOTFOUND :
2008-01-19 13:08:49 +03:00
wbc_status = WBC_ERR_DOMAIN_NOT_FOUND ;
2007-12-21 20:57:34 +03:00
break ;
default :
wbc_status = WBC_ERR_NSS_ERROR ;
break ;
}
return wbc_status ;
}
2008-02-11 18:29:28 +03:00
/** @brief Translate an error value into a string
*
* @ param error
*
* @ return a pointer to a static string
* */
const char * wbcErrorString ( wbcErr error )
{
switch ( error ) {
case WBC_ERR_SUCCESS :
return " WBC_ERR_SUCCESS " ;
case WBC_ERR_NOT_IMPLEMENTED :
return " WBC_ERR_NOT_IMPLEMENTED " ;
case WBC_ERR_UNKNOWN_FAILURE :
return " WBC_ERR_UNKNOWN_FAILURE " ;
case WBC_ERR_NO_MEMORY :
return " WBC_ERR_NO_MEMORY " ;
case WBC_ERR_INVALID_SID :
return " WBC_ERR_INVALID_SID " ;
case WBC_ERR_INVALID_PARAM :
return " WBC_ERR_INVALID_PARAM " ;
case WBC_ERR_WINBIND_NOT_AVAILABLE :
return " WBC_ERR_WINBIND_NOT_AVAILABLE " ;
case WBC_ERR_DOMAIN_NOT_FOUND :
return " WBC_ERR_DOMAIN_NOT_FOUND " ;
2008-04-17 19:49:53 +04:00
case WBC_ERR_INVALID_RESPONSE :
return " WBC_ERR_INVALID_RESPONSE " ;
2008-02-11 18:29:28 +03:00
case WBC_ERR_NSS_ERROR :
return " WBC_ERR_NSS_ERROR " ;
2008-05-13 21:52:20 +04:00
case WBC_ERR_UNKNOWN_USER :
return " WBC_ERR_UNKNOWN_USER " ;
case WBC_ERR_UNKNOWN_GROUP :
return " WBC_ERR_UNKNOWN_GROUP " ;
2008-01-24 16:05:59 +03:00
case WBC_ERR_AUTH_ERROR :
return " WBC_ERR_AUTH_ERROR " ;
2008-02-11 18:29:28 +03:00
}
return " unknown wbcErr value " ;
2008-04-09 20:20:07 +04:00
}
2008-02-11 18:29:28 +03:00
2007-12-21 20:57:34 +03:00
/** @brief Free library allocated memory
*
* @ param * p Pointer to free
*
* @ return void
* */
void wbcFreeMemory ( void * p )
{
if ( p )
talloc_free ( p ) ;
return ;
}