From b7464fd89bc22b71c82bbaa424bcbfcf947db651 Mon Sep 17 00:00:00 2001 From: Christof Schmitt Date: Mon, 13 Aug 2018 15:39:08 -0700 Subject: [PATCH] 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 Reviewed-by: Ralph Boehme --- source3/client/client.c | 2 +- source3/include/popt_common.h | 10 -- source3/include/popt_common_cmdline.h | 47 +++++ source3/lib/popt_common.c | 208 ---------------------- source3/lib/popt_common_cmdline.c | 241 ++++++++++++++++++++++++++ source3/rpcclient/cmd_spoolss.c | 2 +- source3/rpcclient/rpcclient.c | 2 +- source3/rpcclient/wscript_build | 2 +- source3/utils/net.c | 2 +- source3/utils/regedit.c | 2 +- source3/utils/smbcacls.c | 2 +- source3/utils/smbcquotas.c | 2 +- source3/utils/smbget.c | 2 +- source3/utils/smbtree.c | 2 +- source3/utils/wscript_build | 14 +- source3/wscript_build | 9 +- 16 files changed, 313 insertions(+), 236 deletions(-) create mode 100644 source3/include/popt_common_cmdline.h create mode 100644 source3/lib/popt_common_cmdline.c diff --git a/source3/client/client.c b/source3/client/client.c index fc6d9a31c5ba..e8faed55dc4a 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 a8c778473e94..e001a5369b7b 100644 --- a/source3/include/popt_common.h +++ b/source3/include/popt_common.h @@ -21,7 +21,6 @@ #define _POPT_COMMON_H #include -#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 000000000000..21130cff0716 --- /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 . +*/ + + +#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 454884fbb5c5..11db080c82d7 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 000000000000..57f77e0868aa --- /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 . +*/ + +/* 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 1d24476e9a5e..8d330afdeb0c 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 b4e25e6e4792..f7e196226cff 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 c24a5670db93..11a64f3248ad 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 69564f65232e..3c095d0bc4ad 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 27bd6f8f2c2c..20115ae16243 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 0a5eeb31d0bd..33eb78c41ec4 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 798b8b6f1778..a4b1b8111a58 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 e1be42917fbe..37462fa131f7 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 3b539ef10455..fb0f165a18d7 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 93e6abaac0d2..67bb87e7a747 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 b532a3bec772..d96c03078e1b 100644 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -265,7 +265,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', @@ -1090,7 +1095,7 @@ bld.SAMBA3_BINARY('client/smbclient', ''', deps=''' talloc - popt_samba3 + popt_samba3_cmdline smbconf ndr-standard SMBREADLINE -- 2.34.1