]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Merge pull request #31166 from mrc0mmand/vpick-tweaks
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 2 Feb 2024 00:37:13 +0000 (09:37 +0900)
committerGitHub <noreply@github.com>
Fri, 2 Feb 2024 00:37:13 +0000 (09:37 +0900)
vpick: make a working copy of the current dname

28 files changed:
.github/workflows/cifuzz.yml
.github/workflows/gather-pr-metadata.yml
.github/workflows/issue_labeler.yml
TODO
man/sd_bus_service_reconnect.c
man/systemd-creds.xml
src/basic/cgroup-util.h
src/basic/process-util.c
src/basic/process-util.h
src/basic/user-util.c
src/core/exec-invoke.c
src/core/execute.c
src/core/execute.h
src/core/mount.c
src/core/service.c
src/core/socket.c
src/core/swap.c
src/core/unit.c
src/creds/creds.c
src/home/homework-luks.c
src/libsystemd/sd-bus/bus-control.c
src/libsystemd/sd-bus/bus-socket.c
src/network/networkd-ndisc.c
src/partition/repart.c
src/shared/local-addresses.c
src/shared/tpm2-util.c
test/test-network/systemd-networkd-tests.py
test/units/testsuite-04.journal-gatewayd.sh

index 3584cff12b6ef07aa2d01b7b113dd179f242afdb..983dca8b3390f907fd83f0e15bbc324cfec8fca9 100644 (file)
@@ -60,7 +60,7 @@ jobs:
           sanitizer: ${{ matrix.sanitizer }}
           output-sarif: true
       - name: Upload Crash
-        uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392
+        uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8
         if: failure() && steps.build.outcome == 'success'
         with:
           name: ${{ matrix.sanitizer }}-${{ matrix.architecture }}-artifacts
index e0ed749c2d2ccb1b73ff8ea18d923f64c7e97358..eb6f54e528adce384a93d00b4f82aafdad131b84 100644 (file)
@@ -30,7 +30,7 @@ jobs:
           echo ${{ github.event.number }} >./${{ env.PULL_REQUEST_METADATA_DIR }}/${{ env.PULL_REQUEST_METADATA_FILE }}
 
       - name: Upload Pull Request Metadata artifact
-        uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392
+        uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8
         with:
           name: ${{ env.PULL_REQUEST_METADATA_FILE }}
           path: ${{ env.PULL_REQUEST_METADATA_DIR }}
index d8ba0a5fd255c5b6cf4eb15464786eaf8f2c4145..340977c3bd10f416cd58827043ad7c07655e9794 100644 (file)
@@ -29,7 +29,7 @@ jobs:
           template-path: .github/ISSUE_TEMPLATE/${{ matrix.template }}
 
       - name: Set labels based on component field
-        uses: redhat-plumbers-in-action/advanced-issue-labeler@71bcf99aef4b9ea844db9a43755e8ac02c8e661e
+        uses: redhat-plumbers-in-action/advanced-issue-labeler@9e55064634b67244f7deb4211452b4a7217b93de
         with:
           issue-form: ${{ steps.issue-parser.outputs.jsonString }}
           template: ${{ matrix.template }}
diff --git a/TODO b/TODO
index d4ab147ba73f541e1956982f8875a28b1d53dd11..5062490e8cbee81773345aea1c6658cce6b6cd4a 100644 (file)
--- a/TODO
+++ b/TODO
@@ -157,7 +157,7 @@ Features:
   reauthentication when unlocking a secret.
 
 * teach systemd --user to properly load credentials off disk, with
-  /etc/credstore equivalent and similar. Mkae sure that $CREDENTIALS_DIRECTORY=
+  /etc/credstore equivalent and similar. Make sure that $CREDENTIALS_DIRECTORY=
   actually works too when run with user privs.
 
 * extend the smbios11 logic for passing credentials so that instead of passing
