bsd-misc.c revision 106121
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 27RCSID("$Id: bsd-misc.c,v 1.10 2002/07/08 21:09:41 mouring Exp $"); 28 29char *get_progname(char *argv0) 30{ 31#ifdef HAVE___PROGNAME 32 extern char *__progname; 33 34 return __progname; 35#else 36 char *p; 37 38 if (argv0 == NULL) 39 return "unknown"; /* XXX */ 40 p = strrchr(argv0, '/'); 41 if (p == NULL) 42 p = argv0; 43 else 44 p++; 45 return p; 46#endif 47} 48 49#ifndef HAVE_SETLOGIN 50int setlogin(const char *name) 51{ 52 return(0); 53} 54#endif /* !HAVE_SETLOGIN */ 55 56#ifndef HAVE_INNETGR 57int innetgr(const char *netgroup, const char *host, 58 const char *user, const char *domain) 59{ 60 return(0); 61} 62#endif /* HAVE_INNETGR */ 63 64#if !defined(HAVE_SETEUID) && defined(HAVE_SETREUID) 65int seteuid(uid_t euid) 66{ 67 return(setreuid(-1,euid)); 68} 69#endif /* !defined(HAVE_SETEUID) && defined(HAVE_SETREUID) */ 70 71#if !defined(HAVE_SETEGID) && defined(HAVE_SETRESGID) 72int setegid(uid_t egid) 73{ 74 return(setresgid(-1,egid,-1)); 75} 76#endif /* !defined(HAVE_SETEGID) && defined(HAVE_SETRESGID) */ 77 78#if !defined(HAVE_STRERROR) && defined(HAVE_SYS_ERRLIST) && defined(HAVE_SYS_NERR) 79const char *strerror(int e) 80{ 81 extern int sys_nerr; 82 extern char *sys_errlist[]; 83 84 if ((e >= 0) && (e < sys_nerr)) 85 return(sys_errlist[e]); 86 else 87 return("unlisted error"); 88} 89#endif 90 91#ifndef HAVE_UTIMES 92int utimes(char *filename, struct timeval *tvp) 93{ 94 struct utimbuf ub; 95 96 ub.actime = tvp[0].tv_sec; 97 ub.modtime = tvp[1].tv_sec; 98 99 return(utime(filename, &ub)); 100} 101#endif 102 103#ifndef HAVE_TRUNCATE 104int truncate (const char *path, off_t length) 105{ 106 int fd, ret, saverrno; 107 108 fd = open(path, O_WRONLY); 109 if (fd < 0) 110 return -1; 111 112 ret = ftruncate(fd, length); 113 saverrno = errno; 114 (void) close (fd); 115 if (ret == -1) 116 errno = saverrno; 117 return(ret); 118} 119#endif /* HAVE_TRUNCATE */ 120 121#if !defined(HAVE_SETGROUPS) && defined(SETGROUPS_NOOP) 122/* 123 * Cygwin setgroups should be a noop. 124 */ 125int 126setgroups(size_t size, const gid_t *list) 127{ 128 return 0; 129} 130#endif 131 132