diff options
author | Derrell Lipman <derrell.lipman@unwireduniverse.com> | 2008-07-08 20:44:39 -0400 |
---|---|---|
committer | Derrell Lipman <derrell.lipman@unwireduniverse.com> | 2008-07-08 20:44:39 -0400 |
commit | 31262a59bcf1cb04631c2efca169e417ef597bec (patch) | |
tree | 937c6d99f02f8b0287cca6b9eb8dd753d68fea1e | |
parent | 70d8e57c174d2dddf8d05ab81cf2edf31d10aebd (diff) | |
download | samba-31262a59bcf1cb04631c2efca169e417ef597bec.tar.gz samba-31262a59bcf1cb04631c2efca169e417ef597bec.tar.bz2 samba-31262a59bcf1cb04631c2efca169e417ef597bec.zip |
[BUG 5580] Allow access to DFS shares via libsmbclient
Brian Sheehan provided a nice patch intended for the 3.0 code base. This
commit applies a similar patch for the 3.3 code base. It adds a new public
function to libsmbclient -- smbc_set_credentials() -- that may be called from
the authentication callback when DFS referrals are in use.
Derrell
(This used to be commit 888f922bd0d1c84a687d404e95ae314a9dd0aee1)
-rw-r--r-- | source3/include/libsmbclient.h | 27 | ||||
-rw-r--r-- | source3/include/proto.h | 1 | ||||
-rw-r--r-- | source3/lib/util.c | 5 | ||||
-rw-r--r-- | source3/libsmb/libsmb_context.c | 20 |
4 files changed, 53 insertions, 0 deletions
diff --git a/source3/include/libsmbclient.h b/source3/include/libsmbclient.h index 74d0d5c9dd..2828e9e780 100644 --- a/source3/include/libsmbclient.h +++ b/source3/include/libsmbclient.h @@ -2561,6 +2561,33 @@ smbc_version(void); } #endif +/**@ingroup misc + * Set the users credentials globally so they can be used for DFS + * referrals. Probably best to use this function in the smbc_get_auth_data_fn + * callback. + * + * @param workgroup Workgroup of the user. + * + * @param user Username of user. + * + * @param password Password of user. + * + * @param use_kerberos Whether to use Kerberos + * + * @param signing_state One of these strings (all equivalents on same line): + * "off", "no", "false" + * "on", "yes", "true", "auto" + * "force", "required", "forced" + */ + +void +smbc_set_credentials(char *workgroup, + char *user, + char *password, + bool use_kerberos, + char *signing_state); + + /** * @ingroup structure * Structure that contains a client context information diff --git a/source3/include/proto.h b/source3/include/proto.h index 2a954f4efe..665a86d2c8 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -1271,6 +1271,7 @@ const char *get_cmdline_auth_info_password(void); void set_cmdline_auth_info_password(const char *password); bool set_cmdline_auth_info_signing_state(const char *arg); int get_cmdline_auth_info_signing_state(void); +void set_cmdline_auth_info_use_kerberos(bool b); bool get_cmdline_auth_info_use_kerberos(void); void set_cmdline_auth_info_use_krb5_ticket(void); void set_cmdline_auth_info_smb_encrypt(void); diff --git a/source3/lib/util.c b/source3/lib/util.c index 68524a21ce..8d744a5ae3 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -353,6 +353,11 @@ int get_cmdline_auth_info_signing_state(void) return cmdline_auth_info.signing_state; } +void set_cmdline_auth_info_use_kerberos(bool b) +{ + cmdline_auth_info.use_kerberos = b; +} + bool get_cmdline_auth_info_use_kerberos(void) { return cmdline_auth_info.use_kerberos; diff --git a/source3/libsmb/libsmb_context.c b/source3/libsmb/libsmb_context.c index dd78bcee35..51948d1648 100644 --- a/source3/libsmb/libsmb_context.c +++ b/source3/libsmb/libsmb_context.c @@ -610,3 +610,23 @@ smbc_version(void) } +/* + * Set the credentials so DFS will work when following referrals. + */ +void +smbc_set_credentials(char *workgroup, + char *user, + char *password, + bool use_kerberos, + char *signing_state) +{ + + set_cmdline_auth_info_username(user); + set_cmdline_auth_info_password(password); + set_cmdline_auth_info_use_kerberos(use_kerberos); + if (! set_cmdline_auth_info_signing_state(signing_state)) { + DEBUG(0, ("Invalid signing state: %s", signing_state)); + } + set_global_myworkgroup(workgroup); + cli_cm_set_credentials(); +} |