@ -0,0 +1,67 @@ | |||||
/* $NetBSD: util.h,v 1.2 1996/05/16 07:00:22 thorpej Exp $ */ | |||||
/*- | |||||
* Copyright (c) 1995 | |||||
* The Regents of the University of California. All rights reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in the | |||||
* documentation and/or other materials provided with the distribution. | |||||
* 3. All advertising materials mentioning features or use of this software | |||||
* must display the following acknowledgement: | |||||
* This product includes software developed by the University of | |||||
* California, Berkeley and its contributors. | |||||
* 4. Neither the name of the University nor the names of its contributors | |||||
* may be used to endorse or promote products derived from this software | |||||
* without specific prior written permission. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
*/ | |||||
#ifndef _UTIL_H_ | |||||
#define _UTIL_H_ | |||||
#include <pwd.h> | |||||
#include <utmp.h> | |||||
#include <termios.h> | |||||
#include <sys/ttycom.h> | |||||
#include <sys/types.h> | |||||
#include <sys/cdefs.h> | |||||
__BEGIN_DECLS | |||||
void login __P((struct utmp *)); | |||||
int login_tty __P((int)); | |||||
int logout __P((const char *)); | |||||
void logwtmp __P((const char *, const char *, const char *)); | |||||
int pw_lock __P((int retries)); | |||||
int pw_mkdb __P((void)); | |||||
int pw_abort __P((void)); | |||||
void pw_init __P((void)); | |||||
void pw_edit __P((int notsetuid, const char *filename)); | |||||
void pw_prompt __P((void)); | |||||
void pw_copy __P((int ffd, int tfd, struct passwd *pw)); | |||||
int pw_scan __P((char *bp, struct passwd *pw, int *flags)); | |||||
void pw_error __P((const char *name, int err, int eval)); | |||||
int openpty __P((int *, int *, char *, struct termios *, | |||||
struct winsize *)); | |||||
pid_t forkpty __P((int *, char *, struct termios *, struct winsize *)); | |||||
int getmaxpartitions __P((void)); | |||||
int getrawpartition __P((void)); | |||||
__END_DECLS | |||||
#endif /* !_UTIL_H_ */ |
@ -1,8 +1,24 @@ | |||||
# from: @(#)Makefile 8.1 (Berkeley) 6/4/93 | # $OpenBSD: Makefile,v 1.2 1996/05/22 11:34:58 deraadt Exp $ | ||||
# $Id: Makefile,v 1.1.1.1 1995/10/18 08:43:13 deraadt Exp $ | # $NetBSD: Makefile,v 1.8 1996/05/16 07:03:28 thorpej Exp $ | ||||
LIB= util | LIB= util | ||||
CFLAGS+=-DLIBC_SCCS | CFLAGS+=-DLIBC_SCCS | ||||
SRCS= login.c login_tty.c logout.c logwtmp.c pty.c | SRCS= getmaxpartitions.c getrawpartition.c login.c login_tty.c logout.c \ | ||||
logwtmp.c passwd.c pty.c | |||||
MAN= getmaxpartitions.3 getrawpartition.3 login.3 openpty.3 pw_init.3 \ | |||||
pw_lock.3 | |||||
MLINKS+=login.3 logout.3 | |||||
MLINKS+=login.3 logwtmp.3 | |||||
MLINKS+=openpty.3 login_tty.3 | |||||
MLINKS+=openpty.3 forkpty.3 | |||||
MLINKS+=pw_init.3 pw_edit.3 | |||||
MLINKS+=pw_init.3 pw_prompt.3 | |||||
MLINKS+=pw_init.3 pw_copy.3 | |||||
MLINKS+=pw_init.3 pw_scan.3 | |||||
MLINKS+=pw_init.3 pw_error.3 | |||||
MLINKS+=pw_lock.3 pw_mkdb.3 | |||||
MLINKS+=pw_lock.3 pw_abort.3 | |||||
.include <bsd.lib.mk> | .include <bsd.lib.mk> |
@ -0,0 +1,58 @@ | |||||
.\" $NetBSD: getmaxpartitions.3,v 1.1 1996/05/16 07:03:30 thorpej Exp $ | |||||
.\" | |||||
.\" Copyright (c) 1996 The NetBSD Foundation, Inc. | |||||
.\" All rights reserved. | |||||
.\" | |||||
.\" This code is derived from software contributed to The NetBSD Foundation | |||||
.\" by Jason R. Thorpe. | |||||
.\" | |||||
.\" Redistribution and use in source and binary forms, with or without | |||||
.\" modification, are permitted provided that the following conditions | |||||
.\" are met: | |||||
.\" 1. Redistributions of source code must retain the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer. | |||||
.\" 2. Redistributions in binary form must reproduce the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer in the | |||||
.\" documentation and/or other materials provided with the distribution. | |||||
.\" 3. All advertising materials mentioning features or use of this software | |||||
.\" must display the following acknowledgement: | |||||
.\" This product includes software developed by the NetBSD | |||||
.\" Foundation, Inc. and its contributors. | |||||
.\" 4. Neither the name of The NetBSD Foundation nor the names of its | |||||
.\" contributors may be used to endorse or promote products derived | |||||
.\" from this software without specific prior written permission. | |||||
.\" | |||||
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS | |||||
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |||||
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |||||
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE | |||||
.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |||||
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |||||
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||||
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |||||
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |||||
.\" POSSIBILITY OF SUCH DAMAGE. | |||||
.\" | |||||
.Dd May 15, 1996 | |||||
.Dt GETMAXPARTITIONS 3 | |||||
.Os NetBSD | |||||
.Sh NAME | |||||
.Nm getmaxpartitions | |||||
.Nd get the maximum number of partitions allowed per disk | |||||
.Sh SYNOPSIS | |||||
.Fd #include <util.h> | |||||
.Ft int | |||||
.Fn getmaxpartitions void | |||||
.Sh DESCRIPTION | |||||
.Fn Getmaxpartitions | |||||
returns the number of partitions that are allowed per disk on the | |||||
system. | |||||
.Sh SEE ALSO | |||||
.Xr getrawpartition 3 , | |||||
.Xr sysctl 3 | |||||
.Sh HISTORY | |||||
The | |||||
.Nm | |||||
function call appeared in | |||||
.Nx 1.2 . |
@ -0,0 +1,60 @@ | |||||
/* $NetBSD: getmaxpartitions.c,v 1.1 1996/05/16 07:03:31 thorpej Exp $ */ | |||||
/*- | |||||
* Copyright (c) 1996 The NetBSD Foundation, Inc. | |||||
* All rights reserved. | |||||
* | |||||
* This code is derived from software contributed to The NetBSD Foundation | |||||
* by Jason R. Thorpe. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in the | |||||
* documentation and/or other materials provided with the distribution. | |||||
* 3. All advertising materials mentioning features or use of this software | |||||
* must display the following acknowledgement: | |||||
* This product includes software developed by the NetBSD | |||||
* Foundation, Inc. and its contributors. | |||||
* 4. Neither the name of The NetBSD Foundation nor the names of its | |||||
* contributors may be used to endorse or promote products derived | |||||
* from this software without specific prior written permission. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS | |||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE | |||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |||||
* POSSIBILITY OF SUCH DAMAGE. | |||||
*/ | |||||
#if defined(LIBC_SCCS) && !defined(lint) | |||||
static char rcsid[] = "$NetBSD: getmaxpartitions.c,v 1.1 1996/05/16 07:03:31 thorpej Exp $"; | |||||
#endif | |||||
#include <sys/param.h> | |||||
#include <sys/sysctl.h> | |||||
#include <util.h> | |||||
int | |||||
getmaxpartitions() | |||||
{ | |||||
int maxpart, mib[2]; | |||||
size_t varlen; | |||||
mib[0] = CTL_KERN; | |||||
mib[1] = KERN_MAXPARTITIONS; | |||||
varlen = sizeof(maxpart); | |||||
if (sysctl(mib, 2, &maxpart, &varlen, NULL, 0) < 0) | |||||
return (-1); | |||||
return (maxpart); | |||||
} |
@ -0,0 +1,69 @@ | |||||
.\" $NetBSD: getrawpartition.3,v 1.1 1996/05/16 07:03:32 thorpej Exp $ | |||||
.\" | |||||
.\" Copyright (c) 1996 The NetBSD Foundation, Inc. | |||||
.\" All rights reserved. | |||||
.\" | |||||
.\" This code is derived from software contributed to The NetBSD Foundation | |||||
.\" by Jason R. Thorpe. | |||||
.\" | |||||
.\" Redistribution and use in source and binary forms, with or without | |||||
.\" modification, are permitted provided that the following conditions | |||||
.\" are met: | |||||
.\" 1. Redistributions of source code must retain the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer. | |||||
.\" 2. Redistributions in binary form must reproduce the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer in the | |||||
.\" documentation and/or other materials provided with the distribution. | |||||
.\" 3. All advertising materials mentioning features or use of this software | |||||
.\" must display the following acknowledgement: | |||||
.\" This product includes software developed by the NetBSD | |||||
.\" Foundation, Inc. and its contributors. | |||||
.\" 4. Neither the name of The NetBSD Foundation nor the names of its | |||||
.\" contributors may be used to endorse or promote products derived | |||||
.\" from this software without specific prior written permission. | |||||
.\" | |||||
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS | |||||
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |||||
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |||||
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE | |||||
.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |||||
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |||||
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||||
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |||||
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |||||
.\" POSSIBILITY OF SUCH DAMAGE. | |||||
.\" | |||||
.Dd May 15, 1996 | |||||
.Dt GETRAWPARTITION 3 | |||||
.Os NetBSD | |||||
.Sh NAME | |||||
.Nm getrawpartition | |||||
.Nd get the system | |||||
.Dq raw | |||||
partition | |||||
.Sh SYNOPSIS | |||||
.Fd #include <util.h> | |||||
.Ft int | |||||
.Fn getrawpartition void | |||||
.Sh DESCRIPTION | |||||
.Fn Getrawpartition | |||||
returns the partition number ( | |||||
.Sq a | |||||
== 0, | |||||
.Sq b | |||||
== 1, ...) of the | |||||
.Dq raw | |||||
partition of the system's disks. | |||||
The | |||||
.Dq raw | |||||
partition is defined as the partition which provides access to the entire | |||||
disk, regardless of the disk's partition map. | |||||
.Sh SEE ALSO | |||||
.Xr getmaxpartitions 3 , | |||||
.Xr sysctl 3 | |||||
.Sh HISTORY | |||||
The | |||||
.Nm | |||||
function call appeared in | |||||
.Nx 1.2 . |
@ -0,0 +1,60 @@ | |||||
/* $NetBSD: getrawpartition.c,v 1.1 1996/05/16 07:03:33 thorpej Exp $ */ | |||||
/*- | |||||
* Copyright (c) 1996 The NetBSD Foundation, Inc. | |||||
* All rights reserved. | |||||
* | |||||
* This code is derived from software contributed to The NetBSD Foundation | |||||
* by Jason R. Thorpe. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in the | |||||
* documentation and/or other materials provided with the distribution. | |||||
* 3. All advertising materials mentioning features or use of this software | |||||
* must display the following acknowledgement: | |||||
* This product includes software developed by the NetBSD | |||||
* Foundation, Inc. and its contributors. | |||||
* 4. Neither the name of The NetBSD Foundation nor the names of its | |||||
* contributors may be used to endorse or promote products derived | |||||
* from this software without specific prior written permission. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS | |||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE | |||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |||||
* POSSIBILITY OF SUCH DAMAGE. | |||||
*/ | |||||
#if defined(LIBC_SCCS) && !defined(lint) | |||||
static char rcsid[] = "$NetBSD: getrawpartition.c,v 1.1 1996/05/16 07:03:33 thorpej Exp $"; | |||||
#endif | |||||
#include <sys/param.h> | |||||
#include <sys/sysctl.h> | |||||
#include <util.h> | |||||
int | |||||
getrawpartition() | |||||
{ | |||||
int rawpart, mib[2]; | |||||
size_t varlen; | |||||
mib[0] = CTL_KERN; | |||||
mib[1] = KERN_RAWPARTITION; | |||||
varlen = sizeof(rawpart); | |||||
if (sysctl(mib, 2, &rawpart, &varlen, NULL, 0) < 0) | |||||
return (-1); | |||||
return (rawpart); | |||||
} |
@ -0,0 +1,107 @@ | |||||
.\" Copyright (c) 1995 | |||||
.\" The Regents of the University of California. All rights reserved. | |||||
.\" | |||||
.\" This code is derived from software developed by the Computer Systems | |||||
.\" Engineering group at Lawrence Berkeley Laboratory under DARPA contract | |||||
.\" BG 91-66 and contributed to Berkeley. | |||||
.\" | |||||
.\" Redistribution and use in source and binary forms, with or without | |||||
.\" modification, are permitted provided that the following conditions | |||||
.\" are met: | |||||
.\" 1. Redistributions of source code must retain the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer. | |||||
.\" 2. Redistributions in binary form must reproduce the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer in the | |||||
.\" documentation and/or other materials provided with the distribution. | |||||
.\" 3. All advertising materials mentioning features or use of this software | |||||
.\" must display the following acknowledgement: | |||||
.\" This product includes software developed by the University of | |||||
.\" California, Berkeley and its contributors. | |||||
.\" 4. Neither the name of the University nor the names of its contributors | |||||
.\" may be used to endorse or promote products derived from this software | |||||
.\" without specific prior written permission. | |||||
.\" | |||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
.\" SUCH DAMAGE. | |||||
.\" | |||||
.Dd December 14, 1995 | |||||
.Dt LOGIN 3 | |||||
.Os | |||||
.Sh NAME | |||||
.Nm login , | |||||
.Nm logout , | |||||
.Nm logwtmp | |||||
.Nd login utility functions | |||||
.Sh SYNOPSIS | |||||
.Fd #include <util.h> | |||||
.Ft void | |||||
.Fn login "struct utmp *ut" | |||||
.Ft int | |||||
.Fn logout "const char *line" | |||||
.Ft void | |||||
.Fn logwtmp "const char *line" "const char *name" "const char *host" | |||||
.Sh DESCRIPTION | |||||
The | |||||
.Fn login , | |||||
.Fn logout , | |||||
and | |||||
.Fn logwtmp | |||||
functions operate on the database of current users in | |||||
.Pa /var/run/utmp | |||||
and on the logfile | |||||
.Pa /var/log/wtmp | |||||
of logins and logouts. | |||||
.Pp | |||||
The | |||||
.Fn login | |||||
function updates the | |||||
.Pa /var/run/utmp | |||||
and | |||||
.Pa /var/log/wtmp | |||||
files with user information contained in | |||||
.Fa ut . | |||||
.Pp | |||||
The | |||||
.Fn logout | |||||
function removes the entry from | |||||
.Pa /var/run/utmp | |||||
corresponding to the device | |||||
.Fa line . | |||||
.Pp | |||||
The | |||||
.Fn logwtmp | |||||
function adds an entry to | |||||
.Pa /var/log/wtmp . | |||||
Since | |||||
.Fn login | |||||
will add the appropriate entry for | |||||
.Pa /var/log/wtmp | |||||
during a login, | |||||
.Fn logwtmp | |||||
is usually used for logouts. | |||||
.Sh RETURN VALUES | |||||
.Fn logout | |||||
returns non-zero if it was able to find and delete an entry for | |||||
.Fa line , | |||||
and zero if there is no entry for | |||||
.Fa line | |||||
in | |||||
.Pa /var/run/utmp . | |||||
.Sh FILES | |||||
.Bl -tag -width /var/run/wtmp -compact | |||||
.It Pa /dev/\(** | |||||
.It Pa /etc/ttys | |||||
.It Pa /var/run/utmp | |||||
.It Pa /var/log/wtmp | |||||
.El | |||||
.Sh SEE ALSO | |||||
.Xr utmp 5 |
@ -0,0 +1,153 @@ | |||||
.\" Copyright (c) 1995 | |||||
.\" The Regents of the University of California. All rights reserved. | |||||
.\" | |||||
.\" This code is derived from software developed by the Computer Systems | |||||
.\" Engineering group at Lawrence Berkeley Laboratory under DARPA contract | |||||
.\" BG 91-66 and contributed to Berkeley. | |||||
.\" | |||||
.\" Redistribution and use in source and binary forms, with or without | |||||
.\" modification, are permitted provided that the following conditions | |||||
.\" are met: | |||||
.\" 1. Redistributions of source code must retain the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer. | |||||
.\" 2. Redistributions in binary form must reproduce the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer in the | |||||
.\" documentation and/or other materials provided with the distribution. | |||||
.\" 3. All advertising materials mentioning features or use of this software | |||||
.\" must display the following acknowledgement: | |||||
.\" This product includes software developed by the University of | |||||
.\" California, Berkeley and its contributors. | |||||
.\" 4. Neither the name of the University nor the names of its contributors | |||||
.\" may be used to endorse or promote products derived from this software | |||||
.\" without specific prior written permission. | |||||
.\" | |||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
.\" SUCH DAMAGE. | |||||
.\" | |||||
.Dd December 14, 1995 | |||||
.Dt OPENPTY 3 | |||||
.Os | |||||
.Sh NAME | |||||
.Nm openpty , | |||||
.Nm login_tty , | |||||
.Nm forkpty | |||||
.Nd tty utility functions | |||||
.Sh SYNOPSIS | |||||
.Fd #include <util.h> | |||||
.Ft void | |||||
.Fn openpty "int *amaster" "int *aslave" "char *name" "struct termios *termp" "struct winsize *winp" | |||||
.Ft int | |||||
.Fn login_tty "int fd" | |||||
.Ft pid_t | |||||
.Fn forkpty "int *amaster" "char *name" "struct termios *termp" "struct winsize *winp" | |||||
.Sh DESCRIPTION | |||||
The | |||||
.Fn openpty , | |||||
.Fn login_tty , | |||||
and | |||||
.Fn login_tty | |||||
functions perform manipulations on ttys and pseudo-ttys. | |||||
.Pp | |||||
The | |||||
.Fn openpty | |||||
function finds an available pseudo-tty and returns file descriptors | |||||
for the master and slave in | |||||
.Fa amaster | |||||
and | |||||
.Fa aslave . | |||||
If | |||||
.Fa name | |||||
is non-null, the filename of the slave is returned in | |||||
.Fa name . | |||||
If | |||||
.Fa termp | |||||
is non-null, the terminal parameters of the slave will be set to the | |||||
values in | |||||
.Fa termp . | |||||
If | |||||
.Fa winp | |||||
is non-null, the window size of the slave will be set to the values in | |||||
.Fa winp . | |||||
.Pp | |||||
The | |||||
.Fn login_tty | |||||
function prepares for a login on the tty | |||||
.Fa fd | |||||
(which may be a real tty device, or the slave of a pseudo-tty as | |||||
returned by | |||||
.Fn openpty ) | |||||
by creating a new session, making | |||||
.Fa fd | |||||
the controlling terminal for the current process, setting | |||||
.Fa fd | |||||
to be the standard input, output, and error streams of the current | |||||
process, and closing | |||||
.Fa fd . | |||||
.Pp | |||||
The | |||||
.Fn forkpty | |||||
function combines | |||||
.Fn openpty , | |||||
.Fn fork , | |||||
and | |||||
.Fn login_tty | |||||
to creates a new process operating in a pseudo-tty. The file | |||||
descriptor of the master side of the pseudo-tty is returned in | |||||
.Fa amaster , | |||||
and the filename of the slave in | |||||
.Fa name | |||||
if it is non-null. The | |||||
.Fa termp | |||||
and | |||||
.Fa winp | |||||
parameters, if non-null, will determine the terminal attributes and | |||||
window size of the slave side of the pseudo-tty. | |||||
.Sh RETURN VALUES | |||||
If a call to | |||||
.Fn openpty , | |||||
.Fn login_tty , | |||||
or | |||||
.fn forkpty | |||||
is not successful, -1 is returned and | |||||
.Va errno | |||||
is set to indicate the error. Otherwise, they return 0. | |||||
.Sh ERRORS | |||||
.Fn openpty | |||||
will fail if: | |||||
.Bl -tag -width Er | |||||
.It Bq Er ENOENT | |||||
There are no available ttys. | |||||
.El | |||||
.Pp | |||||
.Fn login_tty | |||||
will fail if | |||||
.Fn ioctl | |||||
fails to set | |||||
.Fa fd | |||||
to the controlling terminal of the current process. | |||||
.Fn forkpty | |||||
will fail if either | |||||
.Fn openpty | |||||
or | |||||
.Fn fork | |||||
fails. | |||||
.Sh FILES | |||||
.Bl -tag -width /dev/[pt]ty[pqrstuwxyzPQRST][0123456789abcdef] -compact | |||||
.It Pa /dev/[pt]ty[pqrstuwxyzPQRST][0123456789abcdef] | |||||
.El | |||||
.Sh BUGS | |||||
The names of the virtual consoles for the i386 PCVT console driver | |||||
conflict with what would be the seventh group of pseudo-ttys, so | |||||
.Fn openpty | |||||
skips | |||||
.Pa /dev/[pt]tyv[0123456789abcdef] | |||||
while looking for pseudo-ttys. |
@ -0,0 +1,347 @@ | |||||
/* | |||||
* Copyright (c) 1987, 1993, 1994, 1995 | |||||
* The Regents of the University of California. All rights reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in the | |||||
* documentation and/or other materials provided with the distribution. | |||||
* 3. All advertising materials mentioning features or use of this software | |||||
* must display the following acknowledgement: | |||||
* This product includes software developed by the University of | |||||
* California, Berkeley and its contributors. | |||||
* 4. Neither the name of the University nor the names of its contributors | |||||
* may be used to endorse or promote products derived from this software | |||||
* without specific prior written permission. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
*/ | |||||
#if defined(LIBC_SCCS) && !defined(lint) | |||||
static char rcsid[] = "$NetBSD: passwd.c,v 1.1 1996/05/15 21:42:31 jtc Exp $"; | |||||
#endif /* LIBC_SCCS and not lint */ | |||||
#include <sys/types.h> | |||||
#include <sys/stat.h> | |||||
#include <sys/time.h> | |||||
#include <sys/resource.h> | |||||
#include <sys/wait.h> | |||||
#include <fcntl.h> | |||||
#include <unistd.h> | |||||
#include <stdlib.h> | |||||
#include <stdio.h> | |||||
#include <string.h> | |||||
#include <pwd.h> | |||||
#include <errno.h> | |||||
#include <paths.h> | |||||
#include <signal.h> | |||||
#include <limits.h> | |||||
#include <util.h> | |||||
static void pw_cont __P((int sig)); | |||||
int | |||||
pw_lock(retries) | |||||
int retries; | |||||
{ | |||||
int i, fd; | |||||
mode_t old_mode; | |||||
/* Acquire the lock file. */ | |||||
old_mode = umask(0); | |||||
fd = open(_PATH_MASTERPASSWD_LOCK, O_WRONLY|O_CREAT|O_EXCL, 0600); | |||||
for (i = 0; i < retries && fd < 0 && errno == EEXIST; i++) { | |||||
sleep(1); | |||||
fd = open(_PATH_MASTERPASSWD_LOCK, O_WRONLY|O_CREAT|O_EXCL, | |||||
0600); | |||||
} | |||||
umask(old_mode); | |||||
return(fd); | |||||
} | |||||
int | |||||
pw_mkdb() | |||||
{ | |||||
int pstat; | |||||
pid_t pid; | |||||
pid = vfork(); | |||||
if (pid == 0) { | |||||
execl(_PATH_PWD_MKDB, "pwd_mkdb", "-p", | |||||
_PATH_MASTERPASSWD_LOCK, NULL); | |||||
exit(1); | |||||
} | |||||
pid = waitpid(pid, &pstat, 0); | |||||
if (pid == -1 || !WIFEXITED(pstat) || WEXITSTATUS(pstat) != 0) { | |||||
unlink(_PATH_MASTERPASSWD_LOCK); | |||||
return(-1); | |||||
} | |||||
return(0); | |||||
} | |||||
int | |||||
pw_abort() | |||||
{ | |||||
return(unlink(_PATH_MASTERPASSWD_LOCK)); | |||||
} | |||||
/* Everything below this point is intended for the convenience of programs | |||||
* which allow a user to interactively edit the passwd file. Errors in the | |||||
* routines below will cause the process to abort. */ | |||||
static pid_t editpid = -1; | |||||
static void | |||||
pw_cont(sig) | |||||
int sig; | |||||
{ | |||||
if (editpid != -1) | |||||
kill(editpid, sig); | |||||
} | |||||
void | |||||
pw_init() | |||||
{ | |||||
struct rlimit rlim; | |||||
/* Unlimited resource limits. */ | |||||
rlim.rlim_cur = rlim.rlim_max = RLIM_INFINITY; | |||||
(void)setrlimit(RLIMIT_CPU, &rlim); | |||||
(void)setrlimit(RLIMIT_FSIZE, &rlim); | |||||
(void)setrlimit(RLIMIT_STACK, &rlim); | |||||
(void)setrlimit(RLIMIT_DATA, &rlim); | |||||
(void)setrlimit(RLIMIT_RSS, &rlim); | |||||
/* Don't drop core (not really necessary, but GP's). */ | |||||
rlim.rlim_cur = rlim.rlim_max = 0; | |||||
(void)setrlimit(RLIMIT_CORE, &rlim); | |||||
/* Turn off signals. */ | |||||
(void)signal(SIGALRM, SIG_IGN); | |||||
(void)signal(SIGHUP, SIG_IGN); | |||||
(void)signal(SIGINT, SIG_IGN); | |||||
(void)signal(SIGPIPE, SIG_IGN); | |||||
(void)signal(SIGQUIT, SIG_IGN); | |||||
(void)signal(SIGTERM, SIG_IGN); | |||||
(void)signal(SIGCONT, pw_cont); | |||||
} | |||||
void | |||||
pw_edit(notsetuid, filename) | |||||
int notsetuid; | |||||
const char *filename; | |||||
{ | |||||
int pstat; | |||||
char *p, *editor; | |||||
if (!filename) | |||||
filename = _PATH_MASTERPASSWD_LOCK; | |||||
if (!(editor = getenv("EDITOR"))) | |||||
editor = _PATH_VI; | |||||
if (p = strrchr(editor, '/')) | |||||
++p; | |||||
else | |||||
p = editor; | |||||
if (!(editpid = vfork())) { | |||||
if (notsetuid) { | |||||
setgid(getgid()); | |||||
setuid(getuid()); | |||||
} | |||||
execlp(editor, p, filename, NULL); | |||||
_exit(1); | |||||
} | |||||
for (;;) { | |||||
editpid = waitpid(editpid, (int *)&pstat, WUNTRACED); | |||||
if (editpid == -1) | |||||
pw_error(editor, 1, 1); | |||||
else if (WIFSTOPPED(pstat)) | |||||
raise(WSTOPSIG(pstat)); | |||||
else if (WIFEXITED(pstat) && WEXITSTATUS(pstat) == 0) | |||||
break; | |||||
else | |||||
pw_error(editor, 1, 1); | |||||
} | |||||
editpid = -1; | |||||
} | |||||
void | |||||
pw_prompt() | |||||
{ | |||||
int c; | |||||
(void)printf("re-edit the password file? [y]: "); | |||||
(void)fflush(stdout); | |||||
c = getchar(); | |||||
if (c != EOF && c != '\n') | |||||
while (getchar() != '\n'); | |||||
if (c == 'n') | |||||
pw_error(NULL, 0, 0); | |||||
} | |||||
void | |||||
pw_copy(ffd, tfd, pw) | |||||
int ffd, tfd; | |||||
struct passwd *pw; | |||||
{ | |||||
FILE *from, *to; | |||||
int done; | |||||
char *p, buf[8192]; | |||||
if (!(from = fdopen(ffd, "r"))) | |||||
pw_error(_PATH_MASTERPASSWD, 1, 1); | |||||
if (!(to = fdopen(tfd, "w"))) | |||||
pw_error(_PATH_MASTERPASSWD_LOCK, 1, 1); | |||||
for (done = 0; fgets(buf, sizeof(buf), from);) { | |||||
if (!strchr(buf, '\n')) { | |||||
warnx("%s: line too long", _PATH_MASTERPASSWD); | |||||
pw_error(NULL, 0, 1); | |||||
} | |||||
if (done) { | |||||
(void)fprintf(to, "%s", buf); | |||||
if (ferror(to)) | |||||
goto err; | |||||
continue; | |||||
} | |||||
if (!(p = strchr(buf, ':'))) { | |||||
warnx("%s: corrupted entry", _PATH_MASTERPASSWD); | |||||
pw_error(NULL, 0, 1); | |||||
} | |||||
*p = '\0'; | |||||
if (strcmp(buf, pw->pw_name)) { | |||||
*p = ':'; | |||||
(void)fprintf(to, "%s", buf); | |||||
if (ferror(to)) | |||||
goto err; | |||||
continue; | |||||
} | |||||
(void)fprintf(to, "%s:%s:%d:%d:%s:%ld:%ld:%s:%s:%s\n", | |||||
pw->pw_name, pw->pw_passwd, pw->pw_uid, pw->pw_gid, | |||||
pw->pw_class, pw->pw_change, pw->pw_expire, pw->pw_gecos, | |||||
pw->pw_dir, pw->pw_shell); | |||||
done = 1; | |||||
if (ferror(to)) | |||||
goto err; | |||||
} | |||||
if (!done) | |||||
(void)fprintf(to, "%s:%s:%d:%d:%s:%ld:%ld:%s:%s:%s\n", | |||||
pw->pw_name, pw->pw_passwd, pw->pw_uid, pw->pw_gid, | |||||
pw->pw_class, pw->pw_change, pw->pw_expire, pw->pw_gecos, | |||||
pw->pw_dir, pw->pw_shell); | |||||
if (ferror(to)) | |||||
err: pw_error(NULL, 1, 1); | |||||
(void)fclose(to); | |||||
} | |||||
int | |||||
pw_scan(bp, pw, flags) | |||||
char *bp; | |||||
struct passwd *pw; | |||||
int *flags; | |||||
{ | |||||
long id; | |||||
int root; | |||||
char *p, *sh; | |||||
if (flags != (int *)NULL) | |||||
*flags = 0; | |||||
if (!(pw->pw_name = strsep(&bp, ":"))) /* login */ | |||||
goto fmt; | |||||
root = !strcmp(pw->pw_name, "root"); | |||||
if (!(pw->pw_passwd = strsep(&bp, ":"))) /* passwd */ | |||||
goto fmt; | |||||
if (!(p = strsep(&bp, ":"))) /* uid */ | |||||
goto fmt; | |||||
id = atol(p); | |||||
if (root && id) { | |||||
warnx("root uid should be 0"); | |||||
return (0); | |||||
} | |||||
if (id > USHRT_MAX) { | |||||
warnx("%s > max uid value (%d)", p, USHRT_MAX); | |||||
return (0); | |||||
} | |||||
pw->pw_uid = id; | |||||
if ((*p == '\0') && (flags != (int *)NULL)) | |||||
*flags |= _PASSWORD_NOUID; | |||||
if (!(p = strsep(&bp, ":"))) /* gid */ | |||||
goto fmt; | |||||
id = atol(p); | |||||
if (id > USHRT_MAX) { | |||||
warnx("%s > max gid value (%d)", p, USHRT_MAX); | |||||
return (0); | |||||
} | |||||
pw->pw_gid = id; | |||||
if ((*p == '\0') && (flags != (int *)NULL)) | |||||
*flags |= _PASSWORD_NOGID; | |||||
pw->pw_class = strsep(&bp, ":"); /* class */ | |||||
if (!(p = strsep(&bp, ":"))) /* change */ | |||||
goto fmt; | |||||
pw->pw_change = atol(p); | |||||
if ((*p == '\0') && (flags != (int *)NULL)) | |||||
*flags |= _PASSWORD_NOCHG; | |||||
if (!(p = strsep(&bp, ":"))) /* expire */ | |||||
goto fmt; | |||||
pw->pw_expire = atol(p); | |||||
if ((*p == '\0') && (flags != (int *)NULL)) | |||||
*flags |= _PASSWORD_NOEXP; | |||||
pw->pw_gecos = strsep(&bp, ":"); /* gecos */ | |||||
pw->pw_dir = strsep(&bp, ":"); /* directory */ | |||||
if (!(pw->pw_shell = strsep(&bp, ":"))) /* shell */ | |||||
goto fmt; | |||||
p = pw->pw_shell; | |||||
if (root && *p) /* empty == /bin/sh */ | |||||
for (setusershell();;) { | |||||
if (!(sh = getusershell())) { | |||||
warnx("warning, unknown root shell"); | |||||
break; | |||||
} | |||||
if (!strcmp(p, sh)) | |||||
break; | |||||
} | |||||
if (p = strsep(&bp, ":")) { /* too many */ | |||||
fmt: warnx("corrupted entry"); | |||||
return (0); | |||||
} | |||||
return (1); | |||||
} | |||||
void | |||||
pw_error(name, err, eval) | |||||
const char *name; | |||||
int err, eval; | |||||
{ | |||||
if (err) | |||||
warn(name); | |||||
warnx("%s: unchanged", _PATH_MASTERPASSWD); | |||||
pw_abort(); | |||||
exit(eval); | |||||
} | |||||
@ -0,0 +1,174 @@ | |||||
.\" Copyright (c) 1995 | |||||
.\" The Regents of the University of California. All rights reserved. | |||||
.\" | |||||
.\" This code is derived from software developed by the Computer Systems | |||||
.\" Engineering group at Lawrence Berkeley Laboratory under DARPA contract | |||||
.\" BG 91-66 and contributed to Berkeley. | |||||
.\" | |||||
.\" Redistribution and use in source and binary forms, with or without | |||||
.\" modification, are permitted provided that the following conditions | |||||
.\" are met: | |||||
.\" 1. Redistributions of source code must retain the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer. | |||||
.\" 2. Redistributions in binary form must reproduce the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer in the | |||||
.\" documentation and/or other materials provided with the distribution. | |||||
.\" 3. All advertising materials mentioning features or use of this software | |||||
.\" must display the following acknowledgement: | |||||
.\" This product includes software developed by the University of | |||||
.\" California, Berkeley and its contributors. | |||||
.\" 4. Neither the name of the University nor the names of its contributors | |||||
.\" may be used to endorse or promote products derived from this software | |||||
.\" without specific prior written permission. | |||||
.\" | |||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
.\" SUCH DAMAGE. | |||||
.\" | |||||
.Dd December 15, 1995 | |||||
.Dt PW_INIT 3 | |||||
.Os | |||||
.Sh NAME | |||||
.Nm pw_init , | |||||
.Nm pw_edit , | |||||
.Nm pw_prompt , | |||||
.Nm pw_copy , | |||||
.Nm pw_scan , | |||||
.Nm pw_error | |||||
.Nd utility functions for interactive passwd file updates | |||||
.Sh SYNOPSIS | |||||
.Fd #indlude <pwd.h> | |||||
.Fd #include <util.h> | |||||
.Ft void | |||||
.Fn pw_init | |||||
.Ft void | |||||
.Fn pw_edit "int notsetuid" "const char *filename" | |||||
.Ft void | |||||
.Fn pw_prompt | |||||
.Ft void | |||||
.Fn pw_copy "int ffd" "int tfd" "struct passwd *pw" | |||||
.Ft int | |||||
.Fn pw_scan "char *bp" "struct passwd *pw" "int *flags" | |||||
.Ft void | |||||
.Fn pw_error "const char *name" "int err" "int eval" | |||||
.Sh DESCRIPTION | |||||
These functions are designed as conveniences for interactive programs | |||||
which update the passwd file and do nothing else. They generally | |||||
handle errors by printing out a message to the standard error stream | |||||
and possibly aborting the process. | |||||
.Pp | |||||
The | |||||
.Fn pw_init | |||||
function prepares for a passwd update by unlimiting all resource | |||||
constraints, disabling core dumps (thus preventing dumping the | |||||
contents of the passwd database into a world-readable file), and | |||||
disabling most signals. | |||||
.Pp | |||||
The | |||||
.Fn pw_edit | |||||
function runs an editor (named by the environment variable EDITOR, or | |||||
.Pa /usr/bin/vi | |||||
if EDITOR is not set) on the file | |||||
.Fa filename | |||||
(or | |||||
.Pa /etc/ptmp | |||||
if | |||||
.Fa filename | |||||
is NULL). If | |||||
.Fa notsetuid | |||||
is nonzero, | |||||
.Fn pw_edit | |||||
will set the effective user and group ID to the real user and group ID | |||||
before running the editor. | |||||
.Pp | |||||
The | |||||
.Fn pw_prompt | |||||
function asks the user whether he or she wants to re-edit the password | |||||
file; if the answer is no, | |||||
.Fn pw_prompt | |||||
deletes the lock file and exits the process. | |||||
.Pp | |||||
The | |||||
.Fn pw_copy | |||||
function reads a passwd file from | |||||
.Fa ffd | |||||
and writes it to | |||||
.Fa tfd , | |||||
updating the entry corresponding to pw->pw_name with the information | |||||
in | |||||
.Fa pw . | |||||
.Pp | |||||
The | |||||
.Fn pw_scan | |||||
function accepts in | |||||
.Fa bp | |||||
a passwd entry as it would be represented in | |||||
.Pa /etc/master.passwd | |||||
and fills in | |||||
.Fa pw | |||||
with corresponding values; string fields in | |||||
.Fa pw | |||||
will be pointers into | |||||
.Fa bp . | |||||
Some characters in | |||||
.Fa bp | |||||
will be overwritten with 0s in order to terminate the strings pointed | |||||
to by | |||||
.Fa pw . | |||||
If | |||||
.Fa flags | |||||
is non-null, it is filled in with the following flags: | |||||
.Bl -tag -width _PASSWORD_NOGIDxxx | |||||
.It Dv _PASSWORD_NOUID | |||||
The uid field of | |||||
.Fa bp | |||||
is empty. | |||||
.It Dv _PASSWORD_NOGID | |||||
The gid field of | |||||
.Fa bp | |||||
is empty. | |||||
.It Dv _PASSWD_NOCHG | |||||
The change field of | |||||
.Fa bp | |||||
is empty. | |||||
.It Dv _PASSWD_NOEXP | |||||
The expire field of | |||||
.Fa bp | |||||
is empty. | |||||
.El | |||||
.Pp | |||||
The | |||||
.Fn pw_error | |||||
function displays an error message, aborts the current passwd update, | |||||
and exits the current process. If | |||||
.Fa err | |||||
is non-zero, a warning message beginning with | |||||
.Fa name | |||||
is printed for the current value of | |||||
.Va errno . | |||||
The process exits with status | |||||
.Fa eval . | |||||
.Sh RETURN VALUES | |||||
The | |||||
.Fn pw_scan | |||||
function prints a warning message and returns 0 if the string in the | |||||
.Fa bp | |||||
argument is not a valid passwd string. Otherwise, | |||||
.Fn pw_scan | |||||
returns 1. | |||||
.Sh FILES | |||||
.Bl -tag -width /etc/master.passwd -compact | |||||
.It Pa /etc/master.passwd | |||||
.It Pa /etc/ptmp | |||||
.El | |||||
.Sh SEE ALSO | |||||
.Xr pw_lock 3 , | |||||
.Xr passwd 5 |
@ -0,0 +1,100 @@ | |||||
.\" Copyright (c) 1995 | |||||
.\" The Regents of the University of California. All rights reserved. | |||||
.\" | |||||
.\" This code is derived from software developed by the Computer Systems | |||||
.\" Engineering group at Lawrence Berkeley Laboratory under DARPA contract | |||||
.\" BG 91-66 and contributed to Berkeley. | |||||
.\" | |||||
.\" Redistribution and use in source and binary forms, with or without | |||||
.\" modification, are permitted provided that the following conditions | |||||
.\" are met: | |||||
.\" 1. Redistributions of source code must retain the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer. | |||||
.\" 2. Redistributions in binary form must reproduce the above copyright | |||||
.\" notice, this list of conditions and the following disclaimer in the | |||||
.\" documentation and/or other materials provided with the distribution. | |||||
.\" 3. All advertising materials mentioning features or use of this software | |||||
.\" must display the following acknowledgement: | |||||
.\" This product includes software developed by the University of | |||||
.\" California, Berkeley and its contributors. | |||||
.\" 4. Neither the name of the University nor the names of its contributors | |||||
.\" may be used to endorse or promote products derived from this software | |||||
.\" without specific prior written permission. | |||||
.\" | |||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
.\" SUCH DAMAGE. | |||||
.\" | |||||
.Dd December 15, 1995 | |||||
.Dt PW_LOCK 3 | |||||
.Os | |||||
.Sh NAME | |||||
.Nm pw_lock , | |||||
.Nm pw_mkdb , | |||||
.Nm pw_abort | |||||
.Nd passwd file update functions | |||||
.Sh SYNOPSIS | |||||
.Fd #include <util.h> | |||||
.Ft int | |||||
.Fn pw_lock "int retries" | |||||
.Ft int | |||||
.Fn pw_mkdb | |||||
.Ft void | |||||
.Fn pw_abort | |||||
.Sh DESCRIPTION | |||||
The | |||||
.Fn pw_lock , | |||||
.Fn pw_mkdb , | |||||
and | |||||
.Fn pw_abort | |||||
functions allow a program to update the system passwd database. | |||||
.Pp | |||||
The | |||||
.Fn pw_lock | |||||
function attempts to lock the passwd database by creating the file | |||||
.Pa /etc/ptmp , | |||||
and returns the file descriptor of that file. If | |||||
.Fa retries | |||||
is greater than zero, | |||||
.Fn pw_lock | |||||
will try multiple times to open | |||||
.Pa /etc/ptmp , | |||||
waiting one second between tries. In addition to being a lock file, | |||||
.Pa /etc/ptmp | |||||
will also hold the contents of the new passwd file. | |||||
.Pp | |||||
The | |||||
.Fn pw_mkdb | |||||
function updates the passwd file from the contents of | |||||
.Pa /etc/ptmp . | |||||
You should finish writing to and close the file descriptor returned by | |||||
.Fn pw_lock | |||||
before calling | |||||
.Fn pw_mkdb . | |||||
.Pp | |||||
The | |||||
.Fn pw_abort | |||||
function aborts a passwd file update by deleting | |||||
.Pa /etc/ptmp . | |||||
The passwd database remains unchanged. | |||||
.Sh RETURN VALUES | |||||
The | |||||
.Fn pw_lock | |||||
and | |||||
.Fn pw_mkdb | |||||
functions return -1 if they are unable to complete properly. | |||||
.Sh FILES | |||||
.Bl -tag -width /etc/master.passwd -compact | |||||
.It Pa /etc/master.passwd | |||||
.It Pa /etc/ptmp | |||||
.El | |||||
.Sh SEE ALSO | |||||
.Xr pw_init 3 |
@ -1,2 +1,2 @@ | |||||
major=3 | major=3 | ||||
minor=1 | minor=2 |