xref: /titanic_50/usr/src/cmd/ssh/libopenbsd-compat/common/bsd-misc.c (revision 726fad2a65f16c200a03969c29cb5c86c2d427db)
1 /*
2  * Copyright (c) 1999-2000 Damien Miller.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24 
25 #include "includes.h"
26 
27 RCSID("$Id: bsd-misc.c,v 1.10 2002/07/08 21:09:41 mouring Exp $");
28 
29 #pragma ident	"%Z%%M%	%I%	%E% SMI"
30 
31 char *get_progname(char *argv0)
32 {
33 #ifdef HAVE___PROGNAME
34 	extern char *__progname;
35 
36 	return __progname;
37 #else
38 	char *p;
39 
40 	if (argv0 == NULL)
41 		return "unknown";	/* XXX */
42 	p = strrchr(argv0, '/');
43 	if (p == NULL)
44 		p = argv0;
45 	else
46 		p++;
47 	return p;
48 #endif
49 }
50 
51 #ifndef HAVE_SETLOGIN
52 int setlogin(const char *name)
53 {
54 	return(0);
55 }
56 #endif /* !HAVE_SETLOGIN */
57 
58 #ifndef HAVE_INNETGR
59 int innetgr(const char *netgroup, const char *host,
60             const char *user, const char *domain)
61 {
62 	return(0);
63 }
64 #endif /* HAVE_INNETGR */
65 
66 #if !defined(HAVE_SETEUID) && defined(HAVE_SETREUID)
67 int seteuid(uid_t euid)
68 {
69 	return(setreuid(-1,euid));
70 }
71 #endif /* !defined(HAVE_SETEUID) && defined(HAVE_SETREUID) */
72 
73 #if !defined(HAVE_SETEGID) && defined(HAVE_SETRESGID)
74 int setegid(uid_t egid)
75 {
76 	return(setresgid(-1,egid,-1));
77 }
78 #endif /* !defined(HAVE_SETEGID) && defined(HAVE_SETRESGID) */
79 
80 #if !defined(HAVE_STRERROR) && defined(HAVE_SYS_ERRLIST) && defined(HAVE_SYS_NERR)
81 const char *strerror(int e)
82 {
83 	extern int sys_nerr;
84 	extern char *sys_errlist[];
85 
86 	if ((e >= 0) && (e < sys_nerr))
87 		return(sys_errlist[e]);
88 	else
89 		return("unlisted error");
90 }
91 #endif
92 
93 #ifndef HAVE_UTIMES
94 int utimes(char *filename, struct timeval *tvp)
95 {
96 	struct utimbuf ub;
97 
98 	ub.actime = tvp[0].tv_sec;
99 	ub.modtime = tvp[1].tv_sec;
100 
101 	return(utime(filename, &ub));
102 }
103 #endif
104 
105 #ifndef HAVE_TRUNCATE
106 int truncate (const char *path, off_t length)
107 {
108 	int fd, ret, saverrno;
109 
110 	fd = open(path, O_WRONLY);
111 	if (fd < 0)
112 		return -1;
113 
114 	ret = ftruncate(fd, length);
115 	saverrno = errno;
116 	(void) close (fd);
117 	if (ret == -1)
118 		errno = saverrno;
119 	return(ret);
120 }
121 #endif /* HAVE_TRUNCATE */
122 
123 #if !defined(HAVE_SETGROUPS) && defined(SETGROUPS_NOOP)
124 /*
125  * Cygwin setgroups should be a noop.
126  */
127 int
128 setgroups(size_t size, const gid_t *list)
129 {
130 	return 0;
131 }
132 #endif
133 
134