]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/login/test-inhibit.c
Add SPDX license identifiers to source files under the LGPL
[thirdparty/systemd.git] / src / login / test-inhibit.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
f8e2fb7b
LP
2/***
3 This file is part of systemd.
4
5 Copyright 2012 Lennart Poettering
6
7 systemd is free software; you can redistribute it and/or modify it
8 under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 2.1 of the License, or
10 (at your option) any later version.
11
12 systemd is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public License
18 along with systemd; If not, see <http://www.gnu.org/licenses/>.
19***/
20
21#include <unistd.h>
22
997d4ae7 23#include "sd-bus.h"
07630cea 24
997d4ae7 25#include "bus-util.h"
3ffd4af2 26#include "fd-util.h"
07630cea
LP
27#include "macro.h"
28#include "util.h"
f8e2fb7b 29
997d4ae7 30static int inhibit(sd_bus *bus, const char *what) {
4afd3348
LP
31 _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
32 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
dd5f0a96 33 const char *who = "Test Tool", *reason = "Just because!", *mode = "block";
f8e2fb7b 34 int fd;
997d4ae7 35 int r;
f8e2fb7b 36
997d4ae7 37 r = sd_bus_call_method(bus,
f8e2fb7b
LP
38 "org.freedesktop.login1",
39 "/org/freedesktop/login1",
40 "org.freedesktop.login1.Manager",
997d4ae7
KS
41 "Inhibit",
42 &error,
43 &reply,
44 "ssss", what, who, reason, mode);
787784c4 45 assert_se(r >= 0);
f8e2fb7b 46
997d4ae7 47 r = sd_bus_message_read_basic(reply, SD_BUS_TYPE_UNIX_FD, &fd);
787784c4
RC
48 assert_se(r >= 0);
49 assert_se(fd >= 0);
f8e2fb7b 50
997d4ae7 51 return dup(fd);
f8e2fb7b
LP
52}
53
997d4ae7 54static void print_inhibitors(sd_bus *bus) {
4afd3348
LP
55 _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
56 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
997d4ae7
KS
57 const char *what, *who, *why, *mode;
58 uint32_t uid, pid;
f8e2fb7b 59 unsigned n = 0;
997d4ae7 60 int r;
f8e2fb7b 61
997d4ae7 62 r = sd_bus_call_method(bus,
f8e2fb7b
LP
63 "org.freedesktop.login1",
64 "/org/freedesktop/login1",
65 "org.freedesktop.login1.Manager",
997d4ae7
KS
66 "ListInhibitors",
67 &error,
68 &reply,
69 "");
787784c4 70 assert_se(r >= 0);
f8e2fb7b 71
997d4ae7 72 r = sd_bus_message_enter_container(reply, SD_BUS_TYPE_ARRAY, "(ssssuu)");
787784c4 73 assert_se(r >= 0);
f8e2fb7b 74
997d4ae7 75 while ((r = sd_bus_message_read(reply, "(ssssuu)", &what, &who, &why, &mode, &uid, &pid)) > 0) {
1fa2f38f 76 printf("what=<%s> who=<%s> why=<%s> mode=<%s> uid=<%"PRIu32"> pid=<%"PRIu32">\n",
de0671ee 77 what, who, why, mode, uid, pid);
f8e2fb7b 78
f8e2fb7b
LP
79 n++;
80 }
787784c4 81 assert_se(r >= 0);
f8e2fb7b
LP
82
83 printf("%u inhibitors\n", n);
f8e2fb7b
LP
84}
85
86int main(int argc, char*argv[]) {
4afd3348 87 _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
f8e2fb7b 88 int fd1, fd2;
997d4ae7 89 int r;
f8e2fb7b 90
997d4ae7 91 r = sd_bus_open_system(&bus);
787784c4 92 assert_se(r >= 0);
f8e2fb7b
LP
93
94 print_inhibitors(bus);
95
4943c1c9 96 fd1 = inhibit(bus, "sleep");
787784c4 97 assert_se(fd1 >= 0);
f8e2fb7b
LP
98 print_inhibitors(bus);
99
100 fd2 = inhibit(bus, "idle:shutdown");
787784c4 101 assert_se(fd2 >= 0);
f8e2fb7b
LP
102 print_inhibitors(bus);
103
03e334a1 104 safe_close(fd1);
f8e2fb7b
LP
105 sleep(1);
106 print_inhibitors(bus);
107
03e334a1 108 safe_close(fd2);
f8e2fb7b
LP
109 sleep(1);
110 print_inhibitors(bus);
111
112 return 0;
113}