#define SINT_MIN(t) (-SINT_MAX(t) - (t)1)
#define MAX_OF_UINT_TYPE(t) ~((t)0)
+#ifndef INVALID_UID
+# define INVALID_UID ((uid_t) -1)
+#endif
+
#ifndef HAVE_REALLOCARRAY
static inline void *reallocarray(void *ptr, size_t nmemb, size_t size)
{
if (fscanf(f, "%u", &loginuid) != 1)
ret = 1;
fclose(f);
- if (!ret && pw->pw_uid != loginuid)
+ if (!ret && loginuid != INVALID_UID && pw->pw_uid != loginuid)
return 1;
} else {
struct stat st;
mem2strcpy(utline, ut->ut_line, sizeof(ut->ut_line), sizeof(utline));
- snprintf(path, sizeof(path), "/dev/%s", utline);
- if (stat(path, &st))
- return 1;
- if (pw->pw_uid != st.st_uid)
- return 1;
+ if (utline[0] != ':') {
+ snprintf(path, sizeof(path), "/dev/%s", utline);
+ if (stat(path, &st))
+ return 1;
+ if (pw->pw_uid != st.st_uid)
+ return 1;
+ }
}
return ret;
}