chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
polkit: don't start polkit agent when running as root
[elogind.git]
/
src
/
shared
/
bus-util.c
diff --git
a/src/shared/bus-util.c
b/src/shared/bus-util.c
index f97d5b384669ba319ddf7c476536d8c3ee243d5d..94872a31c4603377f707fd9d6967dcb1c1380d74 100644
(file)
--- a/
src/shared/bus-util.c
+++ b/
src/shared/bus-util.c
@@
-1,5
+1,3
@@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
/***
This file is part of systemd.
/***
This file is part of systemd.
@@
-19,14
+17,24
@@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
+#include <errno.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/resource.h>
#include <sys/socket.h>
#include <sys/socket.h>
+#include <unistd.h>
+#include "sd-bus-protocol.h"
#include "sd-bus.h"
#include "sd-daemon.h"
#include "sd-event.h"
#include "sd-bus.h"
#include "sd-daemon.h"
#include "sd-event.h"
+#include "sd-id128.h"
#include "alloc-util.h"
#include "alloc-util.h"
-#include "bus-error.h"
#include "bus-internal.h"
#include "bus-label.h"
#include "bus-message.h"
#include "bus-internal.h"
#include "bus-label.h"
#include "bus-message.h"
@@
-35,7
+43,12
@@
#include "def.h"
//#include "env-util.h"
#include "escape.h"
#include "def.h"
//#include "env-util.h"
#include "escape.h"
+#include "extract-word.h"
#include "fd-util.h"
#include "fd-util.h"
+#include "hashmap.h"
+//#include "install.h"
+#include "kdbus.h"
+#include "log.h"
#include "macro.h"
#include "missing.h"
#include "parse-util.h"
#include "macro.h"
#include "missing.h"
#include "parse-util.h"
@@
-49,6
+62,7
@@
#include "string-util.h"
#include "strv.h"
#include "syslog-util.h"
#include "string-util.h"
#include "strv.h"
#include "syslog-util.h"
+#include "time-util.h"
#include "unit-name.h"
#include "user-util.h"
#include "utf8.h"
#include "unit-name.h"
#include "user-util.h"
#include "utf8.h"
@@
-183,7
+197,7
@@
int bus_event_loop_with_idle(
#endif // 0
int bus_name_has_owner(sd_bus *c, const char *name, sd_bus_error *error) {
#endif // 0
int bus_name_has_owner(sd_bus *c, const char *name, sd_bus_error *error) {
- _cleanup_
bus_message_unref_
sd_bus_message *rep = NULL;
+ _cleanup_
(sd_bus_message_unrefp)
sd_bus_message *rep = NULL;
int r, has_owner = 0;
assert(c);
int r, has_owner = 0;
assert(c);
@@
-209,7
+223,7
@@
int bus_name_has_owner(sd_bus *c, const char *name, sd_bus_error *error) {
}
static int check_good_user(sd_bus_message *m, uid_t good_user) {
}
static int check_good_user(sd_bus_message *m, uid_t good_user) {
- _cleanup_
bus_creds_unref_
sd_bus_creds *creds = NULL;
+ _cleanup_
(sd_bus_creds_unrefp)
sd_bus_creds *creds = NULL;
uid_t sender_uid;
int r;
uid_t sender_uid;
int r;
@@
-259,8
+273,8
@@
int bus_test_polkit(
return 1;
#ifdef ENABLE_POLKIT
else {
return 1;
#ifdef ENABLE_POLKIT
else {
- _cleanup_
bus_message_unref_
sd_bus_message *request = NULL;
- _cleanup_
bus_message_unref_
sd_bus_message *reply = NULL;
+ _cleanup_
(sd_bus_message_unrefp)
sd_bus_message *request = NULL;
+ _cleanup_
(sd_bus_message_unrefp)
sd_bus_message *reply = NULL;
int authorized = false, challenge = false;
const char *sender, **k, **v;
int authorized = false, challenge = false;
const char *sender, **k, **v;
@@
-363,7
+377,7
@@
static void async_polkit_query_free(AsyncPolkitQuery *q) {
}
static int async_polkit_callback(sd_bus_message *reply, void *userdata, sd_bus_error *error) {
}
static int async_polkit_callback(sd_bus_message *reply, void *userdata, sd_bus_error *error) {
- _cleanup_
bus_error_free_
sd_bus_error error_buffer = SD_BUS_ERROR_NULL;
+ _cleanup_
(sd_bus_error_free)
sd_bus_error error_buffer = SD_BUS_ERROR_NULL;
AsyncPolkitQuery *q = userdata;
int r;
AsyncPolkitQuery *q = userdata;
int r;
@@
-401,7
+415,7
@@
int bus_verify_polkit_async(
sd_bus_error *error) {
#ifdef ENABLE_POLKIT
sd_bus_error *error) {
#ifdef ENABLE_POLKIT
- _cleanup_
bus_message_unref_
sd_bus_message *pk = NULL;
+ _cleanup_
(sd_bus_message_unrefp)
sd_bus_message *pk = NULL;
AsyncPolkitQuery *q;
const char *sender, **k, **v;
sd_bus_message_handler_t callback;
AsyncPolkitQuery *q;
const char *sender, **k, **v;
sd_bus_message_handler_t callback;
@@
-590,7
+604,7
@@
int bus_check_peercred(sd_bus *c) {
}
int bus_connect_system_systemd(sd_bus **_bus) {
}
int bus_connect_system_systemd(sd_bus **_bus) {
- _cleanup_
bus_unref_
sd_bus *bus = NULL;
+ _cleanup_
(sd_bus_unrefp)
sd_bus *bus = NULL;
int r;
assert(_bus);
int r;
assert(_bus);
@@
-644,7
+658,7
@@
int bus_connect_system_systemd(sd_bus **_bus) {
}
int bus_connect_user_systemd(sd_bus **_bus) {
}
int bus_connect_user_systemd(sd_bus **_bus) {
- _cleanup_
bus_unref_
sd_bus *bus = NULL;
+ _cleanup_
(sd_bus_unrefp)
sd_bus *bus = NULL;
_cleanup_free_ char *ee = NULL;
const char *e;
int r;
_cleanup_free_ char *ee = NULL;
const char *e;
int r;
@@
-833,7
+847,7
@@
int bus_print_property(const char *name, sd_bus_message *property, bool all) {
if (r < 0)
return r;
if (r < 0)
return r;
- while((r = sd_bus_message_read_basic(property, SD_BUS_TYPE_STRING, &str)) > 0) {
+ while
((r = sd_bus_message_read_basic(property, SD_BUS_TYPE_STRING, &str)) > 0) {
_cleanup_free_ char *escaped = NULL;
if (first)
_cleanup_free_ char *escaped = NULL;
if (first)
@@
-911,8
+925,8
@@
int bus_print_property(const char *name, sd_bus_message *property, bool all) {
}
int bus_print_all_properties(sd_bus *bus, const char *dest, const char *path, char **filter, bool all) {
}
int bus_print_all_properties(sd_bus *bus, const char *dest, const char *path, char **filter, bool all) {
- _cleanup_
bus_message_unref_
sd_bus_message *reply = NULL;
- _cleanup_
bus_error_free_
sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_
(sd_bus_message_unrefp)
sd_bus_message *reply = NULL;
+ _cleanup_
(sd_bus_error_free)
sd_bus_error error = SD_BUS_ERROR_NULL;
int r;
assert(bus);
int r;
assert(bus);
@@
-1058,7
+1072,7
@@
static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_
}
case SD_BUS_TYPE_UINT32: {
}
case SD_BUS_TYPE_UINT32: {
- uint
64
_t u;
+ uint
32
_t u;
uint32_t *p = userdata;
r = sd_bus_message_read_basic(m, type, &u);
uint32_t *p = userdata;
r = sd_bus_message_read_basic(m, type, &u);
@@
-1095,7
+1109,7
@@
int bus_message_map_all_properties(
const struct bus_properties_map *map,
void *userdata) {
const struct bus_properties_map *map,
void *userdata) {
- _cleanup_
bus_error_free_
sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_
(sd_bus_error_free)
sd_bus_error error = SD_BUS_ERROR_NULL;
int r;
assert(m);
int r;
assert(m);
@@
-1203,8
+1217,8
@@
int bus_map_all_properties(
const struct bus_properties_map *map,
void *userdata) {
const struct bus_properties_map *map,
void *userdata) {
- _cleanup_
bus_message_unref_
sd_bus_message *m = NULL;
- _cleanup_
bus_error_free_
sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_
(sd_bus_message_unrefp)
sd_bus_message *m = NULL;
+ _cleanup_
(sd_bus_error_free)
sd_bus_error error = SD_BUS_ERROR_NULL;
int r;
assert(bus);
int r;
assert(bus);
@@
-1409,7
+1423,7
@@
int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
return bus_log_create_error(r);
field = strndupa(assignment, eq - assignment);
return bus_log_create_error(r);
field = strndupa(assignment, eq - assignment);
- eq
++;
+ eq++;
if (streq(field, "CPUQuota")) {
if (streq(field, "CPUQuota")) {
@@
-1438,7
+1452,7
@@
int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
eq[0] == '-');
goto finish;
eq[0] == '-');
goto finish;
- } else if (STR_IN_SET(field, "AccuracySec", "RandomizedDelaySec")) {
+ } else if (STR_IN_SET(field, "AccuracySec", "RandomizedDelaySec"
, "RuntimeMaxSec"
)) {
char *n;
usec_t t;
size_t l;
char *n;
usec_t t;
size_t l;
@@
-2027,20
+2041,21
@@
static const struct {
{ "start-limit", "start of the service was attempted too often" }
};
{ "start-limit", "start of the service was attempted too often" }
};
-static void log_job_error_with_service_result(const char* service, const char *result, const char *extra_args) {
- _cleanup_free_ char *service_shell_quoted = NULL, *systemctl_extra_args = NULL;
+static void log_job_error_with_service_result(const char* service, const char *result, const char* const* extra_args) {
+ _cleanup_free_ char *service_shell_quoted = NULL;
+ const char *systemctl = "systemctl", *journalctl = "journalctl";
assert(service);
service_shell_quoted = shell_maybe_quote(service);
assert(service);
service_shell_quoted = shell_maybe_quote(service);
- systemctl_extra_args = strjoin("systemctl ", extra_args, " ", NULL);
- if (!systemctl_extra_args) {
- log_oom();
- return;
- }
+ if (extra_args && extra_args[1]) {
+ _cleanup_free_ char *t;
- systemctl_extra_args = strstrip(systemctl_extra_args);
+ t = strv_join((char**) extra_args, " ");
+ systemctl = strjoina("systemctl ", t ?: "<args>", NULL);
+ journalctl = strjoina("journalctl ", t ?: "<args>", NULL);
+ }
if (!isempty(result)) {
unsigned i;
if (!isempty(result)) {
unsigned i;
@@
-2050,30
+2065,34
@@
static void log_job_error_with_service_result(const char* service, const char *r
break;
if (i < ELEMENTSOF(explanations)) {
break;
if (i < ELEMENTSOF(explanations)) {
- log_error("Job for %s failed because %s. See \"%s status %s\" and \"journalctl -xe\" for details.\n",
+ log_error("Job for %s failed because %s.\n"
+ "See \"%s status %s\" and \"%s -xe\" for details.\n",
service,
explanations[i].explanation,
service,
explanations[i].explanation,
- systemctl
_extra_args
,
- s
trna(service_shell_quoted));
-
+ systemctl,
+ s
ervice_shell_quoted ?: "<service>",
+ journalctl);
goto finish;
}
}
goto finish;
}
}
- log_error("Job for %s failed. See \"%s status %s\" and \"journalctl -xe\" for details.\n",
+ log_error("Job for %s failed.\n"
+ "See \"%s status %s\" and \"%s -xe\" for details.\n",
service,
service,
- systemctl_extra_args,
- strna(service_shell_quoted));
+ systemctl,
+ service_shell_quoted ?: "<service>",
+ journalctl);
finish:
/* For some results maybe additional explanation is required */
if (streq_ptr(result, "start-limit"))
finish:
/* For some results maybe additional explanation is required */
if (streq_ptr(result, "start-limit"))
- log_info("To force a start use \"%1$s reset-failed %2$s\" followed by \"%1$s start %2$s\" again.",
- systemctl_extra_args,
- strna(service_shell_quoted));
+ log_info("To force a start use \"%1$s reset-failed %2$s\"\n"
+ "followed by \"%1$s start %2$s\" again.",
+ systemctl,
+ service_shell_quoted ?: "<service>");
}
}
-static int check_wait_response(BusWaitForJobs *d, bool quiet, const char
*
extra_args) {
+static int check_wait_response(BusWaitForJobs *d, bool quiet, const char
* const*
extra_args) {
int r = 0;
assert(d->result);
int r = 0;
assert(d->result);
@@
-2124,7
+2143,7
@@
static int check_wait_response(BusWaitForJobs *d, bool quiet, const char *extra_
return r;
}
return r;
}
-int bus_wait_for_jobs(BusWaitForJobs *d, bool quiet, const char
*
extra_args) {
+int bus_wait_for_jobs(BusWaitForJobs *d, bool quiet, const char
* const*
extra_args) {
int r = 0;
assert(d);
int r = 0;
assert(d);