summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2008-08-07 17:55:57 -0700
committerJeremy Allison <jra@samba.org>2008-08-07 17:55:57 -0700
commit617bf10c66f45b6ed83d7f5441586606261e0560 (patch)
treec90b9c3017c2b827e78960136d54eea9b82e00f0
parent3907392459533832ada823e614154951365348ee (diff)
downloadsamba-617bf10c66f45b6ed83d7f5441586606261e0560.tar.gz
samba-617bf10c66f45b6ed83d7f5441586606261e0560.tar.bz2
samba-617bf10c66f45b6ed83d7f5441586606261e0560.zip
Fix bug #5675 with a varient of Tim Waugh's patch,
as proposed by James Peach. Jeremy. (This used to be commit 5c27ad75836136c39774c9456d63f46fa62e281f)
-rw-r--r--source3/client/smbspool.c2
-rw-r--r--source3/include/client.h1
-rw-r--r--source3/libsmb/cliconnect.c5
3 files changed, 4 insertions, 4 deletions
diff --git a/source3/client/smbspool.c b/source3/client/smbspool.c
index e567ef8037..f35a9d3003 100644
--- a/source3/client/smbspool.c
+++ b/source3/client/smbspool.c
@@ -347,7 +347,7 @@ get_exit_code(struct cli_state * cli,
}
if (cli) {
- if (cli->use_kerberos || (cli->capabilities & CAP_EXTENDED_SECURITY))
+ if (cli->use_kerberos && cli->got_kerberos_mechanism)
fputs("ATTR: auth-info-required=negotiate\n", stderr);
else
fputs("ATTR: auth-info-required=username,password\n", stderr);
diff --git a/source3/include/client.h b/source3/include/client.h
index 9276948dac..51ced9907f 100644
--- a/source3/include/client.h
+++ b/source3/include/client.h
@@ -193,6 +193,7 @@ struct cli_state {
bool use_kerberos;
bool fallback_after_kerberos;
bool use_spnego;
+ bool got_kerberos_mechanism; /* Server supports krb5 in SPNEGO. */
bool use_oplocks; /* should we use oplocks? */
bool use_level_II_oplocks; /* should we use level II oplocks? */
diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c
index 4285753e20..8ef14d7973 100644
--- a/source3/libsmb/cliconnect.c
+++ b/source3/libsmb/cliconnect.c
@@ -797,7 +797,6 @@ ADS_STATUS cli_session_setup_spnego(struct cli_state *cli, const char *user,
char *principal = NULL;
char *OIDs[ASN1_MAX_OIDS];
int i;
- bool got_kerberos_mechanism = False;
DATA_BLOB blob;
const char *p = NULL;
char *account = NULL;
@@ -832,7 +831,7 @@ ADS_STATUS cli_session_setup_spnego(struct cli_state *cli, const char *user,
DEBUG(3,("got OID=%s\n", OIDs[i]));
if (strcmp(OIDs[i], OID_KERBEROS5_OLD) == 0 ||
strcmp(OIDs[i], OID_KERBEROS5) == 0) {
- got_kerberos_mechanism = True;
+ cli->got_kerberos_mechanism = True;
}
free(OIDs[i]);
}
@@ -845,7 +844,7 @@ ADS_STATUS cli_session_setup_spnego(struct cli_state *cli, const char *user,
/* If password is set we reauthenticate to kerberos server
* and do not store results */
- if (got_kerberos_mechanism && cli->use_kerberos) {
+ if (cli->got_kerberos_mechanism && cli->use_kerberos) {
ADS_STATUS rc;
if (pass && *pass) {