s3-libsmbclient: Add smbc_setOptionUseCCache()
authorVolker Lendecke <vl@samba.org>
Sun, 24 Jan 2010 18:24:10 +0000 (19:24 +0100)
committerVolker Lendecke <vl@samba.org>
Sun, 24 Jan 2010 19:32:17 +0000 (20:32 +0100)
Can we enable this by default? This would be a change in behaviour, but this
feature is just too cool for everyone to catch up in the apps.

The patch would be

source3/include/libsmbclient.h
source3/libsmb/libsmb_context.c
source3/libsmb/libsmb_server.c
source3/libsmb/libsmb_setget.c

index 7de5000615e5423c1846676e6cc41285ae45fa7d..dd6f93e261e8d8e00872f4d059538bd8ae4dcd72 100644 (file)
@@ -263,10 +263,13 @@ typedef struct _SMBCCTX SMBCCTX;
  *   smbc_getOptionFallbackAFterKerberos()
  *   smbc_setOptionNoAutoAnonymousLogin()
  *   smbc_getOptionNoAutoAnonymousLogin()
+ *   smbc_setOptionUseCCache()
+ *   smbc_getOptionUseCCache()
  */
 # define SMB_CTX_FLAG_USE_KERBEROS (1 << 0)
 # define SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS (1 << 1)
 # define SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON (1 << 2)
+# define SMB_CTX_FLAG_USE_CCACHE (1 << 3)
 
 
 
@@ -732,6 +735,14 @@ smbc_getOptionNoAutoAnonymousLogin(SMBCCTX *c);
 void
 smbc_setOptionNoAutoAnonymousLogin(SMBCCTX *c, smbc_bool b);
 
+/** Get whether to enable use of the winbind ccache */
+smbc_bool
+smbc_getOptionUseCCache(SMBCCTX *c);
+
+/** Set whether to enable use of the winbind ccache */
+void
+smbc_setOptionUseCCache(SMBCCTX *c, smbc_bool b);
+
 
 
 /*************************************
index 336172ce6fba80e51898a9567ac5258d8f3254a9..2e56911f70fc6074e5ffdb7fbc5a974b9fbe107c 100644 (file)
@@ -168,6 +168,7 @@ smbc_new_context(void)
         smbc_setOptionFullTimeNames(context, False);
         smbc_setOptionOpenShareMode(context, SMBC_SHAREMODE_DENY_NONE);
         smbc_setOptionSmbEncryptionLevel(context, SMBC_ENCRYPTLEVEL_NONE);
+        smbc_setOptionUseCCache(context, True);
         smbc_setOptionCaseSensitive(context, False);
         smbc_setOptionBrowseMaxLmbCount(context, 3);    /* # LMBs to query */
         smbc_setOptionUrlEncodeReaddirEntries(context, False);
@@ -399,6 +400,10 @@ smbc_option_set(SMBCCTX *context,
                 option_value.b = (bool) va_arg(ap, int);
                 smbc_setOptionFallbackAfterKerberos(context, option_value.b);
                 
+        } else if (strcmp(option_name, "use_ccache") == 0) {
+                option_value.b = (bool) va_arg(ap, int);
+                smbc_setOptionUseCCache(context, option_value.b);
+
         } else if (strcmp(option_name, "no_auto_anonymous_login") == 0) {
                 option_value.b = (bool) va_arg(ap, int);
                 smbc_setOptionNoAutoAnonymousLogin(context, option_value.b);
@@ -505,6 +510,13 @@ smbc_option_get(SMBCCTX *context,
                 return (void *) (bool) smbc_getOptionFallbackAfterKerberos(context);
 #endif
                 
+        } else if (strcmp(option_name, "use_ccache") == 0) {
+#if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
+                return (void *) (intptr_t) smbc_getOptionUseCCache(context);
+#else
+                return (void *) (bool) smbc_getOptionUseCCache(context);
+#endif
+
         } else if (strcmp(option_name, "no_auto_anonymous_login") == 0) {
 #if defined(__intptr_t_defined) || defined(HAVE_INTPTR_T)
                 return (void *) (intptr_t) smbc_getOptionNoAutoAnonymousLogin(context);
@@ -748,6 +760,8 @@ void smbc_set_credentials_with_fallback(SMBCCTX *context,
         set_cmdline_auth_info_signing_state(auth_info, signing_state);
        set_cmdline_auth_info_fallback_after_kerberos(auth_info,
                smbc_getOptionFallbackAfterKerberos(context));
+       set_cmdline_auth_info_use_ccache(
+               auth_info, smbc_getOptionUseCCache(context));
         set_global_myworkgroup(workgroup);
 
        TALLOC_FREE(context->internal->auth_info);
index 71cb67c61ba85bbe0770ab85f8243a55f8fa7abe..eb292da2ce60c1e2345e48e5db41f4e3561157f4 100644 (file)
@@ -413,6 +413,10 @@ again:
                c->fallback_after_kerberos = True;
        }
 
+        if (smbc_getOptionUseCCache(context)) {
+               c->use_ccache = True;
+       }
+
        c->timeout = smbc_getTimeout(context);
 
         /*
@@ -759,6 +763,9 @@ SMBC_attr_server(TALLOC_CTX *ctx,
                 if (smbc_getOptionUseKerberos(context)) {
                         flags |= CLI_FULL_CONNECTION_USE_KERBEROS;
                 }
+                if (smbc_getOptionUseCCache(context)) {
+                        flags |= CLI_FULL_CONNECTION_USE_CCACHE;
+                }
 
                 zero_sockaddr(&ss);
                 nt_status = cli_full_connection(&ipc_cli,
index 791b4cd9e4675ef7018a19b57829604748f56dfa..20835781ec06d6c0af9333d6e1151ce4fe9ecc78 100644 (file)
@@ -420,6 +420,24 @@ smbc_setOptionNoAutoAnonymousLogin(SMBCCTX *c, smbc_bool b)
         }
 }
 
+/** Get whether to enable use of kerberos */
+smbc_bool
+smbc_getOptionUseCCache(SMBCCTX *c)
+{
+        return c->flags & SMB_CTX_FLAG_USE_CCACHE ? True : False;
+}
+
+/** Set whether to enable use of kerberos */
+void
+smbc_setOptionUseCCache(SMBCCTX *c, smbc_bool b)
+{
+        if (b) {
+                c->flags |= SMB_CTX_FLAG_USE_CCACHE;
+        } else {
+                c->flags &= ~SMB_CTX_FLAG_USE_CCACHE;
+        }
+}
+
 /** Get the function for obtaining authentication data */
 smbc_get_auth_data_fn
 smbc_getFunctionAuthData(SMBCCTX *c)