accumulated post-1.4.0 fixes
No binary (build failed)
—
(log yok)
| @@ -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); | |
| @@ -23,10 +23,10 @@ | |
| * 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 | |
| @@ -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) | |
| { | |
| @@ -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. | |
| @@ -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 | |
| @@ -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__ */ | |
| - | |
| @@ -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) | |
| @@ -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); | |