The branch, master has been updated
       via  4fef05e5dff doc-xml: Document "net ads kerberos" commands
       via  ca70b7433ad s3-net: properly setup krb5 ccache name via 
--use-krb5-ccache
       via  59de6255906 s3-selftest: Activate "net ads kerberos kinit" tests 
with --use-krb5-ccache
       via  4fb7fee036f s3-selftest: verify KRB5CCNAME presence after kinit 
using klist
       via  37f38b1d1b2 s3-selftest: mention in-memory ccache usage when 
nothing is provided
      from  c59269bb43c tests: Make recycle:touch test less flakey

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


- Log -----------------------------------------------------------------
commit 4fef05e5dff17a4ba575f6fc621b624cb81375d2
Author: Günther Deschner <[email protected]>
Date:   Sat Dec 13 13:49:37 2025 +0100

    doc-xml: Document "net ads kerberos" commands
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15840
    
    Guenther
    
    Signed-off-by: Guenther Deschner <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>
    
    Autobuild-User(master): Günther Deschner <[email protected]>
    Autobuild-Date(master): Mon Jan  5 15:49:04 UTC 2026 on atb-devel-224

commit ca70b7433ad7a661f4795764e34c183d19a76cca
Author: Günther Deschner <[email protected]>
Date:   Tue Dec 2 16:56:44 2025 +0100

    s3-net: properly setup krb5 ccache name via --use-krb5-ccache
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15840
    
    Guenther
    
    Signed-off-by: Guenther Deschner <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 59de6255906d454ee2bddffb8d00441df9510382
Author: Günther Deschner <[email protected]>
Date:   Tue Dec 2 17:01:31 2025 +0100

    s3-selftest: Activate "net ads kerberos kinit" tests with --use-krb5-ccache
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15840
    
    Guenther
    
    Signed-off-by: Guenther Deschner <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 4fb7fee036f8e6b46e8d2a49935f49a4d5ce3376
Author: Günther Deschner <[email protected]>
Date:   Tue Dec 2 17:18:41 2025 +0100

    s3-selftest: verify KRB5CCNAME presence after kinit using klist
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15840
    
    Guenther
    
    Signed-off-by: Guenther Deschner <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

commit 37f38b1d1b20e474d4b2e546f935f4e57dd1ed5f
Author: Günther Deschner <[email protected]>
Date:   Tue Dec 2 17:17:33 2025 +0100

    s3-selftest: mention in-memory ccache usage when nothing is provided
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15840
    
    Guenther
    
    Signed-off-by: Guenther Deschner <[email protected]>
    Reviewed-by: Andreas Schneider <[email protected]>

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

Summary of changes:
 docs-xml/manpages/net.8.xml                   | 139 ++++++++++++++++++++++++++
 source3/script/tests/test_net_ads_kerberos.sh |  44 +++++---
 source3/utils/net.c                           |  19 ++--
 source3/utils/net_ads.c                       |   4 +
 4 files changed, 187 insertions(+), 19 deletions(-)


Changeset truncated at 500 lines:

diff --git a/docs-xml/manpages/net.8.xml b/docs-xml/manpages/net.8.xml
index d5043e7d07b..65ff0fa41c1 100644
--- a/docs-xml/manpages/net.8.xml
+++ b/docs-xml/manpages/net.8.xml
@@ -1810,7 +1810,146 @@ the following entry types;
 
 </refsect2>
 
+<refsect2>
+       <title>ADS KERBEROS</title>
+
+<para>
+       Issue Kerberos operations against an Active Directory KDC.
+</para>
+
+</refsect2>
+
+<refsect2>
+       <title>ADS KERBEROS KINIT</title>
+
+<para>
+       Issue a kinit request for a given user. When no other options are
+       defined the ticket granting ticket (TGT) will be stored in a memory 
cache.
+</para>
+
+<para>
+       To store the TGT in a different location either use the
+       <option>--krb5-ccache</option> option or set the
+       <replaceable>KRB5CCNAME</replaceable> environment variable.
+</para>
+
+<para>Example: <userinput>net ads kerberos kinit -P 
--krb5-ccache=/tmp/krb5cache</userinput></para>
+
+</refsect2>
+
+<refsect2>
+       <title>ADS KERBEROS RENEW</title>
+
+<para>
+       Renew an already acquired ticket granting ticket (TGT).
+</para>
+
+<para>Example: <userinput>net ads kerberos renew</userinput></para>
+
+</refsect2>
+
+<refsect2>
+       <title>ADS KERBEROS PAC</title>
+
+<para>
+       Request a Kerberos PAC while authenticating to an Active Directory KDC.
+</para>
+
+<para>
+       The following commands are provided:
+</para>
+
+<simplelist>
+<member>net ads kerberos pac dump - Dump a PAC to stdout.</member>
+<member>net ads kerneros pac save - Save a PAC to a file.</member>
+</simplelist>
+
+<para>
+       All commands allow to define an impersonation principal to do a Kerberos
+       Service for User (S4U2SELF) operation via
+       the <replaceable>impersonate=STRING</replaceable> option.
+       The impersonation principal can have multiple different formats:
+</para>
+
+<itemizedlist>
+       <listitem>
+               <para><replaceable>[email protected]</replaceable></para>
+               <para>This is the default format.</para>
+       </listitem>
+       <listitem>
+               <para><replaceable>[email protected]@MY.REALM</replaceable></para>
+               <para>The Kerberos Service for User (S4U2SELF) also supports
+               Enterprise Principals.</para>
+       </listitem>
+       <listitem>
+               <para><replaceable>[email protected]@MY.REALM</replaceable></para>
+               <para>Enterprise Principal using a defined upn suffix.</para>
+       </listitem>
+       <listitem>
+               <para><replaceable>user@[email protected]</replaceable></para>
+               <para>Enterprise Principal with netbios domain name.
+               This format is currently not supported by Samba AD.</para>
+       </listitem>
+</itemizedlist>
 
