/*
Unix SMB / CIFS implementation .
Common popt routines
Copyright ( C ) Tim Potter 2001 , 2002
Copyright ( C ) Jelmer Vernooij 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"
/* Handle command line options:
* d , - - debuglevel
* s , - - configfile
* O , - - socket - options
* V , - - version
* l , - - log - base
* n , - - netbios - name
*/
extern pstring user_socket_options ;
extern BOOL AllowDebugChange ;
static void popt_common_callback ( poptContext con ,
enum poptCallbackReason reason ,
const struct poptOption * opt ,
const char * arg , const void * data )
{
pstring logfile ;
const char * pname ;
/* Find out basename of current program */
pname = strrchr_m ( poptGetInvocationName ( con ) , ' / ' ) ;
if ( ! pname )
pname = poptGetInvocationName ( con ) ;
else
pname + + ;
if ( reason = = POPT_CALLBACK_REASON_PRE ) {
pstr_sprintf ( logfile , " %s/log.%s " , dyn_LOGFILEBASE , pname ) ;
lp_set_logfile ( logfile ) ;
return ;
}
switch ( opt - > val ) {
case ' d ' :
if ( arg ) {
debug_parse_levels ( arg ) ;
AllowDebugChange = False ;
}
break ;
case ' V ' :
printf ( " Version %s \n " , VERSION ) ;
exit ( 0 ) ;
break ;
case ' O ' :
if ( arg ) {
pstrcpy ( user_socket_options , arg ) ;
}
break ;
case ' s ' :
if ( arg ) {
pstrcpy ( dyn_CONFIGFILE , arg ) ;
}
break ;
case ' n ' :
if ( arg ) {
set_global_myname ( arg ) ;
}
break ;
case ' l ' :
if ( arg ) {
pstr_sprintf ( logfile , " %s/log.%s " , arg , pname ) ;
lp_set_logfile ( logfile ) ;
}
break ;
}
}
struct poptOption popt_common_debug [ ] = {
{ NULL , 0 , POPT_ARG_CALLBACK , popt_common_callback } ,
{ " debuglevel " , ' d ' , POPT_ARG_STRING , NULL , ' d ' , " Set debug level " ,
" DEBUGLEVEL " } ,
{ 0 }
} ;
struct poptOption popt_common_configfile [ ] = {
{ NULL , 0 , POPT_ARG_CALLBACK , popt_common_callback } ,
{ " configfile " , ' s ' , POPT_ARG_STRING , NULL , ' s ' , " Use alternative configuration file " } ,
{ 0 }
} ;
struct poptOption popt_common_socket_options [ ] = {
{ NULL , 0 , POPT_ARG_CALLBACK , popt_common_callback } ,
{ " socket-options " , ' O ' , POPT_ARG_STRING , NULL , ' O ' , " socket options to use " } ,
{ 0 }
} ;
struct poptOption popt_common_version [ ] = {
{ NULL , 0 , POPT_ARG_CALLBACK , popt_common_callback } ,
{ " version " , ' V ' , POPT_ARG_NONE , NULL , ' V ' , " Print version " } ,
{ 0 }
} ;
struct poptOption popt_common_netbios_name [ ] = {
{ NULL , 0 , POPT_ARG_CALLBACK , popt_common_callback } ,
{ " netbiosname " , ' n ' , POPT_ARG_STRING , NULL , ' n ' , " Primary netbios name " } ,
{ 0 }
} ;
struct poptOption popt_common_log_base [ ] = {
{ NULL , 0 , POPT_ARG_CALLBACK | POPT_CBFLAG_PRE , popt_common_callback } ,
{ " log-basename " , ' l ' , POPT_ARG_STRING , NULL , ' l ' , " Basename for log/debug files " } ,
{ 0 }
} ;