s3: tests: Add new test_stream_dir_rename.sh test.
[Samba.git] / lib / util / talloc_keep_secret.c
blob21048659e5df70a0d39f61669b10af4cb3646d53
1 /*
2 * Copyright (c) 2019 Andreas Schneider <asn@samba.org>
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 #include "replace.h"
19 #include <talloc.h>
20 #include "lib/util/fault.h"
21 #include "talloc_keep_secret.h"
23 static int talloc_keep_secret_destructor(void *ptr)
25 int ret;
26 size_t size = talloc_get_size(ptr);
28 if (unlikely(size == 0)) {
29 return 0;
32 ret = memset_s(ptr, size, 0, size);
33 if (unlikely(ret != 0)) {
34 char *msg = NULL;
35 int ret2;
36 ret2 = asprintf(&msg,
37 "talloc_keep_secret_destructor: memset_s() failed: %s",
38 strerror(ret));
39 if (ret2 != -1) {
40 smb_panic(msg);
41 } else {
42 smb_panic("talloc_keep_secret_destructor: memset_s() failed");
46 return 0;
49 void _talloc_keep_secret(void *ptr, const char *name)
51 size_t size;
53 if (unlikely(ptr == NULL)) {
54 #ifdef DEVELOPER
55 smb_panic("Invalid talloc pointer");
56 #endif
57 return;
60 size = talloc_get_size(ptr);
61 if (unlikely(size == 0)) {
62 return;
65 talloc_set_name_const(ptr, name);
66 talloc_set_destructor(ptr, talloc_keep_secret_destructor);