diff options
| author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-05-12 12:20:38 +0000 |
|---|---|---|
| committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-05-12 12:20:38 +0000 |
| commit | 7f81972ee25d8b65417a4f0b42124ba6e48616ac (patch) | |
| tree | 663d39c04c8740abe5a8179df2431930a52488c4 /usr/src/lib | |
| parent | 8c6284f26f84d01dcbb0f93a15e9cf0da38c36de (diff) | |
| parent | 868e1ac07011f1f9626a73a411c31ebbdd462e3d (diff) | |
| download | illumos-joyent-7f81972ee25d8b65417a4f0b42124ba6e48616ac.tar.gz | |
[illumos-gate merge]
commit 868e1ac07011f1f9626a73a411c31ebbdd462e3d
12554 want sdev plugin framework (fix header issue)
commit b237158d576c3f39f35d97c4dd214c07273ddde4
12674 want mac rx barrier function
commit b939b187ee16d21b506005807c652e2c7bdfe243
12645 vds: smatch and NULL pointer errors
commit f8927fa6636832af96f657f29571bdbd213c6247
12554 want sdev plugin framework
commit 725953abcc30bcf6f15d7b8a313ab0749275d95f
12610 rmcadm: NULL pointer errors
commit cb453c7ae4b42ac7a2d7ce155181572a96d69b33
12650 ds: smatch and NULL pointer errors
commit 29368e865707707ba77989693d34358ebfa08757
12644 vdc: NULL pointer errors
commit 59b05390e07c3b0e69288f9a732dc5b90d464721
12539 mdb: NULL pointer errors
commit 8124b8119d8ab7f80f1bd8b094cd96356f531b54
12597 want libutempter
commit c8907381b10259bed3a871a2881c0f3b7287ab3c
12705 remove __builtin_alloca() declaration from string.h
Conflicts:
usr/src/uts/common/sys/mac_impl.h
usr/src/uts/common/sys/Makefile
Diffstat (limited to 'usr/src/lib')
| -rw-r--r-- | usr/src/lib/Makefile | 2 | ||||
| -rw-r--r-- | usr/src/lib/libutempter/Makefile | 37 | ||||
| -rw-r--r-- | usr/src/lib/libutempter/Makefile.com | 30 | ||||
| -rw-r--r-- | usr/src/lib/libutempter/THIRDPARTYLICENSE | 23 | ||||
| -rw-r--r-- | usr/src/lib/libutempter/THIRDPARTYLICENSE.descrip | 1 | ||||
| -rw-r--r-- | usr/src/lib/libutempter/amd64/Makefile | 15 | ||||
| -rw-r--r-- | usr/src/lib/libutempter/common/mapfile-vers | 38 | ||||
| -rw-r--r-- | usr/src/lib/libutempter/common/utempter.c | 132 | ||||
| -rw-r--r-- | usr/src/lib/libutempter/common/utempter.h | 47 | ||||
| -rw-r--r-- | usr/src/lib/libutempter/i386/Makefile | 14 | ||||
| -rw-r--r-- | usr/src/lib/libutempter/sparc/Makefile | 14 | ||||
| -rw-r--r-- | usr/src/lib/libutempter/sparcv9/Makefile | 15 |
12 files changed, 368 insertions, 0 deletions
diff --git a/usr/src/lib/Makefile b/usr/src/lib/Makefile index c928fc8118..9fd28c40f6 100644 --- a/usr/src/lib/Makefile +++ b/usr/src/lib/Makefile @@ -239,6 +239,7 @@ SUBDIRS += \ libtsnet \ libtsol \ libumem \ + libutempter \ libuuid \ libuutil \ libvnd \ @@ -493,6 +494,7 @@ HDRSUBDIRS= \ libtsnet \ libtsol \ libumem \ + libutempter \ libuutil \ libvnd \ libvolmgt \ diff --git a/usr/src/lib/libutempter/Makefile b/usr/src/lib/libutempter/Makefile new file mode 100644 index 0000000000..50a91bef6b --- /dev/null +++ b/usr/src/lib/libutempter/Makefile @@ -0,0 +1,37 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +include $(SRC)/lib/Makefile.lib + +SUBDIRS= $(MACH) $(BUILD64) $(MACH64) + +all:= TARGET= all +clean:= TARGET= clean +clobber:= TARGET= clobber +install:= TARGET= install + +HDRDIR= common +HDRS= utempter.h + +.KEEP_STATE: + +all clean clobber install: $(SUBDIRS) + +check: $(CHECKHDRS) + +install_h: $(ROOTHDRS) + +$(SUBDIRS): FRC + @cd $@; pwd; $(MAKE) $(TARGET) + +FRC: + +include $(SRC)/lib/Makefile.targ diff --git a/usr/src/lib/libutempter/Makefile.com b/usr/src/lib/libutempter/Makefile.com new file mode 100644 index 0000000000..6e0332e4e0 --- /dev/null +++ b/usr/src/lib/libutempter/Makefile.com @@ -0,0 +1,30 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +LIBRARY= libutempter.a +VERS= .1 + +OBJECTS= utempter.o + +include $(SRC)/lib/Makefile.lib + +SRCDIR= ../common + +LDLIBS += -lc +LIBS= $(DYNLIB) + +CSTD= $(CSTD_GNU99) + +.KEEP_STATE: + +all: $(LIBS) + +include $(SRC)/lib/Makefile.targ diff --git a/usr/src/lib/libutempter/THIRDPARTYLICENSE b/usr/src/lib/libutempter/THIRDPARTYLICENSE new file mode 100644 index 0000000000..aa2de14939 --- /dev/null +++ b/usr/src/lib/libutempter/THIRDPARTYLICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2009 Ed Schouten <ed@FreeBSD.org> +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. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. diff --git a/usr/src/lib/libutempter/THIRDPARTYLICENSE.descrip b/usr/src/lib/libutempter/THIRDPARTYLICENSE.descrip new file mode 100644 index 0000000000..a5add467b7 --- /dev/null +++ b/usr/src/lib/libutempter/THIRDPARTYLICENSE.descrip @@ -0,0 +1 @@ +UTEMPTER LIBRARY diff --git a/usr/src/lib/libutempter/amd64/Makefile b/usr/src/lib/libutempter/amd64/Makefile new file mode 100644 index 0000000000..c876c91740 --- /dev/null +++ b/usr/src/lib/libutempter/amd64/Makefile @@ -0,0 +1,15 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +include ../Makefile.com +include ../../Makefile.lib.64 + +install: all $(ROOTLIBS64) $(ROOTLINKS64) diff --git a/usr/src/lib/libutempter/common/mapfile-vers b/usr/src/lib/libutempter/common/mapfile-vers new file mode 100644 index 0000000000..c2c0249afd --- /dev/null +++ b/usr/src/lib/libutempter/common/mapfile-vers @@ -0,0 +1,38 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# MAPFILE HEADER START +# +# WARNING: STOP NOW. DO NOT MODIFY THIS FILE. +# Object versioning must comply with the rules detailed in +# +# usr/src/lib/README.mapfiles +# +# You should not be making modifications here until you've read the most current +# copy of that file. If you need help, contact a gatekeeper for guidance. +# +# MAPFILE HEADER END +# + +$mapfile_version 2 + +SYMBOL_VERSION ILLUMOS_0.1 { + global: + addToUtmp; + removeFromUtmp; + removeLineFromUtmp; + utempter_add_record; + utempter_remove_added_record; + utempter_remove_record; + local: + *; +}; diff --git a/usr/src/lib/libutempter/common/utempter.c b/usr/src/lib/libutempter/common/utempter.c new file mode 100644 index 0000000000..63e6b24ba1 --- /dev/null +++ b/usr/src/lib/libutempter/common/utempter.c @@ -0,0 +1,132 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2009 Ed Schouten <ed@FreeBSD.org> + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +#include <sys/types.h> + +#include <pwd.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <utmpx.h> + +static int last_fd = -1; + +static void +utempter_update_utmpx(int type, int fd, const char *host) +{ + struct utmpx ut; + struct passwd *pw; + uid_t uid; + + (void) memset(&ut, 0, sizeof (ut)); + ut.ut_type = type; + ut.ut_pid = getpid(); + ut.ut_session = getsid(0); + (void) gettimeofday(&ut.ut_tv, NULL); + if (snprintf(ut.ut_id, sizeof (ut.ut_id), "f%d", fd) >= + sizeof (ut.ut_id)) + return; + uid = getuid(); + if ((pw = getpwuid(uid)) == NULL) + return; + (void) strlcpy(ut.ut_user, pw->pw_name, sizeof (ut.ut_user)); + + if (type == DEAD_PROCESS) { + struct utmpx *ut1; + struct utmpx ut2; + + (void) memset(&ut2, 0, sizeof (ut2)); + ut2.ut_type = USER_PROCESS; + if (snprintf(ut2.ut_id, sizeof (ut2.ut_id), "f%d", fd) >= + sizeof (ut2.ut_id)) + return; + if ((ut1 = getutxid(&ut2)) == NULL) + return; + (void) strlcpy(ut.ut_line, ut1->ut_line, sizeof (ut.ut_line)); + } else { + char *line = ptsname(fd); + if (line == NULL) + return; + (void) strlcpy(ut.ut_line, line + strlen("/dev/"), + sizeof (ut.ut_line)); + } + + if (host != NULL) { + (void) strlcpy(ut.ut_host, host, sizeof (ut.ut_host)); + ut.ut_syslen = strlen(ut.ut_host) + 1; + } + + setutxent(); + (void) pututxline(&ut); + endutxent(); +} + +int +utempter_add_record(int fd, const char *host) +{ + utempter_update_utmpx(USER_PROCESS, fd, host); + last_fd = fd; + return (0); +} + +int +utempter_remove_record(int fd) +{ + utempter_update_utmpx(DEAD_PROCESS, fd, NULL); + if (last_fd == fd) + last_fd = -1; + return (0); +} + +int +utempter_remove_added_record(void) +{ + if (last_fd < 0) + return (0); + utempter_update_utmpx(DEAD_PROCESS, last_fd, NULL); + last_fd = -1; + return (0); +} + +void +addToUtmp(const char *pty __unused, const char *host, int fd) +{ + (void) utempter_add_record(fd, host); +} + +void +removeFromUtmp(void) +{ + (void) utempter_remove_added_record(); +} + +void +removeLineFromUtmp(const char *pty __unused, int fd) +{ + (void) utempter_remove_record(fd); +} diff --git a/usr/src/lib/libutempter/common/utempter.h b/usr/src/lib/libutempter/common/utempter.h new file mode 100644 index 0000000000..fab58d9422 --- /dev/null +++ b/usr/src/lib/libutempter/common/utempter.h @@ -0,0 +1,47 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2009 Ed Schouten <ed@FreeBSD.org> + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 _UTEMPTER_H +#define _UTEMPTER_H + +#ifdef __cplusplus +extern "C" { +#endif + +int utempter_add_record(int, const char *); +int utempter_remove_added_record(void); +int utempter_remove_record(int); +void addToUtmp(const char *, const char *, int); +void removeFromUtmp(void); +void removeLineFromUtmp(const char *, int); + +#ifdef __cplusplus +} +#endif + +#endif /* !_UTEMPTER_H */ diff --git a/usr/src/lib/libutempter/i386/Makefile b/usr/src/lib/libutempter/i386/Makefile new file mode 100644 index 0000000000..f4a0a208fd --- /dev/null +++ b/usr/src/lib/libutempter/i386/Makefile @@ -0,0 +1,14 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +include ../Makefile.com + +install: all $(ROOTLIBS) $(ROOTLINKS) diff --git a/usr/src/lib/libutempter/sparc/Makefile b/usr/src/lib/libutempter/sparc/Makefile new file mode 100644 index 0000000000..f4a0a208fd --- /dev/null +++ b/usr/src/lib/libutempter/sparc/Makefile @@ -0,0 +1,14 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +include ../Makefile.com + +install: all $(ROOTLIBS) $(ROOTLINKS) diff --git a/usr/src/lib/libutempter/sparcv9/Makefile b/usr/src/lib/libutempter/sparcv9/Makefile new file mode 100644 index 0000000000..c876c91740 --- /dev/null +++ b/usr/src/lib/libutempter/sparcv9/Makefile @@ -0,0 +1,15 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +include ../Makefile.com +include ../../Makefile.lib.64 + +install: all $(ROOTLIBS64) $(ROOTLINKS64) |
