2004-06-27 12:03:06 +00:00
/*
Unix SMB / CIFS implementation .
common share info functions
Copyright ( C ) Andrew Tridgell 2004
Copyright ( C ) Tim Potter 2004
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"
2004-11-16 09:00:52 +00:00
# include "lib/ldb/include/ldb.h"
2005-11-08 00:11:45 +00:00
# include "lib/ldb/include/ldb_errors.h"
2004-06-27 12:03:06 +00:00
/*
search the sam for the specified attributes - va_list variant
*/
int gendb_search_v ( struct ldb_context * ldb ,
TALLOC_CTX * mem_ctx ,
2006-11-22 00:59:34 +00:00
struct ldb_dn * basedn ,
2005-11-08 00:11:45 +00:00
struct ldb_message * * * msgs ,
2004-06-27 12:03:06 +00:00
const char * const * attrs ,
const char * format ,
2004-08-25 07:15:21 +00:00
va_list ap ) _PRINTF_ATTRIBUTE ( 6 , 0 )
2004-06-27 12:03:06 +00:00
{
2005-06-15 17:15:01 +00:00
enum ldb_scope scope = LDB_SCOPE_SUBTREE ;
2005-11-08 00:11:45 +00:00
struct ldb_result * res ;
2004-06-27 12:03:06 +00:00
char * expr = NULL ;
2005-11-08 00:11:45 +00:00
int ret ;
2004-06-27 12:03:06 +00:00
2005-06-15 17:15:01 +00:00
if ( format ) {
2006-01-31 10:03:44 +00:00
expr = talloc_vasprintf ( mem_ctx , format , ap ) ;
2005-06-15 17:15:01 +00:00
if ( expr = = NULL ) {
return - 1 ;
}
} else {
scope = LDB_SCOPE_BASE ;
2004-06-27 12:03:06 +00:00
}
2005-11-08 00:11:45 +00:00
res = NULL ;
ret = ldb_search ( ldb , basedn , scope , expr , attrs , & res ) ;
if ( ret = = LDB_SUCCESS ) {
2006-01-31 10:03:44 +00:00
talloc_steal ( mem_ctx , res - > msgs ) ;
2004-06-27 12:03:06 +00:00
2006-03-22 15:02:21 +00:00
DEBUG ( 6 , ( " gendb_search_v: %s %s -> %d \n " ,
2006-11-22 02:05:19 +00:00
basedn ? ldb_dn_get_linearized ( basedn ) : " NULL " ,
2005-11-08 00:11:45 +00:00
expr ? expr : " NULL " , res - > count ) ) ;
2004-06-27 12:03:06 +00:00
2005-11-08 00:11:45 +00:00
ret = res - > count ;
* msgs = res - > msgs ;
2006-01-31 10:03:44 +00:00
talloc_free ( res ) ;
2005-11-08 00:11:45 +00:00
} else {
DEBUG ( 4 , ( " gendb_search_v: search failed: %s " , ldb_errstring ( ldb ) ) ) ;
ret = - 1 ;
}
2004-06-27 12:03:06 +00:00
2006-01-31 10:03:44 +00:00
talloc_free ( expr ) ;
2004-06-27 12:03:06 +00:00
2005-11-08 00:11:45 +00:00
return ret ;
2004-06-27 12:03:06 +00:00
}
2005-03-23 01:30:43 +00:00
/*
search the LDB for the specified attributes - varargs variant
*/
2005-06-14 19:15:17 +00:00
int gendb_search ( struct ldb_context * ldb ,
2005-03-23 01:30:43 +00:00
TALLOC_CTX * mem_ctx ,
2006-11-22 00:59:34 +00:00
struct ldb_dn * basedn ,
2005-03-23 01:30:43 +00:00
struct ldb_message * * * res ,
const char * const * attrs ,
const char * format , . . . ) _PRINTF_ATTRIBUTE ( 6 , 7 )
{
va_list ap ;
int count ;
va_start ( ap , format ) ;
2005-06-14 19:15:17 +00:00
count = gendb_search_v ( ldb , mem_ctx , basedn , res , attrs , format , ap ) ;
2005-03-23 01:30:43 +00:00
va_end ( ap ) ;
return count ;
}
2005-12-22 11:26:41 +00:00
/*
search the LDB for a specified record ( by DN )
*/
2005-06-14 19:15:17 +00:00
int gendb_search_dn ( struct ldb_context * ldb ,
2005-06-15 17:15:01 +00:00
TALLOC_CTX * mem_ctx ,
2006-11-22 00:59:34 +00:00
struct ldb_dn * dn ,
2005-06-15 17:15:01 +00:00
struct ldb_message * * * res ,
const char * const * attrs )
2005-06-14 19:15:17 +00:00
{
2005-10-11 11:00:16 +00:00
return gendb_search ( ldb , mem_ctx , dn , res , attrs , NULL ) ;
2005-06-14 19:15:17 +00:00
}
2005-04-14 08:24:36 +00:00
/*
setup some initial ldif in a ldb
*/
int gendb_add_ldif ( struct ldb_context * ldb , const char * ldif_string )
{
struct ldb_ldif * ldif ;
int ret ;
2005-07-12 05:56:06 +00:00
ldif = ldb_ldif_read_string ( ldb , & ldif_string ) ;
2005-04-14 08:24:36 +00:00
if ( ldif = = NULL ) return - 1 ;
ret = ldb_add ( ldb , ldif - > msg ) ;
talloc_free ( ldif ) ;
return ret ;
}