diff options
| author | Steve Price <steve@FreeBSD.org> | 1998-05-25 03:55:23 +0000 |
|---|---|---|
| committer | Steve Price <steve@FreeBSD.org> | 1998-05-25 03:55:23 +0000 |
| commit | e172f0e587cba56a647b7c8daa87ef2a58f2fefc (patch) | |
| tree | b5b8695c39ce8840897c56b153d12f9ade8578cc /lib | |
| parent | a39f52db0f6a54aa366eba340b3649b0cfc5b1f2 (diff) | |
Notes
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/libutil/login_class.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/lib/libutil/login_class.c b/lib/libutil/login_class.c index 73190e9400e6..fbabc42da646 100644 --- a/lib/libutil/login_class.c +++ b/lib/libutil/login_class.c @@ -21,7 +21,7 @@ * * High-level routines relating to use of the user capabilities database * - * $Id: login_class.c,v 1.5 1997/02/22 15:08:22 peter Exp $ + * $Id: login_class.c,v 1.6 1997/05/10 18:55:38 davidn Exp $ */ #include <stdio.h> @@ -38,6 +38,7 @@ #include <syslog.h> #include <login_cap.h> #include <paths.h> +#include <sys/rtprio.h> #undef UNKNOWN @@ -315,6 +316,7 @@ setusercontext(login_cap_t *lc, const struct passwd *pwd, uid_t uid, unsigned in quad_t p; mode_t mymask; login_cap_t *llc = NULL; + struct rtprio rtp; if (lc == NULL) { if (pwd != NULL && (lc = login_getpwclass(pwd)) != NULL) @@ -332,10 +334,25 @@ setusercontext(login_cap_t *lc, const struct passwd *pwd, uid_t uid, unsigned in if (flags & LOGIN_SETPRIORITY) { p = login_getcapnum(lc, "priority", LOGIN_DEFPRI, LOGIN_DEFPRI); - p = (p < PRIO_MIN || p > PRIO_MAX) ? LOGIN_DEFPRI : p; - if (setpriority(PRIO_PROCESS, 0, (int)p) != 0) - syslog(LOG_WARNING, "setpriority '%s' (%s): %m", - pwd->pw_name, lc ? lc->lc_class : LOGIN_DEFCLASS); + if(p > PRIO_MAX) { + rtp.type = RTP_PRIO_IDLE; + rtp.prio = p - PRIO_MAX - 1; + p = (rtp.prio > RTP_PRIO_MAX) ? 31 : p; + if(rtprio(RTP_SET, 0, &rtp)) + syslog(LOG_WARNING, "rtprio '%s' (%s): %m", + pwd->pw_name, lc ? lc->lc_class : LOGIN_DEFCLASS); + } else if(p < PRIO_MIN) { + rtp.type = RTP_PRIO_REALTIME; + rtp.prio = abs(p - PRIO_MIN + RTP_PRIO_MAX); + p = (rtp.prio > RTP_PRIO_MAX) ? 1 : p; + if(rtprio(RTP_SET, 0, &rtp)) + syslog(LOG_WARNING, "rtprio '%s' (%s): %m", + pwd->pw_name, lc ? lc->lc_class : LOGIN_DEFCLASS); + } else { + if (setpriority(PRIO_PROCESS, 0, (int)p) != 0) + syslog(LOG_WARNING, "setpriority '%s' (%s): %m", + pwd->pw_name, lc ? lc->lc_class : LOGIN_DEFCLASS); + } } /* Setup the user's group permissions */ |
