The branch, v3-3-test has been updated
       via  6194244bd9fcc1fb736f3d91433f107270cac1c9 (commit)
       via  48600a0019d70d22574cf08e8fe19d44cc332a0f (commit)
      from  9fe09398b79ae7c5e78182112a8cd2c9b5f99ad3 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit 6194244bd9fcc1fb736f3d91433f107270cac1c9
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Mon Jun 30 10:32:15 2008 +0200

    kerberos: allow to keep entries with old kvno's while creating keytab.
    
    Guenther

commit 48600a0019d70d22574cf08e8fe19d44cc332a0f
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Mon Jun 30 10:29:15 2008 +0200

    kerberos: rename smb_krb5_kt_add_entry to smb_krb5_kt_add_entry_ext.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source/include/includes.h       |   16 +++++----
 source/libads/kerberos_keytab.c |   68 ++++++++++++++++++++++++---------------
 source/libnet/libnet_keytab.c   |   15 ++++----
 3 files changed, 59 insertions(+), 40 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/includes.h b/source/include/includes.h
index d3e8b33..aa99dc0 100644
--- a/source/include/includes.h
+++ b/source/include/includes.h
@@ -1225,13 +1225,15 @@ krb5_error_code smb_krb5_keytab_name(TALLOC_CTX 
*mem_ctx,
                                     krb5_context context,
                                     krb5_keytab keytab,
                                     const char **keytab_name);
-int smb_krb5_kt_add_entry(krb5_context context,
-                         krb5_keytab keytab,
-                         krb5_kvno kvno,
-                         const char *princ_s,
-                         krb5_enctype *enctypes,
-                         krb5_data password,
-                         bool no_salt);
+int smb_krb5_kt_add_entry_ext(krb5_context context,
+                             krb5_keytab keytab,
+                             krb5_kvno kvno,
+                             const char *princ_s,
+                             krb5_enctype *enctypes,
+                             krb5_data password,
+                             bool no_salt,
+                             bool keep_old_entries);
+
 #endif /* HAVE_KRB5 */
 
 
diff --git a/source/libads/kerberos_keytab.c b/source/libads/kerberos_keytab.c
index c8ffd73..b905cb4 100644
--- a/source/libads/kerberos_keytab.c
+++ b/source/libads/kerberos_keytab.c
@@ -32,13 +32,14 @@
 /**********************************************************************
 **********************************************************************/
 
