Line data Source code
1 : /*
2 : SSSD
3 :
4 : Pack user info messages
5 :
6 : Authors:
7 : Sumit Bose <sbose@redhat.com>
8 :
9 : Copyright (C) 2009 Red Hat
10 :
11 : This program is free software; you can redistribute it and/or modify
12 : it under the terms of the GNU General Public License as published by
13 : the Free Software Foundation; either version 3 of the License, or
14 : (at your option) any later version.
15 :
16 : This program is distributed in the hope that it will be useful,
17 : but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : GNU General Public License for more details.
20 :
21 : You should have received a copy of the GNU General Public License
22 : along with this program. If not, see <http://www.gnu.org/licenses/>.
23 : */
24 :
25 : #include "util/util.h"
26 : #include "util/user_info_msg.h"
27 : #include "sss_client/sss_cli.h"
28 :
29 0 : errno_t pack_user_info_chpass_error(TALLOC_CTX *mem_ctx,
30 : const char *user_error_message,
31 : size_t *resp_len,
32 : uint8_t **_resp)
33 : {
34 0 : uint32_t resp_type = SSS_PAM_USER_INFO_CHPASS_ERROR;
35 : size_t err_len;
36 : uint8_t *resp;
37 : size_t p;
38 :
39 0 : err_len = strlen(user_error_message);
40 0 : *resp_len = 2 * sizeof(uint32_t) + err_len;
41 0 : resp = talloc_size(mem_ctx, *resp_len);
42 0 : if (resp == NULL) {
43 0 : DEBUG(SSSDBG_CRIT_FAILURE, "talloc_size failed.\n");
44 0 : return ENOMEM;
45 : }
46 :
47 0 : p = 0;
48 0 : SAFEALIGN_SET_UINT32(&resp[p], resp_type, &p);
49 0 : SAFEALIGN_SET_UINT32(&resp[p], err_len, &p);
50 0 : safealign_memcpy(&resp[p], user_error_message, err_len, &p);
51 0 : if (p != *resp_len) {
52 0 : DEBUG(SSSDBG_FATAL_FAILURE, "Size mismatch\n");
53 : }
54 :
55 0 : *_resp = resp;
56 0 : return EOK;
57 : }
|