Monitor what is modifiying your files
Files | Log | Commits | Refs | README
Size: 1231 bytes
/* See LICENSE file for copyright and license details. */ #define _POSIX_C_SOURCE 200809L #include <pwd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "uid.h" #define HASHSIZE 101 struct uidentry { struct uidentry *next; uid_t uid; char *name; }; static struct uidentry *hashtab[HASHSIZE]; static unsigned hash(uid_t uid) { return uid % HASHSIZE; } static struct uidentry * lookup(uid_t uid) { struct uidentry *np; for (np = hashtab[hash(uid)]; np; np = np->next) if (np->uid == uid) return np; return NULL; } static struct uidentry * install(uid_t uid, const char *name) { struct uidentry *np; unsigned hashval; if ((np = lookup(uid)) == NULL) { np = malloc(sizeof(*np)); if (!np || !(np->name = strdup(name))) return NULL; np->uid = uid; hashval = hash(uid); np->next = hashtab[hashval]; hashtab[hashval] = np; } return np; } void uidinit(void) { int i; for (i = 0; i < HASHSIZE; i++) hashtab[i] = NULL; } const char * uidname(uid_t uid) { struct uidentry *entry; struct passwd *pw; if ((entry = lookup(uid))) return entry->name; if ((pw = getpwuid(uid))) { install(uid, pw->pw_name); return lookup(uid)->name; } return "unknown"; }