]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
lib:krb5_wrap: Add Heimdal‐specific smb_krb5_princ_component() implementation
authorJoseph Sutton <josephsutton@catalyst.net.nz>
Tue, 5 Sep 2023 03:07:05 +0000 (15:07 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 14 Sep 2023 21:35:29 +0000 (21:35 +0000)
This implementation doesn’t rely on a variable of static storage
duration being used as a conduit for the return value.

Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/krb5_wrap/krb5_samba.c
source4/auth/kerberos/kerberos.h

index c9bef2dd1bccf267e83dc7275bc449d9cf985033..6f9ae4d822b18adaa66f9317f7073237b522e625 100644 (file)
@@ -142,14 +142,30 @@ const krb5_data *krb5_princ_component(krb5_context context,
 #endif
 
 krb5_error_code smb_krb5_princ_component(krb5_context context,
-                                        krb5_principal principal,
+                                        krb5_const_principal principal,
                                         int i,
                                         krb5_data *data);
 krb5_error_code smb_krb5_princ_component(krb5_context context,
-                                        krb5_principal principal,
+                                        krb5_const_principal principal,
                                         int i,
                                         krb5_data *data)
 {
+#if defined(HAVE_KRB5_PRINCIPAL_GET_COMP_STRING) && !defined(HAVE_KRB5_PRINC_COMPONENT)
+       const char *component = NULL;
+
+       if (i < 0) {
+               return EINVAL;
+       }
+
+       component = krb5_principal_get_comp_string(context, principal, i);
+       if (component == NULL) {
+               return ENOENT;
+       }
+
+       *data = smb_krb5_make_data(discard_const_p(char, component), strlen(component));
+
+       return 0;
+#else
        const krb5_data *kdata = NULL;
 
        if (i < 0) {
@@ -164,6 +180,7 @@ krb5_error_code smb_krb5_princ_component(krb5_context context,
        *data = *kdata;
 
        return 0;
+#endif
 }
 
 /**********************************************************
index 807b1cde26a2bbe4842590a83207c6c1f77a4332..41c9b048aaf3cddb710d69e7fd75add377d86a5a 100644 (file)
@@ -66,7 +66,7 @@ const krb5_data *krb5_princ_component(krb5_context context, krb5_principal princ
 #endif
 
 krb5_error_code smb_krb5_princ_component(krb5_context context,
-                                        krb5_principal principal,
+                                        krb5_const_principal principal,
                                         int i,
                                         krb5_data *data);