diff --git a/src/users.c b/src/users.c new file mode 100644 index 0000000..8178e43 --- /dev/null +++ b/src/users.c @@ -0,0 +1,32 @@ +#include +#include + +#include + +void MDEListUsers(void(*call)(const char* name, void* user), void* user){ + struct passwd* pwd; + + setpwent(); + while((pwd = getpwent()) != NULL){ + char* dir; + + /* this is BAD check. and i cannot do anything about it + * + * i appreciate the insanity + */ + + if(pwd->pw_dir == NULL) continue; + if(pwd->pw_name[0] == '_') continue; + if(strlen(pwd->pw_dir) >= 5 && memcmp(pwd->pw_dir, "/var/", 5) == 0) continue; + if(strlen(pwd->pw_dir) >= 5 && memcmp(pwd->pw_dir, "/usr/", 5) == 0) continue; + + dir = strrchr(pwd->pw_dir, '/'); + if(dir == NULL) break; + dir++; + + if(strcmp(dir, pwd->pw_name) == 0){ + call(pwd->pw_name, user); + } + } + endpwent(); +}