diff options
| author | 2009-05-21 22:25:21 +0200 | |
|---|---|---|
| committer | 2009-05-21 22:25:21 +0200 | |
| commit | f8141b55b230dd4c66b39cee843149bdabe13580 (patch) | |
| tree | 1c9faa5b8a381ceaa06813062be883ebefef91d9 | |
| parent | 0c55afdb315f12b0f2a37f37a3ec711c75507c0d (diff) | |
| download | usbmuxd-f8141b55b230dd4c66b39cee843149bdabe13580.tar.gz usbmuxd-f8141b55b230dd4c66b39cee843149bdabe13580.tar.bz2 | |
Added parameter -p to prevent usbmuxd from dropping privileges
(see this as a workaround for systems where the usb device access is
 restricted)
| -rw-r--r-- | src/main.c | 17 | 
1 files changed, 12 insertions, 5 deletions
| @@ -57,6 +57,7 @@ static int fsock = -1;  static int verbose = DEBUG_LEVEL;  static int foreground = 0;  static int exit_on_no_devices = 0; +static int preserve_privileges = 0;  struct device_info {  	uint32_t device_id; @@ -1009,9 +1010,11 @@ static int daemonize()  static void usage()  {  	printf("usage: usbmuxd [options]\n"); -	printf("\t-h|--help        print this message.\n"); -	printf("\t-v|--verbose     be verbose\n"); -	printf("\t-f|--foreground  do not daemonize\n"); +	printf("\t-h|--help                 print this message\n"); +	printf("\t-v|--verbose              be verbose (use twice or more to increase)\n"); +	printf("\t-f|--foreground           do not daemonize\n"); +	printf("\t-e|--exit-on-no-devices   exit if no device is attached\n"); +	printf("\t-p|--preserve-privileges  do not drop privileges\n");  	printf("\n");  } @@ -1022,12 +1025,13 @@ static void parse_opts(int argc, char **argv)  		{"foreground", 0, NULL, 'f'},  		{"verbose", 0, NULL, 'v'},  		{"exit-on-no-devices", 0, NULL, 'e'}, +		{"preserve-privileges", 0, NULL, 'p'},  		{NULL, 0, NULL, 0}  	};  	int c;  	while (1) { -		c = getopt_long(argc, argv, "hfve", longopts, (int *) 0); +		c = getopt_long(argc, argv, "hfvep", longopts, (int *) 0);  		if (c == -1) {  			break;  		} @@ -1045,6 +1049,9 @@ static void parse_opts(int argc, char **argv)  		case 'e':  			exit_on_no_devices = 1;  			break; +		case 'p': +			preserve_privileges = 1; +			break;  		default:  			usage();  			exit(2); @@ -1198,7 +1205,7 @@ int main(int argc, char **argv)  		}  	}  	// drop elevated privileges -	if (getuid() == 0 || geteuid() == 0) { +	if (!preserve_privileges && (getuid() == 0 || geteuid() == 0)) {  		struct passwd *pw = getpwnam("nobody");  		if (pw) {  			setuid(pw->pw_uid); | 
