diff options
author | Christof Schmitt <cs@samba.org> | 2018-08-13 15:39:08 -0700 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2018-10-10 15:51:53 +0200 |
commit | c247ae0169e572bc22f99a06e71cb0dc54260924 (patch) | |
tree | 61500e9a97e32dc12b4b50bee68fde643fd9587a /source3 | |
parent | 7791f204c7158650e93eb46abb598141fc6f4d6d (diff) | |
download | samba-c247ae0169e572bc22f99a06e71cb0dc54260924.tar.gz |
s3:lib: Move popt_common_credentials to separate file
This is only used by command line utilities and has additional
dependencies. Move to a separate file to contain the dependencies to the
command line tools.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13465
Signed-off-by: Christof Schmitt <cs@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
(cherry picked from commit b7464fd89bc22b71c82bbaa424bcbfcf947db651)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/client/client.c | 2 | ||||
-rw-r--r-- | source3/include/popt_common.h | 10 | ||||
-rw-r--r-- | source3/include/popt_common_cmdline.h | 47 | ||||
-rw-r--r-- | source3/lib/popt_common.c | 208 | ||||
-rw-r--r-- | source3/lib/popt_common_cmdline.c | 241 | ||||
-rw-r--r-- | source3/rpcclient/cmd_spoolss.c | 2 | ||||
-rw-r--r-- | source3/rpcclient/rpcclient.c | 2 | ||||
-rw-r--r-- | source3/rpcclient/wscript_build | 2 | ||||
-rw-r--r-- | source3/utils/net.c | 2 | ||||
-rw-r--r-- | source3/utils/regedit.c | 2 | ||||
-rw-r--r-- | source3/utils/smbcacls.c | 2 | ||||
-rw-r--r-- | source3/utils/smbcquotas.c | 2 | ||||
-rw-r--r-- | source3/utils/smbget.c | 2 | ||||
-rw-r--r-- | source3/utils/smbtree.c | 2 | ||||
-rw-r--r-- | source3/utils/wscript_build | 14 | ||||
-rw-r--r-- | source3/wscript_build | 9 |
16 files changed, 313 insertions, 236 deletions
diff --git a/source3/client/client.c b/source3/client/client.c index 25ba01d6216..2f193459d5d 100644 --- a/source3/client/client.c +++ b/source3/client/client.c @@ -23,7 +23,7 @@ #include "includes.h" #include "system/filesys.h" -#include "popt_common.h" +#include "popt_common_cmdline.h" #include "rpc_client/cli_pipe.h" #include "client/client_proto.h" #include "client/clitar_proto.h" diff --git a/source3/include/popt_common.h b/source3/include/popt_common.h index a8c778473e9..e001a5369b7 100644 --- a/source3/include/popt_common.h +++ b/source3/include/popt_common.h @@ -21,7 +21,6 @@ #define _POPT_COMMON_H #include <popt.h> -#include "auth_info.h" /* Common popt structures */ extern struct poptOption popt_common_samba[]; @@ -41,19 +40,10 @@ extern const struct poptOption popt_common_dynconfig[]; #define POPT_COMMON_CONNECTION { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_connection, 0, "Connection options:", NULL }, #define POPT_COMMON_VERSION { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_version, 0, "Common samba options:", NULL }, #define POPT_COMMON_CONFIGFILE { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_configfile, 0, "Common samba config:", NULL }, -#define POPT_COMMON_CREDENTIALS { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_credentials, 0, "Authentication options:", NULL }, #define POPT_COMMON_DYNCONFIG { NULL, 0, POPT_ARG_INCLUDE_TABLE, \ discard_const_p(poptOption, popt_common_dynconfig), 0, \ "Build-time configuration overrides:", NULL }, #define POPT_COMMON_DEBUGLEVEL { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_debuglevel, 0, "Common samba debugging:", NULL }, #define POPT_COMMON_OPTION { NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_option, 0, "Common samba commandline config:", NULL }, -struct user_auth_info *popt_get_cmdline_auth_info(void); -void popt_free_cmdline_auth_info(void); - -void popt_common_credentials_set_ignore_missing_conf(void); -void popt_common_credentials_set_delay_post(void); -void popt_common_credentials_post(void); -void popt_burn_cmdline_password(int argc, char *argv[]); - #endif /* _POPT_COMMON_H */ diff --git a/source3/include/popt_common_cmdline.h b/source3/include/popt_common_cmdline.h new file mode 100644 index 00000000000..21130cff071 --- /dev/null +++ b/source3/include/popt_common_cmdline.h @@ -0,0 +1,47 @@ +/* + Unix SMB/CIFS implementation. + Common popt arguments + Copyright (C) Jelmer Vernooij 2003 + Copyright (C) Christof Schmitt 2018 + + 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/>. +*/ + + +#ifndef _POPT_COMMON_CREDENTIALS_H +#define _POPT_COMMON_CREDENTIALS_H + +#include "popt_common.h" + +extern struct poptOption popt_common_credentials[]; +#define POPT_COMMON_CREDENTIALS \ + { \ + NULL, \ + 0, \ + POPT_ARG_INCLUDE_TABLE, \ + popt_common_credentials, \ + 0, \ + "Authentication options:", \ + NULL \ + }, + +struct user_auth_info *popt_get_cmdline_auth_info(void); +void popt_free_cmdline_auth_info(void); + +void popt_common_credentials_set_ignore_missing_conf(void); +void popt_common_credentials_set_delay_post(void); +void popt_common_credentials_post(void); +void popt_burn_cmdline_password(int argc, char *argv[]); + +#endif diff --git a/source3/lib/popt_common.c b/source3/lib/popt_common.c index 454884fbb5c..11db080c82d 100644 --- a/source3/lib/popt_common.c +++ b/source3/lib/popt_common.c @@ -213,211 +213,3 @@ struct poptOption popt_common_option[] = { { "option", 0, POPT_ARG_STRING, NULL, OPT_OPTION, "Set smb.conf option from command line", "name=value" }, POPT_TABLEEND }; - -/* Handle command line options: - * -U,--user - * -A,--authentication-file - * -k,--use-kerberos - * -N,--no-pass - * -S,--signing - * -P --machine-pass - * -e --encrypt - * -C --use-ccache - */ - -static struct user_auth_info *cmdline_auth_info; - -struct user_auth_info *popt_get_cmdline_auth_info(void) -{ - return cmdline_auth_info; -} -void popt_free_cmdline_auth_info(void) -{ - TALLOC_FREE(cmdline_auth_info); -} - -static bool popt_common_credentials_ignore_missing_conf; -static bool popt_common_credentials_delay_post; - -void popt_common_credentials_set_ignore_missing_conf(void) -{ - popt_common_credentials_delay_post = true; -} - -void popt_common_credentials_set_delay_post(void) -{ - popt_common_credentials_delay_post = true; -} - -void popt_common_credentials_post(void) -{ - if (get_cmdline_auth_info_use_machine_account(cmdline_auth_info) && - !set_cmdline_auth_info_machine_account_creds(cmdline_auth_info)) - { - fprintf(stderr, - "Failed to use machine account credentials\n"); - exit(1); - } - - set_cmdline_auth_info_getpass(cmdline_auth_info); - - /* - * When we set the username during the handling of the options passed to - * the binary we haven't loaded the config yet. This means that we - * didnn't take the 'winbind separator' into account. - * - * The username might contain the domain name and thus it hasn't been - * correctly parsed yet. If we have a username we need to set it again - * to run the string parser for the username correctly. - */ - reset_cmdline_auth_info_username(cmdline_auth_info); -} - -static void popt_common_credentials_callback(poptContext con, - enum poptCallbackReason reason, - const struct poptOption *opt, - const char *arg, const void *data) -{ - if (reason == POPT_CALLBACK_REASON_PRE) { - struct user_auth_info *auth_info = - user_auth_info_init(NULL); - if (auth_info == NULL) { - fprintf(stderr, "user_auth_info_init() failed\n"); - exit(1); - } - cmdline_auth_info = auth_info; - return; - } - - if (reason == POPT_CALLBACK_REASON_POST) { - bool ok; - - ok = lp_load_client(get_dyn_CONFIGFILE()); - if (!ok) { - const char *pname = poptGetInvocationName(con); - - fprintf(stderr, "%s: Can't load %s - run testparm to debug it\n", - pname, get_dyn_CONFIGFILE()); - if (!popt_common_credentials_ignore_missing_conf) { - exit(1); - } - } - - load_interfaces(); - - set_cmdline_auth_info_guess(cmdline_auth_info); - - if (popt_common_credentials_delay_post) { - return; - } - - popt_common_credentials_post(); - return; - } - - switch(opt->val) { - case 'U': - set_cmdline_auth_info_username(cmdline_auth_info, arg); - break; - - case 'A': - set_cmdline_auth_info_from_file(cmdline_auth_info, arg); - break; - - case 'k': -#ifndef HAVE_KRB5 - d_printf("No kerberos support compiled in\n"); - exit(1); -#else - set_cmdline_auth_info_use_krb5_ticket(cmdline_auth_info); -#endif - break; - - case 'S': - if (!set_cmdline_auth_info_signing_state(cmdline_auth_info, - arg)) { - fprintf(stderr, "Unknown signing option %s\n", arg ); - exit(1); - } - break; - case 'P': - set_cmdline_auth_info_use_machine_account(cmdline_auth_info); - break; - case 'N': - set_cmdline_auth_info_password(cmdline_auth_info, ""); - break; - case 'e': - set_cmdline_auth_info_smb_encrypt(cmdline_auth_info); - break; - case 'C': - set_cmdline_auth_info_use_ccache(cmdline_auth_info, true); - break; - case 'H': - set_cmdline_auth_info_use_pw_nt_hash(cmdline_auth_info, true); - break; - } -} - -/** - * @brief Burn the commandline password. - * - * This function removes the password from the command line so we - * don't leak the password e.g. in 'ps aux'. - * - * It should be called after processing the options and you should pass down - * argv from main(). - * - * @param[in] argc The number of arguments. - * - * @param[in] argv[] The argument array we will find the array. - */ -void popt_burn_cmdline_password(int argc, char *argv[]) -{ - bool found = false; - char *p = NULL; - int i, ulen = 0; - - for (i = 0; i < argc; i++) { - p = argv[i]; - if (strncmp(p, "-U", 2) == 0) { - ulen = 2; - found = true; - } else if (strncmp(p, "--user", 6) == 0) { - ulen = 6; - found = true; - } - - if (found) { - if (p == NULL) { - return; - } - - if (strlen(p) == ulen) { - continue; - } - - p = strchr_m(p, '%'); - if (p != NULL) { - memset(p, '\0', strlen(p)); - } - found = false; - } - } -} - -struct poptOption popt_common_credentials[] = { - { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE|POPT_CBFLAG_POST, - (void *)popt_common_credentials_callback, 0, NULL }, - { "user", 'U', POPT_ARG_STRING, NULL, 'U', "Set the network username", "USERNAME" }, - { "no-pass", 'N', POPT_ARG_NONE, NULL, 'N', "Don't ask for a password" }, - { "kerberos", 'k', POPT_ARG_NONE, NULL, 'k', "Use kerberos (active directory) authentication" }, - { "authentication-file", 'A', POPT_ARG_STRING, NULL, 'A', "Get the credentials from a file", "FILE" }, - { "signing", 'S', POPT_ARG_STRING, NULL, 'S', "Set the client signing state", "on|off|required" }, - {"machine-pass", 'P', POPT_ARG_NONE, NULL, 'P', "Use stored machine account password" }, - {"encrypt", 'e', POPT_ARG_NONE, NULL, 'e', "Encrypt SMB transport" }, - {"use-ccache", 'C', POPT_ARG_NONE, NULL, 'C', - "Use the winbind ccache for authentication" }, - {"pw-nt-hash", '\0', POPT_ARG_NONE, NULL, 'H', - "The supplied password is the NT hash" }, - POPT_TABLEEND -}; diff --git a/source3/lib/popt_common_cmdline.c b/source3/lib/popt_common_cmdline.c new file mode 100644 index 00000000000..57f77e0868a --- /dev/null +++ b/source3/lib/popt_common_cmdline.c @@ -0,0 +1,241 @@ +/* + Unix SMB/CIFS implementation. + Common popt routines only used by cmdline utils + + Copyright (C) Tim Potter 2001,2002 + Copyright (C) Jelmer Vernooij 2002,2003 + Copyright (C) James Peach 2006 + Copyright (C) Christof Schmitt 2018 + + 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/>. +*/ + +/* Handle command line options: + * -U,--user + * -A,--authentication-file + * -k,--use-kerberos + * -N,--no-pass + * -S,--signing + * -P --machine-pass + * -e --encrypt + * -C --use-ccache + */ + +#include "popt_common_cmdline.h" +#include "includes.h" +#include "auth_info.h" + +static struct user_auth_info *cmdline_auth_info; + +struct user_auth_info *popt_get_cmdline_auth_info(void) +{ + return cmdline_auth_info; +} +void popt_free_cmdline_auth_info(void) +{ + TALLOC_FREE(cmdline_auth_info); +} + +static bool popt_common_credentials_ignore_missing_conf; +static bool popt_common_credentials_delay_post; + +void popt_common_credentials_set_ignore_missing_conf(void) +{ + popt_common_credentials_delay_post = true; +} + +void popt_common_credentials_set_delay_post(void) +{ + popt_common_credentials_delay_post = true; +} + +void popt_common_credentials_post(void) +{ + if (get_cmdline_auth_info_use_machine_account(cmdline_auth_info) && + !set_cmdline_auth_info_machine_account_creds(cmdline_auth_info)) + { + fprintf(stderr, + "Failed to use machine account credentials\n"); + exit(1); + } + + set_cmdline_auth_info_getpass(cmdline_auth_info); + + /* + * When we set the username during the handling of the options passed to + * the binary we haven't loaded the config yet. This means that we + * didn't take the 'winbind separator' into account. + * + * The username might contain the domain name and thus it hasn't been + * correctly parsed yet. If we have a username we need to set it again + * to run the string parser for the username correctly. + */ + reset_cmdline_auth_info_username(cmdline_auth_info); +} + +static void popt_common_credentials_callback(poptContext con, + enum poptCallbackReason reason, + const struct poptOption *opt, + const char *arg, const void *data) +{ + if (reason == POPT_CALLBACK_REASON_PRE) { + struct user_auth_info *auth_info = + user_auth_info_init(NULL); + if (auth_info == NULL) { + fprintf(stderr, "user_auth_info_init() failed\n"); + exit(1); + } + cmdline_auth_info = auth_info; + return; + } + + if (reason == POPT_CALLBACK_REASON_POST) { + bool ok; + + ok = lp_load_client(get_dyn_CONFIGFILE()); + if (!ok) { + const char *pname = poptGetInvocationName(con); + + fprintf(stderr, "%s: Can't load %s - run testparm to debug it\n", + pname, get_dyn_CONFIGFILE()); + if (!popt_common_credentials_ignore_missing_conf) { + exit(1); + } + } + + load_interfaces(); + + set_cmdline_auth_info_guess(cmdline_auth_info); + + if (popt_common_credentials_delay_post) { + return; + } + + popt_common_credentials_post(); + return; + } + + switch(opt->val) { + case 'U': + set_cmdline_auth_info_username(cmdline_auth_info, arg); + break; + + case 'A': + set_cmdline_auth_info_from_file(cmdline_auth_info, arg); + break; + + case 'k': +#ifndef HAVE_KRB5 + d_printf("No kerberos support compiled in\n"); + exit(1); +#else + set_cmdline_auth_info_use_krb5_ticket(cmdline_auth_info); +#endif + break; + + case 'S': + if (!set_cmdline_auth_info_signing_state(cmdline_auth_info, + arg)) { + fprintf(stderr, "Unknown signing option %s\n", arg ); + exit(1); + } + break; + case 'P': + set_cmdline_auth_info_use_machine_account(cmdline_auth_info); + break; + case 'N': + set_cmdline_auth_info_password(cmdline_auth_info, ""); + break; + case 'e': + set_cmdline_auth_info_smb_encrypt(cmdline_auth_info); + break; + case 'C': + set_cmdline_auth_info_use_ccache(cmdline_auth_info, true); + break; + case 'H': + set_cmdline_auth_info_use_pw_nt_hash(cmdline_auth_info, true); + break; + } +} + +/** + * @brief Burn the commandline password. + * + * This function removes the password from the command line so we + * don't leak the password e.g. in 'ps aux'. + * + * It should be called after processing the options and you should pass down + * argv from main(). + * + * @param[in] argc The number of arguments. + * + * @param[in] argv[] The argument array we will find the array. + */ +void popt_burn_cmdline_password(int argc, char *argv[]) +{ + bool found = false; + char *p = NULL; + int i, ulen = 0; + + for (i = 0; i < argc; i++) { + p = argv[i]; + if (strncmp(p, "-U", 2) == 0) { + ulen = 2; + found = true; + } else if (strncmp(p, "--user", 6) == 0) { + ulen = 6; + found = true; + } + + if (found) { + if (p == NULL) { + return; + } + + if (strlen(p) == ulen) { + continue; + } + + p = strchr_m(p, '%'); + if (p != NULL) { + memset(p, '\0', strlen(p)); + } + found = false; + } + } +} + +struct poptOption popt_common_credentials[] = { + { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE|POPT_CBFLAG_POST, + (void *)popt_common_credentials_callback, 0, NULL }, + { "user", 'U', POPT_ARG_STRING, NULL, 'U', + "Set the network username", "USERNAME" }, + { "no-pass", 'N', POPT_ARG_NONE, NULL, 'N', + "Don't ask for a password" }, + { "kerberos", 'k', POPT_ARG_NONE, NULL, 'k', + "Use kerberos (active directory) authentication" }, + { "authentication-file", 'A', POPT_ARG_STRING, NULL, 'A', + "Get the credentials from a file", "FILE" }, + { "signing", 'S', POPT_ARG_STRING, NULL, 'S', + "Set the client signing state", "on|off|required" }, + {"machine-pass", 'P', POPT_ARG_NONE, NULL, 'P', + "Use stored machine account password" }, + {"encrypt", 'e', POPT_ARG_NONE, NULL, 'e', + "Encrypt SMB transport" }, + {"use-ccache", 'C', POPT_ARG_NONE, NULL, 'C', + "Use the winbind ccache for authentication" }, + {"pw-nt-hash", '\0', POPT_ARG_NONE, NULL, 'H', + "The supplied password is the NT hash" }, + POPT_TABLEEND +}; diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index 1d24476e9a5..8d330afdeb0 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -33,7 +33,7 @@ #include "../libcli/security/security_descriptor.h" #include "../libcli/registry/util_reg.h" #include "libsmb/libsmb.h" -#include "popt_common.h" +#include "popt_common_cmdline.h" #define RPCCLIENT_PRINTERNAME(_printername, _cli, _arg) \ { \ diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c index b4e25e6e479..f7e196226cf 100644 --- a/source3/rpcclient/rpcclient.c +++ b/source3/rpcclient/rpcclient.c @@ -21,7 +21,7 @@ #include "includes.h" #include "../libcli/auth/netlogon_creds_cli.h" -#include "popt_common.h" +#include "popt_common_cmdline.h" #include "rpcclient.h" #include "../libcli/auth/libcli_auth.h" #include "../librpc/gen_ndr/ndr_lsa_c.h" diff --git a/source3/rpcclient/wscript_build b/source3/rpcclient/wscript_build index c24a5670db9..11a64f3248a 100644 --- a/source3/rpcclient/wscript_build +++ b/source3/rpcclient/wscript_build @@ -25,7 +25,7 @@ bld.SAMBA3_BINARY('rpcclient', ''', deps=''' talloc - popt_samba3 + popt_samba3_cmdline pdb libsmb smbconf diff --git a/source3/utils/net.c b/source3/utils/net.c index 44daa6088ca..76b8677bf78 100644 --- a/source3/utils/net.c +++ b/source3/utils/net.c @@ -41,7 +41,7 @@ /*****************************************************/ #include "includes.h" -#include "popt_common.h" +#include "popt_common_cmdline.h" #include "utils/net.h" #include "secrets.h" #include "lib/netapi/netapi.h" diff --git a/source3/utils/regedit.c b/source3/utils/regedit.c index 27bd6f8f2c2..20115ae1624 100644 --- a/source3/utils/regedit.c +++ b/source3/utils/regedit.c @@ -18,7 +18,7 @@ */ #include "includes.h" -#include "popt_common.h" +#include "popt_common_cmdline.h" #include "lib/util/data_blob.h" #include "lib/registry/registry.h" #include "regedit.h" diff --git a/source3/utils/smbcacls.c b/source3/utils/smbcacls.c index 0a5eeb31d0b..33eb78c41ec 100644 --- a/source3/utils/smbcacls.c +++ b/source3/utils/smbcacls.c @@ -22,7 +22,7 @@ */ #include "includes.h" -#include "popt_common.h" +#include "popt_common_cmdline.h" #include "rpc_client/cli_pipe.h" #include "../librpc/gen_ndr/ndr_lsa.h" #include "rpc_client/cli_lsarpc.h" diff --git a/source3/utils/smbcquotas.c b/source3/utils/smbcquotas.c index 798b8b6f177..a4b1b8111a5 100644 --- a/source3/utils/smbcquotas.c +++ b/source3/utils/smbcquotas.c @@ -22,7 +22,7 @@ */ #include "includes.h" -#include "popt_common.h" +#include "popt_common_cmdline.h" #include "rpc_client/cli_pipe.h" #include "../librpc/gen_ndr/ndr_lsa.h" #include "rpc_client/cli_lsarpc.h" diff --git a/source3/utils/smbget.c b/source3/utils/smbget.c index e1be42917fb..37462fa131f 100644 --- a/source3/utils/smbget.c +++ b/source3/utils/smbget.c @@ -18,7 +18,7 @@ #include "includes.h" #include "system/filesys.h" -#include "popt_common.h" +#include "popt_common_cmdline.h" #include "libsmbclient.h" static int columns = 0; diff --git a/source3/utils/smbtree.c b/source3/utils/smbtree.c index 3b539ef1045..fb0f165a18d 100644 --- a/source3/utils/smbtree.c +++ b/source3/utils/smbtree.c @@ -20,7 +20,7 @@ */ #include "includes.h" -#include "popt_common.h" +#include "popt_common_cmdline.h" #include "rpc_client/cli_pipe.h" #include "../librpc/gen_ndr/ndr_srvsvc_c.h" #include "libsmb/libsmb.h" diff --git a/source3/utils/wscript_build b/source3/utils/wscript_build index 93e6abaac0d..67bb87e7a74 100644 --- a/source3/utils/wscript_build +++ b/source3/utils/wscript_build @@ -27,7 +27,7 @@ bld.SAMBA3_BINARY('smbtree', smbconf libsmb msrpc3 - popt_samba3 + popt_samba3_cmdline RPC_NDR_SRVSVC''') bld.SAMBA3_BINARY('smbpasswd', @@ -52,7 +52,7 @@ bld.SAMBA3_BINARY('smbget', source='smbget.c', deps=''' talloc - popt_samba3 + popt_samba3_cmdline smbclient''') bld.SAMBA3_BINARY('nmblookup', @@ -67,7 +67,7 @@ bld.SAMBA3_BINARY('smbcacls', source='smbcacls.c ../lib/util_sd.c', deps=''' talloc - popt_samba3 + popt_samba3_cmdline msrpc3 libcli_lsa3 krb5samba''') @@ -76,7 +76,7 @@ bld.SAMBA3_BINARY('smbcquotas', source='smbcquotas.c', deps=''' talloc - popt_samba3 + popt_samba3_cmdline libsmb msrpc3 libcli_lsa3''') @@ -150,7 +150,9 @@ bld.SAMBA3_BINARY('samba-regedit', regedit_wrap.c regedit_treeview.c regedit_valuelist.c regedit_dialog.c regedit_hexedit.c regedit_list.c""", - deps='ncurses menu panel form registry smbconf popt_samba3', + deps=''' + ncurses menu panel form registry smbconf popt_samba3_cmdline + ''', enabled=bld.env.build_regedit) bld.SAMBA3_BINARY('testparm', @@ -217,7 +219,7 @@ bld.SAMBA3_BINARY('net', netapi addns samba_intl - popt_samba3 + popt_samba3_cmdline pdb libsmb smbconf diff --git a/source3/wscript_build b/source3/wscript_build index c7c69a9bee1..5ecf23d531d 100644 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -268,7 +268,12 @@ bld.SAMBA3_SUBSYSTEM('REG_FULL', bld.SAMBA3_LIBRARY('popt_samba3', source='lib/popt_common.c', - deps='popt samba-util util_cmdline', + deps='popt samba-util smbconf', + private_library=True) + +bld.SAMBA3_LIBRARY('popt_samba3_cmdline', + source='lib/popt_common_cmdline.c', + deps='popt_samba3 util_cmdline', private_library=True) bld.SAMBA3_LIBRARY('util_cmdline', @@ -1094,7 +1099,7 @@ bld.SAMBA3_BINARY('client/smbclient', ''', deps=''' talloc - popt_samba3 + popt_samba3_cmdline smbconf ndr-standard SMBREADLINE |