lib:krb5_wrap: Do not create a temporary file for MEMORY keytabs
authorAndreas Schneider <asn@samba.org>
Wed, 9 Oct 2019 18:11:03 +0000 (20:11 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Sat, 12 Oct 2019 16:18:39 +0000 (16:18 +0000)
The autobuild cleanup script fails with:

The tree has 3 new uncommitted files!!!
git clean -n
Would remove MEMORY:tmp_smb_creds_SK98Lv
Would remove MEMORY:tmp_smb_creds_kornU6
Would remove MEMORY:tmp_smb_creds_ljR828

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
lib/krb5_wrap/krb5_samba.c

index a4e73c64f002aedf5668c89c4cb8e72eb3a22723..5aceae44eecbc866a857fae393b5e98757ada1f8 100644 (file)
@@ -2002,26 +2002,23 @@ krb5_error_code smb_krb5_kinit_keyblock_ccache(krb5_context ctx,
                                            krb_options);
 #elif defined(HAVE_KRB5_GET_INIT_CREDS_KEYTAB)
 {
-#define SMB_CREDS_KEYTAB "MEMORY:tmp_smb_creds_XXXXXX"
-       char tmp_name[sizeof(SMB_CREDS_KEYTAB)];
+#define SMB_CREDS_KEYTAB "MEMORY:tmp_kinit_keyblock_ccache"
+       char tmp_name[64] = {0};
        krb5_keytab_entry entry;
        krb5_keytab keytab;
-       int tmpfd;
-       mode_t mask;
+       int rc;
 
        memset(&entry, 0, sizeof(entry));
        entry.principal = principal;
        *(KRB5_KT_KEY(&entry)) = *keyblock;
 
-       memcpy(tmp_name, SMB_CREDS_KEYTAB, sizeof(SMB_CREDS_KEYTAB));
-       mask = umask(S_IRWXO | S_IRWXG);
-       tmpfd = mkstemp(tmp_name);
-       umask(mask);
-       if (tmpfd == -1) {
-               DBG_ERR("Failed to mkstemp %s\n", tmp_name);
+       rc = snprintf(tmp_name, sizeof(tmp_name),
+                     "%s-%p",
+                     SMB_CREDS_KEYTAB,
+                     &my_creds);
+       if (rc < 0) {
                return KRB5_KT_BADNAME;
        }
-       close(tmpfd);
        code = krb5_kt_resolve(ctx, tmp_name, &keytab);
        if (code) {
                return code;