diff options
author | Stefan Metzmacher <metze@samba.org> | 2004-02-22 13:09:51 +0000 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2004-02-22 13:09:51 +0000 |
commit | 42887e406a8751f9f852292d175682c5743d03ae (patch) | |
tree | 55021193cab2ea94d4d3969d84f72945cfbeed7d | |
parent | 4282138ebbf2b2f708903cdfe713786a8c3e6960 (diff) | |
download | samba-42887e406a8751f9f852292d175682c5743d03ae.tar.gz samba-42887e406a8751f9f852292d175682c5743d03ae.tar.bz2 samba-42887e406a8751f9f852292d175682c5743d03ae.zip |
- creat the LIBCMDLINE subsystem
including readline and popt
- creat the CONFIG subsystem
including param/* dynconfig.* and passdb/secrets.*
metze
(This used to be commit bfd7fd21c8e38c0065fc41dde10e863a169878c2)
-rw-r--r-- | source4/Makefile.in | 52 | ||||
-rw-r--r-- | source4/build/m4/rewrite.m4 | 71 | ||||
-rw-r--r-- | source4/configure.in | 2 | ||||
-rw-r--r-- | source4/lib/cmdline/config.m4 | 79 | ||||
-rw-r--r-- | source4/lib/popt_common.c | 334 | ||||
-rw-r--r-- | source4/lib/readline.c | 159 | ||||
-rw-r--r-- | source4/param/config.m4 | 4 |
7 files changed, 108 insertions, 593 deletions
diff --git a/source4/Makefile.in b/source4/Makefile.in index 8d67e2a44f..407dedcfbd 100644 --- a/source4/Makefile.in +++ b/source4/Makefile.in @@ -22,9 +22,6 @@ LDSHFLAGS=@LDSHFLAGS@ @LDFLAGS@ @CFLAGS@ PERL=@PERL@ DYNEXP=@DYNEXP@ -TERMLDFLAGS=@TERMLDFLAGS@ -TERMLIBS=@TERMLIBS@ - VPATH=@srcdir@ srcdir=@srcdir@ builddir=@builddir@ @@ -112,6 +109,12 @@ LIBRPC_OBJS = @LIBRPC_OBJS@ LIBSMB_OBJS = @LIBSMB_OBJS@ LIBPOPT_OBJS = @LIBPOPT_OBJS@ +LIBPOPT_LIBS = @LIBPOPT_LIBS@ + +LIBCMDLINE_OBJS = @LIBCMDLINE_OBJS@ +LIBCMDLINE_LIBS = @LIBCMDLINE_LIBS@ + +CONFIG_OBJS = @CONFIG_OBJS@ PROCESS_MODEL_OBJS = @PROCESS_MODEL_OBJS@ PROCESS_MODEL_LIBS = @PROCESS_MODEL_LIBS@ @@ -137,15 +140,6 @@ TORTURE_RPC_OBJS = @TORTURE_RPC_OBJS@ TORTURE_OBJS = @TORTURE_OBJS@ - -READLINE_OBJ = lib/readline.o - -POPT_LIB_OBJ = lib/popt_common.o - -PARAM_OBJ = param/loadparm.o param/params.o dynconfig.o - -SECRETS_OBJ = passdb/secrets.o - SMBD_OBJ_MAIN = smbd/server.o SMBD_OBJ_SRV = smbd/process.o \ @@ -157,40 +151,40 @@ SMBD_OBJ_SRV = smbd/process.o \ SMBD_OBJ_BASE = $(PROCESS_MODEL_OBJS) $(SMBD_OBJ_SRV) \ - $(PARAM_OBJ) $(SECRETS_OBJ) \ - $(LIBBASIC_OBJS) $(POPT_LIB_OBJ) $(LIBSMB_OBJS) + $(CONFIG_OBJS) \ + $(LIBBASIC_OBJS) $(LIBCMDLINE_OBJS) $(LIBSMB_OBJS) SMBD_OBJS = $(SMBD_OBJ_MAIN) $(SMBD_OBJ_BASE) $(LIBPOPT_OBJS) -SMBD_LIBS = $(LIBS) $(SMB_LIBS) $(PROCESS_MODEL_LIBS) $(DCERPC_LIBS) $(AUTH_LIBS) $(PASSDB_LIBS) $(NTVFS_LIBS) $(LIBPOPT_LIBS) +SMBD_LIBS = $(LIBS) $(LIBCMDLINE_LIBS) $(SMB_LIBS) $(PROCESS_MODEL_LIBS) $(DCERPC_LIBS) $(AUTH_LIBS) $(PASSDB_LIBS) $(NTVFS_LIBS) $(LIBPOPT_LIBS) CLIENT_OBJ1 = client/client.o client/clitar.o libcli/raw/clirewrite.o -CLIENT_OBJ = $(CLIENT_OBJ1) $(PARAM_OBJ) $(LIBSMB_OBJS) $(SECRETS_OBJ) \ +CLIENT_OBJ = $(CLIENT_OBJ1) $(CONFIG_OBJS) $(LIBSMB_OBJS) \ $(LIBBASIC_OBJS) \ - $(READLINE_OBJ) $(POPT_LIB_OBJ) $(LIBPOPT_OBJS) + $(LIBCMDLINE_OBJS) $(LIBPOPT_OBJS) -SMBTORTURE_OBJS = $(TORTURE_OBJS) $(SECRETS_OBJ) $(LIBSMB_OBJS) $(PARAM_OBJ) $(LIBBASIC_OBJS) +SMBTORTURE_OBJS = $(TORTURE_OBJS) $(CONFIG_OBJS) $(LIBSMB_OBJS) $(LIBBASIC_OBJS) SMBTORTURE_LIBS = $(LIBS) -GENTEST_OBJ = torture/gentest.o torture/torture_util.o $(LIBSMB_OBJS) $(PARAM_OBJ) \ - $(LIBBASIC_OBJS) $(SECRETS_OBJ) libcli/raw/clirewrite.o +GENTEST_OBJ = torture/gentest.o torture/torture_util.o $(LIBSMB_OBJS) $(CONFIG_OBJS) \ + $(LIBBASIC_OBJS) libcli/raw/clirewrite.o -MASKTEST_OBJ = torture/masktest.o $(LIBSMB_OBJS) $(PARAM_OBJ) \ - $(LIBBASIC_OBJS) $(SECRETS_OBJ) libcli/raw/clirewrite.o +MASKTEST_OBJ = torture/masktest.o $(LIBSMB_OBJS) $(CONFIG_OBJS) \ + $(LIBBASIC_OBJS) libcli/raw/clirewrite.o -LOCKTEST_OBJ = torture/locktest.o $(LIBSMB_OBJS) $(PARAM_OBJ) \ - $(LIBBASIC_OBJS) $(SECRETS_OBJ) libcli/raw/clirewrite.o +LOCKTEST_OBJ = torture/locktest.o $(LIBSMB_OBJS) $(CONFIG_OBJS) \ + $(LIBBASIC_OBJS) libcli/raw/clirewrite.o NDRDUMP_OBJ = utils/ndrdump.o utils/rewrite.o \ - $(LIBSMB_OBJS) $(PARAM_OBJ) $(LIBBASIC_OBJS) $(SECRETS_OBJ) + $(LIBSMB_OBJS) $(CONFIG_OBJS) $(LIBBASIC_OBJS) PROTO_OBJ = $(SMBD_OBJ_SRV) \ $(SMBD_OBJ_MAIN) $(PROCESS_MODEL_OBJS) \ $(LIBSMB_OBJS) \ $(TORTURE_OBJS) \ - $(PARAM_OBJ) $(SECRETS_OBJ) \ - $(READLINE_OBJ) $(CLIENT_OBJ1) \ - $(LIBBASIC_OBJS) $(POPT_LIB_OBJ) + $(CONFIG_OBJS) \ + $(LIBCMDLINE_OBJS) $(CLIENT_OBJ1) \ + $(LIBBASIC_OBJS) ###################################################################### # now the rules... @@ -311,7 +305,7 @@ bin/smbd@EXEEXT@: $(SMBD_OBJS) bin/.dummy bin/smbclient@EXEEXT@: $(CLIENT_OBJ) bin/.dummy @echo Linking $@ - @$(CC) $(FLAGS) -o $@ $(CLIENT_OBJ) $(LDFLAGS) $(TERMLDFLAGS) $(TERMLIBS) $(LIBS) + @$(CC) $(FLAGS) -o $@ $(CLIENT_OBJ) $(LDFLAGS) $(LIBS) $(LIBCMDLINE_LIBS) bin/smbtorture@EXEEXT@: $(SMBTORTURE_OBJS) bin/.dummy @echo Linking $@ diff --git a/source4/build/m4/rewrite.m4 b/source4/build/m4/rewrite.m4 index e97c5037fb..6f18d171e3 100644 --- a/source4/build/m4/rewrite.m4 +++ b/source4/build/m4/rewrite.m4 @@ -447,77 +447,6 @@ fi AC_FUNC_MEMCMP -############################################### -# Readline included by default unless explicitly asked not to -test "${with_readline+set}" != "set" && with_readline=yes - -# test for where we get readline() from -AC_MSG_CHECKING(whether to use readline) -AC_ARG_WITH(readline, -[ --with-readline[=DIR] Look for readline include/libs in DIR (default=auto) ], -[ case "$with_readline" in - yes) - AC_MSG_RESULT(yes) - - AC_CHECK_HEADERS(readline.h history.h readline/readline.h) - AC_CHECK_HEADERS(readline/history.h) - - AC_CHECK_HEADERS(readline.h readline/readline.h,[ - for termlib in ncurses curses termcap terminfo termlib tinfo; do - AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break]) - done - AC_CHECK_LIB(readline, rl_callback_handler_install, - [TERMLIBS="-lreadline $TERMLIBS" - AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline]) - break], [TERMLIBS=], $TERMLIBS)]) - ;; - no) - AC_MSG_RESULT(no) - ;; - *) - AC_MSG_RESULT(yes) - - # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at - # alternate readline path - _ldflags=${LDFLAGS} - _cppflags=${CPPFLAGS} - - # Add additional search path - LDFLAGS="-L$with_readline/lib $LDFLAGS" - CPPFLAGS="-I$with_readline/include $CPPFLAGS" - - AC_CHECK_HEADERS(readline.h history.h readline/readline.h) - AC_CHECK_HEADERS(readline/history.h) - - AC_CHECK_HEADERS(readline.h readline/readline.h,[ - for termlib in ncurses curses termcap terminfo termlib; do - AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break]) - done - AC_CHECK_LIB(readline, rl_callback_handler_install, - [TERMLDFLAGS="-L$with_readline/lib" - TERMCPPFLAGS="-I$with_readline/include" - CPPFLAGS="-I$with_readline/include $CPPFLAGS" - TERMLIBS="-lreadline $TERMLIBS" - AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline]) - break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)]) - - LDFLAGS=$_ldflags - ;; - esac], - AC_MSG_RESULT(no) -) -AC_SUBST(TERMLIBS) -AC_SUBST(TERMLDFLAGS) - -# The readline API changed slightly from readline3 to readline4, so -# code will generate warnings on one of them unless we have a few -# special cases. -AC_CHECK_LIB(readline, rl_completion_matches, - [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1, - [Do we have rl_completion_matches?])], - [], - [$TERMLIBS]) - # The following test taken from the cvs sources # If we can't find connect, try looking in -lsocket, -lnsl, and -linet. # The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has diff --git a/source4/configure.in b/source4/configure.in index 1e88601d43..a7fe7d9cda 100644 --- a/source4/configure.in +++ b/source4/configure.in @@ -198,6 +198,8 @@ sinclude(nsswitch/config.m4) sinclude(lib/popt/config.m4) sinclude(lib/iconv.m4) sinclude(lib/basic.m4) +sinclude(lib/cmdline/config.m4) +sinclude(param/config.m4) sinclude(libcli/config.m4) sinclude(librpc/config.m4) sinclude(libcli/libsmb.m4) diff --git a/source4/lib/cmdline/config.m4 b/source4/lib/cmdline/config.m4 new file mode 100644 index 0000000000..6e9a8f4508 --- /dev/null +++ b/source4/lib/cmdline/config.m4 @@ -0,0 +1,79 @@ +################################################# + +############################################### +# Readline included by default unless explicitly asked not to +test "${with_readline+set}" != "set" && with_readline=yes + +# test for where we get readline() from +AC_MSG_CHECKING(whether to use readline) +AC_ARG_WITH(readline, +[ --with-readline[=DIR] Look for readline include/libs in DIR (default=auto) ], +[ case "$with_readline" in + yes) + AC_MSG_RESULT(yes) + + AC_CHECK_HEADERS(readline.h history.h readline/readline.h) + AC_CHECK_HEADERS(readline/history.h) + + AC_CHECK_HEADERS(readline.h readline/readline.h,[ + for termlib in ncurses curses termcap terminfo termlib tinfo; do + AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break]) + done + AC_CHECK_LIB(readline, rl_callback_handler_install, + [TERMLIBS="-lreadline $TERMLIBS" + AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline]) + break], [TERMLIBS=], $TERMLIBS)]) + ;; + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + + # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at + # alternate readline path + _ldflags=${LDFLAGS} + _cppflags=${CPPFLAGS} + + # Add additional search path + LDFLAGS="-L$with_readline/lib $LDFLAGS" + CPPFLAGS="-I$with_readline/include $CPPFLAGS" + + AC_CHECK_HEADERS(readline.h history.h readline/readline.h) + AC_CHECK_HEADERS(readline/history.h) + + AC_CHECK_HEADERS(readline.h readline/readline.h,[ + for termlib in ncurses curses termcap terminfo termlib; do + AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break]) + done + AC_CHECK_LIB(readline, rl_callback_handler_install, + [TERMLDFLAGS="-L$with_readline/lib" + TERMCPPFLAGS="-I$with_readline/include" + LDFLAGS="-L$with_readline/lib $LDFLAGS" + CPPFLAGS="-I$with_readline/include $CPPFLAGS" + TERMLIBS="-lreadline $TERMLIBS" + AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline]) + break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)]) + + ;; + esac], + AC_MSG_RESULT(no) +) + +# The readline API changed slightly from readline3 to readline4, so +# code will generate warnings on one of them unless we have a few +# special cases. +AC_CHECK_LIB(readline, rl_completion_matches, + [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1, + [Do we have rl_completion_matches?])], + [], + [$TERMLIBS]) + +TMP_LIBCMDLINE_OBJS="lib/cmdline/readline.o lib/cmdline/popt_common.o" +TMP_LIBCMDLINE_LIBS="$TERMLIBS" + +SMB_SUBSYSTEM(LIBCMDLINE,[], + [${TMP_LIBCMDLINE_OBJS}], + [], + [], + [${TMP_LIBCMDLINE_LIBS}]) diff --git a/source4/lib/popt_common.c b/source4/lib/popt_common.c deleted file mode 100644 index 1b8e3bd93e..0000000000 --- a/source4/lib/popt_common.c +++ /dev/null @@ -1,334 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Common popt routines - - Copyright (C) Tim Potter 2001,2002 - Copyright (C) Jelmer Vernooij 2002,2003 - - 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 02139, USA. -*/ - -#include "includes.h" - -/* Handle command line options: - * -d,--debuglevel - * -s,--configfile - * -O,--socket-options - * -V,--version - * -l,--log-base - * -n,--netbios-name - * -W,--workgroup - * -i,--scope - */ - -extern pstring user_socket_options; -extern BOOL AllowDebugChange; - -struct user_auth_info cmdline_auth_info; - -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_cmdline("log file", logfile); - return; - } - - switch(opt->val) { - case 'd': - lp_set_cmdline("log level", arg); - break; - - case 'V': - printf( "Version %s\n", SAMBA_VERSION_STRING ); - exit(0); - break; - - case 's': - if (arg) { - pstrcpy(dyn_CONFIGFILE, arg); - } - break; - - case 'l': - if (arg) { - pstr_sprintf(logfile, "%s/log.%s", arg, pname); - lp_set_cmdline("log file", logfile); - } - break; - - case 'W': - lp_set_cmdline("workgroup", arg); - break; - - case 'n': - lp_set_cmdline("netbios name", arg); - break; - - case 'i': - lp_set_cmdline("netbios scope", arg); - break; - - case 'm': - lp_set_cmdline("max protocol", arg); - break; - } -} - -struct poptOption popt_common_connection[] = { - { NULL, 0, POPT_ARG_CALLBACK, popt_common_callback }, - { "socket-options", 'O', POPT_ARG_STRING, NULL, 'O', "socket options to use", - "SOCKETOPTIONS" }, - { "netbiosname", 'n', POPT_ARG_STRING, NULL, 'n', "Primary netbios name", "NETBIOSNAME" }, - { "workgroup", 'W', POPT_ARG_STRING, NULL, 'W', "Set the workgroup name", "WORKGROUP" }, - { "scope", 'i', POPT_ARG_STRING, NULL, 'i', "Use this Netbios scope", "SCOPE" }, - { "maxprotocol", 'm', POPT_ARG_STRING, NULL, 'm', "Set max protocol level", "MAXPROTOCOL" }, - POPT_TABLEEND -}; - -struct poptOption popt_common_samba[] = { - { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE, popt_common_callback }, - { "debuglevel", 'd', POPT_ARG_STRING, NULL, 'd', "Set debug level", "DEBUGLEVEL" }, - { "configfile", 's', POPT_ARG_STRING, NULL, 's', "Use alternative configuration file", "CONFIGFILE" }, - { "log-basename", 'l', POPT_ARG_STRING, NULL, 'l', "Basename for log/debug files", "LOGFILEBASE" }, - { "version", 'V', POPT_ARG_NONE, NULL, 'V', "Print version" }, - POPT_TABLEEND -}; - -struct poptOption popt_common_version[] = { - { NULL, 0, POPT_ARG_CALLBACK, popt_common_callback }, - { "version", 'V', POPT_ARG_NONE, NULL, 'V', "Print version" }, - POPT_TABLEEND -}; - - - -/**************************************************************************** - * get a password from a a file or file descriptor - * exit on failure - * ****************************************************************************/ -static void get_password_file(struct user_auth_info *a) -{ - int fd = -1; - char *p; - BOOL close_it = False; - pstring spec; - char pass[128]; - - if ((p = getenv("PASSWD_FD")) != NULL) { - pstrcpy(spec, "descriptor "); - pstrcat(spec, p); - sscanf(p, "%d", &fd); - close_it = False; - } else if ((p = getenv("PASSWD_FILE")) != NULL) { - fd = sys_open(p, O_RDONLY, 0); - pstrcpy(spec, p); - if (fd < 0) { - fprintf(stderr, "Error opening PASSWD_FILE %s: %s\n", - spec, strerror(errno)); - exit(1); - } - close_it = True; - } - - for(p = pass, *p = '\0'; /* ensure that pass is null-terminated */ - p && p - pass < sizeof(pass);) { - switch (read(fd, p, 1)) { - case 1: - if (*p != '\n' && *p != '\0') { - *++p = '\0'; /* advance p, and null-terminate pass */ - break; - } - case 0: - if (p - pass) { - *p = '\0'; /* null-terminate it, just in case... */ - p = NULL; /* then force the loop condition to become false */ - break; - } else { - fprintf(stderr, "Error reading password from file %s: %s\n", - spec, "empty password\n"); - exit(1); - } - - default: - fprintf(stderr, "Error reading password from file %s: %s\n", - spec, strerror(errno)); - exit(1); - } - } - pstrcpy(a->password, pass); - if (close_it) - close(fd); -} - -static void get_credentials_file(const char *file, struct user_auth_info *info) -{ - XFILE *auth; - fstring buf; - uint16 len = 0; - char *ptr, *val, *param; - - if ((auth=x_fopen(file, O_RDONLY, 0)) == NULL) - { - /* fail if we can't open the credentials file */ - d_printf("ERROR: Unable to open credentials file!\n"); - exit(-1); - } - - while (!x_feof(auth)) - { - /* get a line from the file */ - if (!x_fgets(buf, sizeof(buf), auth)) - continue; - len = strlen(buf); - - if ((len) && (buf[len-1]=='\n')) - { - buf[len-1] = '\0'; - len--; - } - if (len == 0) - continue; - - /* break up the line into parameter & value. - * will need to eat a little whitespace possibly */ - param = buf; - if (!(ptr = strchr_m (buf, '='))) - continue; - - val = ptr+1; - *ptr = '\0'; - - /* eat leading white space */ - while ((*val!='\0') && ((*val==' ') || (*val=='\t'))) - val++; - - if (strwicmp("password", param) == 0) - { - pstrcpy(info->password, val); - info->got_pass = True; - } - else if (strwicmp("username", param) == 0) - pstrcpy(info->username, val); -#if 0 - else if (strwicmp("domain", param) == 0) - set_global_myworkgroup(val); -#endif - memset(buf, 0, sizeof(buf)); - } - x_fclose(auth); -} - -/* Handle command line options: - * -U,--user - * -A,--authentication-file - * -k,--use-kerberos - * -N,--no-pass - */ - - -static void popt_common_credentials_callback(poptContext con, - enum poptCallbackReason reason, - const struct poptOption *opt, - const char *arg, const void *data) -{ - char *p; - - if (reason == POPT_CALLBACK_REASON_PRE) { - cmdline_auth_info.use_kerberos = False; - cmdline_auth_info.got_pass = False; - pstrcpy(cmdline_auth_info.username, "GUEST"); - - if (getenv("LOGNAME"))pstrcpy(cmdline_auth_info.username,getenv("LOGNAME")); - - if (getenv("USER")) { - pstrcpy(cmdline_auth_info.username,getenv("USER")); - - if ((p = strchr_m(cmdline_auth_info.username,'%'))) { - *p = 0; - pstrcpy(cmdline_auth_info.password,p+1); - cmdline_auth_info.got_pass = True; - memset(strchr_m(getenv("USER"),'%')+1,'X',strlen(cmdline_auth_info.password)); - } - } - - if (getenv("PASSWD")) { - pstrcpy(cmdline_auth_info.password,getenv("PASSWD")); - cmdline_auth_info.got_pass = True; - } - - if (getenv("PASSWD_FD") || getenv("PASSWD_FILE")) { - get_password_file(&cmdline_auth_info); - cmdline_auth_info.got_pass = True; - } - - return; - } - - switch(opt->val) { - case 'U': - { - char *lp; - - pstrcpy(cmdline_auth_info.username,arg); - if ((lp=strchr_m(cmdline_auth_info.username,'%'))) { - *lp = 0; - pstrcpy(cmdline_auth_info.password,lp+1); - cmdline_auth_info.got_pass = True; - memset(strchr_m(arg,'%')+1,'X',strlen(cmdline_auth_info.password)); - } - } - break; - - case 'A': - get_credentials_file(arg, &cmdline_auth_info); - break; - - case 'k': -#ifndef HAVE_KRB5 - d_printf("No kerberos support compiled in\n"); - exit(1); -#else - cmdline_auth_info.use_kerberos = True; - cmdline_auth_info.got_pass = True; -#endif - break; - } -} - - - -struct poptOption popt_common_credentials[] = { - { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE, popt_common_credentials_callback }, - { "user", 'U', POPT_ARG_STRING, NULL, 'U', "Set the network username", "USERNAME" }, - { "no-pass", 'N', POPT_ARG_NONE, &cmdline_auth_info.got_pass, True, "Don't ask for a password" }, - { "kerberos", 'k', POPT_ARG_NONE, &cmdline_auth_info.use_kerberos, True, "Use kerberos (active directory) authentication" }, - { "authentication-file", 'A', POPT_ARG_STRING, NULL, 'A', "Get the credentials from a file", "FILE" }, - POPT_TABLEEND -}; diff --git a/source4/lib/readline.c b/source4/lib/readline.c deleted file mode 100644 index c5da88b3e0..0000000000 --- a/source4/lib/readline.c +++ /dev/null @@ -1,159 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Samba readline wrapper implementation - Copyright (C) Simo Sorce 2001 - Copyright (C) Andrew Tridgell 2001 - - 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 02139, USA. -*/ - -#include "includes.h" - -#ifdef HAVE_LIBREADLINE -# ifdef HAVE_READLINE_READLINE_H -# include <readline/readline.h> -# ifdef HAVE_READLINE_HISTORY_H -# include <readline/history.h> -# endif -# else -# ifdef HAVE_READLINE_H -# include <readline.h> -# ifdef HAVE_HISTORY_H -# include <history.h> -# endif -# else -# undef HAVE_LIBREADLINE -# endif -# endif -#endif - -#ifdef HAVE_NEW_LIBREADLINE -# define RL_COMPLETION_CAST (rl_completion_func_t *) -#else -/* This type is missing from libreadline<4.0 (approximately) */ -# define RL_COMPLETION_CAST -#endif /* HAVE_NEW_LIBREADLINE */ - -/**************************************************************************** - Display the prompt and wait for input. Call callback() regularly -****************************************************************************/ - -static char *smb_readline_replacement(const char *prompt, void (*callback)(void), - char **(completion_fn)(const char *text, int start, int end)) -{ - fd_set fds; - static pstring line; - struct timeval timeout; - int fd = x_fileno(x_stdin); - char *ret; - - do_debug("%s", prompt); - - while (1) { - timeout.tv_sec = 5; - timeout.tv_usec = 0; - - FD_ZERO(&fds); - FD_SET(fd,&fds); - - if (sys_select_intr(fd+1,&fds,NULL,NULL,&timeout) == 1) { - ret = x_fgets(line, sizeof(line), x_stdin); - return ret; - } - if (callback) - callback(); - } -} - -/**************************************************************************** - Display the prompt and wait for input. Call callback() regularly. -****************************************************************************/ - -char *smb_readline(const char *prompt, void (*callback)(void), - char **(completion_fn)(const char *text, int start, int end)) -{ -#if HAVE_LIBREADLINE - if (isatty(x_fileno(x_stdin))) { - char *ret; - - /* Aargh! Readline does bizzare things with the terminal width - that mucks up expect(1). Set CLI_NO_READLINE in the environment - to force readline not to be used. */ - - if (getenv("CLI_NO_READLINE")) - return smb_readline_replacement(prompt, callback, completion_fn); - - if (completion_fn) { - /* The callback prototype has changed slightly between - different versions of Readline, so the same function - works in all of them to date, but we get compiler - warnings in some. */ - rl_attempted_completion_function = RL_COMPLETION_CAST completion_fn; - } - - if (callback) - rl_event_hook = (Function *)callback; - ret = readline(prompt); - if (ret && *ret) - add_history(ret); - return ret; - } else -#endif - return smb_readline_replacement(prompt, callback, completion_fn); -} - -/**************************************************************************** - * return line buffer text - ****************************************************************************/ -const char *smb_readline_get_line_buffer(void) -{ -#if defined(HAVE_LIBREADLINE) - return rl_line_buffer; -#else - return NULL; -#endif -} - -/**************************************************************************** - * set completion append character - ***************************************************************************/ -void smb_readline_ca_char(char c) -{ -#if defined(HAVE_LIBREADLINE) - rl_completion_append_character = c; -#endif -} - - -/**************************************************************************** -history -****************************************************************************/ -int cmd_history(void) -{ -#if defined(HAVE_LIBREADLINE) - HIST_ENTRY **hlist; - int i; - - hlist = history_list(); - - for (i = 0; hlist && hlist[i]; i++) { - DEBUG(0, ("%d: %s\n", i, hlist[i]->line)); - } -#else - DEBUG(0,("no history without readline support\n")); -#endif - - return 0; -} diff --git a/source4/param/config.m4 b/source4/param/config.m4 new file mode 100644 index 0000000000..b93886e837 --- /dev/null +++ b/source4/param/config.m4 @@ -0,0 +1,4 @@ +################################################# + +SMB_SUBSYSTEM(CONFIG,[dynconfig.o], + [param/loadparm.o param/params.o passdb/secrets.o])
\ No newline at end of file |