|  | @@ -221,6 +221,7 @@ static void show_help ()
 | 
		
	
		
			
			| 221 | 221 |      "   -u<user>       switch user id after port bind (default: none)\n"
 | 
		
	
		
			
			| 222 | 222 |      "   -t<seconds>    timeout for idle client connections (default: 1800)\n"
 | 
		
	
		
			
			| 223 | 223 |      "   -X<domain>     exclude additional domain from address rewriting\n"
 | 
		
	
		
			
			|  | 224 | +    "   -e             attempt to read above parameters from environment\n"
 | 
		
	
		
			
			| 224 | 225 |      "   -D             fork into background\n"
 | 
		
	
		
			
			| 225 | 226 |      "   -4             force IPv4 socket (default: any)\n"
 | 
		
	
		
			
			| 226 | 227 |      "   -6             force IPv6 socket (default: any)\n"
 | 
		
	
	
		
			
			|  | @@ -256,7 +257,7 @@ int main (int argc, char **argv)
 | 
		
	
		
			
			| 256 | 257 |    tmp = strrchr(argv[0], '/');
 | 
		
	
		
			
			| 257 | 258 |    if (tmp) self = strdup(tmp + 1); else self = strdup(argv[0]);
 | 
		
	
		
			
			| 258 | 259 |  
 | 
		
	
		
			
			| 259 |  | -  while ((opt = getopt(argc, argv, "46d:f:r:s:u:t:p:c:X::Dhv")) != -1) {
 | 
		
	
		
			
			|  | 260 | +  while ((opt = getopt(argc, argv, "46d:f:r:s:u:t:p:c:X::Dhev")) != -1) {
 | 
		
	
		
			
			| 260 | 261 |      switch (opt) {
 | 
		
	
		
			
			| 261 | 262 |        case '?':
 | 
		
	
		
			
			| 262 | 263 |          return EXIT_FAILURE;
 | 
		
	
	
		
			
			|  | @@ -314,6 +315,40 @@ int main (int argc, char **argv)
 | 
		
	
		
			
			| 314 | 315 |            excludes[s1] = NULL;
 | 
		
	
		
			
			| 315 | 316 |          }
 | 
		
	
		
			
			| 316 | 317 |          break;
 | 
		
	
		
			
			|  | 318 | +      case 'e':
 | 
		
	
		
			
			|  | 319 | +        if ( getenv("SRS_DOMAIN") != NULL )
 | 
		
	
		
			
			|  | 320 | +          domain = strdup(getenv("SRS_DOMAIN"));
 | 
		
	
		
			
			|  | 321 | +        if ( getenv("SRS_FORWARD_PORT") != NULL )
 | 
		
	
		
			
			|  | 322 | +          forward_service = strdup(getenv("SRS_FORWARD_PORT"));
 | 
		
	
		
			
			|  | 323 | +        if ( getenv("SRS_REVERSE_PORT") != NULL )
 | 
		
	
		
			
			|  | 324 | +          reverse_service = strdup(getenv("SRS_REVERSE_PORT"));
 | 
		
	
		
			
			|  | 325 | +        if ( getenv("SRS_TIMEOUT") != NULL )
 | 
		
	
		
			
			|  | 326 | +          timeout = atoi(getenv("SRS_TIMEOUT"));
 | 
		
	
		
			
			|  | 327 | +        if ( getenv("SRS_SECRET") != NULL )
 | 
		
	
		
			
			|  | 328 | +          secret_file = strdup(getenv("SRS_SECRET"));
 | 
		
	
		
			
			|  | 329 | +        if ( getenv("SRS_PID_FILE") != NULL )
 | 
		
	
		
			
			|  | 330 | +          pid_file = strdup(getenv("SRS_PID_FILE"));
 | 
		
	
		
			
			|  | 331 | +        if ( getenv("RUN_AS") != NULL )
 | 
		
	
		
			
			|  | 332 | +          user = strdup(getenv("RUN_AS"));
 | 
		
	
		
			
			|  | 333 | +        if ( getenv("CHROOT") != NULL )
 | 
		
	
		
			
			|  | 334 | +          chroot_dir = strdup(getenv("CHROOT"));
 | 
		
	
		
			
			|  | 335 | +        if (getenv("SRS_EXCLUDE_DOMAINS") != NULL) {
 | 
		
	
		
			
			|  | 336 | +          tmp = strtok(getenv("SRS_EXCLUDE_DOMAINS"), ",; \t\r\n");
 | 
		
	
		
			
			|  | 337 | +          while (tmp) {
 | 
		
	
		
			
			|  | 338 | +            if (s1 + 1 >= s2) {
 | 
		
	
		
			
			|  | 339 | +              s2 *= 2;
 | 
		
	
		
			
			|  | 340 | +              excludes = (const char **)realloc(excludes, s2 * sizeof(char*));
 | 
		
	
		
			
			|  | 341 | +              if (excludes == NULL) {
 | 
		
	
		
			
			|  | 342 | +                fprintf (stderr, "%s: Out of memory\n\n", self);
 | 
		
	
		
			
			|  | 343 | +                return EXIT_FAILURE;
 | 
		
	
		
			
			|  | 344 | +              }
 | 
		
	
		
			
			|  | 345 | +            }
 | 
		
	
		
			
			|  | 346 | +            excludes[s1++] = strdup(tmp);
 | 
		
	
		
			
			|  | 347 | +            tmp = strtok(NULL, ",; \t\r\n");
 | 
		
	
		
			
			|  | 348 | +          }
 | 
		
	
		
			
			|  | 349 | +          excludes[s1] = NULL;
 | 
		
	
		
			
			|  | 350 | +        }
 | 
		
	
		
			
			|  | 351 | +        break;
 | 
		
	
		
			
			| 317 | 352 |        case 'v':
 | 
		
	
		
			
			| 318 | 353 |          fprintf (stdout, "%s\n", VERSION);
 | 
		
	
		
			
			| 319 | 354 |          return EXIT_SUCCESS;
 |