summaryrefslogtreecommitdiff
path: root/nslcd/hackers_parse.h
diff options
context:
space:
mode:
Diffstat (limited to 'nslcd/hackers_parse.h')
-rw-r--r--nslcd/hackers_parse.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/nslcd/hackers_parse.h b/nslcd/hackers_parse.h
new file mode 100644
index 0000000..e1df21d
--- /dev/null
+++ b/nslcd/hackers_parse.h
@@ -0,0 +1,32 @@
+#ifndef _HACKERS_PARSE_H
+#define _HACKERS_PARSE_H
+
+#include <string.h> /* for memset(3) */
+#include <stdlib.h> /* for free(3) */
+#include <pwd.h> /* for 'struct passwd' */
+
+#define ZERO(var) memset(&(var), 0, sizeof(var))
+
+/* Free+zero a 'struct passwd' */
+#define PASSWD_FREE(user) \
+ ({ \
+ free((user).pw_name); \
+ free((user).pw_passwd); \
+ free((user).pw_gecos); \
+ free((user).pw_dir); \
+ free((user).pw_shell); \
+ ZERO(user); \
+ })
+
+/** Returns 0 on error, or the UID on success. Only handles "normal
+ * user" UIDs; that is in the range [1000,9999]. */
+uid_t filename2uid(const char *filename);
+
+/** Returns 0 on success, < 0 on failure. Sets
+ userp->pw_passwd. */
+int load_user_password(struct passwd *userp);
+/** Returns 0 on success, non-zero on failere.
+ May set userp->pw_uid even on failure. */
+int load_user_yaml(const char *filename, struct passwd *userp);
+
+#endif