index 0844f65114900eb7414e125a8dc912e57cc46b6d..10c776b0355da616d8ea0d8789dd020a66bf9a21 100644 (file)
@@ -104,7 +104,7 @@ static int setup(object *o) {
   }
 
   /* Set up a new bus object for the system bus, configure it to wait for D-Bus to be available
-   * instead of failing if it is not, and start it. All the following operations are asyncronous
+   * instead of failing if it is not, and start it. All the following operations are asynchronous
    * and will not block waiting for D-Bus to be available.
    * https://www.freedesktop.org/software/systemd/man/sd_bus_new.html
    * https://www.freedesktop.org/software/systemd/man/sd_bus_set_address.html
index 2650dddd7ea13fc80bc22d7eb21640a2e9a6572e..169d1a1da23e3d72bac8eae106fbafcc217e76a4 100644 (file)
         to select which user the credential is from. Such credentials may only be decrypted from the
         specified user's context, except if privileges can be acquired. Generally, when an encrypted
         credential shall be used in the per-user service manager it should be encrypted with this option set,
-        when it shall be used in the system service manager it should be encypted without.</para>
+        when it shall be used in the system service manager it should be encrypted without.</para>
 
         <para>Internally, this ensures that the selected user's numeric UID and username, as well as the
         system's
index f62b26458d4aa76898e130a3918553f8861e29e8..244f3b657bf2e55fe20949978c6351796ddd5178 100644 (file)
@@ -67,7 +67,7 @@ typedef enum CGroupMask {
         /* All real cgroup v2 controllers */
         CGROUP_MASK_V2 = CGROUP_MASK_CPU|CGROUP_MASK_CPUSET|CGROUP_MASK_IO|CGROUP_MASK_MEMORY|CGROUP_MASK_PIDS,
 
-        /* All controllers we want to delegate in case of Delegate=yes. Which are prety much the v2 controllers only, as delegation on v1 is not safe, and bpf stuff isn't a real controller */
+        /* All controllers we want to delegate in case of Delegate=yes. Which are pretty much the v2 controllers only, as delegation on v1 is not safe, and bpf stuff isn't a real controller */
         CGROUP_MASK_DELEGATE = CGROUP_MASK_V2,
 
         /* All cgroup v2 BPF pseudo-controllers */
index 697c8d9c6baf91bd23d54a22131f618ca8737e4c..1238ef815058f9807866229170a3bacaba2e3a74 100644 (file)
@@ -2034,7 +2034,7 @@ int make_reaper_process(bool b) {
         return 0;
 }
 
