[SCM] Samba Shared Repository - branch master updated
Günther Deschner
gd at samba.org
Wed Mar 24 02:08:01 UTC 2021
The branch, master has been updated
via c871c224611 s3:netapi: Add libnetapi_set_creds()
via 6968a325d9d s3:netapi: Get rid of set_cmdline_auth_info_*()
via 4e82150dc14 auth:creds: Use our own cli_credentials_set_cmdline_callbacks()
via 9e5ac70a7e4 auth:creds: Add command line function for standard password callback
via ca57356b78f s4:lib:cmdline: Rename cli_credentials_set_cmdline_callbacks()
via 3f3093933a2 s3:netapi: Remove use_ccache from 'struct libnetapi_ctx'
via 67d49ac1480 s3:netapi: Remove use_kerberos from struct libnetapi_ctx
via dd7adbfa8f2 s3:netapi: Remove workgroup from 'struct libnetapi_ctx'
via 51d5bebcc15 s3:netapi: Remove password from 'struct libnetapi_ctx'
via d94053f9d8b s3:netapi: Remove username from 'struct libnetapi_ctx'
via fd78554d11a s3:netapi: Use public functions for username/password
via 0aeca4e5a13 s3:netapi: Get username/password from cli_credentials in joindomain.c
via 3506800d3ef s3:netapi: Get username/password from cli_credentials in netapi.c
via 9285e64a623 s3:netapi: Fill also cli_credentials with netapi setters
via 7bb70f701e4 s3:netapi: Add a cli_credentials pointer to struct libnetapi_ctx
via 517f94f5bff s3:netapi: Remove unused ctx->krb5_cc_env
via e79b067e239 s3:netapi: Make 'struct libnetapi_ctx' opaque
via bcc3945e538 s3:netapi: Use public getters in getjoinableous example
via 44ef7f96e16 s3:netapi: Use public getters in remote_machine example
via c9222ab8388 s3:netapi: Implement public libnetapi_get_(username|password) functions
from 17283de8fd9 netcmd: Fix typos in offline domain backup test
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit c871c224611296ee922a508129913aca93a38a16
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 13:34:15 2021 +0100
s3:netapi: Add libnetapi_set_creds()
This will be used by the 'net' command in future!
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
Autobuild-User(master): Günther Deschner <gd at samba.org>
Autobuild-Date(master): Wed Mar 24 02:07:20 UTC 2021 on sn-devel-184
commit 6968a325d9d5c9d68634b10d9ee080004865bcd8
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 13:49:27 2021 +0100
s3:netapi: Get rid of set_cmdline_auth_info_*()
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit 4e82150dc14cb8852a7a20c1d57b0db4a4cf82e1
Author: Andreas Schneider <asn at samba.org>
Date: Thu Dec 3 17:07:53 2020 +0100
auth:creds: Use our own cli_credentials_set_cmdline_callbacks()
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit 9e5ac70a7e49ecd0e61e9546ccdf0ad863f1177a
Author: Andreas Schneider <asn at samba.org>
Date: Wed Aug 7 11:36:28 2019 +0200
auth:creds: Add command line function for standard password callback
Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit ca57356b78f095c20685c4b510d20b1efedb5882
Author: Andreas Schneider <asn at samba.org>
Date: Tue Mar 23 16:27:38 2021 +0100
s4:lib:cmdline: Rename cli_credentials_set_cmdline_callbacks()
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit 3f3093933a2341da5329647b843ef8f06fc9e30b
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 13:39:54 2021 +0100
s3:netapi: Remove use_ccache from 'struct libnetapi_ctx'
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit 67d49ac14805d6cb6fbc87904173aaeaf5f859c5
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 13:39:54 2021 +0100
s3:netapi: Remove use_kerberos from struct libnetapi_ctx
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit dd7adbfa8f277932eeed17eceaaa7713fc23829b
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 11:37:50 2021 +0100
s3:netapi: Remove workgroup from 'struct libnetapi_ctx'
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit 51d5bebcc156ee9b93937deefc534e44911245a7
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 11:37:03 2021 +0100
s3:netapi: Remove password from 'struct libnetapi_ctx'
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit d94053f9d8b1fdce61e90d3942e75b02e2d3209c
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 11:36:37 2021 +0100
s3:netapi: Remove username from 'struct libnetapi_ctx'
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit fd78554d11a60c75c0e6d2c8606a82bc20526c8a
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 11:14:39 2021 +0100
s3:netapi: Use public functions for username/password
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit 0aeca4e5a131c38328c7768e173b845f594c3470
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 11:08:57 2021 +0100
s3:netapi: Get username/password from cli_credentials in joindomain.c
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit 3506800d3effca667235eabf185a93274cc78901
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 11:12:09 2021 +0100
s3:netapi: Get username/password from cli_credentials in netapi.c
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit 9285e64a623c1a9a65e6d74ef26bf48d25d2be6b
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 10:57:10 2021 +0100
s3:netapi: Fill also cli_credentials with netapi setters
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit 7bb70f701e49e11d41583369737522f3db9b9382
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 10:43:26 2021 +0100
s3:netapi: Add a cli_credentials pointer to struct libnetapi_ctx
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit 517f94f5bff154bb73b46645c0beb74350450cb1
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 11:00:05 2021 +0100
s3:netapi: Remove unused ctx->krb5_cc_env
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit e79b067e2396bd950f444518bbaad5a2fd7e2da4
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 10:06:53 2021 +0100
s3:netapi: Make 'struct libnetapi_ctx' opaque
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit bcc3945e5384e6f39dc03eaeeee2382a6a7d52be
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 10:05:26 2021 +0100
s3:netapi: Use public getters in getjoinableous example
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit 44ef7f96e16f26780272a5638c009fcd79c21ed2
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 10:04:23 2021 +0100
s3:netapi: Use public getters in remote_machine example
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
commit c9222ab838844bca698a64b2125a19244ee6f008
Author: Andreas Schneider <asn at samba.org>
Date: Thu Mar 18 09:59:08 2021 +0100
s3:netapi: Implement public libnetapi_get_(username|password) functions
Signed-off-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
-----------------------------------------------------------------------
Summary of changes:
auth/credentials/credentials.h | 2 +
auth/credentials/credentials_cmdline.c | 73 +++++++++++
auth/credentials/pycredentials.c | 1 -
auth/credentials/wscript_build | 6 +-
source3/lib/netapi/cm.c | 41 +++----
source3/lib/netapi/examples/join/getjoinableous.c | 19 ++-
source3/lib/netapi/examples/join/rename_machine.c | 19 ++-
source3/lib/netapi/joindomain.c | 18 ++-
source3/lib/netapi/netapi.c | 142 +++++++++++++++++-----
source3/lib/netapi/netapi.h | 26 ++--
source3/lib/netapi/netapi_private.h | 14 ++-
source3/wscript_build | 4 +-
source4/lib/cmdline/credentials.c | 2 +-
source4/lib/cmdline/popt_credentials.c | 2 +-
14 files changed, 289 insertions(+), 80 deletions(-)
create mode 100644 auth/credentials/credentials_cmdline.c
Changeset truncated at 500 lines:
diff --git a/auth/credentials/credentials.h b/auth/credentials/credentials.h
index 1fff37e8154..1802e383594 100644
--- a/auth/credentials/credentials.h
+++ b/auth/credentials/credentials.h
@@ -315,6 +315,8 @@ bool cli_credentials_set_smb_encryption(struct cli_credentials *cred,
enum smb_encryption_setting
cli_credentials_get_smb_encryption(struct cli_credentials *cred);
+bool cli_credentials_set_cmdline_callbacks(struct cli_credentials *cred);
+
void cli_credentials_dump(struct cli_credentials *creds);
/**
diff --git a/auth/credentials/credentials_cmdline.c b/auth/credentials/credentials_cmdline.c
new file mode 100644
index 00000000000..11b1ab9ecd2
--- /dev/null
+++ b/auth/credentials/credentials_cmdline.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2005 Jelmer Vernooij <jelmer at samba.org>
+ * Copyright (c) 2016 Stefan Metzmacher <metze at samba.org>
+ *
+ * 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"
+#include "system/filesys.h"
+#include "auth/credentials/credentials.h"
+
+static const char *cmdline_get_userpassword(struct cli_credentials *creds)
+{
+ TALLOC_CTX *frame = talloc_stackframe();
+ const char *name = NULL;
+ char *label = NULL;
+ char *ret = NULL;
+ char pwd[256] = {0};
+ int rc;
+
+ name = cli_credentials_get_unparsed_name(creds, frame);
+ if (name == NULL) {
+ goto fail;
+ }
+ label = talloc_asprintf(frame, "Password for [%s]:", name);
+ if (label == NULL) {
+ goto fail;
+ }
+ rc = samba_getpass(label, pwd, sizeof(pwd), false, false);
+ if (rc != 0) {
+ goto fail;
+ }
+ ret = talloc_strdup(creds, pwd);
+ if (ret == NULL) {
+ goto fail;
+ }
+ talloc_set_name_const(ret, __location__);
+fail:
+ ZERO_STRUCT(pwd);
+ TALLOC_FREE(frame);
+ return ret;
+}
+
+/**
+ * @brief Set the command line password callback.
+ *
+ * This will set the callback to get the password from the command prompt or
+ * read it from 'stdin'.
+ *
+ * @param[in] cred The credential context.
+ *
+ * @return On success true, false otherwise.
+ */
+bool cli_credentials_set_cmdline_callbacks(struct cli_credentials *cred)
+{
+ /*
+ * The there is no tty, then we will try to read the password from
+ * stdin.
+ */
+ return cli_credentials_set_password_callback(cred,
+ cmdline_get_userpassword);
+}
diff --git a/auth/credentials/pycredentials.c b/auth/credentials/pycredentials.c
index 95dde276ef7..23048c37276 100644
--- a/auth/credentials/pycredentials.c
+++ b/auth/credentials/pycredentials.c
@@ -22,7 +22,6 @@
#include "python/modules.h"
#include "pycredentials.h"
#include "param/param.h"
-#include "lib/cmdline/credentials.h"
#include "auth/credentials/credentials_internal.h"
#include "librpc/gen_ndr/samr.h" /* for struct samr_Password */
#include "librpc/gen_ndr/netlogon.h"
diff --git a/auth/credentials/wscript_build b/auth/credentials/wscript_build
index 46111164b36..7568554df4d 100644
--- a/auth/credentials/wscript_build
+++ b/auth/credentials/wscript_build
@@ -23,12 +23,16 @@ bld.SAMBA_SUBSYSTEM('CREDENTIALS_NTLM',
source='credentials_ntlm.c',
deps='samba-credentials GNUTLS_HELPERS')
+bld.SAMBA_SUBSYSTEM('CREDENTIALS_CMDLINE',
+ source='credentials_cmdline.c',
+ deps='samba-credentials')
+
pytalloc_util = bld.pyembed_libname('pytalloc-util')
pyparam_util = bld.pyembed_libname('pyparam_util')
bld.SAMBA_PYTHON('pycredentials',
source='pycredentials.c',
- public_deps='samba-credentials cmdline-credentials %s %s CREDENTIALS_KRB5 CREDENTIALS_SECRETS' % (pytalloc_util, pyparam_util),
+ public_deps='samba-credentials %s %s CREDENTIALS_CMDLINE CREDENTIALS_KRB5 CREDENTIALS_SECRETS' % (pytalloc_util, pyparam_util),
realname='samba/credentials.so'
)
diff --git a/source3/lib/netapi/cm.c b/source3/lib/netapi/cm.c
index 3f4e188b396..a2468de4ccc 100644
--- a/source3/lib/netapi/cm.c
+++ b/source3/lib/netapi/cm.c
@@ -67,11 +67,13 @@ static WERROR libnetapi_open_ipc_connection(struct libnetapi_ctx *ctx,
struct client_ipc_connection **pp)
{
struct libnetapi_private_ctx *priv_ctx;
- struct user_auth_info *auth_info = NULL;
struct cli_state *cli_ipc = NULL;
struct client_ipc_connection *p;
NTSTATUS status;
- struct cli_credentials *creds = NULL;
+ const char *username = NULL;
+ const char *password = NULL;
+ NET_API_STATUS rc;
+ enum credentials_use_kerberos krb5_state;
if (!ctx || !pp || !server_name) {
return WERR_INVALID_PARAMETER;
@@ -85,38 +87,35 @@ static WERROR libnetapi_open_ipc_connection(struct libnetapi_ctx *ctx,
return WERR_OK;
}
- auth_info = user_auth_info_init(ctx);
- if (!auth_info) {
- return WERR_NOT_ENOUGH_MEMORY;
+ rc = libnetapi_get_username(ctx, &username);
+ if (rc != 0) {
+ return WERR_INTERNAL_ERROR;
}
- set_cmdline_auth_info_signing_state_raw(auth_info, SMB_SIGNING_IPC_DEFAULT);
- set_cmdline_auth_info_use_kerberos(auth_info, ctx->use_kerberos);
- set_cmdline_auth_info_username(auth_info, ctx->username);
- if (ctx->password) {
- set_cmdline_auth_info_password(auth_info, ctx->password);
- } else {
- set_cmdline_auth_info_getpass(auth_info);
+
+ rc = libnetapi_get_password(ctx, &password);
+ if (rc != 0) {
+ return WERR_INTERNAL_ERROR;
}
- if (ctx->username && ctx->username[0] &&
- ctx->password && ctx->password[0] &&
- ctx->use_kerberos) {
- set_cmdline_auth_info_fallback_after_kerberos(auth_info, true);
+ if (password == NULL) {
+ cli_credentials_set_cmdline_callbacks(ctx->creds);
}
- if (ctx->use_ccache) {
- set_cmdline_auth_info_use_ccache(auth_info, true);
+ krb5_state = cli_credentials_get_kerberos_state(ctx->creds);
+
+ if (username != NULL && username[0] != '\0' &&
+ password != NULL && password[0] != '\0' &&
+ krb5_state == CRED_USE_KERBEROS_REQUIRED) {
+ cli_credentials_set_kerberos_state(ctx->creds, CRED_USE_KERBEROS_DESIRED);
}
- creds = get_cmdline_auth_info_creds(auth_info);
status = cli_cm_open(ctx, NULL,
server_name, "IPC$",
- creds,
+ ctx->creds,
NULL, 0, 0x20, &cli_ipc);
if (!NT_STATUS_IS_OK(status)) {
cli_ipc = NULL;
}
- TALLOC_FREE(auth_info);
if (!cli_ipc) {
libnetapi_set_error_string(ctx,
diff --git a/source3/lib/netapi/examples/join/getjoinableous.c b/source3/lib/netapi/examples/join/getjoinableous.c
index 732f73dd572..c0fba576eae 100644
--- a/source3/lib/netapi/examples/join/getjoinableous.c
+++ b/source3/lib/netapi/examples/join/getjoinableous.c
@@ -35,6 +35,8 @@ int main(int argc, const char **argv)
uint32_t num_ous = 0;
struct libnetapi_ctx *ctx = NULL;
int i;
+ const char *username = NULL;
+ const char *password = NULL;
poptContext pc;
int opt;
@@ -70,10 +72,23 @@ int main(int argc, const char **argv)
/* NetGetJoinableOUs */
+ status = libnetapi_get_username(ctx, &username);
+ if (status != 0) {
+ printf("failed with: %s\n",
+ libnetapi_get_error_string(ctx, status));
+ goto out;
+ }
+ status = libnetapi_get_password(ctx, &password);
+ if (status != 0) {
+ printf("failed with: %s\n",
+ libnetapi_get_error_string(ctx, status));
+ goto out;
+ }
+
status = NetGetJoinableOUs(host_name,
domain_name,
- ctx->username,
- ctx->password,
+ username,
+ password,
&num_ous,
&ous);
if (status != 0) {
diff --git a/source3/lib/netapi/examples/join/rename_machine.c b/source3/lib/netapi/examples/join/rename_machine.c
index a21f9198d87..7be6dc2bf2a 100644
--- a/source3/lib/netapi/examples/join/rename_machine.c
+++ b/source3/lib/netapi/examples/join/rename_machine.c
@@ -33,6 +33,8 @@ int main(int argc, const char **argv)
const char *new_machine_name = NULL;
uint32_t rename_opt = 0;
struct libnetapi_ctx *ctx = NULL;
+ const char *username = NULL;
+ const char *password = NULL;
poptContext pc;
int opt;
@@ -68,10 +70,23 @@ int main(int argc, const char **argv)
/* NetRenameMachineInDomain */
+ status = libnetapi_get_username(ctx, &username);
+ if (status != 0) {
+ printf("failed with: %s\n",
+ libnetapi_get_error_string(ctx, status));
+ goto out;
+ }
+ status = libnetapi_get_password(ctx, &password);
+ if (status != 0) {
+ printf("failed with: %s\n",
+ libnetapi_get_error_string(ctx, status));
+ goto out;
+ }
+
status = NetRenameMachineInDomain(host_name,
new_machine_name,
- ctx->username,
- ctx->password,
+ username,
+ password,
rename_opt);
if (status != 0) {
printf("failed with: %s\n",
diff --git a/source3/lib/netapi/joindomain.c b/source3/lib/netapi/joindomain.c
index f2d36fc00db..90a58824fe5 100644
--- a/source3/lib/netapi/joindomain.c
+++ b/source3/lib/netapi/joindomain.c
@@ -428,15 +428,25 @@ WERROR NetGetJoinableOUs_l(struct libnetapi_ctx *ctx,
SAFE_FREE(ads->auth.user_name);
if (r->in.account) {
ads->auth.user_name = SMB_STRDUP(r->in.account);
- } else if (ctx->username) {
- ads->auth.user_name = SMB_STRDUP(ctx->username);
+ } else {
+ const char *username = NULL;
+
+ libnetapi_get_username(ctx, &username);
+ if (username != NULL) {
+ ads->auth.user_name = SMB_STRDUP(username);
+ }
}
SAFE_FREE(ads->auth.password);
if (r->in.password) {
ads->auth.password = SMB_STRDUP(r->in.password);
- } else if (ctx->password) {
- ads->auth.password = SMB_STRDUP(ctx->password);
+ } else {
+ const char *password = NULL;
+
+ libnetapi_get_password(ctx, &password);
+ if (password != NULL) {
+ ads->auth.password = SMB_STRDUP(password);
+ }
}
ads_status = ads_connect_user_creds(ads);
diff --git a/source3/lib/netapi/netapi.c b/source3/lib/netapi/netapi.c
index fb8b4bc6113..a56651d100f 100644
--- a/source3/lib/netapi/netapi.c
+++ b/source3/lib/netapi/netapi.c
@@ -23,6 +23,9 @@
#include "lib/netapi/netapi_private.h"
#include "secrets.h"
#include "krb5_env.h"
+#include "source3/param/loadparm.h"
+#include "lib/param/param.h"
+#include "auth/gensec/gensec.h"
struct libnetapi_ctx *stat_ctx = NULL;
static bool libnetapi_initialized = false;
@@ -104,6 +107,7 @@ NET_API_STATUS libnetapi_net_init(struct libnetapi_ctx **context)
NET_API_STATUS status;
struct libnetapi_ctx *ctx = NULL;
TALLOC_CTX *frame = talloc_stackframe();
+ struct loadparm_context *lp_ctx = NULL;
ctx = talloc_zero(frame, struct libnetapi_ctx);
if (!ctx) {
@@ -111,19 +115,22 @@ NET_API_STATUS libnetapi_net_init(struct libnetapi_ctx **context)
return W_ERROR_V(WERR_NOT_ENOUGH_MEMORY);
}
- BlockSignals(True, SIGPIPE);
-
- if (getenv("USER")) {
- ctx->username = talloc_strdup(ctx, getenv("USER"));
- } else {
- ctx->username = talloc_strdup(ctx, "");
+ ctx->creds = cli_credentials_init(ctx);
+ if (ctx->creds == NULL) {
+ TALLOC_FREE(frame);
+ return W_ERROR_V(WERR_NOT_ENOUGH_MEMORY);
}
- if (!ctx->username) {
+
+ lp_ctx = loadparm_init_s3(frame, loadparm_s3_helpers());
+ if (lp_ctx == NULL) {
TALLOC_FREE(frame);
- fprintf(stderr, "libnetapi_init: out of memory\n");
return W_ERROR_V(WERR_NOT_ENOUGH_MEMORY);
}
+ BlockSignals(True, SIGPIPE);
+
+ cli_credentials_guess(ctx->creds, lp_ctx);
+
status = libnetapi_init_private_context(ctx);
if (status != 0) {
TALLOC_FREE(frame);
@@ -170,13 +177,6 @@ NET_API_STATUS libnetapi_free(struct libnetapi_ctx *ctx)
libnetapi_shutdown_cm(ctx);
- if (ctx->krb5_cc_env) {
- char *env = getenv(KRB5_ENV_CCNAME);
- if (env && (strequal(ctx->krb5_cc_env, env))) {
- unsetenv(KRB5_ENV_CCNAME);
- }
- }
-
gfree_loadparm();
gfree_charcnv();
gfree_interfaces();
@@ -227,37 +227,112 @@ NET_API_STATUS libnetapi_get_debuglevel(struct libnetapi_ctx *ctx,
/****************************************************************
****************************************************************/
+/**
+ * @brief Get the username of the libnet context
+ *
+ * @param[in] ctx The netapi context
+ *
+ * @param[in] username A pointer to hold the username.
+ *
+ * @return 0 on success, an werror code otherwise.
+ */
+NET_API_STATUS libnetapi_get_username(struct libnetapi_ctx *ctx,
+ const char **username)
+{
+ if (ctx == NULL) {
+ return W_ERROR_V(WERR_INVALID_PARAMETER);
+ }
+
+ if (username != NULL) {
+ *username = cli_credentials_get_username(ctx->creds);
+ }
+
+ return NET_API_STATUS_SUCCESS;
+}
+
+/**
+ * @brief Get the password of the libnet context
+ *
+ * @param[in] ctx The netapi context
+ *
+ * @param[in] password A pointer to hold the password.
+ *
+ * @return 0 on success, an werror code otherwise.
+ */
+NET_API_STATUS libnetapi_get_password(struct libnetapi_ctx *ctx,
+ const char **password)
+{
+ if (ctx == NULL) {
+ return W_ERROR_V(WERR_INVALID_PARAMETER);
+ }
+
+ if (password != NULL) {
+ *password = cli_credentials_get_password(ctx->creds);
+ }
+
+ return NET_API_STATUS_SUCCESS;
+}
+
NET_API_STATUS libnetapi_set_username(struct libnetapi_ctx *ctx,
const char *username)
{
- TALLOC_FREE(ctx->username);
- ctx->username = talloc_strdup(ctx, username ? username : "");
-
- if (!ctx->username) {
- return W_ERROR_V(WERR_NOT_ENOUGH_MEMORY);
+ if (ctx == NULL || username == NULL) {
+ return W_ERROR_V(WERR_INVALID_PARAMETER);
}
+
+ cli_credentials_parse_string(ctx->creds, username, CRED_SPECIFIED);
+
return NET_API_STATUS_SUCCESS;
}
NET_API_STATUS libnetapi_set_password(struct libnetapi_ctx *ctx,
const char *password)
{
- TALLOC_FREE(ctx->password);
- ctx->password = talloc_strdup(ctx, password);
- if (!ctx->password) {
- return W_ERROR_V(WERR_NOT_ENOUGH_MEMORY);
+ bool ok;
+
+ if (ctx == NULL || password == NULL) {
+ return W_ERROR_V(WERR_INVALID_PARAMETER);
+ }
+
+ ok = cli_credentials_set_password(ctx->creds, password, CRED_SPECIFIED);
+ if (!ok) {
+ return W_ERROR_V(WERR_INTERNAL_ERROR);
}
+
return NET_API_STATUS_SUCCESS;
}
NET_API_STATUS libnetapi_set_workgroup(struct libnetapi_ctx *ctx,
const char *workgroup)
{
- TALLOC_FREE(ctx->workgroup);
- ctx->workgroup = talloc_strdup(ctx, workgroup);
- if (!ctx->workgroup) {
- return W_ERROR_V(WERR_NOT_ENOUGH_MEMORY);
+ bool ok;
+
+ ok = cli_credentials_set_domain(ctx->creds, workgroup, CRED_SPECIFIED);
+ if (!ok) {
+ return W_ERROR_V(WERR_INTERNAL_ERROR);
}
+
+ return NET_API_STATUS_SUCCESS;
+}
+
+/**
+ * @brief Set the cli_credentials to be used in the netapi context
+ *
+ * @param[in] ctx The netapi context
+ *
+ * @param[in] creds The cli_credentials which should be used by netapi.
+ *
+ * @return 0 on success, an werror code otherwise.
+ */
+NET_API_STATUS libnetapi_set_creds(struct libnetapi_ctx *ctx,
+ struct cli_credentials *creds)
+{
+ if (ctx == NULL || creds == NULL) {
+ return W_ERROR_V(WERR_INVALID_PARAMETER);
+ }
--
Samba Shared Repository
More information about the samba-cvs
mailing list