+<para>
+       By default net will request a service ticket for the local service
+       of the joined machine. A different service can be defined via
+        <replaceable>local_service=STRING</replaceable>.
+</para>
+
+</refsect2>
+<refsect2>
+       <title>ADS KERBEROS PAC DUMP [impersonate=string] 
[local_service=string] [pac_buffer_type=int]</title>
+
+<para>
+       Request a Kerberos PAC while authenticating to an Active Directory KDC.
+       The PAC will be printed on stdout.
+</para>
+
+<para>
+       When no specific pac_buffer is selected, all buffers will be printed.
+       It is possible to select a specific one via
+       <replaceable>pac_buffer_type=INT</replaceable> from this list:
+</para>
+
+<simplelist>
+<member>1 PAC_TYPE_LOGON_INFO</member>
+<member>2 PAC_TYPE_CREDENTIAL_INFO</member>
+<member>6 PAC_TYPE_SRV_CHECKSUM</member>
+<member>7 PAC_TYPE_KDC_CHECKSUM</member>
+<member>10 PAC_TYPE_LOGON_NAME</member>
+<member>11 PAC_TYPE_CONSTRAINED_DELEGATION</member>
+<member>12 PAC_TYPE_UPN_DNS_INFO</member>
+<member>13 PAC_TYPE_CLIENT_CLAIMS_INFO</member>
+<member>14 PAC_TYPE_DEVICE_INFO</member>
+<member>15 PAC_TYPE_DEVICE_CLAIMS_INFO</member>
+<member>16 PAC_TYPE_TICKET_CHECKSUM</member>
+<member>17 PAC_TYPE_ATTRIBUTES_INFO</member>
+<member>18 PAC_TYPE_REQUESTER_SID</member>
+<member>19 PAC_TYPE_FULL_CHECKSUM</member>
+</simplelist>
+
+<para>Example: <userinput>net ads kerberos pac dump -P 
[email protected]</userinput></para>
+
+</refsect2>
+
+<refsect2>
+       <title>ADS KERBEROS PAC SAVE [impersonate=string] 
[local_service=string] [filename=string]</title>
+
+<para>
+       Request a Kerberos PAC while authenticating to an Active Directory KDC.
+       The PAC will be saved in a file.
+</para>
+
+<para>
+       The filename to store the PAC can be set via the
+       <replaceable>filename=STRING</replaceable> option.
+</para>
+
+<para>Example: <userinput>net ads kerberos pac save -U user%password 
filename=/tmp/pacstore</userinput></para>
+
+</refsect2>
 <refsect2>
 <title>SAM CREATEBUILTINGROUP &lt;NAME&gt;</title>
 
diff --git a/source3/script/tests/test_net_ads_kerberos.sh 
b/source3/script/tests/test_net_ads_kerberos.sh
index 8a3c9ef2bc7..b7933bab6a6 100755
--- a/source3/script/tests/test_net_ads_kerberos.sh
+++ b/source3/script/tests/test_net_ads_kerberos.sh
@@ -14,6 +14,12 @@ PREFIX="$4"
 shift 4
 ADDARGS="$*"
 
+if [ -x $(which klist) ]; then
+       KLIST=$(which klist);
+else
+       KLIST="test -e";
+fi
+
 incdir=$(dirname "$0")/../../../testprogs/blackbox
 . "$incdir"/subunit.sh
 
@@ -30,6 +36,7 @@ KRB5CCNAME="FILE:$KRB5CCNAME_PATH"
 ## Test "net ads kerberos kinit" variants
 #################################################
 
+#simply uses in memory ccache
 testit "net_ads_kerberos_kinit" \
        "$VALGRIND" "$BINDIR"/net ads kerberos kinit \
        -U"$USERNAME"%"$PASSWORD" "$ADDARGS" \
@@ -40,16 +47,23 @@ testit "net_ads_kerberos_kinit (KRB5CCNAME env set)" \
        "$VALGRIND" "$BINDIR"/net ads kerberos kinit \
        -U"$USERNAME"%"$PASSWORD" "$ADDARGS" \
        || failed=$((failed + 1))
+testit "klist env $KRB5CCNAME" \
+       "$KLIST" "$KRB5CCNAME" \
+       || failed=$((failed +1))
 unset KRB5CCNAME
 rm -f "$KRB5CCNAME_PATH"
 