-int posix_spawn_wrapper(const char *path, char *const *argv, char *const *envp, pid_t *ret_pid) {
+int posix_spawn_wrapper(const char *path, char *const *argv, char *const *envp, PidRef *ret_pidref) {
         posix_spawnattr_t attr;
         sigset_t mask;
         pid_t pid;
@@ -2047,7 +2047,7 @@ int posix_spawn_wrapper(const char *path, char *const *argv, char *const *envp,
 
         assert(path);
         assert(argv);
-        assert(ret_pid);
+        assert(ret_pidref);
 
         assert_se(sigfillset(&mask) >= 0);
 
@@ -2068,10 +2068,9 @@ int posix_spawn_wrapper(const char *path, char *const *argv, char *const *envp,
         if (r != 0)
                 goto fail;
 
-        *ret_pid = pid;
-
         posix_spawnattr_destroy(&attr);
-        return 0;
+
+        return pidref_set_pid(ret_pidref, pid);
 
 fail:
         assert(r > 0);
index b270fc82ea1641f53c230a2a62b11d0b24276238..bfa43318956f5bec702a2651136198bef708be66 100644 (file)
@@ -238,7 +238,7 @@ int get_process_threads(pid_t pid);
 int is_reaper_process(void);
 int make_reaper_process(bool b);
 
-int posix_spawn_wrapper(const char *path, char *const *argv, char *const *envp, pid_t *ret_pid);
+int posix_spawn_wrapper(const char *path, char *const *argv, char *const *envp, PidRef *ret_pidref);
 
 int proc_dir_open(DIR **ret);
 int proc_dir_read(DIR *d, pid_t *ret);
index fa5dccfd169a3b110cc5ef6858a189d6b3365f8b..b3df413be6b06557109a74e23df4b6181eb4d137 100644 (file)
@@ -1065,7 +1065,7 @@ int getpwnam_malloc(const char *name, struct passwd **ret) {
         int r;
 
         /* A wrapper around getpwnam_r() that allocates the necessary buffer on the heap. The caller must
-         * free() the returned sructured! */
+         * free() the returned structures! */
 
         if (isempty(name))
                 return -EINVAL;
index ab13f0342a52b7035ea74719cf6534d338cfa0fb..d11a915b45ea854f787e256e4a5ca44e44fb62e9 100644 (file)
@@ -1098,6 +1098,22 @@ static int null_conv(
         return PAM_CONV_ERR;
 }
 
+static int pam_close_session_and_delete_credentials(pam_handle_t *handle, int flags) {
+        int r, s;
+
+        assert(handle);
+
+        r = pam_close_session(handle, flags);
+        if (r != PAM_SUCCESS)
+                log_debug("pam_close_session() failed: %s", pam_strerror(handle, r));
+
+        s = pam_setcred(handle, PAM_DELETE_CRED | flags);
+        if (s != PAM_SUCCESS)
+                log_debug("pam_setcred(PAM_DELETE_CRED) failed: %s", pam_strerror(handle, s));
+
+        return r != PAM_SUCCESS ? r : s;
+}
+
 #endif
 
 static int setup_pam(
@@ -1178,7 +1194,7 @@ static int setup_pam(
 
         pam_code = pam_setcred(handle, PAM_ESTABLISH_CRED | flags);
         if (pam_code != PAM_SUCCESS)
-                log_debug("pam_setcred() failed, ignoring: %s", pam_strerror(handle, pam_code));
+                log_debug("pam_setcred(PAM_ESTABLISH_CRED) failed, ignoring: %s", pam_strerror(handle, pam_code));
 
         pam_code = pam_open_session(handle, flags);
         if (pam_code != PAM_SUCCESS)
@@ -1250,13 +1266,9 @@ static int setup_pam(
                         assert(sig == SIGTERM);
                 }
 
-                pam_code = pam_setcred(handle, PAM_DELETE_CRED | flags);
-                if (pam_code != PAM_SUCCESS)
-                        goto child_finish;
-
                 /* If our parent died we'll end the session */
                 if (getppid() != parent_pid) {
-                        pam_code = pam_close_session(handle, flags);
+                        pam_code = pam_close_session_and_delete_credentials(handle, flags);
                         if (pam_code != PAM_SUCCESS)
                                 goto child_finish;
                 }
@@ -1299,7 +1311,7 @@ fail:
 
         if (handle) {
                 if (close_session)
-                        pam_code = pam_close_session(handle, flags);
+                        pam_code = pam_close_session_and_delete_credentials(handle, flags);
 
                 (void) pam_end(handle, pam_code | flags);
         }
index d4095ae01a0c39448baa876393174c1e35b0f6da..c9c07714a3b310c951415b35d87b9164d9f6343d 100644 (file)
@@ -357,13 +357,13 @@ int exec_spawn(Unit *unit,
                ExecParameters *params,
                ExecRuntime *runtime,
                const CGroupContext *cgroup_context,
-               pid_t *ret) {
+               PidRef *ret) {
 
         char serialization_fd_number[DECIMAL_STR_MAX(int) + 1];
         _cleanup_free_ char *subcgroup_path = NULL, *log_level = NULL, *executor_path = NULL;
+        _cleanup_(pidref_done) PidRef pidref = PIDREF_NULL;
         _cleanup_fdset_free_ FDSet *fdset = NULL;
         _cleanup_fclose_ FILE *f = NULL;
-        pid_t pid;
         int r;
 
         assert(unit);
@@ -451,21 +451,21 @@ int exec_spawn(Unit *unit,
                                   "--log-level", log_level,
                                   "--log-target", log_target_to_string(manager_get_executor_log_target(unit->manager))),
                         environ,
-                        &pid);
+                        &pidref);
         if (r < 0)
                 return log_unit_error_errno(unit, r, "Failed to spawn executor: %m");
 
-        log_unit_debug(unit, "Forked %s as "PID_FMT, command->path, pid);
+        log_unit_debug(unit, "Forked %s as "PID_FMT, command->path, pidref.pid);
 
         /* We add the new process to the cgroup both in the child (so that we can be sure that no user code is ever
          * executed outside of the cgroup) and in the parent (so that we can be sure that when we kill the cgroup the
          * process will be killed too). */
         if (subcgroup_path)
-                (void) cg_attach(SYSTEMD_CGROUP_CONTROLLER, subcgroup_path, pid);
+                (void) cg_attach(SYSTEMD_CGROUP_CONTROLLER, subcgroup_path, pidref.pid);
 
-        exec_status_start(&command->exec_status, pid);
+        exec_status_start(&command->exec_status, pidref.pid);
 
-        *ret = pid;
+        *ret = TAKE_PIDREF(pidref);
         return 0;
 }
 
index 6f91309b165e69adedaa5fb74912e4c382a2238b..e226654c6abe64ef07f4d6be92db304130913171 100644 (file)
@@ -482,7 +482,7 @@ int exec_spawn(Unit *unit,
                ExecParameters *exec_params,
                ExecRuntime *runtime,
                const CGroupContext *cgroup_context,
-               pid_t *ret);
+               PidRef *ret);
 
 void exec_command_done(ExecCommand *c);
 void exec_command_done_array(ExecCommand *c, size_t n);
index 6c3f4be981a48c1652edb2f6809c6705a593672f..1fa2c2f9e2e5aac4f068c5fb63eb4bb396a487f6 100644 (file)
@@ -917,7 +917,6 @@ static int mount_spawn(Mount *m, ExecCommand *c, PidRef *ret_pid) {
         _cleanup_(exec_params_shallow_clear) ExecParameters exec_params = EXEC_PARAMETERS_INIT(
                         EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN);
         _cleanup_(pidref_done) PidRef pidref = PIDREF_NULL;
-        pid_t pid;
         int r;
 
         assert(m);
@@ -942,11 +941,7 @@ static int mount_spawn(Mount *m, ExecCommand *c, PidRef *ret_pid) {
                        &exec_params,
                        m->exec_runtime,
                        &m->cgroup_context,
-                       &pid);
-        if (r < 0)
-                return r;
-
-        r = pidref_set_pid(&pidref, pid);
+                       &pidref);
         if (r < 0)
                 return r;
 
index 2d5c43bca59791c4cb3464d0c9b0c19a00cf09b8..8ea04c469d2606096dafb030dc05b042d9cab06d 100644 (file)
@@ -1607,7 +1607,6 @@ static int service_spawn_internal(
         _cleanup_strv_free_ char **final_env = NULL, **our_env = NULL;
         _cleanup_(pidref_done) PidRef pidref = PIDREF_NULL;
         size_t n_env = 0;
-        pid_t pid;
         int r;
 
         assert(caller);
@@ -1798,17 +1797,13 @@ static int service_spawn_internal(
                        &exec_params,
                        s->exec_runtime,
                        &s->cgroup_context,
-                       &pid);
+                       &pidref);
         if (r < 0)
                 return r;
 
         s->exec_fd_event_source = TAKE_PTR(exec_fd_source);
         s->exec_fd_hot = false;
 
-        r = pidref_set_pid(&pidref, pid);
-        if (r < 0)
-                return r;
-
         r = unit_watch_pidref(UNIT(s), &pidref, /* exclusive= */ true);
         if (r < 0)
                 return r;
index bba7142c484dd086c3bdb20b0b8b1f2322249f48..2a5a8386d6912fd51859ceb35df1b3669355101b 100644 (file)
@@ -1879,7 +1879,6 @@ static int socket_spawn(Socket *s, ExecCommand *c, PidRef *ret_pid) {
         _cleanup_(exec_params_shallow_clear) ExecParameters exec_params = EXEC_PARAMETERS_INIT(
                         EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN);
         _cleanup_(pidref_done) PidRef pidref = PIDREF_NULL;
-        pid_t pid;
         int r;
 
         assert(s);
@@ -1904,11 +1903,7 @@ static int socket_spawn(Socket *s, ExecCommand *c, PidRef *ret_pid) {
                        &exec_params,
                        s->exec_runtime,
                        &s->cgroup_context,
-                       &pid);
-        if (r < 0)
-                return r;
-
-        r = pidref_set_pid(&pidref, pid);
+                       &pidref);
         if (r < 0)
                 return r;
 
index 33f6cb2536a0ff465fb627014e01e3959711a8d0..4faee7abec2291ea0855e0decd5640221ef5dc75 100644 (file)
@@ -630,7 +630,6 @@ static int swap_spawn(Swap *s, ExecCommand *c, PidRef *ret_pid) {
         _cleanup_(exec_params_shallow_clear) ExecParameters exec_params = EXEC_PARAMETERS_INIT(
                         EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN);
         _cleanup_(pidref_done) PidRef pidref = PIDREF_NULL;
-        pid_t pid;
         int r;
 
         assert(s);
@@ -655,11 +654,7 @@ static int swap_spawn(Swap *s, ExecCommand *c, PidRef *ret_pid) {
                        &exec_params,
                        s->exec_runtime,
                        &s->cgroup_context,
-                       &pid);
-        if (r < 0)
-                return r;
-
-        r = pidref_set_pid(&pidref, pid);
+                       &pidref);
         if (r < 0)
                 return r;
 
index 2998ed9ba52313cb81dc11bddf9c85db68f1f571..0c48e5fa6068e430797e396c8a8ac2a6b817a423 100644 (file)
@@ -6149,7 +6149,7 @@ void unit_next_freezer_state(Unit *u, FreezerAction action, FreezerState *ret, F
         assert(ret);
         assert(ret_target);
 
-        /* This function determintes the correct freezer state transitions for a unit
+        /* This function determines the correct freezer state transitions for a unit
          * given the action being requested. It returns the next state, and also the "target",
          * which is either FREEZER_FROZEN or FREEZER_RUNNING, depending on what actual state we
          * ultimately want to achieve. */
index edebe53dcae408abfb865398dea0f21a8ddf235c..02e317ad2d5d3798b83b686dfbc206fa180621c9 100644 (file)
@@ -1186,7 +1186,7 @@ static int vl_method_encrypt(Varlink *link, JsonVariant *parameters, VarlinkMeth
         bool own_scope = p.scope == CREDENTIAL_USER && p.uid == peer_uid;
 
         if (!own_scope || !timestamp_fresh) {
-                /* Insist on PK if client wants to encrypt for another user or the system, or if the timestamp was explicitly overriden. */
+                /* Insist on PK if client wants to encrypt for another user or the system, or if the timestamp was explicitly overridden. */
                 r = varlink_verify_polkit_async(
                                 link,
                                 /* bus= */ NULL,
index e9c1933dfe9ec1813e5fe0f6c94bc468267ec829..d901841eae40da10589f36b47388d9a4ca412ffd 100644 (file)
@@ -1699,12 +1699,13 @@ static struct crypt_pbkdf_type* build_minimal_pbkdf(struct crypt_pbkdf_type *buf
         assert(hr);
 
         /* For PKCS#11 derived keys (which are generated randomly and are of high quality already) we use a
-         * minimal PBKDF */
+         * minimal PBKDF and CRYPT_PBKDF_NO_BENCHMARK flag to skip benchmark. */
         *buffer = (struct crypt_pbkdf_type) {
                 .hash = user_record_luks_pbkdf_hash_algorithm(hr),
                 .type = CRYPT_KDF_PBKDF2,
-                .iterations = 1,
-                .time_ms = 1,
+                .iterations = 1000, /* recommended minimum count for pbkdf2
+                                     * according to NIST SP 800-132, ch. 5.2 */
+                .flags = CRYPT_PBKDF_NO_BENCHMARK
         };
 
         return buffer;
index 0953b6ab26c9325a3e41ff5c603010f408279335..c420584c03840410006c34d216da8390ce98f483 100644 (file)
@@ -629,7 +629,7 @@ _public_ int sd_bus_get_name_creds(
                                                 }
                                         } else if (need_gids && streq(m, "UnixGroupIDs")) {
 
-                                                /* Note that D-Bus actualy only gives us a combined list of
+                                                /* Note that D-Bus actually only gives us a combined list of
                                                  * primary gid and supplementary gids. And we don't know
                                                  * which one the primary one is. We'll take the whole shebang
                                                  * hence and use it as the supplementary group list, and not
index a99cdcc451ec897d6d874e81846481c7f78f5db0..f0f518a35011d8fdf62fd71273d8b5046fd18f6d 100644 (file)
@@ -654,7 +654,7 @@ static void bus_get_peercred(sd_bus *b) {
 
         r = getpeerpidfd(b->input_fd);
         if (r < 0)
-                log_debug_errno(r, "Failed to determin peer pidfd, ignoring: %m");
+                log_debug_errno(r, "Failed to determine peer pidfd, ignoring: %m");
         else
                 close_and_replace(b->pidfd, r);
 
index 7a67c552993a5aaf8a998f11e0f824fbee9378a6..c3be14c20f2953805b2b5c4456631cfcfb8301e7 100644 (file)
@@ -421,7 +421,7 @@ static int ndisc_router_process_retransmission_time(Link *link, sd_ndisc_router
                 return 0;
         }
 
-        /* Set the retransmission time for Neigbor Solicitations. */
+        /* Set the retransmission time for Neighbor Solicitations. */
         r = sysctl_write_ip_neighbor_property_uint32(AF_INET6, link->ifname, "retrans_time_ms", (uint32_t) msec);
         if (r < 0)
                 log_link_warning_errno(
index fd1dcda16c867d8d2128e0365fad80d171aa7078..2deada07186c348c033c2cdddd3454e48e577b83 100644 (file)
@@ -2337,7 +2337,7 @@ static int context_load_partition_table(Context *context) {
                         return log_error_errno(errno, "Failed to stat %s: %m", context->node);
 
                 if (IN_SET(arg_empty, EMPTY_REQUIRE, EMPTY_FORCE, EMPTY_CREATE) && S_ISREG(st.st_mode))
-                        /* Don't probe sector size from partition table if we are supposed to strat from an empty disk */
+                        /* Don't probe sector size from partition table if we are supposed to start from an empty disk */
                         fs_secsz = ssz = 512;
                 else {
                         /* Auto-detect sector size if not specified. */
index b72ff1fb01293637a7d55cfe6d43c111de0fefb6..842156fcfc32722516ea718517fe2955a56ad7c9 100644 (file)
@@ -359,7 +359,7 @@ int local_gateways(
         int r;
 
         /* The RTA_VIA attribute is used only for IPv4 routes with an IPv6 gateway. If IPv4 gateways are
-         * requested (af == AF_INET), then we do not return IPv6 gateway addresses. Similary, if IPv6
+         * requested (af == AF_INET), then we do not return IPv6 gateway addresses. Similarly, if IPv6
          * gateways are requested (af == AF_INET6), then we do not return gateway addresses for IPv4 routes.
          * So, the RTA_VIA attribute is only parsed when af == AF_UNSPEC. */
         bool allow_via = af == AF_UNSPEC;
index bd503c5c48768a0ac4991628d90b817a5de2c14b..f2b3bfb57594ad6eff6490ebf93e131c99442abc 100644 (file)
@@ -6940,7 +6940,7 @@ int tpm2_pcrlock_policy_from_credentials(
                         return 0;
                 }
 
-                return log_error_errno(errno, "Faile to open system credentials directory.");
+                return log_error_errno(errno, "Failed to open system credentials directory.");
         }
 
         _cleanup_free_ DirectoryEntries *de = NULL;
index 20c5f91a5d6bf99b5b108fcdc40f45cf96ddc520..1700732e343acc3e68b6b79b47a596c0292f34b8 100755 (executable)
@@ -11,7 +11,7 @@
 #
 #    sudo ./systemd-networkd-tests.py NetworkdMTUTests.test_ipv6_mtu
 #
-# Similarly, other indivdual tests can be run, eg.:
+# Similarly, other individual tests can be run, eg.:
 #
 #    sudo ./systemd-networkd-tests.py NetworkdNetworkTests.test_ipv6_neigh_retrans_time
 
index fbdb315826484a89ffde54b926c0a5dc3d571c36..a58d76e2ee72a249219a03cdbfa39c8d090daf7c 100755 (executable)
@@ -154,7 +154,7 @@ systemd-run --unit="test-gatewayd.service" --socket-property="ListenStream=19531
 # See: https://github.com/systemd/systemd/issues/9858
 OUT="$(mktemp)"
 for _ in {0..4}; do
-    curl --fail-with-body -d "plese process this🐱 $RANDOM" -L http://localhost:19531/upload | tee "$OUT"
+    curl --fail-with-body -d "please process this🐱 $RANDOM" -L http://localhost:19531/upload | tee "$OUT"
     (! grep '[^[:print:]]' "$OUT")
 done
 curl --fail-with-body --upload-file "$GATEWAYD_FILE" -L http://localhost:19531/upload | tee "$OUT"