From owner-svn-src-stable-7@FreeBSD.ORG Tue Jun 9 01:43:59 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 84DBE106566C; Tue, 9 Jun 2009 01:43:59 +0000 (UTC) (envelope-from des@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 703FB8FC08; Tue, 9 Jun 2009 01:43:59 +0000 (UTC) (envelope-from des@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n591hxr2051829; Tue, 9 Jun 2009 01:43:59 GMT (envelope-from des@svn.freebsd.org) Received: (from des@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n591hw1x051817; Tue, 9 Jun 2009 01:43:58 GMT (envelope-from des@svn.freebsd.org) Message-Id: <200906090143.n591hw1x051817@svn.freebsd.org> From: Dag-Erling Smorgrav Date: Tue, 9 Jun 2009 01:43:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r193795 - stable/7/lib/libutil X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2009 01:44:00 -0000 Author: des Date: Tue Jun 9 01:43:58 2009 New Revision: 193795 URL: http://svn.freebsd.org/changeset/base/193795 Log: merge r180815,184081-184088,184091-184094,184634,184676-184677, 185277, 93589,193591: style and warning cleanups, libutil is now WARNS=6 clean. Also merged setclasscpumask(), which would have been a b***h to isolate from the rest of the changes. AFAICT, nobody uses it anyway. Modified: stable/7/lib/libutil/ (props changed) stable/7/lib/libutil/Makefile stable/7/lib/libutil/flopen.3 stable/7/lib/libutil/flopen.c stable/7/lib/libutil/login.conf.5 stable/7/lib/libutil/login_cap.h stable/7/lib/libutil/login_class.3 stable/7/lib/libutil/login_class.c stable/7/lib/libutil/login_times.3 stable/7/lib/libutil/login_times.c stable/7/lib/libutil/pidfile.3 stable/7/lib/libutil/pidfile.c stable/7/lib/libutil/realhostname.c Modified: stable/7/lib/libutil/Makefile ============================================================================== --- stable/7/lib/libutil/Makefile Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/Makefile Tue Jun 9 01:43:58 2009 (r193795) @@ -8,7 +8,7 @@ SHLIBDIR?= /lib LIB= util SHLIB_MAJOR= 7 -SRCS= _secure_path.c auth.c gr_util.c expand_number.c flopen.c fparseln.c \ +SRCS= _secure_path.c auth.c expand_number.c flopen.c fparseln.c gr_util.c \ humanize_number.c kinfo_getfile.c kinfo_getvmmap.c kld.c \ login.c login_auth.c login_cap.c login_class.c \ login_crypt.c login_ok.c login_times.c login_tty.c logout.c \ Modified: stable/7/lib/libutil/flopen.3 ============================================================================== --- stable/7/lib/libutil/flopen.3 Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/flopen.3 Tue Jun 9 01:43:58 2009 (r193795) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 10, 2007 +.Dd June 6, 2009 .Dt FLOPEN 3 .Os .Sh NAME @@ -93,11 +93,6 @@ and .Xr errno 2 , .Xr flock 2 , .Xr open 2 -.Sh HISTORY -The -.Fn flopen -function first appeared in -.Fx 6.3 . .Sh AUTHORS .An -nosplit The Modified: stable/7/lib/libutil/flopen.c ============================================================================== --- stable/7/lib/libutil/flopen.c Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/flopen.c Tue Jun 9 01:43:58 2009 (r193795) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2007 Dag-Erling Coïdan Smørgrav + * Copyright (c) 2007 Dag-Erling Coïdan Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,7 +32,6 @@ __FBSDID("$FreeBSD$"); #include #include -#include #include #include @@ -54,13 +53,13 @@ flopen(const char *path, int flags, ...) va_list ap; va_start(ap, flags); - mode = va_arg(ap, int); /* mode_t promoted to int */ + mode = (mode_t)va_arg(ap, int); /* mode_t promoted to int */ va_end(ap); } - operation = LOCK_EX; - if (flags & O_NONBLOCK) - operation |= LOCK_NB; + operation = LOCK_EX; + if (flags & O_NONBLOCK) + operation |= LOCK_NB; trunc = (flags & O_TRUNC); flags &= ~O_TRUNC; @@ -72,32 +71,32 @@ flopen(const char *path, int flags, ...) if (flock(fd, operation) == -1) { /* unsupported or interrupted */ serrno = errno; - close(fd); + (void)close(fd); errno = serrno; return (-1); } if (stat(path, &sb) == -1) { /* disappeared from under our feet */ - close(fd); + (void)close(fd); continue; } if (fstat(fd, &fsb) == -1) { /* can't happen [tm] */ serrno = errno; - close(fd); + (void)close(fd); errno = serrno; return (-1); } if (sb.st_dev != fsb.st_dev || sb.st_ino != fsb.st_ino) { /* changed under our feet */ - close(fd); + (void)close(fd); continue; } if (trunc && ftruncate(fd, 0) != 0) { /* can't happen [tm] */ serrno = errno; - close(fd); + (void)close(fd); errno = serrno; return (-1); } Modified: stable/7/lib/libutil/login.conf.5 ============================================================================== --- stable/7/lib/libutil/login.conf.5 Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/login.conf.5 Tue Jun 9 01:43:58 2009 (r193795) @@ -203,6 +203,15 @@ The maximum and current limits may be sp .It Sy "Name Type Notes Description .It "charset string Set $MM_CHARSET environment variable to the specified value. +.It "cpumask string List of cpus to bind the user to. +The syntax is the same as for the +.Fl l +argument of +.Xr cpuset 1 or the word +.Ql default . +If set to +.Ql default +no action is taken. .It "hushlogin bool false Same as having a ~/.hushlogin file. .It "ignorenologin bool false Login not prevented by nologin. .It "ftp-chroot bool false Limit FTP access with Modified: stable/7/lib/libutil/login_cap.h ============================================================================== --- stable/7/lib/libutil/login_cap.h Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/login_cap.h Tue Jun 9 01:43:58 2009 (r193795) @@ -48,7 +48,8 @@ #define LOGIN_SETUSER 0x0040 /* set user (via setuid) */ #define LOGIN_SETENV 0x0080 /* set user environment */ #define LOGIN_SETMAC 0x0100 /* set user default MAC label */ -#define LOGIN_SETALL 0x01ff /* set everything */ +#define LOGIN_SETCPUMASK 0x0200 /* set user cpumask */ +#define LOGIN_SETALL 0x03ff /* set everything */ #define BI_AUTH "authorize" /* accepted authentication */ #define BI_REJECT "reject" /* rejected authentication */ @@ -80,7 +81,7 @@ typedef struct login_time { #define LTM_NONE 0x00 #define LTM_SUN 0x01 #define LTM_MON 0x02 -#define LTM_TUE 0x04 +#define LTM_TUE 0x04 #define LTM_WED 0x08 #define LTM_THU 0x10 #define LTM_FRI 0x20 @@ -103,7 +104,8 @@ login_cap_t *login_getclass(const char * login_cap_t *login_getpwclass(const struct passwd *); login_cap_t *login_getuserclass(const struct passwd *); -const char *login_getcapstr(login_cap_t*, const char *, const char *, const char *); +const char *login_getcapstr(login_cap_t *, const char *, const char *, + const char *); const char **login_getcaplist(login_cap_t *, const char *, const char *); const char *login_getstyle(login_cap_t *, const char *, const char *); rlim_t login_getcaptime(login_cap_t *, const char *, rlim_t, rlim_t); @@ -113,45 +115,51 @@ const char *login_getpath(login_cap_t *, int login_getcapbool(login_cap_t *, const char *, int); const char *login_setcryptfmt(login_cap_t *, const char *, const char *); -int setclasscontext(const char*, unsigned int); -int setusercontext(login_cap_t*, const struct passwd*, uid_t, unsigned int); +int setclasscontext(const char *, unsigned int); +void setclasscpumask(login_cap_t *); +int setusercontext(login_cap_t *, const struct passwd *, uid_t, unsigned int); void setclassresources(login_cap_t *); void setclassenvironment(login_cap_t *, const struct passwd *, int); /* Most of these functions are deprecated */ -int auth_approve(login_cap_t*, const char*, const char*); +int auth_approve(login_cap_t *, const char *, const char *); int auth_check(const char *, const char *, const char *, const char *, int *); void auth_env(void); -char *auth_mkvalue(const char *n); -int auth_response(const char *, const char *, const char *, const char *, int *, const char *, const char *); +char *auth_mkvalue(const char *); +int auth_response(const char *, const char *, const char *, const char *, int *, + const char *, const char *); void auth_rmfiles(void); int auth_scan(int); -int auth_script(const char*, ...); +int auth_script(const char *, ...); int auth_script_data(const char *, int, const char *, ...); char *auth_valud(const char *); int auth_setopt(const char *, const char *); void auth_clropts(void); -void auth_checknologin(login_cap_t*); -int auth_cat(const char*); +void auth_checknologin(login_cap_t *); +int auth_cat(const char *); -int auth_ttyok(login_cap_t*, const char *); -int auth_hostok(login_cap_t*, const char *, char const *); -int auth_timeok(login_cap_t*, time_t); +int auth_ttyok(login_cap_t *, const char *); +int auth_hostok(login_cap_t *, const char *, char const *); +int auth_timeok(login_cap_t *, time_t); struct tm; login_time_t parse_lt(const char *); +int in_lt(const login_time_t *, time_t *); int in_ltm(const login_time_t *, struct tm *, time_t *); int in_ltms(const login_time_t *, struct tm *, time_t *); +int in_lts(const login_time_t *, time_t *); /* helper functions */ int login_strinlist(const char **, char const *, int); int login_str2inlist(const char **, const char *, const char *, int); -login_time_t * login_timelist(login_cap_t *, char const *, int *, login_time_t **); +login_time_t * login_timelist(login_cap_t *, char const *, int *, + login_time_t **); int login_ttyok(login_cap_t *, const char *, const char *, const char *); -int login_hostok(login_cap_t *, const char *, const char *, const char *, const char *); +int login_hostok(login_cap_t *, const char *, const char *, const char *, + const char *); __END_DECLS Modified: stable/7/lib/libutil/login_class.3 ============================================================================== --- stable/7/lib/libutil/login_class.3 Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/login_class.3 Tue Jun 9 01:43:58 2009 (r193795) @@ -19,11 +19,12 @@ .\" .\" $FreeBSD$ .\" -.Dd December 28, 1996 +.Dd October 20, 2008 .Os .Dt LOGIN_CLASS 3 .Sh NAME .Nm setclasscontext , +.Nm setclasscpumask , .Nm setclassenvironment , .Nm setclassresources , .Nm setusercontext @@ -35,12 +36,14 @@ .In login_cap.h .Ft int .Fn setclasscontext "const char *classname" "unsigned int flags" -.Ft int -.Fn setusercontext "login_cap_t *lc" "const struct passwd *pwd" "uid_t uid" "unsigned int flags" .Ft void -.Fn setclassresources "login_cap_t *lc" +.Fn setclasscpumask "login_cap_t *lc" .Ft void .Fn setclassenvironment "login_cap_t *lc" "const struct passwd *pwd" "int paths" +.Ft void +.Fn setclassresources "login_cap_t *lc" +.Ft int +.Fn setusercontext "login_cap_t *lc" "const struct passwd *pwd" "uid_t uid" "unsigned int flags" .Sh DESCRIPTION These functions provide a higher level interface to the login class database than those documented in @@ -155,6 +158,18 @@ capability "setenv=var1 val1,var2 val2.. Set the MAC label for the current process to the label specified in system login class database. .Pp +.It LOGIN_SETCPUMASK +Create a new +.Xr cpuset 2 +and set the cpu affinity to the specified mask. +The string may contain a comma separated list of numbers and/or number +ranges as handled by the +.Xr cpuset 1 +utility or the case-insensitive string +.Ql default . +If the string is +.Ql default +no action will be taken. .It LOGIN_SETALL Enables all of the above settings. .El @@ -170,6 +185,7 @@ are substituted for the user's home dire respectively. .Pp The +.Fn setclasscpumask , .Fn setclassresources and .Fn setclassenvironment @@ -186,6 +202,8 @@ or resources, a message is reported to .Xr syslog 3 , with LOG_ERR priority and directed to the currently active facility. .Sh SEE ALSO +.Xr cpuset 1 , +.Xr cpuset 2 , .Xr setgid 2 , .Xr setlogin 2 , .Xr setuid 2 , Modified: stable/7/lib/libutil/login_class.c ============================================================================== --- stable/7/lib/libutil/login_class.c Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/login_class.c Tue Jun 9 01:43:58 2009 (r193795) @@ -25,12 +25,16 @@ #include __FBSDID("$FreeBSD$"); -#include -#include -#include -#include +#include +#include #include +#include #include +#include +#include + +#include +#include #include #include #include @@ -89,7 +93,7 @@ setclassresources(login_cap_t *lc) if (getrlimit(lr->why, &rlim) != 0) syslog(LOG_ERR, "getting %s resource limit: %m", lr->what); else { - char name_cur[40]; + char name_cur[40]; char name_max[40]; rlim_t rcur = rlim.rlim_cur; rlim_t rmax = rlim.rlim_max; @@ -101,7 +105,7 @@ setclassresources(login_cap_t *lc) rmax = (*lr->who)(lc, lr->what, rmax, rmax); rlim.rlim_cur = (*lr->who)(lc, name_cur, rcur, rcur); rlim.rlim_max = (*lr->who)(lc, name_max, rmax, rmax); - + if (setrlimit(lr->why, &rlim) == -1) syslog(LOG_WARNING, "set class '%s' resource limit %s: %m", lc->lc_class, lr->what); } @@ -181,7 +185,7 @@ substvar(const char * var, const struct } } - return np; + return (np); } @@ -238,6 +242,108 @@ setclassenvironment(login_cap_t *lc, con } +static int +list2cpuset(const char *list, cpuset_t *mask) +{ + enum { NONE, NUM, DASH } state; + int lastnum; + int curnum; + const char *l; + + state = NONE; + curnum = lastnum = 0; + for (l = list; *l != '\0';) { + if (isdigit(*l)) { + curnum = atoi(l); + if (curnum > CPU_SETSIZE) + errx(EXIT_FAILURE, + "Only %d cpus supported", CPU_SETSIZE); + while (isdigit(*l)) + l++; + switch (state) { + case NONE: + lastnum = curnum; + state = NUM; + break; + case DASH: + for (; lastnum <= curnum; lastnum++) + CPU_SET(lastnum, mask); + state = NONE; + break; + case NUM: + default: + return (0); + } + continue; + } + switch (*l) { + case ',': + switch (state) { + case NONE: + break; + case NUM: + CPU_SET(curnum, mask); + state = NONE; + break; + case DASH: + return (0); + break; + } + break; + case '-': + if (state != NUM) + return (0); + state = DASH; + break; + default: + return (0); + } + l++; + } + switch (state) { + case NONE: + break; + case NUM: + CPU_SET(curnum, mask); + break; + case DASH: + return (0); + } + return (1); +} + + +void +setclasscpumask(login_cap_t *lc) +{ + const char *maskstr; + cpuset_t maskset; + cpusetid_t setid; + + maskstr = login_getcapstr(lc, "cpumask", NULL, NULL); + CPU_ZERO(&maskset); + if (maskstr == NULL) + return; + if (strcasecmp("default", maskstr) == 0) + return; + if (!list2cpuset(maskstr, &maskset)) { + syslog(LOG_WARNING, + "list2cpuset(%s) invalid mask specification", maskstr); + return; + } + + if (cpuset(&setid) != 0) { + syslog(LOG_ERR, "cpuset(): %s", strerror(errno)); + return; + } + + if (cpuset_setaffinity(CPU_LEVEL_CPUSET, CPU_WHICH_PID, -1, + sizeof(maskset), &maskset) != 0) + syslog(LOG_ERR, "cpuset_setaffinity(%s): %s", maskstr, + strerror(errno)); +} + + /* * setclasscontext() * @@ -262,7 +368,7 @@ setclasscontext(const char *classname, u rc = lc ? setusercontext(lc, NULL, 0, flags) : -1; login_close(lc); - return rc; + return (rc); } @@ -288,8 +394,11 @@ setlogincontext(login_cap_t *lc, const s /* Set environment */ if (flags & LOGIN_SETENV) setclassenvironment(lc, pwd, 0); + /* Set cpu affinity */ + if (flags & LOGIN_SETCPUMASK) + setclasscpumask(lc); } - return mymask; + return (mymask); } @@ -359,13 +468,13 @@ setusercontext(login_cap_t *lc, const st if (setgid(pwd->pw_gid) != 0) { syslog(LOG_ERR, "setgid(%lu): %m", (u_long)pwd->pw_gid); login_close(llc); - return -1; + return (-1); } if (initgroups(pwd->pw_name, pwd->pw_gid) == -1) { syslog(LOG_ERR, "initgroups(%s,%lu): %m", pwd->pw_name, (u_long)pwd->pw_gid); login_close(llc); - return -1; + return (-1); } } @@ -379,7 +488,7 @@ setusercontext(login_cap_t *lc, const st if (mac_from_text(&label, label_string) == -1) { syslog(LOG_ERR, "mac_from_text('%s') for %s: %m", pwd->pw_name, label_string); - return -1; + return (-1); } if (mac_set_proc(label) == -1) error = errno; @@ -389,7 +498,7 @@ setusercontext(login_cap_t *lc, const st if (error != 0) { syslog(LOG_ERR, "mac_set_proc('%s') for %s: %s", label_string, pwd->pw_name, strerror(error)); - return -1; + return (-1); } } } @@ -398,7 +507,7 @@ setusercontext(login_cap_t *lc, const st if ((flags & LOGIN_SETLOGIN) && setlogin(pwd->pw_name) != 0) { syslog(LOG_ERR, "setlogin(%s): %m", pwd->pw_name); login_close(llc); - return -1; + return (-1); } mymask = (flags & LOGIN_SETUMASK) ? umask(LOGIN_DEFUMASK) : 0; @@ -408,7 +517,7 @@ setusercontext(login_cap_t *lc, const st /* This needs to be done after anything that needs root privs */ if ((flags & LOGIN_SETUSER) && setuid(uid) != 0) { syslog(LOG_ERR, "setuid(%lu): %m", (u_long)uid); - return -1; /* Paranoia again */ + return (-1); /* Paranoia again */ } /* @@ -423,6 +532,5 @@ setusercontext(login_cap_t *lc, const st if (flags & LOGIN_SETUMASK) umask(mymask); - return 0; + return (0); } - Modified: stable/7/lib/libutil/login_times.3 ============================================================================== --- stable/7/lib/libutil/login_times.3 Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/login_times.3 Tue Jun 9 01:43:58 2009 (r193795) @@ -19,13 +19,15 @@ .\" .\" $FreeBSD$ .\" -.Dd January 2, 1997 +.Dd October 20, 2008 .Os .Dt LOGIN_TIMES 3 .Sh NAME .Nm parse_lt , +.Nm in_lt , .Nm in_ltm , -.Nm in_ltms +.Nm in_ltms , +.Nm in_lts .Nd functions for parsing and checking login time periods .Sh LIBRARY .Lb libutil @@ -36,9 +38,13 @@ .Ft login_time_t .Fn parse_lt "const char *str" .Ft int +.Fn in_lt "const login_time_t *lt" "time_t *ends" +.Ft int .Fn in_ltm "const login_time_t *lt" "struct tm *t" "time_t *ends" .Ft int .Fn in_ltms "const login_time_t *lt" "struct tm *t" "time_t *ends" +.Ft int +.Fn in_lts "const login_time_t *lt" "time_t *ends" .Sh DESCRIPTION This set of functions may be used for parsing and checking login and session times against a predefined list of allowed login times as @@ -135,6 +141,18 @@ elements in length, and terminated by an .Ar lt_dow field set to .Em LTM_NONE . +.Pp +The +.Fn in_lt +and +.Fn in_lts +functions are equivalent to +.Fn in_ltm +and +.Fn in_ltms , +respectively, with the second argument set to the current time as +returned by +.Xr localtime 3 . .Sh RETURN VALUES The .Fn parse_lt Modified: stable/7/lib/libutil/login_times.c ============================================================================== --- stable/7/lib/libutil/login_times.c Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/login_times.c Tue Jun 9 01:43:58 2009 (r193795) @@ -34,13 +34,13 @@ __FBSDID("$FreeBSD$"); static struct { const char *dw; - u_char cn; - u_char fl; + u_char cn; + u_char fl; } dws[] = { { "su", 2, LTM_SUN }, { "mo", 2, LTM_MON }, { "tu", 2, LTM_TUE }, { "we", 2, LTM_WED }, { "th", 2, LTM_THU }, { "fr", 2, LTM_FRI }, - { "sa", 2, LTM_SAT }, { "any",3, LTM_ANY }, { "all",3, LTM_ANY }, + { "sa", 2, LTM_SAT }, { "any",3, LTM_ANY }, { "all",3, LTM_ANY }, { "wk", 2, LTM_WK }, { "wd", 2, LTM_WD }, { NULL, 0, 0 } }; @@ -54,28 +54,28 @@ parse_time(char * ptr, u_short * t) *t = (u_short)((val / 100) * 60 + (val % 100)); - return ptr; + return (ptr); } login_time_t -parse_lt(const char * str) +parse_lt(const char *str) { login_time_t t; memset(&t, 0, sizeof t); t.lt_dow = LTM_NONE; if (str && *str && strcmp(str, "Never") != 0 && strcmp(str, "None") != 0) { - int i; - login_time_t m = t; + int i; + login_time_t m = t; char *p; - char buf[64]; + char buf[64]; /* Make local copy and force lowercase to simplify parsing */ - p = strncpy(buf, str, sizeof buf); - buf[sizeof buf - 1] = '\0'; + strlcpy(buf, str, sizeof buf); for (i = 0; buf[i]; i++) buf[i] = (char)tolower(buf[i]); + p = buf; while (isalpha(*p)) { @@ -102,12 +102,12 @@ parse_lt(const char * str) t = m; } - return t; + return (t); } int -in_ltm(const login_time_t * ltm, struct tm * tt, time_t * ends) +in_ltm(const login_time_t *ltm, struct tm *tt, time_t *ends) { int rc = 0; @@ -130,32 +130,33 @@ in_ltm(const login_time_t * ltm, struct } } } - return rc; + return (rc); } int -in_lt(const login_time_t * ltm, time_t * t) +in_lt(const login_time_t *ltm, time_t *t) { - return in_ltm(ltm, localtime(t), t); + + return (in_ltm(ltm, localtime(t), t)); } int -in_ltms(const login_time_t * ltm, struct tm * tm, time_t * t) +in_ltms(const login_time_t *ltm, struct tm *tm, time_t *t) { int i = 0; while (i < LC_MAXTIMES && ltm[i].lt_dow != LTM_NONE) { if (in_ltm(ltm + i, tm, t)) - return i; + return (i); i++; } - return -1; + return (-1); } int -in_lts(const login_time_t * ltm, time_t * t) +in_lts(const login_time_t *ltm, time_t *t) { - return in_ltms(ltm, localtime(t), t); -} + return (in_ltms(ltm, localtime(t), t)); +} Modified: stable/7/lib/libutil/pidfile.3 ============================================================================== --- stable/7/lib/libutil/pidfile.3 Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/pidfile.3 Tue Jun 9 01:43:58 2009 (r193795) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 22, 2005 +.Dd October 20, 2008 .Dt PIDFILE 3 .Os .Sh NAME @@ -51,16 +51,14 @@ The .Nm pidfile family of functions allows daemons to handle PID files. It uses -.Xr flock 2 +.Xr flopen 3 to lock a pidfile and detect already running daemons. .Pp The .Fn pidfile_open function opens (or creates) a file specified by the .Fa path -argument and locks it with the -.Xr flock 2 -system call. +argument and locks it. If a file can not be locked, a PID of an already running daemon is returned in the .Fa pidptr @@ -102,6 +100,7 @@ if an error occurs. If an error occurs, .Va errno will be set. +.Pp .Rv -std pidfile_write pidfile_close pidfile_remove .Sh EXAMPLES The following example shows in which order these functions should be used. @@ -233,16 +232,17 @@ function may also fail and set .Va errno for any errors specified for the .Xr close 2 , -.Xr flock 2 , .Xr fstat 2 , .Xr write 2 , and .Xr unlink 2 -calls. +system calls and the +.Xr flopen 3 +library function. .Sh SEE ALSO -.Xr flock 2 , .Xr open 2 , -.Xr daemon 3 +.Xr daemon 3 , +.Xr flopen 3 .Sh AUTHORS .An -nosplit The Modified: stable/7/lib/libutil/pidfile.c ============================================================================== --- stable/7/lib/libutil/pidfile.c Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/pidfile.c Tue Jun 9 01:43:58 2009 (r193795) @@ -231,10 +231,6 @@ _pidfile_remove(struct pidfh *pfh, int f if (unlink(pfh->pf_path) == -1) error = errno; - if (flock(pfh->pf_fd, LOCK_UN) == -1) { - if (error == 0) - error = errno; - } if (close(pfh->pf_fd) == -1) { if (error == 0) error = errno; Modified: stable/7/lib/libutil/realhostname.c ============================================================================== --- stable/7/lib/libutil/realhostname.c Tue Jun 9 01:41:45 2009 (r193794) +++ stable/7/lib/libutil/realhostname.c Tue Jun 9 01:43:58 2009 (r193795) @@ -101,7 +101,9 @@ realhostname_sa(char *host, size_t hsize { int result, error; char buf[NI_MAXHOST]; +#ifdef INET6 struct sockaddr_in lsin; +#endif result = HOSTNAME_INVALIDADDR;