am 1ff04118: Merge change 23693 into eclair
Merge commit '1ff041180c66ef6f1020cf5314a665d319e9ac86' into eclair-plus-aosp * commit '1ff041180c66ef6f1020cf5314a665d319e9ac86': dumpstate: Add option to output to socket, disable code that switched to nonroot
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
|
|
||||||
|
#include <cutils/sockets.h>
|
||||||
#include "private/android_filesystem_config.h"
|
#include "private/android_filesystem_config.h"
|
||||||
|
|
||||||
#include "dumpstate.h"
|
#include "dumpstate.h"
|
||||||
@@ -164,11 +165,11 @@ static int check_command_name(const char* name, const char* test) {
|
|||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
int dumpcrash = check_command_name(argv[0], "dumpcrash");
|
int dumpcrash = check_command_name(argv[0], "dumpcrash");
|
||||||
int bugreport = check_command_name(argv[0], "bugreport");
|
|
||||||
int add_date = 0;
|
int add_date = 0;
|
||||||
char* outfile = 0;
|
char* outfile = 0;
|
||||||
int vibrate = 0;
|
int vibrate = 0;
|
||||||
int compress = 0;
|
int compress = 0;
|
||||||
|
int socket = 0;
|
||||||
int c, fd, vibrate_fd, fds[2];
|
int c, fd, vibrate_fd, fds[2];
|
||||||
char path[PATH_MAX];
|
char path[PATH_MAX];
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
@@ -180,31 +181,32 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
get_time(&now);
|
get_time(&now);
|
||||||
|
|
||||||
if (bugreport) {
|
do {
|
||||||
do {
|
c = getopt(argc, argv, "do:svz");
|
||||||
c = getopt(argc, argv, "do:vz");
|
if (c == EOF)
|
||||||
if (c == EOF)
|
break;
|
||||||
|
switch (c) {
|
||||||
|
case 'd':
|
||||||
|
add_date = 1;
|
||||||
break;
|
break;
|
||||||
switch (c) {
|
case 'o':
|
||||||
case 'd':
|
outfile = optarg;
|
||||||
add_date = 1;
|
break;
|
||||||
break;
|
case 'v':
|
||||||
case 'o':
|
vibrate = 1;
|
||||||
outfile = optarg;
|
break;
|
||||||
break;
|
case 'z':
|
||||||
case 'v':
|
compress = 1;
|
||||||
vibrate = 1;
|
break;
|
||||||
break;
|
case 's':
|
||||||
case 'z':
|
socket = 1;
|
||||||
compress = 1;
|
break;
|
||||||
break;
|
case '?':
|
||||||
case '?':
|
fprintf(stderr, "%s: invalid option -%c\n",
|
||||||
fprintf(stderr, "%s: invalid option -%c\n",
|
argv[0], optopt);
|
||||||
argv[0], optopt);
|
exit(1);
|
||||||
exit(1);
|
}
|
||||||
}
|
} while (1);
|
||||||
} while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* open vibrator before switching user */
|
/* open vibrator before switching user */
|
||||||
if (vibrate) {
|
if (vibrate) {
|
||||||
@@ -214,14 +216,40 @@ int main(int argc, char *argv[]) {
|
|||||||
} else
|
} else
|
||||||
vibrate_fd = -1;
|
vibrate_fd = -1;
|
||||||
|
|
||||||
|
#if 0
|
||||||
/* switch to non-root user and group */
|
/* switch to non-root user and group */
|
||||||
setgroups(sizeof(groups)/sizeof(groups[0]), groups);
|
setgroups(sizeof(groups)/sizeof(groups[0]), groups);
|
||||||
setuid(AID_SHELL);
|
setuid(AID_SHELL);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* make it safe to use both printf and STDOUT_FILENO */
|
/* make it safe to use both printf and STDOUT_FILENO */
|
||||||
setvbuf(stdout, 0, _IONBF, 0);
|
setvbuf(stdout, 0, _IONBF, 0);
|
||||||
|
|
||||||
if (outfile) {
|
if (socket) {
|
||||||
|
struct sockaddr addr;
|
||||||
|
socklen_t alen;
|
||||||
|
|
||||||
|
int s = android_get_control_socket("dumpstate");
|
||||||
|
if (s < 0) {
|
||||||
|
fprintf(stderr, "could not open dumpstate socket\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (listen(s, 4) < 0) {
|
||||||
|
fprintf(stderr, "could not listen on dumpstate socket\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
alen = sizeof(addr);
|
||||||
|
fd = accept(s, &addr, &alen);
|
||||||
|
if (fd < 0) {
|
||||||
|
fprintf(stderr, "could not accept dumpstate socket\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* redirect stdout to the socket */
|
||||||
|
dup2(fd, STDOUT_FILENO);
|
||||||
|
close(fd);
|
||||||
|
} else if (outfile) {
|
||||||
if (strlen(outfile) > sizeof(path) - 100)
|
if (strlen(outfile) > sizeof(path) - 100)
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user