-# --use-krb5-ccache is not working
-#testit "net_ads_kerberos_kinit (with --use-krb5-ccache)" \
-#      $VALGRIND $BINDIR/net ads kerberos kinit \
-#      -U$USERNAME%$PASSWORD $ADDARGS \
-#      --use-krb5-ccache=${KRB5CCNAME} \
-#      || failed=$((failed + 1))
+testit "net_ads_kerberos_kinit (with --use-krb5-ccache)" \
+       "$VALGRIND" "$BINDIR"/net ads kerberos kinit \
+       -U"$USERNAME"%"$PASSWORD" "$ADDARGS" \
+       --use-krb5-ccache="${KRB5CCNAME_PATH}" \
+       || failed=$((failed + 1))
+testit "klist --use-krb5-ccache $KRB5CCNAME_PATH" \
+       "$KLIST" "$KRB5CCNAME_PATH" \
+       || failed=$((failed +1))
+rm -f "$KRB5CCNAME_PATH"
 
+#simply uses in memory ccache
 testit "net_ads_kerberos_kinit (-P)" \
        "$VALGRIND" "$BINDIR"/net ads kerberos kinit \
        -P "$ADDARGS" \
@@ -60,15 +74,21 @@ testit "net_ads_kerberos_kinit (-P and KRB5CCNAME env set)" 
\
        "$VALGRIND" "$BINDIR"/net ads kerberos kinit \
        -P "$ADDARGS" \
        || failed=$((failed + 1))
+testit "klist env $KRB5CCNAME" \
+       "$KLIST" "$KRB5CCNAME" \
+       || failed=$((failed +1))
 unset KRB5CCNAME
 rm -f "$KRB5CCNAME_PATH"
 
-# --use-krb5-ccache is not working
-#testit "net_ads_kerberos_kinit (-P with --use-krb5-ccache)" \
-#      $VALGRIND $BINDIR/net ads kerberos kinit \
-#      -P $ADDARGS \
-#      --use-krb5-ccache=${KRB5CCNAME} \
-#      || failed=$((failed + 1))
+testit "net_ads_kerberos_kinit (-P with --use-krb5-ccache)" \
+       "$VALGRIND" "$BINDIR"/net ads kerberos kinit \
+       -P "$ADDARGS" \
+       --use-krb5-ccache="${KRB5CCNAME_PATH}" \
+       || failed=$((failed + 1))
+testit "klist --use-krb5-ccache $KRB5CCNAME_PATH" \
+       "$KLIST" "$KRB5CCNAME_PATH" \
+       || failed=$((failed +1))
+rm -f "$KRB5CCNAME_PATH"
 
 
 #################################################
diff --git a/source3/utils/net.c b/source3/utils/net.c
index ecabd980d0c..271c96cf804 100644
--- a/source3/utils/net.c
+++ b/source3/utils/net.c
@@ -1396,7 +1396,7 @@ static struct functable net_func[] = {
                        cli_credentials_get_principal_obtained(c->creds);
                enum credentials_obtained password_obtained =
                        cli_credentials_get_password_obtained(c->creds);
-               char *krb5ccname = NULL;
+               const char *krb5ccname = NULL;
 
                if (principal_obtained == CRED_SPECIFIED) {
                        c->explicit_credentials = true;
@@ -1415,15 +1415,20 @@ static struct functable net_func[] = {
                }
 
                /* cli_credentials_get_ccache_name_obtained() would not work
-                * here, we also cannot get the content of --use-krb5-ccache= so
-                * for now at least honour the KRB5CCNAME environment variable
-                * to get 'net ads kerberos' functions to work at all - gd */
-
-               krb5ccname = getenv("KRB5CCNAME");
-               if (krb5ccname == NULL) {
+                * here but we can now access the content of the
+                * --use-krb5-ccache option via cli credentials. Fallback to
+                * KRB5CCNAME environment variable to get 'net ads kerberos'
+                * functions to work at all - gd */
+
+               krb5ccname = cli_credentials_get_out_ccache_name(c->creds);
+               if (krb5ccname == NULL || krb5ccname[0] == '\0') {
+                       krb5ccname = getenv("KRB5CCNAME");
+               }
+               if (krb5ccname == NULL || krb5ccname[0] == '\0') {
                        krb5ccname = talloc_strdup(c, "MEMORY:net");
                }
                if (krb5ccname == NULL) {
+                       DBG_ERR("Not able to setup krb5 ccache");
                        exit(1);
                }
                c->opt_krb5_ccache = krb5ccname;
diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c
index a335517c544..3048d95b5f2 100644
--- a/source3/utils/net_ads.c
+++ b/source3/utils/net_ads.c
@@ -3245,7 +3245,11 @@ static int net_ads_kerberos_kinit(struct net_context *c, 
int argc, const char **
        if (ret) {
                d_printf(_("failed to kinit password: %s\n"),
                        nt_errstr(status));
+               return ret;
        }
+
+       d_printf("Stored Kerberos TGT in: %s\n", c->opt_krb5_ccache);
+
        return ret;
 }
 


-- 
Samba Shared Repository

Reply via email to