[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Fri Apr 11 08:39:02 UTC 2025


The branch, master has been updated
       via  6d6531d0e21 testprogs: Use 'sync machine password to keytab' for keytab creation
       via  6008120a77e testprogs: Remove dead code
       via  5e5f0e3742b docs-xml: Document 'net ads keytab list'
       via  2f4c6c6633b s3:net: 'net ads keytab list' should only list default keytab
       via  684ca0b028b s3:net: Remove `net ads keytab flush`
      from  7089ece58ef smbd: convert all fsp->fh->private_options to fsp_flags

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 6d6531d0e21d37f85e01e4c849dc5051b2a8a708
Author: Andreas Schneider <asn at samba.org>
Date:   Fri Apr 11 09:32:30 2025 +0200

    testprogs: Use 'sync machine password to keytab' for keytab creation
    
    We want to get rid of dedicatedkeytabfile for writing keytabs.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Pavel Filipenský <pfilipensky at samba.org>
    
    Autobuild-User(master): Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date(master): Fri Apr 11 08:38:49 UTC 2025 on atb-devel-224

commit 6008120a77e67853307a58476afc6504ff7a538b
Author: Andreas Schneider <asn at samba.org>
Date:   Fri Apr 11 09:27:02 2025 +0200

    testprogs: Remove dead code
    
    The test for this has been removed already, this is just leftover.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Pavel Filipenský <pfilipensky at samba.org>

commit 5e5f0e3742b6141d212d31c24f503c96e5d74be9
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 10 17:34:10 2025 +0200

    docs-xml: Document 'net ads keytab list'
    
    Reviewed-by: Pavel Filipenský <pfilipensky at samba.org>

commit 2f4c6c6633b75e98f967483dde39d8b8a6967908
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 10 16:13:42 2025 +0200

    s3:net: 'net ads keytab list' should only list default keytab
    
    If you don't specify a keytab, assume we just want the default keytab. This will
    make upcoming changes to the code easier.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Pavel Filipenský <pfilipensky at samba.org>

commit 684ca0b028b2f6d4ba2c616cda62e52a075f869f
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Apr 10 16:07:46 2025 +0200

    s3:net: Remove `net ads keytab flush`
    
    This removes all entries from a keytab *and* removes all SPNs from the AD
    machine account. We should not do that and if you want to get rid of the keytab
    you can use `rm`.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Pavel Filipenský <pfilipensky at samba.org>

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

Summary of changes:
 docs-xml/manpages/net.8.xml        |   9 +++
 source3/libads/ads_proto.h         |   1 -
 source3/libads/kerberos_keytab.c   | 129 ++++++-------------------------------
 source3/utils/net_ads.c            |  44 +------------
 testprogs/blackbox/test_net_ads.sh |  34 ++++------
 5 files changed, 40 insertions(+), 177 deletions(-)


Changeset truncated at 500 lines:

diff --git a/docs-xml/manpages/net.8.xml b/docs-xml/manpages/net.8.xml
index 01b704c8841..a2cdcac1e9c 100644
--- a/docs-xml/manpages/net.8.xml
+++ b/docs-xml/manpages/net.8.xml
@@ -1636,6 +1636,15 @@ available.
 </para>
 </refsect2>
 
+<refsect2>
+    <title>ADS KEYTAB <replaceable>LIST</replaceable> <replaceable>[keytab]</replaceable></title>
+
+    <para>
+        The command will list the contents of a keytab. If no keytab is
+        specified it will display the default keytab configured by KRB5.
+    </para>
+</refsect2>
+
 <refsect2>
 <title>(Removed!) ADS KEYTAB <replaceable>DELETE</replaceable> <replaceable>(principal | machine | serviceclass | windows SPN)</replaceable></title>
 
diff --git a/source3/libads/ads_proto.h b/source3/libads/ads_proto.h
index 8440c35e46d..e5b68530866 100644
--- a/source3/libads/ads_proto.h
+++ b/source3/libads/ads_proto.h
@@ -62,7 +62,6 @@ void ads_disp_sd(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, struct security_descripto
 
 /* The following definitions come from libads/kerberos_keytab.c  */
 
-int ads_keytab_flush(ADS_STRUCT *ads);
 int ads_keytab_list(const char *keytab_name);
 
 /* The following definitions come from libads/net_ads_setspn.c  */
diff --git a/source3/libads/kerberos_keytab.c b/source3/libads/kerberos_keytab.c
index 49a892e5a55..ed26c6af499 100644
--- a/source3/libads/kerberos_keytab.c
+++ b/source3/libads/kerberos_keytab.c
@@ -34,13 +34,13 @@
 
 #ifdef HAVE_KRB5
 
-#ifdef HAVE_ADS
-
 /* This MAX_NAME_LEN is a constant defined in krb5.h */
 #ifndef MAX_KEYTAB_NAME_LEN
 #define MAX_KEYTAB_NAME_LEN 1100
 #endif
 
+#ifdef HAVE_ADS
+
 enum spn_spec_type {
 	SPN_SPEC_ACCOUNT_NAME,
 	SPN_SPEC_SYNC_ACCOUNT_NAME,
@@ -1152,108 +1152,6 @@ params_ready:
 	TALLOC_FREE(frame);
 	return NT_STATUS_OK;
 }
-
-static krb5_error_code ads_keytab_open(krb5_context context,
-				       krb5_keytab *keytab)
-{
-	char keytab_str[MAX_KEYTAB_NAME_LEN] = {0};
-	const char *keytab_name = NULL;
-	krb5_error_code ret = 0;
-
-	switch (lp_kerberos_method()) {
-	case KERBEROS_VERIFY_SYSTEM_KEYTAB:
-	case KERBEROS_VERIFY_SECRETS_AND_KEYTAB:
-		ret = krb5_kt_default_name(context,
-					   keytab_str,
-					   sizeof(keytab_str) - 2);
-		if (ret != 0) {
-			DBG_WARNING("Failed to get default keytab name\n");
-			goto out;
-		}
-		keytab_name = keytab_str;
-		break;
-	case KERBEROS_VERIFY_DEDICATED_KEYTAB:
-		keytab_name = lp_dedicated_keytab_file();
-		break;
-	default:
-		DBG_ERR("Invalid kerberos method set (%d)\n",
-			lp_kerberos_method());
-		ret = KRB5_KT_BADNAME;
-		goto out;
-	}
-
-	if (keytab_name == NULL || keytab_name[0] == '\0') {
-		DBG_ERR("Invalid keytab name\n");
-		ret = KRB5_KT_BADNAME;
-		goto out;
-	}
-
-	ret = smb_krb5_kt_open(context, keytab_name, true, keytab);
-	if (ret != 0) {
-		DBG_WARNING("smb_krb5_kt_open failed (%s)\n",
-			    error_message(ret));
-		goto out;
-	}
-
-out:
-	return ret;
-}
-
-/**********************************************************************
- Flushes all entries from the system keytab.
-***********************************************************************/
-
-int ads_keytab_flush(ADS_STRUCT *ads)
-{
-	krb5_error_code ret = 0;
-	krb5_context context = NULL;
-	krb5_keytab keytab = NULL;
-	ADS_STATUS aderr;
-
-	ret = smb_krb5_init_context_common(&context);
-	if (ret) {
-		DBG_ERR("kerberos init context failed (%s)\n",
-			error_message(ret));
-		return ret;
-	}
-
-	ret = ads_keytab_open(context, &keytab);
-	if (ret != 0) {
-		goto out;
-	}
-
-	/* Seek and delete all old keytab entries */
-	ret = smb_krb5_kt_seek_and_delete_old_entries(context,
-						      keytab,
-						      false, /* keep_old_kvno */
-						      -1,
-						      false, /* enctype_only */
-						      ENCTYPE_NULL,
-						      NULL,
-						      NULL,
-						      true); /* flush */
-	if (ret) {
-		goto out;
-	}
-
-	aderr = ads_clear_service_principal_names(ads, lp_netbios_name());
-	if (!ADS_ERR_OK(aderr)) {
-		DEBUG(1, (__location__ ": Error while clearing service "
-			  "principal listings in LDAP.\n"));
-		ret = -1;
-		goto out;
-	}
-
-out:
-	if (keytab) {
-		krb5_kt_close(context, keytab);
-	}
-	if (context) {
-		krb5_free_context(context);
-	}
-	return ret;
-}
-
 #endif /* HAVE_ADS */
 
 /**********************************************************************
@@ -1267,6 +1165,7 @@ int ads_keytab_list(const char *keytab_name)
 	krb5_keytab keytab = NULL;
 	krb5_kt_cursor cursor;
 	krb5_keytab_entry kt_entry;
+	char default_keytab[MAX_KEYTAB_NAME_LEN] = {0};
 
 	ZERO_STRUCT(kt_entry);
 	ZERO_STRUCT(cursor);
@@ -1279,14 +1178,22 @@ int ads_keytab_list(const char *keytab_name)
 	}
 
 	if (keytab_name == NULL) {
-#ifdef HAVE_ADS
-		ret = ads_keytab_open(context, &keytab);
-#else
-		ret = ENOENT;
-#endif
-	} else {
-		ret = smb_krb5_kt_open(context, keytab_name, False, &keytab);
+		/*
+		 * If you don't specify a keytab, assume we want the default
+		 * keytab.
+		 */
+		ret = krb5_kt_default_name(context,
+					   default_keytab,
+					   sizeof(default_keytab) - 2);
+		if (ret != 0) {
+			DBG_WARNING("Failed to get default keytab name\n");
+			goto out;
+		}
+
+		keytab_name = default_keytab;
 	}
+
+	ret = smb_krb5_kt_open(context, keytab_name, false, &keytab);
 	if (ret) {
 		DEBUG(1, ("smb_krb5_kt_open failed (%s)\n",
 			  error_message(ret)));
diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c
index 0128f3eb7e8..3ef2b41e5a3 100644
--- a/source3/utils/net_ads.c
+++ b/source3/utils/net_ads.c
@@ -2911,40 +2911,6 @@ out:
 	return ret;
 }
 
-static int net_ads_keytab_flush(struct net_context *c,
-				int argc,
-				const char **argv)
-{
-	TALLOC_CTX *tmp_ctx = talloc_stackframe();
-	ADS_STRUCT *ads = NULL;
-	ADS_STATUS status;
-	int ret = -1;
-
-	if (c->display_usage) {
-		d_printf(  "%s\n"
-			   "net ads keytab flush\n"
-			   "    %s\n",
-			 _("Usage:"),
-			 _("Delete the whole keytab"));
-		TALLOC_FREE(tmp_ctx);
-		return -1;
-	}
-
-	if (!c->explicit_credentials) {
-		net_use_krb_machine_account(c);
-	}
-
-	status = ads_startup(c, true, tmp_ctx, &ads);
-	if (!ADS_ERR_OK(status)) {
-		goto out;
-	}
-
-	ret = ads_keytab_flush(ads);
-out:
-	TALLOC_FREE(tmp_ctx);
-	return ret;
-}
-
 static int net_ads_keytab_create(struct net_context *c, int argc, const char **argv)
 {
 	NTSTATUS ntstatus;
@@ -2978,7 +2944,7 @@ static int net_ads_keytab_list(struct net_context *c, int argc, const char **arg
 		d_printf("%s\n%s",
 			 _("Usage:"),
 			 _("net ads keytab list [keytab]\n"
-			   "  List a local keytab\n"
+			   "  List a local keytab (default: krb5 default)\n"
 			   "    keytab\tKeytab to list\n"));
 		return -1;
 	}
@@ -3001,14 +2967,6 @@ int net_ads_keytab(struct net_context *c, int argc, const char **argv)
 			N_("net ads keytab create\n"
 			   "    Create (sync) a fresh keytab or update existing one (see also smb.conf 'sync machine password to keytab'.")
 		},
-		{
-			"flush",
-			net_ads_keytab_flush,
-			NET_TRANSPORT_ADS,
-			N_("Remove all keytab entries"),
-			N_("net ads keytab flush\n"
-			   "    Remove all keytab entries")
-		},
 		{
 			"list",
 			net_ads_keytab_list,
diff --git a/testprogs/blackbox/test_net_ads.sh b/testprogs/blackbox/test_net_ads.sh
index b14dc2b1633..5340056cc3e 100755
--- a/testprogs/blackbox/test_net_ads.sh
+++ b/testprogs/blackbox/test_net_ads.sh
@@ -92,7 +92,6 @@ if [ ! -f $dedicated_keytab_file ]; then
 fi
 
 if [ -f $dedicated_keytab_file ]; then
-	testit "keytab list (dedicated keytab)" $VALGRIND $net_tool ads keytab list --option="kerberosmethod=dedicatedkeytab" --option="dedicatedkeytabfile=$dedicated_keytab_file" || failed=$(expr $failed + 1)
 	testit "keytab list keytab specified on cmdline" $VALGRIND $net_tool ads keytab list $dedicated_keytab_file || failed=$(expr $failed + 1)
 fi
 
@@ -141,28 +140,19 @@ testit_grep "dns alias SPN" $dns_alias2 $VALGRIND $net_tool ads search -P samacc
 testit_grep "dns alias addl" $dns_alias1 $VALGRIND $net_tool ads search -P samaccountname=$netbios\$ msDS-AdditionalDnsHostName || failed=$(expr $failed + 1)
 testit_grep "dns alias addl" $dns_alias2 $VALGRIND $net_tool ads search -P samaccountname=$netbios\$ msDS-AdditionalDnsHostName || failed=$(expr $failed + 1)
 
-# Test binary msDS-AdditionalDnsHostName like ones added by Windows DC
-short_alias_file="$BASEDIR/$WORKDIR/short_alias_file"
-printf 'short_alias\0$' >$short_alias_file
-cat >$BASEDIR/$WORKDIR/tmpldbmodify <<EOF
-dn: CN=$HOSTNAME,$computers_dn
-changetype: modify
-add: msDS-AdditionalDnsHostName
-msDS-AdditionalDnsHostName:< file://$short_alias_file
-EOF
-
-testit "add binary msDS-AdditionalDnsHostName" $VALGRIND $ldbmodify -k yes -U$DC_USERNAME%$DC_PASSWORD -H ldap://$SERVER.$REALM $BASEDIR/$WORKDIR/tmpldbmodify || failed=$(expr $failed + 1)
-
-testit_grep "addl short alias" short_alias $ldbsearch --show-binary -U$DC_USERNAME%$DC_PASSWORD -H ldap://$SERVER.$REALM --scope=base -b "CN=$HOSTNAME,CN=Computers,$base_dn" msDS-AdditionalDnsHostName || failed=$(expr $failed + 1)
-
-rm -f $BASEDIR/$WORKDIR/tmpldbmodify $short_alias_file
-
 dedicated_keytab_file="$BASEDIR/$WORKDIR/test_dns_aliases_dedicated_krb5.keytab"
-
-testit "dns alias create_keytab" $VALGRIND $net_tool ads keytab create --option="kerberosmethod=dedicatedkeytab" --option="dedicatedkeytabfile=$dedicated_keytab_file" || failed=$(expr $failed + 1)
-
-testit_grep "dns alias1 check keytab" "HOST/${dns_alias1}@$REALM" $net_tool ads keytab list --option="kerberosmethod=dedicatedkeytab" --option="dedicatedkeytabfile=$dedicated_keytab_file" || failed=$(expr $failed + 1)
-testit_grep "dns alias2 check keytab" "HOST/${dns_alias2}@$REALM" $net_tool ads keytab list --option="kerberosmethod=dedicatedkeytab" --option="dedicatedkeytabfile=$dedicated_keytab_file" || failed=$(expr $failed + 1)
+testit "dns alias create_keytab" \
+	$VALGRIND $net_tool ads keytab create --option="syncmachinepasswordtokeytab=${dedicated_keytab_file}:sync_spns:machine_password" || \
+	failed=$(expr $failed + 1)
+
+testit_grep "dns alias1 check keytab" \
+	"HOST/${dns_alias1}@$REALM" \
+	$net_tool ads keytab list "${dedicated_keytab_file}" || \
+	failed=$(expr $failed + 1)
+testit_grep "dns alias2 check keytab" \
+	"HOST/${dns_alias2}@$REALM" \
+	$net_tool ads keytab list "${dedicated_keytab_file}" || \
+	failed=$(expr $failed + 1)
 
 rm -f $dedicated_keytab_file
 


-- 
Samba Shared Repository



More information about the samba-cvs mailing list