]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
systemd-coredump: allow setting external core size to infinity
authorThomas Blume <Thomas.Blume@suse.com>
Mon, 15 Nov 2021 09:11:44 +0000 (10:11 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 19 Nov 2021 08:23:52 +0000 (09:23 +0100)
Make it compatible to the ulimit setting: unlimited

man/coredump.conf.xml
src/coredump/coredump.c
src/shared/conf-parser.c
src/shared/conf-parser.h

index 1751191ec0cb12cc8b899c78295f98f8ccf64ed4..6392270543d5d62e4b57cddaa8797800d01c42d5 100644 (file)
@@ -98,6 +98,8 @@
 
         <listitem><para>The maximum (compressed or uncompressed) size in bytes of a core to be saved. Unit
         suffixes are allowed just as in <option>ProcessSizeMax=</option>.</para></listitem>
+
+        <para><varname>ExternalSizeMax=infinity</varname> sets the core size to unlimited.</para>
       </varlistentry>
 
       <varlistentry>
index 86d087729a3af7bf512eb6588d83cf5602f0c728..9b035a5d8ad31c7d6c25c287e4f4b74da738c839 100644 (file)
@@ -154,13 +154,13 @@ static uint64_t arg_max_use = UINT64_MAX;
 
 static int parse_config(void) {
         static const ConfigTableItem items[] = {
-                { "Coredump", "Storage",          config_parse_coredump_storage,  0, &arg_storage           },
-                { "Coredump", "Compress",         config_parse_bool,              0, &arg_compress          },
-                { "Coredump", "ProcessSizeMax",   config_parse_iec_uint64,        0, &arg_process_size_max  },
-                { "Coredump", "ExternalSizeMax",  config_parse_iec_uint64,        0, &arg_external_size_max },
-                { "Coredump", "JournalSizeMax",   config_parse_iec_size,          0, &arg_journal_size_max  },
-                { "Coredump", "KeepFree",         config_parse_iec_uint64,        0, &arg_keep_free         },
-                { "Coredump", "MaxUse",           config_parse_iec_uint64,        0, &arg_max_use           },
+                { "Coredump", "Storage",          config_parse_coredump_storage,           0, &arg_storage           },
+                { "Coredump", "Compress",         config_parse_bool,                       0, &arg_compress          },
+                { "Coredump", "ProcessSizeMax",   config_parse_iec_uint64,                 0, &arg_process_size_max  },
+                { "Coredump", "ExternalSizeMax",  config_parse_iec_uint64_infinity,        0, &arg_external_size_max },
+                { "Coredump", "JournalSizeMax",   config_parse_iec_size,                   0, &arg_journal_size_max  },
+                { "Coredump", "KeepFree",         config_parse_iec_uint64,                 0, &arg_keep_free         },
+                { "Coredump", "MaxUse",           config_parse_iec_uint64,                 0, &arg_max_use           },
                 {}
         };
 
index 7eda2da1c0e1582353fe61d929548b666d5cfc14..1e1967d7ea232dd0ef270d60618af728992d1adb 100644 (file)
@@ -677,6 +677,31 @@ int config_parse_iec_uint64(
         return 0;
 }
 
+int config_parse_iec_uint64_infinity(
+                const char* unit,
+                const char *filename,
+                unsigned line,
+                const char *section,
+                unsigned section_line,
+                const char *lvalue,
+                int ltype,
+                const char *rvalue,
+                void *data,
+                void *userdata) {
+
+        uint64_t *bytes = data;
+
+        assert(rvalue);
+        assert(data);
+
+        if (streq(rvalue, "infinity")) {
+                *bytes = UINT64_MAX;
+                return 0;
+        }
+
+        return config_parse_iec_uint64(unit, filename, line, section, section_line, lvalue, ltype, rvalue, data, userdata);
+}
+
 int config_parse_bool(
                 const char* unit,
                 const char *filename,
index 63b749d42a2dfa8c1311267ab45d3dda2b5c132b..d6866655327612bf66acc71caf1796b9a3f955d3 100644 (file)
@@ -126,6 +126,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_double);
 CONFIG_PARSER_PROTOTYPE(config_parse_iec_size);
 CONFIG_PARSER_PROTOTYPE(config_parse_si_uint64);
 CONFIG_PARSER_PROTOTYPE(config_parse_iec_uint64);
+CONFIG_PARSER_PROTOTYPE(config_parse_iec_uint64_infinity);
 CONFIG_PARSER_PROTOTYPE(config_parse_bool);
 CONFIG_PARSER_PROTOTYPE(config_parse_id128);
 CONFIG_PARSER_PROTOTYPE(config_parse_tristate);