libnet: Fix Coverity ID 1634803 Dereference after null check
[samba4-gss.git] / auth / auth_util.c
blobec9094d0f158224428014c66618e7f19a13b1f54
1 /*
2 Unix SMB/CIFS implementation.
3 Authentication utility functions
5 Copyright (C) Andrew Bartlett <abartlet@samba.org> 2017
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #include "includes.h"
22 #include "librpc/ndr/libndr.h"
23 #include "librpc/gen_ndr/ndr_auth.h"
24 #include "auth_util.h"
26 struct auth_session_info *copy_session_info(TALLOC_CTX *mem_ctx,
27 const struct auth_session_info *src)
29 TALLOC_CTX *frame = talloc_stackframe();
30 struct auth_session_info *dst;
31 DATA_BLOB blob;
32 enum ndr_err_code ndr_err;
34 ndr_err = ndr_push_struct_blob(
35 &blob,
36 frame,
37 src,
38 (ndr_push_flags_fn_t)ndr_push_auth_session_info);
39 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
40 DBG_ERR("copy_session_info(): ndr_push_auth_session_info "
41 "failed: %s\n",
42 ndr_errstr(ndr_err));
43 TALLOC_FREE(frame);
44 return NULL;
47 dst = talloc_zero(mem_ctx, struct auth_session_info);
48 if (dst == NULL) {
49 DBG_ERR("talloc failed\n");
50 TALLOC_FREE(frame);
51 return NULL;
54 ndr_err = ndr_pull_struct_blob(
55 &blob,
56 dst,
57 dst,
58 (ndr_pull_flags_fn_t)ndr_pull_auth_session_info);
60 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
61 DBG_ERR("copy_session_info(): ndr_pull_auth_session_info "
62 "failed: %s\n",
63 ndr_errstr(ndr_err));
64 TALLOC_FREE(dst);
65 TALLOC_FREE(frame);
66 return NULL;
69 TALLOC_FREE(frame);
70 return dst;