2 Unix SMB/CIFS implementation.
3 Low-level sessionid.tdb access functions
4 Copyright (C) Volker Lendecke 2010
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #include "system/filesys.h"
22 #include "dbwrap/dbwrap.h"
23 #include "dbwrap/dbwrap_open.h"
26 #include "smbd/globals.h"
27 #include "source3/smbd/smbXsrv_session.h"
28 #include "../libcli/security/session.h"
30 struct sessionid_traverse_read_state
{
31 int (*fn
)(const char *key
, struct sessionid
*session
,
36 static int sessionid_traverse_read_fn(struct smbXsrv_session_global0
*global
,
39 struct sessionid_traverse_read_state
*state
=
40 (struct sessionid_traverse_read_state
*)private_data
;
41 struct auth_session_info
*session_info
= global
->auth_session_info
;
42 struct sessionid session
= {
45 .id_num
= global
->session_global_id
,
46 .connect_start
= nt_time_to_unix(global
->creation_time
),
47 .pid
= global
->channels
[0].server_id
,
48 .connection_dialect
= global
->connection_dialect
,
52 if (session_info
!= NULL
) {
53 enum security_user_level ul
;
55 session
.uid
= session_info
->unix_token
->uid
;
56 session
.gid
= session_info
->unix_token
->gid
;
57 strncpy(session
.username
,
58 session_info
->unix_info
->unix_name
,
61 ul
= security_session_user_level(session_info
, NULL
);
62 if (ul
>= SECURITY_USER
) {
63 session
.authenticated
= true;
67 strncpy(session
.remote_machine
,
68 global
->channels
[0].remote_name
,
70 strncpy(session
.hostname
,
71 global
->channels
[0].remote_address
,
73 strncpy(session
.netbios_name
,
74 global
->channels
[0].remote_name
,
76 snprintf(session
.id_str
, sizeof(fstring
)-1,
77 "smb/%u", global
->session_global_id
);
78 strncpy(session
.ip_addr_str
,
79 global
->channels
[0].remote_address
,
82 session
.encryption_flags
= global
->encryption_flags
;
83 session
.cipher
= global
->channels
[0].encryption_cipher
;
84 session
.signing_flags
= global
->signing_flags
;
85 session
.signing
= global
->channels
[0].signing_algo
;
87 return state
->fn(NULL
, &session
, state
->private_data
);
90 NTSTATUS
sessionid_traverse_read(int (*fn
)(const char *key
,
91 struct sessionid
*session
,
95 struct sessionid_traverse_read_state state
;
99 state
.private_data
= private_data
;
100 status
= smbXsrv_session_global_traverse(sessionid_traverse_read_fn
,