]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/login/logind-session.h
Verify validity of session name when received from outside
[thirdparty/systemd.git] / src / login / logind-session.h
CommitLineData
90821c93
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
c2f1db8f 3#pragma once
90821c93
LP
4
5/***
6 This file is part of systemd.
7
8 Copyright 2011 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
90821c93
LP
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 18 Lesser General Public License for more details.
90821c93 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
90821c93
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
24typedef struct Session Session;
9444b1f2 25typedef enum KillWho KillWho;
90821c93
LP
26
27#include "list.h"
28#include "util.h"
29#include "logind.h"
30#include "logind-seat.h"
31#include "logind-user.h"
4b549144 32#include "login-shared.h"
90821c93 33
0604381b 34typedef enum SessionState {
fb6becb4 35 SESSION_OPENING, /* Session scope is being created */
0604381b
LP
36 SESSION_ONLINE, /* Logged in */
37 SESSION_ACTIVE, /* Logged in and in the fg */
fb6becb4 38 SESSION_CLOSING, /* Logged out, but scope is still there */
0604381b
LP
39 _SESSION_STATE_MAX,
40 _SESSION_STATE_INVALID = -1
41} SessionState;
42
55efac6c
LP
43typedef enum SessionClass {
44 SESSION_USER,
45 SESSION_GREETER,
46 SESSION_LOCK_SCREEN,
e2acb67b 47 SESSION_BACKGROUND,
55efac6c
LP
48 _SESSION_CLASS_MAX,
49 _SESSION_CLASS_INVALID = -1
50} SessionClass;
51
e2acb67b
LP
52typedef enum SessionType {
53 SESSION_UNSPECIFIED,
54 SESSION_TTY,
55 SESSION_X11,
56 _SESSION_TYPE_MAX,
57 _SESSION_TYPE_INVALID = -1
58} SessionType;
59
9444b1f2 60enum KillWho {
de07ab16
LP
61 KILL_LEADER,
62 KILL_ALL,
63 _KILL_WHO_MAX,
64 _KILL_WHO_INVALID = -1
9444b1f2 65};
de07ab16 66
90821c93
LP
67struct Session {
68 Manager *manager;
69
70 char *id;
71 SessionType type;
55efac6c 72 SessionClass class;
90821c93
LP
73
74 char *state_file;
75
76 User *user;
77
78 dual_timestamp timestamp;
79
80 char *tty;
81 char *display;
82
83 bool remote;
3f49d45a 84 char *remote_user;
90821c93 85 char *remote_host;
98a28fef 86 char *service;
fb6becb4
LP
87
88 char *scope;
89 char *scope_job;
98a28fef 90
90821c93
LP
91 int vtnr;
92 Seat *seat;
93
94 pid_t leader;
3f49d45a 95 uint32_t audit_id;
90821c93 96
932e3ee7
LP
97 int fifo_fd;
98 char *fifo_path;
90821c93 99
a185c5aa
LP
100 bool idle_hint;
101 dual_timestamp idle_hint_timestamp;
102
14c3baca 103 bool in_gc_queue:1;
9418f147 104 bool started:1;
405e0255 105 bool closing:1;
90821c93 106
fb6becb4
LP
107 DBusMessage *create_message;
108
90821c93
LP
109 LIST_FIELDS(Session, sessions_by_user);
110 LIST_FIELDS(Session, sessions_by_seat);
14c3baca
LP
111
112 LIST_FIELDS(Session, gc_queue);
90821c93
LP
113};
114
9444b1f2 115Session *session_new(Manager *m, const char *id);
90821c93 116void session_free(Session *s);
9444b1f2 117void session_set_user(Session *s, User *u);
4a4b033f 118int session_check_gc(Session *s, bool drop_not_started);
14c3baca 119void session_add_to_gc_queue(Session *s);
90821c93
LP
120int session_activate(Session *s);
121bool session_is_active(Session *s);
a185c5aa 122int session_get_idle_hint(Session *s, dual_timestamp *t);
bef422ae 123void session_set_idle_hint(Session *s, bool b);
932e3ee7
LP
124int session_create_fifo(Session *s);
125void session_remove_fifo(Session *s);
90821c93
LP
126int session_start(Session *s);
127int session_stop(Session *s);
405e0255 128int session_finalize(Session *s);
90821c93
LP
129int session_save(Session *s);
130int session_load(Session *s);
de07ab16 131int session_kill(Session *s, KillWho who, int signo);
90821c93 132
3f49d45a
LP
133char *session_bus_path(Session *s);
134
0604381b
LP
135SessionState session_get_state(Session *u);
136
3f49d45a
LP
137extern const DBusObjectPathVTable bus_session_vtable;
138
da119395 139int session_send_signal(Session *s, bool new_session);
9418f147 140int session_send_changed(Session *s, const char *properties);
88e3dc90 141int session_send_lock(Session *s, bool lock);
7ba64386 142int session_send_lock_all(Manager *m, bool lock);
da119395 143
fb6becb4
LP
144int session_send_create_reply(Session *s, DBusError *error);
145
44a6b1b6
ZJS
146const char* session_state_to_string(SessionState t) _const_;
147SessionState session_state_from_string(const char *s) _pure_;
0604381b 148
44a6b1b6
ZJS
149const char* session_type_to_string(SessionType t) _const_;
150SessionType session_type_from_string(const char *s) _pure_;
90821c93 151
44a6b1b6
ZJS
152const char* session_class_to_string(SessionClass t) _const_;
153SessionClass session_class_from_string(const char *s) _pure_;
55efac6c 154
44a6b1b6
ZJS
155const char *kill_who_to_string(KillWho k) _const_;
156KillWho kill_who_from_string(const char *s) _pure_;