]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
pam-util: add pam_get_item_many() helper that gets many PAM items at once
authorLennart Poettering <lennart@poettering.net>
Tue, 28 Nov 2023 08:29:58 +0000 (09:29 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 4 Jan 2024 11:26:40 +0000 (12:26 +0100)
Just to shorten a bit of code.

src/shared/pam-util.c
src/shared/pam-util.h

index 1057104194eabd2322f5e5dc56c3e38b7321ee5e..59437ae0bb9fb6c58a4034fcdd9aecf5806f4728 100644 (file)
@@ -202,3 +202,27 @@ void pam_cleanup_free(pam_handle_t *handle, void *data, int error_status) {
         /* A generic destructor for pam_set_data() that just frees the specified data */
         free(data);
 }
+
+int pam_get_item_many_internal(pam_handle_t *handle, ...) {
+        va_list ap;
+        int r;
+
+        va_start(ap, handle);
+        for (;;) {
+                int item_type = va_arg(ap, int);
+
+                if (item_type <= 0) {
+                        r = PAM_SUCCESS;
+                        break;
+                }
+
+                const void **value = ASSERT_PTR(va_arg(ap, const void **));
+
+                r = pam_get_item(handle, item_type, value);
+                if (!IN_SET(r, PAM_BAD_ITEM, PAM_SUCCESS))
+                        break;
+        }
+        va_end(ap);
+
+        return r;
+}
index 5a05fb71f11c4750ce72db5e5197e81323166e27..9c40ba2dded7189f685e897381954ba548d59dfe 100644 (file)
@@ -39,3 +39,7 @@ int pam_acquire_bus_connection(pam_handle_t *handle, const char *module_name, sd
 int pam_release_bus_connection(pam_handle_t *handle, const char *module_name);
 
 void pam_cleanup_free(pam_handle_t *handle, void *data, int error_status);
+
+int pam_get_item_many_internal(pam_handle_t *handle, ...);
+
+#define pam_get_item_many(handle, ...) pam_get_item_many_internal(handle, __VA_ARGS__, -1)