static unsigned long get_id_by_name(const char *uname, const char *dbfile)
{
unsigned long id = -1;
- char line[255];
+ char line[LINE_SIZE];
char *buf;
+ char *bufline;
size_t bufsize;
size_t cur;
size_t count;
}
/* loop through the whole file */
-
cur = 0;
- while (1) {
+ while (cur < bufsize) {
count = buf_get_line(buf, bufsize, cur);
+ bufline = &buf[cur];
+ cur += count+1;
- strncpy(line, buf + cur, count);
+ if (count >= LINE_SIZE)
+ continue;
+
+ strncpy(line, bufline, count);
line[count] = '\0';
pos = line;
- cur += count+1;
- if (cur > bufsize)
- break;
-
/* get name */
name = strsep(&pos, ":");
if (name == NULL)
return &gr;
}
-
-int ufd = -1;
-
-void setutent()
-{
- if (ufd < 0)
- ufd = open(UTMP_FILE, O_RDONLY);
- fcntl(ufd, F_SETFD, FD_CLOEXEC);
- lseek(ufd, 0, SEEK_SET);
-}
-
-void endutent() {
- if (ufd < 0)
- return;
- close(ufd);
- ufd = -1;
-}
-
-struct utmp *getutent(void)
-{
- static struct utmp utmp;
- int retval;
-
- if (ufd < 0) {
- setutent();
- if (ufd < 0)
- return NULL;
- }
- retval = read(ufd, &utmp, sizeof(struct utmp));
- if (retval < 1)
- return NULL;
- return &utmp;
-}
-
#endif