2008-04-13 19:13:16 +04:00
/*
* Unix SMB / CIFS implementation .
* libsmbconf - Samba configuration library , init dispatcher
* Copyright ( C ) Michael Adam 2008
*
* 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 3 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 , see < http : //www.gnu.org/licenses/>.
*/
# include "includes.h"
2009-01-21 20:25:47 +03:00
# include "lib/smbconf/smbconf_private.h"
# include "lib/smbconf/smbconf_txt.h"
# include "lib/smbconf/smbconf_reg.h"
2010-05-18 04:27:34 +04:00
# include "lib/smbconf/smbconf_init.h"
2008-04-13 19:13:16 +04:00
/**
* smbconf initialization dispatcher
*
* this takes a configuration source in the form of
* backend : path and calles the appropriate backend
* init function with the path argument
*
* known backends :
* - " registry " or " reg "
* - " txt " or " file "
*/
2011-04-07 19:19:03 +04:00
sbcErr smbconf_init ( TALLOC_CTX * mem_ctx , struct smbconf_ctx * * conf_ctx ,
2008-04-13 19:13:16 +04:00
const char * source )
{
2011-04-07 19:19:03 +04:00
sbcErr err ;
2008-04-13 19:13:16 +04:00
char * backend = NULL ;
char * path = NULL ;
char * sep ;
TALLOC_CTX * tmp_ctx = talloc_stackframe ( ) ;
if ( conf_ctx = = NULL ) {
2011-04-07 19:19:03 +04:00
err = SBC_ERR_INVALID_PARAM ;
2008-04-13 19:13:16 +04:00
goto done ;
}
if ( ( source = = NULL ) | | ( * source = = ' \0 ' ) ) {
2011-04-07 19:19:03 +04:00
err = SBC_ERR_INVALID_PARAM ;
2008-04-13 19:13:16 +04:00
goto done ;
}
backend = talloc_strdup ( tmp_ctx , source ) ;
if ( backend = = NULL ) {
2011-04-07 19:19:03 +04:00
err = SBC_ERR_NOMEM ;
2008-04-13 19:13:16 +04:00
goto done ;
}
sep = strchr ( backend , ' : ' ) ;
if ( sep ! = NULL ) {
* sep = ' \0 ' ;
path = sep + 1 ;
if ( strlen ( path ) = = 0 ) {
path = NULL ;
}
}
if ( strequal ( backend , " registry " ) | | strequal ( backend , " reg " ) ) {
2011-04-07 19:19:03 +04:00
err = smbconf_init_reg ( mem_ctx , conf_ctx , path ) ;
2008-04-13 19:13:16 +04:00
} else if ( strequal ( backend , " file " ) | | strequal ( backend , " txt " ) ) {
2011-04-07 19:19:03 +04:00
err = smbconf_init_txt ( mem_ctx , conf_ctx , path ) ;
2008-04-13 19:13:16 +04:00
} else if ( sep = = NULL ) {
/*
* If no separator was given in the source , and the string is
2008-10-22 01:20:31 +04:00
* not a known backend , assume file backend and use the source
2008-04-13 19:13:16 +04:00
* string as a path argument .
*/
2011-04-07 19:19:03 +04:00
err = smbconf_init_txt ( mem_ctx , conf_ctx , backend ) ;
2008-04-13 19:13:16 +04:00
} else {
/*
* Separator was specified but this is not a known backend .
2008-10-22 01:20:57 +04:00
* As a last resort , try to interpret the original source
* string as a file name that contains a " : " sign .
* This may occur with an include directive like this :
* ' include = / path / to / file . % T '
2008-04-13 19:13:16 +04:00
*/
2011-04-07 19:19:03 +04:00
err = smbconf_init_txt ( mem_ctx , conf_ctx , source ) ;
2008-04-13 19:13:16 +04:00
}
done :
2009-01-21 19:12:50 +03:00
talloc_free ( tmp_ctx ) ;
2011-04-07 19:19:03 +04:00
return err ;
2008-04-13 19:13:16 +04:00
}