diff options
Diffstat (limited to 'nslcd/hackers_parse.h')
-rw-r--r-- | nslcd/hackers_parse.h | 32 |
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 |