accumulated post-1.4.0 fixes
authorDenis Vlasenko <vda.linux@googlemail.com>
Wed, 24 Jan 2007 22:02:01 +0000 (22:02 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Wed, 24 Jan 2007 22:02:01 +0000 (22:02 -0000)
applets/applets.c
archival/tar.c
libbb/vdprintf.c
libbb/xfuncs.c
libbb/xreadlink.c
networking/libiproute/libnetlink.h
networking/ping6.c
sysklogd/syslogd.c

index ebd1ff31329fcd155f696f7e979500d8a60f7444..a974743da438242ebbbc319ad6390e70bb304c7e 100644 (file)
@@ -320,7 +320,7 @@ static void parse_config_file(void)
 }
 
 #else
-#define parse_config_file()
+#define parse_config_file() ((void)0)
 #endif /* CONFIG_FEATURE_SUID_CONFIG */
 
 #ifdef CONFIG_FEATURE_SUID
@@ -340,20 +340,26 @@ static void check_suid(struct BB_applet *applet)
                if (sct) {
                        mode_t m = sct->m_mode;
 
-                       if (sct->m_uid == ruid)       /* same uid */
+                       if (sct->m_uid == ruid)
+                               /* same uid */
                                m >>= 6;
-                       else if ((sct->m_gid == rgid) || ingroup(ruid, sct->m_gid))  /* same group / in group */
+                       else if ((sct->m_gid == rgid) || ingroup(ruid, sct->m_gid))
+                               /* same group / in group */
                                m >>= 3;
 
                        if (!(m & S_IXOTH))           /* is x bit not set ? */
                                bb_error_msg_and_die("you have no permission to run this applet!");
 
-                       if ((sct->m_mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {     /* *both* have to be set for sgid */
-                               xsetgid(sct->m_gid);
-                       } else xsetgid(rgid);                /* no sgid -> drop */
-
-                       if (sct->m_mode & S_ISUID) xsetuid(sct->m_uid);
-                       else xsetuid(ruid);                  /* no suid -> drop */
+                       if (sct->m_gid != 0) {
+                               /* _both_ have to be set for sgid */
+                               if ((sct->m_mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {
+                                       xsetgid(sct->m_gid);
+                               } else xsetgid(rgid); /* no sgid -> drop */
+                       }
+                       if (sct->m_uid != 0) {
+                               if (sct->m_mode & S_ISUID) xsetuid(sct->m_uid);
+                               else xsetuid(ruid); /* no suid -> drop */
+                       }
                } else {
                        /* default: drop all privileges */
                        xsetgid(rgid);
index 2ba51adf7f7897a880332c7ebf108397bddc1a31..ca59643e59e728845a07bed4cba2018e8dfb0bbd 100644 (file)
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include "busybox.h"
-#include "unarchive.h"
 #include <fnmatch.h>
 #include <getopt.h>
+#include "busybox.h"
+#include "unarchive.h"
 
 #if ENABLE_FEATURE_TAR_CREATE
 
@@ -37,6 +37,7 @@
 /* POSIX tar Header Block, from POSIX 1003.1-1990  */
 #define NAME_SIZE      100
 #define NAME_SIZE_STR "100"
+typedef struct TarHeader TarHeader;
 struct TarHeader {               /* byte offset */
        char name[NAME_SIZE];     /*   0-99 */
        char mode[8];             /* 100-107 */
@@ -56,7 +57,6 @@ struct TarHeader {              /* byte offset */
        char prefix[155];         /* 345-499 */
        char padding[12];         /* 500-512 (pad to exactly the TAR_BLOCK_SIZE) */
 };
-typedef struct TarHeader TarHeader;
 
 /*
 ** writeTarFile(), writeFileToTarball(), and writeTarHeader() are
@@ -73,6 +73,7 @@ struct HardLinkInfo {
 };
 
 /* Some info to be carried along when creating a new tarball */
+typedef struct TarBallInfo TarBallInfo;
 struct TarBallInfo {
        int tarFd;                              /* Open-for-write file descriptor
                                                           for the tarball */
@@ -85,7 +86,6 @@ struct TarBallInfo {
        HardLinkInfo *hlInfoHead;       /* Hard Link Tracking Information */
        HardLinkInfo *hlInfo;   /* Hard Link Info for the current file */
 };
-typedef struct TarBallInfo TarBallInfo;
 
 /* A nice enum with all the possible tar file content types */
 enum TarFileType {
@@ -348,7 +348,7 @@ static int writeTarHeader(struct TarBallInfo *tbInfo,
        return TRUE;
 }
 
-# if ENABLE_FEATURE_TAR_FROM
+#if ENABLE_FEATURE_TAR_FROM
 static int exclude_file(const llist_t *excluded_files, const char *file)
 {
        while (excluded_files) {
@@ -371,12 +371,12 @@ static int exclude_file(const llist_t *excluded_files, const char *file)
 
        return 0;
 }
-# else
+#else
 #define exclude_file(excluded_files, file) 0
-# endif
+#endif
 
 static int writeFileToTarball(const char *fileName, struct stat *statbuf,
-                       void *userData, int depth)
+                       void *userData, int depth ATTRIBUTE_UNUSED)
 {
        struct TarBallInfo *tbInfo = (struct TarBallInfo *) userData;
        const char *header_name;
@@ -509,14 +509,14 @@ static int writeTarFile(const int tar_fd, const int verboseFlag,
                if (pipe(gzipDataPipe) < 0 || pipe(gzipStatusPipe) < 0)
                        bb_perror_msg_and_die("pipe");
 
-               signal(SIGPIPE, SIG_IGN);       /* we only want EPIPE on errors */
+               signal(SIGPIPE, SIG_IGN); /* we only want EPIPE on errors */
 
-# if __GNUC__
+#if defined(__GNUC__) && __GNUC__
                /* Avoid vfork clobbering */
                (void) &include;
                (void) &errorFlag;
                (void) &zip_exec;
-# endif
+#endif
 
                gzipPid = vfork();
 
@@ -600,7 +600,7 @@ static int writeTarFile(const int tar_fd, const int verboseFlag,
 int writeTarFile(const int tar_fd, const int verboseFlag,
        const unsigned long dereferenceFlag, const llist_t *include,
        const llist_t *exclude, const int gzip);
-#endif /* tar_create */
+#endif /* FEATURE_TAR_CREATE */
 
 #if ENABLE_FEATURE_TAR_FROM
 static llist_t *append_file_list_to_list(llist_t *list)
@@ -628,7 +628,7 @@ static llist_t *append_file_list_to_list(llist_t *list)
        return newlist;
 }
 #else
-#define append_file_list_to_list(x)    0
+#define append_file_list_to_list(x) 0
 #endif
 
 #if ENABLE_FEATURE_TAR_COMPRESS
@@ -653,7 +653,7 @@ static char get_header_tar_Z(archive_handle_t *archive_handle)
        return EXIT_FAILURE;
 }
 #else
-#define get_header_tar_Z       0
+#define get_header_tar_Z NULL
 #endif
 
 #ifdef CHECK_FOR_CHILD_EXITCODE
index ea2a9d4bf50edf9bd8c496c3b9a7a1406fe62882..d16c51947a0ffaa6e86d5a0b77dfe90f5dc6600c 100644 (file)
@@ -7,12 +7,8 @@
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include <stdio.h>
-#include <unistd.h>
 #include "libbb.h"
 
-
-
 #if defined(__GLIBC__) && __GLIBC__ < 2
 int vdprintf(int d, const char *format, va_list ap)
 {
index 4252e7646bd7c29e8ee10d9c67c53e908fe0d175..f6b904f78f807747ef102c54979058268a26334b 100644 (file)
@@ -81,13 +81,14 @@ char * xstrndup(const char *s, int n)
        t = (char*) s;
        while (m) {
                if (!*t) break;
-               m--; t++;
+               m--;
+               t++;
        }
-       n = n - m;
+       n -= m;
        t = xmalloc(n + 1);
        t[n] = '\0';
 
-       return memcpy(t,s,n);
+       return memcpy(t, s, n);
 }
 
 // Die if we can't open a file and return a FILE * to it.
index 76f52ca060a833006a83f878d8c0b598f7eee8a8..fb67cdef189701967b7bbbbc3ba415f862eed81b 100644 (file)
@@ -36,7 +36,7 @@ char *xreadlink(const char *path)
 
 char *xmalloc_realpath(const char *path)
 {
-#ifdef __GLIBC__
+#if defined(__GLIBC__) && !defined(__UCLIBC__)
        /* glibc provides a non-standard extension */
        return realpath(path, NULL);
 #else
index 6dd242d038c3c7789fa6da1a0da92f1400684d32..9a5a9d351a7fd663110cad654fe6aaeb66544965 100644 (file)
@@ -2,6 +2,9 @@
 #ifndef __LIBNETLINK_H__
 #define __LIBNETLINK_H__ 1
 
+#include <linux/types.h>
+/* We need linux/types.h because older kernels use __u32 etc
+ * in linux/[rt]netlink.h. 2.6.19 seems to be ok, though */
 #include <linux/netlink.h>
 #include <linux/rtnetlink.h>
 
@@ -37,6 +40,4 @@ extern int rta_addattr_l(struct rtattr *rta, int maxlen, int type, void *data, i
 
 extern int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len);
 
-
 #endif /* __LIBNETLINK_H__ */
-
index b95e098ad0507b89035622ee730f8d53bb2ac098..c691fa74b182080767d1b8a09ec1cacf33b99b9e 100644 (file)
@@ -42,6 +42,8 @@ enum {
        PINGINTERVAL = 1                /* second */
 };
 
+static const char *hostname;
+
 static void ping(const char *host);
 
 #ifndef CONFIG_FEATURE_FANCY_PING6
@@ -50,7 +52,7 @@ static void ping(const char *host);
 
 static void noresp(int ign)
 {
-       printf("No response from %s\n", h->h_name);
+       printf("No response from %s\n", hostname);
        exit(EXIT_FAILURE);
 }
 
@@ -63,6 +65,8 @@ static void ping(const char *host)
        int sockopt;
        char packet[DEFDATALEN + MAXIPLEN + MAXICMPLEN];
 
+       hostname = host;
+
        pingsock = create_icmp6_socket();
 
        lsa = host_and_af2sockaddr(host, 0, AF_INET6);
@@ -105,7 +109,7 @@ static void ping(const char *host)
        }
        if (ENABLE_FEATURE_CLEAN_UP)
                close(pingsock);
-       printf("%s is alive!\n", h->h_name);
+       printf("%s is alive!\n", hostname);
 }
 
 int ping6_main(int argc, char **argv)
index 716e41f5f319c5df2e0c6a4e7f8ec81c89bb1959..dca488ec35f01c6c6db00238b1a555e756c05350 100644 (file)
@@ -569,7 +569,7 @@ int syslogd_main(int argc, char **argv)
        //if (option_mask32 & OPT_locallog) // -L
 #endif
 #if ENABLE_FEATURE_IPC_SYSLOG
-       if ((option_mask32 & OPT_circularlog) && opt_C) // -C
+       if (opt_C) // -Cn
                shm_size = xatoul_range(opt_C, 4, INT_MAX/1024) * 1024;
 #endif
 
@@ -588,7 +588,7 @@ int syslogd_main(int argc, char **argv)
 #ifdef BB_NOMMU
                vfork_daemon_rexec(0, 1, argc, argv, "-n");
 #else
-               xdaemon(0, 1);
+               bb_daemonize();
 #endif
        }
        umask(0);