-int smb_krb5_kt_add_entry(krb5_context context,
-                         krb5_keytab keytab,
-                         krb5_kvno kvno,
-                         const char *princ_s,
-                         krb5_enctype *enctypes,
-                         krb5_data password,
-                         bool no_salt)
+int smb_krb5_kt_add_entry_ext(krb5_context context,
+                             krb5_keytab keytab,
+                             krb5_kvno kvno,
+                             const char *princ_s,
+                             krb5_enctype *enctypes,
+                             krb5_data password,
+                             bool no_salt,
+                             bool keep_old_entries)
 {
        krb5_error_code ret = 0;
        krb5_kt_cursor cursor;
@@ -52,20 +53,20 @@ int smb_krb5_kt_add_entry(krb5_context context,
        
        ret = smb_krb5_parse_name(context, princ_s, &princ);
        if (ret) {
-               DEBUG(1,("smb_krb5_kt_add_entry: smb_krb5_parse_name(%s) failed 
(%s)\n", princ_s, error_message(ret)));
+               DEBUG(1,("smb_krb5_kt_add_entry_ext: smb_krb5_parse_name(%s) 
failed (%s)\n", princ_s, error_message(ret)));
                goto out;
        }
 
        /* Seek and delete old keytab entries */
        ret = krb5_kt_start_seq_get(context, keytab, &cursor);
        if (ret != KRB5_KT_END && ret != ENOENT ) {
-               DEBUG(3,("smb_krb5_kt_add_entry: Will try to delete old keytab 
entries\n"));
+               DEBUG(3,("smb_krb5_kt_add_entry_ext: Will try to delete old 
keytab entries\n"));
                while(!krb5_kt_next_entry(context, keytab, &kt_entry, &cursor)) 
{
                        bool compare_name_ok = False;
 
                        ret = smb_krb5_unparse_name(context, 
kt_entry.principal, &ktprinc);
                        if (ret) {
-                               DEBUG(1,("smb_krb5_kt_add_entry: 
smb_krb5_unparse_name failed (%s)\n",
+                               DEBUG(1,("smb_krb5_kt_add_entry_ext: 
smb_krb5_unparse_name failed (%s)\n",
                                        error_message(ret)));
                                goto out;
                        }
@@ -86,7 +87,7 @@ int smb_krb5_kt_add_entry(krb5_context context,
 #endif
 
                        if (!compare_name_ok) {
-                               DEBUG(10,("smb_krb5_kt_add_entry: ignoring 
keytab entry principal %s, kvno = %d\n",
+                               DEBUG(10,("smb_krb5_kt_add_entry_ext: ignoring 
keytab entry principal %s, kvno = %d\n",
                                        ktprinc, kt_entry.vno));
                        }
 
@@ -94,39 +95,38 @@ int smb_krb5_kt_add_entry(krb5_context context,
 
                        if (compare_name_ok) {
                                if (kt_entry.vno == kvno - 1) {
-                                       DEBUG(5,("smb_krb5_kt_add_entry: Saving 
previous (kvno %d) entry for principal: %s.\n",
+                                       DEBUG(5,("smb_krb5_kt_add_entry_ext: 
Saving previous (kvno %d) entry for principal: %s.\n",
                                                kvno - 1, princ_s));
-                               } else {
-
-                                       DEBUG(5,("smb_krb5_kt_add_entry: Found 
old entry for principal: %s (kvno %d) - trying to remove it.\n",
+                               } else if (!keep_old_entries) {
+                                       DEBUG(5,("smb_krb5_kt_add_entry_ext: 
Found old entry for principal: %s (kvno %d) - trying to remove it.\n",
                                                princ_s, kt_entry.vno));
                                        ret = krb5_kt_end_seq_get(context, 
keytab, &cursor);
                                        ZERO_STRUCT(cursor);
                                        if (ret) {
-                                               
DEBUG(1,("smb_krb5_kt_add_entry: krb5_kt_end_seq_get() failed (%s)\n",
+                                               
DEBUG(1,("smb_krb5_kt_add_entry_ext: krb5_kt_end_seq_get() failed (%s)\n",
                                                        error_message(ret)));
                                                goto out;
                                        }
                                        ret = krb5_kt_remove_entry(context, 
keytab, &kt_entry);
                                        if (ret) {
-                                               
DEBUG(1,("smb_krb5_kt_add_entry: krb5_kt_remove_entry failed (%s)\n",
+                                               
DEBUG(1,("smb_krb5_kt_add_entry_ext: krb5_kt_remove_entry failed (%s)\n",
                                                        error_message(ret)));
                                                goto out;
                                        }
 
-                                       DEBUG(5,("smb_krb5_kt_add_entry: 
removed old entry for principal: %s (kvno %d).\n",
+                                       DEBUG(5,("smb_krb5_kt_add_entry_ext: 
removed old entry for principal: %s (kvno %d).\n",
                                                princ_s, kt_entry.vno));
 
                                        ret = krb5_kt_start_seq_get(context, 
keytab, &cursor);
                                        if (ret) {
-                                               
DEBUG(1,("smb_krb5_kt_add_entry: krb5_kt_start_seq failed (%s)\n",
+                                               
DEBUG(1,("smb_krb5_kt_add_entry_ext: krb5_kt_start_seq failed (%s)\n",
                                                        error_message(ret)));
                                                goto out;
                                        }
                                        ret = smb_krb5_kt_free_entry(context, 
&kt_entry);
                                        ZERO_STRUCT(kt_entry);
                                        if (ret) {
-                                               
DEBUG(1,("smb_krb5_kt_add_entry: krb5_kt_remove_entry failed (%s)\n",
+                                               
DEBUG(1,("smb_krb5_kt_add_entry_ext: krb5_kt_remove_entry failed (%s)\n",
                                                        error_message(ret)));
                                                goto out;
                                        }
@@ -138,7 +138,7 @@ int smb_krb5_kt_add_entry(krb5_context context,
                        ret = smb_krb5_kt_free_entry(context, &kt_entry);
                        ZERO_STRUCT(kt_entry);
                        if (ret) {
-                               DEBUG(1,("smb_krb5_kt_add_entry: 
smb_krb5_kt_free_entry failed (%s)\n", error_message(ret)));
+                               DEBUG(1,("smb_krb5_kt_add_entry_ext: 
smb_krb5_kt_free_entry failed (%s)\n", error_message(ret)));
                                goto out;
                        }
                }
@@ -146,7 +146,7 @@ int smb_krb5_kt_add_entry(krb5_context context,
                ret = krb5_kt_end_seq_get(context, keytab, &cursor);
                ZERO_STRUCT(cursor);
                if (ret) {
-                       DEBUG(1,("smb_krb5_kt_add_entry: krb5_kt_end_seq_get 
failed (%s)\n",error_message(ret)));
+                       DEBUG(1,("smb_krb5_kt_add_entry_ext: 
krb5_kt_end_seq_get failed (%s)\n",error_message(ret)));
                        goto out;
                }
        }
@@ -177,13 +177,13 @@ int smb_krb5_kt_add_entry(krb5_context context,
                kt_entry.principal = princ;
                kt_entry.vno       = kvno;
 
-               DEBUG(3,("smb_krb5_kt_add_entry: adding keytab entry for (%s) 
with encryption type (%d) and version (%d)\n",
+               DEBUG(3,("smb_krb5_kt_add_entry_ext: adding keytab entry for 
(%s) with encryption type (%d) and version (%d)\n",
                        princ_s, enctypes[i], kt_entry.vno));
                ret = krb5_kt_add_entry(context, keytab, &kt_entry);
                krb5_free_keyblock_contents(context, keyp);
                ZERO_STRUCT(kt_entry);
                if (ret) {
-                       DEBUG(1,("smb_krb5_kt_add_entry: adding entry to keytab 
failed (%s)\n", error_message(ret)));
+                       DEBUG(1,("smb_krb5_kt_add_entry_ext: adding entry to 
keytab failed (%s)\n", error_message(ret)));
                        goto out;
                }
        }
@@ -212,6 +212,22 @@ out:
        return (int)ret;
 }
 
+int smb_krb5_kt_add_entry(krb5_context context,
+                         krb5_keytab keytab,
+                         krb5_kvno kvno,
+                         const char *princ_s,
+                         krb5_enctype *enctypes,
+                         krb5_data password)
+{
+       return smb_krb5_kt_add_entry_ext(context,
+                                        keytab,
+                                        kvno,
+                                        princ_s,
+                                        enctypes,
+                                        password,
+                                        false,
+                                        false);
+}
 
 /**********************************************************************
  Adds a single service principal, i.e. 'host' to the system keytab
@@ -325,7 +341,7 @@ int ads_keytab_add_entry(ADS_STRUCT *ads, const char 
*srvPrinc)
        
        /* add the fqdn principal to the keytab */
        
-       ret = smb_krb5_kt_add_entry( context, keytab, kvno, princ_s, enctypes, 
password, false );
+       ret = smb_krb5_kt_add_entry( context, keytab, kvno, princ_s, enctypes, 
password );
        if ( ret ) {
                DEBUG(1,("ads_keytab_add_entry: Failed to add entry to keytab 
file\n"));
                goto out;
@@ -334,7 +350,7 @@ int ads_keytab_add_entry(ADS_STRUCT *ads, const char 
*srvPrinc)
        /* add the short principal name if we have one */
        
        if ( short_princ_s ) {
-               ret = smb_krb5_kt_add_entry( context, keytab, kvno, 
short_princ_s, enctypes, password, false );
+               ret = smb_krb5_kt_add_entry( context, keytab, kvno, 
short_princ_s, enctypes, password );
                if ( ret ) {
                        DEBUG(1,("ads_keytab_add_entry: Failed to add short 
entry to keytab file\n"));
                        goto out;
diff --git a/source/libnet/libnet_keytab.c b/source/libnet/libnet_keytab.c
index 90595e7..02c2b6f 100644
--- a/source/libnet/libnet_keytab.c
+++ b/source/libnet/libnet_keytab.c
@@ -120,13 +120,14 @@ krb5_error_code libnet_keytab_add(struct 
libnet_keytab_context *ctx)
                password.data = (char *)entry->password.data;
                password.length = entry->password.length;
 
-               ret = smb_krb5_kt_add_entry(ctx->context,
-                                           ctx->keytab,
-                                           entry->kvno,
-                                           entry->principal,
-                                           enctypes,
-                                           password,
-                                           true);
+               ret = smb_krb5_kt_add_entry_ext(ctx->context,
+                                               ctx->keytab,
+                                               entry->kvno,
+                                               entry->principal,
+                                               enctypes,
+                                               password,
+                                               true,
+                                               true);
                if (ret) {
                        DEBUG(1,("libnet_keytab_add: "
                                "Failed to add entry to keytab file\n"));


-- 
Samba Shared Repository

Reply via email to