From 6baedf15ea8b0676c0a428899b1bfbc4aa88d687 Mon Sep 17 00:00:00 2001 From: Edward Tomasz Napierala Date: Sat, 5 Mar 2011 12:40:35 +0000 Subject: Add two new system calls, setloginclass(2) and getloginclass(2). This makes it possible for the kernel to track login class the process is assigned to, which is required for RCTL. This change also make setusercontext(3) call setloginclass(2) and makes it possible to retrieve current login class using id(1). Reviewed by: kib (as part of a larger patch) --- libutil/login_cap.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libutil/login_cap.h b/libutil/login_cap.h index 082e34b..ec1421b 100644 --- a/libutil/login_cap.h +++ b/libutil/login_cap.h @@ -49,7 +49,8 @@ #define LOGIN_SETENV 0x0080 /* set user environment */ #define LOGIN_SETMAC 0x0100 /* set user default MAC label */ #define LOGIN_SETCPUMASK 0x0200 /* set user cpumask */ -#define LOGIN_SETALL 0x03ff /* set everything */ +#define LOGIN_SETLOGINCLASS 0x0400 /* set login class in the kernel */ +#define LOGIN_SETALL 0x07ff /* set everything */ #define BI_AUTH "authorize" /* accepted authentication */ #define BI_REJECT "reject" /* rejected authentication */ -- cgit v1.2.3 From 813099beaefaaf474a25ad6cb0f96b2ff52aad21 Mon Sep 17 00:00:00 2001 From: Pawel Jakub Dawidek Date: Sun, 6 Mar 2011 17:46:06 +0000 Subject: expand_number() needs uint64_t, declare it here if not already declared. MFC after: 3 days --- libutil/libutil.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libutil/libutil.h b/libutil/libutil.h index 3d8f59e..66104e9 100644 --- a/libutil/libutil.h +++ b/libutil/libutil.h @@ -52,6 +52,11 @@ typedef __int64_t int64_t; #define _INT64_T_DECLARED #endif +#ifndef _UINT64_T_DECLARED +typedef __uint64_t uint64_t; +#define _UINT64_T_DECLARED +#endif + #ifndef _PID_T_DECLARED typedef __pid_t pid_t; #define _PID_T_DECLARED -- cgit v1.2.3 From fcc5e033e72566fa7770a355160835fffced4353 Mon Sep 17 00:00:00 2001 From: Jung-uk Kim Date: Tue, 8 Mar 2011 20:13:29 +0000 Subject: Stop hard-coding default directory mode as 0777. --- pw/cpdir.c | 3 ++- pw/pw.h | 1 + pw/pw_conf.c | 4 ++-- pw/pw_user.c | 10 ++++------ 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pw/cpdir.c b/pw/cpdir.c index f370421..017c200 100644 --- a/pw/cpdir.c +++ b/pw/cpdir.c @@ -41,6 +41,7 @@ static const char rcsid[] = #include #include +#include "pw.h" #include "pwupd.h" void @@ -81,7 +82,7 @@ copymkdir(char const * dir, char const * skel, mode_t mode, uid_t uid, gid_t gid else { if (S_ISDIR(st.st_mode)) { /* Recurse for this */ if (strcmp(e->d_name, ".") != 0 && strcmp(e->d_name, "..") != 0) - copymkdir(dst, src, (st.st_mode & 0777), uid, gid); + copymkdir(dst, src, st.st_mode & _DEF_DIRMODE, uid, gid); chflags(dst, st.st_flags); /* propogate flags */ } else if (S_ISLNK(st.st_mode) && (len = readlink(src, lnk, sizeof(lnk))) != -1) { lnk[len] = '\0'; diff --git a/pw/pw.h b/pw/pw.h index 7568c22..6e521d1 100644 --- a/pw/pw.h +++ b/pw/pw.h @@ -95,6 +95,7 @@ struct userconf int numgroups; /* (internal) size of default_group array */ }; +#define _DEF_DIRMODE (S_IRWXU | S_IRWXG | S_IRWXO) #define _PATH_PW_CONF "/etc/pw.conf" #define _UC_MAXLINE 1024 #define _UC_MAXSHELLS 32 diff --git a/pw/pw_conf.c b/pw/pw_conf.c index 51672b9..edeb015 100644 --- a/pw/pw_conf.c +++ b/pw/pw_conf.c @@ -91,7 +91,7 @@ static struct userconf config = NULL, /* Mail to send to new accounts */ "/var/log/userlog", /* Where to log changes */ "/home", /* Where to create home directory */ - 0777, /* Home directory perms, modified by umask */ + _DEF_DIRMODE, /* Home directory perms, modified by umask */ "/bin", /* Where shells are located */ system_shells, /* List of shells (first is default) */ bourne_shell, /* Default shell */ @@ -302,7 +302,7 @@ read_userconfig(char const * file) case _UC_HOMEMODE: modeset = setmode(q); config.homemode = (q == NULL || !boolean_val(q, 1)) - ? 0777 : getmode(modeset, 0777); + ? _DEF_DIRMODE : getmode(modeset, _DEF_DIRMODE); free(modeset); break; case _UC_SHELLPATH: diff --git a/pw/pw_user.c b/pw/pw_user.c index dd92c43..db33746 100644 --- a/pw/pw_user.c +++ b/pw/pw_user.c @@ -107,7 +107,6 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args) struct stat st; char line[_PASSWORD_LEN+1]; FILE *fp; - mode_t dmode; char *dmode_c; void *set = NULL; @@ -151,13 +150,12 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args) cnf->home = arg->val; } - dmode = S_IRWXU | S_IRWXG | S_IRWXO; if ((arg = getarg(args, 'M')) != NULL) { dmode_c = arg->val; if ((set = setmode(dmode_c)) == NULL) errx(EX_DATAERR, "invalid directory creation mode '%s'", dmode_c); - cnf->homemode = getmode(set, dmode); + cnf->homemode = getmode(set, _DEF_DIRMODE); free(set); } @@ -186,7 +184,7 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args) if (strchr(cnf->home+1, '/') == NULL) { strcpy(dbuf, "/usr"); strncat(dbuf, cnf->home, MAXPATHLEN-5); - if (mkdir(dbuf, dmode) != -1 || errno == EEXIST) { + if (mkdir(dbuf, _DEF_DIRMODE) != -1 || errno == EEXIST) { chown(dbuf, 0, 0); /* * Skip first "/" and create symlink: @@ -202,7 +200,7 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args) while ((p = strchr(++p, '/')) != NULL) { *p = '\0'; if (stat(dbuf, &st) == -1) { - if (mkdir(dbuf, dmode) == -1) + if (mkdir(dbuf, _DEF_DIRMODE) == -1) goto direrr; chown(dbuf, 0, 0); } else if (!S_ISDIR(st.st_mode)) @@ -211,7 +209,7 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args) } } if (stat(dbuf, &st) == -1) { - if (mkdir(dbuf, dmode) == -1) { + if (mkdir(dbuf, _DEF_DIRMODE) == -1) { direrr: err(EX_OSFILE, "mkdir '%s'", dbuf); } chown(dbuf, 0, 0); -- cgit v1.2.3