[systemd-devel] [PATCH 1/2] When warning about unsupported options, be more detailed

Zbigniew Jędrzejewski-Szmek zbyszek at in.waw.pl
Sun Nov 30 07:55:38 PST 2014


---
I think this would be useful. Comments?

 src/core/load-fragment-gperf.gperf.m4 | 28 ++++++++++++++--------------
 src/core/load-fragment.c              | 15 ++++++++++++---
 src/core/load-fragment.h              |  5 +++++
 3 files changed, 31 insertions(+), 17 deletions(-)

diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
index a94b805..46c19d1 100644
--- a/src/core/load-fragment-gperf.gperf.m4
+++ b/src/core/load-fragment-gperf.gperf.m4
@@ -54,10 +54,10 @@ m4_ifdef(`HAVE_SECCOMP',
 $1.SystemCallArchitectures,      config_parse_syscall_archs,         0,                             offsetof($1, exec_context.syscall_archs)
 $1.SystemCallErrorNumber,        config_parse_syscall_errno,         0,                             offsetof($1, exec_context)
 $1.RestrictAddressFamilies,      config_parse_address_families,      0,                             offsetof($1, exec_context)',
-`$1.SystemCallFilter,            config_parse_warn_compat,           0,                             0
-$1.SystemCallArchitectures,      config_parse_warn_compat,           0,                             0
-$1.SystemCallErrorNumber,        config_parse_warn_compat,           0,                             0
-$1.RestrictAddressFamilies,      config_parse_warn_compat,           0,                             0')
+`$1.SystemCallFilter,            config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG
+$1.SystemCallArchitectures,      config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG
+$1.SystemCallErrorNumber,        config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG
+$1.RestrictAddressFamilies,      config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG')
 $1.LimitCPU,                     config_parse_limit,                 RLIMIT_CPU,                    offsetof($1, exec_context.rlimit)
 $1.LimitFSIZE,                   config_parse_limit,                 RLIMIT_FSIZE,                  offsetof($1, exec_context.rlimit)
 $1.LimitDATA,                    config_parse_limit,                 RLIMIT_DATA,                   offsetof($1, exec_context.rlimit)
@@ -88,18 +88,18 @@ $1.RuntimeDirectoryMode,         config_parse_mode,                  0,
 $1.RuntimeDirectory,             config_parse_runtime_directory,     0,                             offsetof($1, exec_context.runtime_directory)
 m4_ifdef(`HAVE_PAM',
 `$1.PAMName,                     config_parse_unit_string_printf,    0,                             offsetof($1, exec_context.pam_name)',
-`$1.PAMName,                     config_parse_warn_compat,           0,                             0')
+`$1.PAMName,                     config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG')
 $1.IgnoreSIGPIPE,                config_parse_bool,                  0,                             offsetof($1, exec_context.ignore_sigpipe)
 $1.UtmpIdentifier,               config_parse_unit_string_printf,    0,                             offsetof($1, exec_context.utmp_id)
 m4_ifdef(`HAVE_SELINUX',
 `$1.SELinuxContext,              config_parse_exec_selinux_context,  0,                             offsetof($1, exec_context)',
-`$1.SELinuxContext,              config_parse_warn_compat,           0,                             0')
+`$1.SELinuxContext,              config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG')
 m4_ifdef(`HAVE_APPARMOR',
 `$1.AppArmorProfile,             config_parse_exec_apparmor_profile, 0,                             offsetof($1, exec_context)',
-`$1.AppArmorProfile,             config_parse_warn_compat,           0,                             0')
+`$1.AppArmorProfile,             config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG')
 m4_ifdef(`HAVE_SMACK',
 `$1.SmackProcessLabel,           config_parse_exec_smack_process_label, 0,                          offsetof($1, exec_context)',
-`$1.SmackProcessLabel,           config_parse_warn_compat,           0,                             0')'
+`$1.SmackProcessLabel,           config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG')'
 )m4_dnl
 m4_define(`KILL_CONTEXT_CONFIG_ITEMS',
 `$1.SendSIGKILL,                 config_parse_bool,                  0,                             offsetof($1, kill_context.send_sigkill)
@@ -225,14 +225,14 @@ Service.RestartForceExitStatus,  config_parse_set_status,            0,
 Service.SuccessExitStatus,       config_parse_set_status,            0,                             offsetof(Service, success_status)
 m4_ifdef(`HAVE_SYSV_COMPAT',
 `Service.SysVStartPriority,      config_parse_sysv_priority,         0,                             offsetof(Service, sysv_start_priority)',
-`Service.SysVStartPriority,      config_parse_warn_compat,           0,                             0')
+`Service.SysVStartPriority,      config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG')
 Service.NonBlocking,             config_parse_bool,                  0,                             offsetof(Service, exec_context.non_blocking)
 Service.BusName,                 config_parse_unit_string_printf,    0,                             offsetof(Service, bus_name)
 Service.NotifyAccess,            config_parse_notify_access,         0,                             offsetof(Service, notify_access)
 Service.Sockets,                 config_parse_service_sockets,       0,                             0
 m4_ifdef(`ENABLE_KDBUS',
 `Service.BusPolicy,              config_parse_bus_endpoint_policy,   0,                             offsetof(Service, exec_context)',
-`Service.BusPolicy,              config_parse_warn_compat,           0,                             0')
+`Service.BusPolicy,              config_parse_warn_compat,           0,                             ABSENCE_REASON_EXPERIMENTAL')
 EXEC_CONTEXT_CONFIG_ITEMS(Service)m4_dnl
 CGROUP_CONTEXT_CONFIG_ITEMS(Service)m4_dnl
 KILL_CONTEXT_CONFIG_ITEMS(Service)m4_dnl
@@ -287,12 +287,12 @@ m4_ifdef(`HAVE_SMACK',
 `Socket.SmackLabel,              config_parse_string,                0,                             offsetof(Socket, smack)
 Socket.SmackLabelIPIn,           config_parse_string,                0,                             offsetof(Socket, smack_ip_in)
 Socket.SmackLabelIPOut,          config_parse_string,                0,                             offsetof(Socket, smack_ip_out)',
-`Socket.SmackLabel,              config_parse_warn_compat,           0,                             0
-Socket.SmackLabelIPIn,           config_parse_warn_compat,           0,                             0
-Socket.SmackLabelIPOut,          config_parse_warn_compat,           0,                             0')
+`Socket.SmackLabel,              config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG
+Socket.SmackLabelIPIn,           config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG
+Socket.SmackLabelIPOut,          config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG')
 m4_ifdef(`HAVE_SELINUX',
 `Socket.SELinuxContextFromNet,   config_parse_bool,                  0,                             offsetof(Socket, selinux_context_from_net)',
-`Socket.SELinuxContextFromNet,   config_parse_warn_compat,           0,                             0')
+`Socket.SELinuxContextFromNet,   config_parse_warn_compat,           0,                             ABSENCE_REASON_CONFIG')
 EXEC_CONTEXT_CONFIG_ITEMS(Socket)m4_dnl
 CGROUP_CONTEXT_CONFIG_ITEMS(Socket)m4_dnl
 KILL_CONTEXT_CONFIG_ITEMS(Socket)m4_dnl
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index 4309121..84d1f6f 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -76,10 +76,19 @@ int config_parse_warn_compat(
                 const char *rvalue,
                 void *data,
                 void *userdata) {
+        AbsenceReason reason = PTR_TO_INT(userdata);
+
+        switch(reason) {
+        case ABSENCE_REASON_CONFIG:
+                log_syntax(unit, LOG_DEBUG, filename, line, EINVAL,
+                           "Support for option %s= has been disabled at compile time and it is ignored", lvalue);
+                break;
+        case ABSENCE_REASON_EXPERIMENTAL:
+                log_syntax(unit, LOG_INFO, filename, line, EINVAL,
+                           "Support for option %s= has not yet been enabled and it is ignored", lvalue);
+                break;
+        };
 
-        log_syntax(unit, LOG_DEBUG, filename, line, EINVAL,
-                   "Support for option %s= has been disabled at compile time and is ignored",
-                   lvalue);
         return 0;
 }
 #endif
diff --git a/src/core/load-fragment.h b/src/core/load-fragment.h
index a799c9a..94c9a51 100644
--- a/src/core/load-fragment.h
+++ b/src/core/load-fragment.h
@@ -107,3 +107,8 @@ int config_parse_protect_system(const char* unit, const char *filename, unsigned
 /* gperf prototypes */
 const struct ConfigPerfItem* load_fragment_gperf_lookup(const char *key, unsigned length);
 extern const char load_fragment_gperf_nulstr[];
+
+typedef enum AbsenceReason {
+        ABSENCE_REASON_CONFIG,
+        ABSENCE_REASON_EXPERIMENTAL,
+} AbsenceReason;
-- 
1.8.3.1



More information about the systemd-devel mailing list