Compare commits

...

1 Commits

Author SHA1 Message Date
Enrico Weigelt, metux IT consult df290e52a1 os: replace GenerateRandomData() by own arc4random_buf() if missing
arc4random_buf() is a pretty standard libc function on Unix'oid platforms,
but not all our targets have it, thus we need a fallback there. Currently we
have GenerateRandomData(), which either just wraps arc4random_buf() or provides
some fallback implementation.

For those cases it's easier to just implement missing functions directly
instead of having custom wrapper functions. So, drop GenerateRandomData()
in favor of arc4random_buf() and provide fallback implementation for where
it is missing.

GenerateRandomData() isn't declared _X_EXPORT, thus no API/ABI break.

X-ABI-Break: no
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2024-02-23 14:19:02 +01:00
3 changed files with 12 additions and 17 deletions

View File

@ -312,17 +312,3 @@ GenerateAuthorization(unsigned name_length,
}
#endif /* XCSECURITY */
void
GenerateRandomData(int len, char *buf)
{
#ifdef HAVE_ARC4RANDOM_BUF
arc4random_buf(buf, len);
#else
int fd;
fd = open("/dev/urandom", O_RDONLY);
read(fd, buf, len);
close(fd);
#endif
}

View File

@ -149,7 +149,7 @@ MitGenerateCookie(unsigned data_length,
if (i >= sizeof(cookie))
i = 0;
}
GenerateRandomData(sizeof(cookie), cookie);
arc4random_buf(cookie, sizeof(cookie));
status = MitAddCookie(sizeof(cookie), cookie, id);
if (!status) {
id = -1;

View File

@ -128,7 +128,16 @@ extern WorkQueuePtr workQueue;
/* in access.c */
extern Bool ComputeLocalClient(ClientPtr client);
/* in auth.c */
extern void GenerateRandomData(int len, char *buf);
/* for platforms lacking arc4random_buf() libc function */
#ifndef HAVE_ARC4RANDOM_BUF
static inline void arc4random_buf(char *buf, size_t len)
{
int fd;
fd = open("/dev/urandom", O_RDONLY);
read(fd, buf, len);
close(fd);
}
#endif /* HAVE_ARC4RANDOM_BUF */
#endif /* _OSDEP_H_ */