]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
quotacheck: add quotacheck.mode credential support
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 12 Jul 2025 19:52:36 +0000 (04:52 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 15 Jul 2025 20:47:38 +0000 (05:47 +0900)
man/systemd-quotacheck@.service.xml
man/systemd.system-credentials.xml
src/quotacheck/quotacheck.c
units/systemd-quotacheck-root.service.in
units/systemd-quotacheck@.service.in

index 503df381e0f87f4542e4dfa79b04310f258c67fb..56397ff7bda753a024404094b8545c7a42a7bb70 100644 (file)
     </variablelist>
   </refsect1>
 
+  <refsect1>
+    <title>Credentials</title>
+
+    <para><command>systemd-quotacheck</command> supports the service credentials logic as implemented by
+    <varname>ImportCredential=</varname>/<varname>LoadCredential=</varname>/<varname>SetCredential=</varname>
+    (see <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
+    details). The following credentials are used when passed in:</para>
+
+    <variablelist class='system-credentials'>
+      <varlistentry>
+        <term><varname>quotacheck.mode</varname></term>
+
+        <listitem>
+          <para>The contents of the credential is parsed as same as the kernel command line option with the
+          same name. See above for more details.</para>
+
+          <xi:include href="version-info.xml" xpointer="v258"/>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>Note that by default the <filename>systemd-quotacheck@.service</filename> and
+    <filename>systemd-quotacheck-root.service</filename> unit files are set up to inherit
+    <varname>quotacheck.mode</varname> credential from the service manager.</para>
+  </refsect1>
+
   <refsect1>
     <title>See Also</title>
     <para><simplelist type="inline">
index 0411061ca394986ce563d650e14a3fedaf972b54..fd0d12320dae2b74df5b6ff84159dce4d8e590af 100644 (file)
           <xi:include href="version-info.xml" xpointer="v258"/>
         </listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><varname>quotacheck.*</varname></term>
+
+        <listitem>
+          <para>Read by <filename>systemd-quotacheck@.service</filename> and
+          <filename>systemd-quotacheck-root.service</filename>. See
+          <citerefentry><refentrytitle>systemd-quotacheck</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+          for more details.</para>
+
+          <xi:include href="version-info.xml" xpointer="v258"/>
+        </listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
index 49d63d77d025684c12a29582ffc489646067bd47..f6866213481ed05f82706c00abd11edcd9acaa80 100644 (file)
@@ -3,6 +3,7 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
+#include "creds-util.h"
 #include "log.h"
 #include "main-func.h"
 #include "proc-cmdline.h"
@@ -45,6 +46,20 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
         return 0;
 }
 
+static void parse_credentials(void) {
+        _cleanup_free_ char *value = NULL;
+        int r;
+
+        r = read_credential("quotacheck.mode", (void**) &value, /* ret_size = */ NULL);
+        if (r < 0)
+                log_debug_errno(r, "Failed to read credential 'quotacheck.mode', ignoring: %m");
+        else {
+                arg_mode = quota_check_mode_from_string(value);
+                if (arg_mode < 0)
+                        log_warning_errno(arg_mode, "Invalid 'quotacheck.mode' credential, ignoring: %s", value);
+        }
+}
+
 static int run(int argc, char *argv[]) {
         int r;
 
@@ -60,6 +75,8 @@ static int run(int argc, char *argv[]) {
         if (r < 0)
                 log_warning_errno(r, "Failed to parse kernel command line, ignoring: %m");
 
+        parse_credentials();
+
         if (arg_mode == QUOTA_CHECK_SKIP)
                 return 0;
 
index 4792e5bdd5b8b7952d4c8a153c749e6206e814cc..eea656c562bc45f54ae456782f4668ee5c20dd5b 100644 (file)
@@ -23,3 +23,4 @@ Type=oneshot
 RemainAfterExit=yes
 ExecStart={{LIBEXECDIR}}/systemd-quotacheck /
 TimeoutSec=infinity
+ImportCredential=quotacheck.*
index b38450ed09856b403352b244b714b5a14b0ad0fb..7569052d8202b8b7ccee3d6089dbd9e5ec28fb3c 100644 (file)
@@ -25,3 +25,4 @@ Type=oneshot
 RemainAfterExit=yes
 ExecStart={{LIBEXECDIR}}/systemd-quotacheck %f
 TimeoutSec=infinity
+ImportCredential=quotacheck.*