privs: Don't use libc isdigit()
Avoid locale dependence and UB risk from integer promotion
This commit is contained in:
parent
7fb968e861
commit
6446f80a02
@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -20,6 +20,8 @@
|
|||||||
#include "nk/privs.h"
|
#include "nk/privs.h"
|
||||||
#include "nk/log.h"
|
#include "nk/log.h"
|
||||||
|
|
||||||
|
static inline bool nk_isdigit(int c) { return c >= '0' && c <= '9'; }
|
||||||
|
|
||||||
void nk_set_chroot(const char *chroot_dir)
|
void nk_set_chroot(const char *chroot_dir)
|
||||||
{
|
{
|
||||||
if (chroot(chroot_dir))
|
if (chroot(chroot_dir))
|
||||||
@ -143,7 +145,7 @@ uid_t nk_uidgidbyname(const char *username, uid_t *uid, gid_t *gid)
|
|||||||
struct passwd *pws = getpwnam(username);
|
struct passwd *pws = getpwnam(username);
|
||||||
if (!pws) {
|
if (!pws) {
|
||||||
for (size_t i = 0; username[i]; ++i) {
|
for (size_t i = 0; username[i]; ++i) {
|
||||||
if (!isdigit(username[i]))
|
if (!nk_isdigit(username[i]))
|
||||||
return (uid_t)-1;
|
return (uid_t)-1;
|
||||||
}
|
}
|
||||||
char *p;
|
char *p;
|
||||||
@ -172,7 +174,7 @@ gid_t nk_gidbyname(const char *groupname, gid_t *gid)
|
|||||||
struct group *grp = getgrnam(groupname);
|
struct group *grp = getgrnam(groupname);
|
||||||
if (!grp) {
|
if (!grp) {
|
||||||
for (size_t i = 0; groupname[i]; ++i) {
|
for (size_t i = 0; groupname[i]; ++i) {
|
||||||
if (!isdigit(groupname[i]))
|
if (!nk_isdigit(groupname[i]))
|
||||||
return (gid_t)-1;
|
return (gid_t)-1;
|
||||||
}
|
}
|
||||||
char *p;
|
char *p;
|
||||||
|
Loading…
Reference in New Issue
Block a user