1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
/*
SSSD
Data Provider, private header file
Copyright (C) Simo Sorce <ssorce@redhat.com> 2008
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __DATA_PROVIDER_H__
#define __DATA_PROVIDER_H__
#include <stdint.h>
#include <sys/un.h>
#include <errno.h>
#include <stdbool.h>
#include "talloc.h"
#include "tevent.h"
#include "ldb.h"
#include "util/util.h"
#include "confdb/confdb.h"
#include "dbus/dbus.h"
#include "sbus/sssd_dbus.h"
#include "sbus/sbus_client.h"
#include "../sss_client/sss_cli.h"
#define DATA_PROVIDER_VERSION 0x0001
#define DATA_PROVIDER_SERVICE_NAME "dp"
#define DATA_PROVIDER_PIPE "private/sbus-dp"
#define DATA_PROVIDER_DB_FILE "sssd.ldb"
#define DATA_PROVIDER_DB_CONF_SEC "config/services/nss"
#define MOD_OFFLINE 0x0000
#define MOD_ONLINE 0x0001
#define DP_INTERFACE "org.freedesktop.sssd.dataprovider"
#define DP_PATH "/org/freedesktop/sssd/dataprovider"
#define BE_PROVIDE_ACC_INFO (1<<8)
#define BE_PROVIDE_PAM (1<<9)
#define BE_PROVIDE_POLICY (1<<10)
#define DP_METHOD_REGISTER "RegisterService"
#define DP_METHOD_ONLINE "getOnline"
#define DP_METHOD_GETACCTINFO "getAccountInfo"
#define DP_METHOD_PAMHANDLER "pamHandler"
#define DP_ERR_OK 0
#define DP_ERR_OFFLINE 1
#define DP_ERR_TIMEOUT 2
#define DP_ERR_FATAL 3
#define BE_ATTR_CORE 1
#define BE_ATTR_MEM 2
#define BE_ATTR_ALL 3
#define BE_FILTER_NAME 1
#define BE_FILTER_IDNUM 2
#define BE_REQ_USER 1
#define BE_REQ_GROUP 2
#define BE_REQ_INITGROUPS 3
/* AUTH related common data and functions */
#define DEBUG_PAM_DATA(level, pd) do { \
if (level <= debug_level) pam_print_data(level, pd); \
} while(0);
struct response_data {
int32_t type;
int32_t len;
uint8_t *data;
struct response_data *next;
};
struct pam_data {
int cmd;
uint32_t authtok_type;
uint32_t authtok_size;
uint32_t newauthtok_type;
uint32_t newauthtok_size;
char *domain;
char *user;
char *service;
char *tty;
char *ruser;
char *rhost;
uint8_t *authtok;
uint8_t *newauthtok;
uint32_t cli_pid;
int pam_status;
int response_delay;
struct response_data *resp_list;
bool offline_auth;
int priv;
uid_t pw_uid;
gid_t gr_gid;
const char *upn;
};
/* from dp_auth_util.c */
void pam_print_data(int l, struct pam_data *pd);
int pam_add_response(struct pam_data *pd,
enum response_type type,
int len, const uint8_t *data);
bool dp_pack_pam_request(DBusMessage *msg, struct pam_data *pd);
bool dp_unpack_pam_request(DBusMessage *msg, struct pam_data *pd,
DBusError *dbus_error);
bool dp_pack_pam_response(DBusMessage *msg, struct pam_data *pd);
bool dp_unpack_pam_response(DBusMessage *msg, struct pam_data *pd,
DBusError *dbus_error);
int dp_common_send_id(struct sbus_connection *conn, uint16_t version,
const char *name, const char *domain);
/* from dp_sbus.c */
int dp_get_sbus_address(TALLOC_CTX *mem_ctx,
char **address, const char *domain_name);
#endif /* __DATA_PROVIDER_ */
|