Changeset 1486:b283d24f34ef in roaraudio
- Timestamp:
- 03/31/09 00:00:16 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/roard.c
r1227 r1486 272 272 char user_sock[80] = {0}; 273 273 struct roar_audio_info sa; 274 #ifdef ROAR_HAVE_FORK 274 275 int daemon = 0; 276 #endif 275 277 int realtime = 0; 276 278 int sysclocksync = 0; … … 294 296 char * sock_user = NULL; 295 297 int sock_type = ROAR_SOCKET_TYPE_UNKNOWN; 298 #ifdef ROAR_HAVE_CHROOT 296 299 char * chrootdir = NULL; 300 #endif 301 #if defined(ROAR_HAVE_SETGID) || defined(ROAR_HAVE_SETUID) 297 302 int setids = 0; 303 #endif 304 #ifdef ROAR_HAVE_UNIX 298 305 char * env_roar_proxy_backup; 306 #endif 307 #if defined(ROAR_HAVE_SETGID) && defined(ROAR_HAVE_IO_POSIX) 299 308 struct group * grp = NULL; 309 #endif 310 #if defined(ROAR_HAVE_SETUID) && defined(ROAR_HAVE_IO_POSIX) 300 311 struct passwd * pwd = NULL; 312 #endif 313 #ifdef ROAR_HAVE_GETSERVBYNAME 301 314 struct servent * serv = NULL; 315 #endif 302 316 DRIVER_USERDATA_T drvinst; 303 317 struct roar_client * self = NULL; … … 320 334 321 335 322 if ( getuid() != 0 && getenv("HOME") ) {323 snprintf(user_sock, 79, "%s/%s", getenv("HOME"), ROAR_DEFAULT_SOCK_USER);336 if ( getuid() != 0 && getenv("HOME") != NULL ) { 337 snprintf(user_sock, 79, "%s/%s", (char*)getenv("HOME"), ROAR_DEFAULT_SOCK_USER); 324 338 server = user_sock; 325 339 } … … 366 380 367 381 } else if ( strcmp(k, "--demon") == 0 || strcmp(k, "--daemon") == 0 ) { 382 #ifdef ROAR_HAVE_FORK 368 383 daemon = 1; 384 #else 385 ROAR_ERR("--daemon not supported"); 386 #endif 369 387 } else if ( strcmp(k, "--terminate") == 0 ) { 370 388 g_terminate = 1; … … 374 392 realtime++; 375 393 } else if ( strcmp(k, "--chroot") == 0 ) { 394 #ifdef ROAR_HAVE_CHROOT 376 395 chrootdir = argv[++i]; 396 #else 397 ROAR_ERR("--chroot not supported"); 398 i++; 399 #endif 377 400 } else if ( strcmp(k, "--setgid") == 0 ) { 401 #ifdef ROAR_HAVE_SETGID 378 402 setids |= R_SETGID; 403 #else 404 ROAR_ERR("--setgid not supported"); 405 #endif 379 406 } else if ( strcmp(k, "--setuid") == 0 ) { 407 #ifdef ROAR_HAVE_SETUID 380 408 setids |= R_SETUID; 409 #else 410 ROAR_ERR("--setuid not supported"); 411 #endif 381 412 382 413 } else if ( strcmp(k, "--list-cf") == 0 ) { … … 446 477 errno = 0; 447 478 if ( (port = atoi(argv[++i])) < 1 ) { 479 #ifdef ROAR_HAVE_GETSERVBYNAME 448 480 if ( (serv = getservbyname(argv[i], "tcp")) == NULL ) { 449 481 ROAR_ERR("Unknown service: %s: %s", argv[i], strerror(errno)); … … 454 486 serv->s_name, ROAR_NET2HOST16(serv->s_port), serv->s_proto); 455 487 port = ROAR_NET2HOST16(serv->s_port); 488 #else 489 ROAR_ERR("invalite port number: %s", argv[i]); 490 return 1; 491 #endif 456 492 } 457 493 } else if ( strcmp(k, "-b") == 0 || strcmp(k, "--bind") == 0 || strcmp(k, "--sock") == 0 ) { … … 509 545 } 510 546 } else if ( strcmp(k, "--close-fh") == 0 ) { 547 #ifdef ROAR_HAVE_IO_POSIX 511 548 close(atoi(argv[++i])); 549 #else 550 i++; 551 ROAR_WARN("can not close file handle %s (closing not supported)", argv[i]); 552 #endif 512 553 513 554 } else if ( strcmp(k, "--standby") == 0 ) { … … 537 578 if ( *server != 0 ) { 538 579 if ( (g_listen_socket = roar_socket_listen(sock_type, server, port)) == -1 ) { 580 #ifdef ROAR_HAVE_UNIX 539 581 if ( *server == '/' ) { 540 582 if ( (env_roar_proxy_backup = getenv("ROAR_PROXY")) != NULL ) { … … 557 599 free(env_roar_proxy_backup); 558 600 } 601 #else 602 if (0) { // noop 603 #endif 559 604 } else { 560 605 ROAR_ERR("Can not open listen socket!"); … … 563 608 } 564 609 610 #if defined(ROAR_HAVE_SETGID) && defined(ROAR_HAVE_IO_POSIX) 565 611 if ( (grp = getgrnam(sock_grp)) == NULL ) { 566 612 ROAR_ERR("Can not get GID for group %s: %s", sock_grp, strerror(errno)); 567 613 } 614 #endif 615 #if defined(ROAR_HAVE_SETUID) && defined(ROAR_HAVE_IO_POSIX) 568 616 if ( sock_user || (setids & R_SETUID) ) { 569 617 if ( (pwd = getpwnam(sock_user)) == NULL ) { … … 571 619 } 572 620 } 573 621 #endif 622 623 #ifdef ROAR_HAVE_IO_POSIX 574 624 if ( *server == '/' ) { 575 625 if ( grp ) { … … 583 633 } 584 634 } 635 #endif 585 636 } 586 637 … … 607 658 608 659 660 // we should handle this on microcontrollers, too. 661 #if !defined(ROAR_TARGET_MICROCONTROLLER) 609 662 signal(SIGINT, on_sig_int); 610 663 signal(SIGCHLD, on_sig_chld); 611 664 signal(SIGPIPE, SIG_IGN); // ignore broken pipes 665 #endif 612 666 613 667 if ( realtime ) { … … 616 670 #endif 617 671 672 #ifdef ROAR_HAVE_NICE 618 673 errno = 0; 619 674 nice(-5*realtime); // -5 for each --realtime 620 if ( errno ) 621 ROAR_WARN("Can not decrease nice value by 5: %s", strerror(errno)); 675 if ( errno ) { 676 ROAR_WARN("Can not decrease nice value by %i: %s", 5*realtime, strerror(errno)); 677 } 678 #else 679 ROAR_WARN("Can not decrease nice value by %i: %s", 5*realtime, strerror(errno)); 680 #endif 622 681 /* 623 682 #ifdef __linux__ … … 628 687 } 629 688 689 #ifdef ROAR_HAVE_SETGID 630 690 if ( setids & R_SETGID ) { 631 691 if ( setgroups(0, (const gid_t *) NULL) == -1 ) { … … 636 696 } 637 697 } 698 #endif 638 699 639 700 … … 650 711 strcpy(self->name, "RoarAudio daemon internal"); 651 712 713 #ifdef ROAR_HAVE_FORK 652 714 if ( daemon ) { 653 715 close(ROAR_STDIN ); … … 656 718 setsid(); 657 719 if ( fork() ) 658 _exit(0);720 ROAR_U_EXIT(0); 659 721 clients_set_pid(g_self_client, getpid()); // reset pid as it changed 660 722 } 661 723 #endif 724 725 #ifdef ROAR_HAVE_CHROOT 662 726 if (chrootdir) { 663 727 if ( chroot(chrootdir) == -1 ) { … … 670 734 } 671 735 } 672 736 #endif 737 738 #ifdef ROAR_HAVE_SETUID 673 739 if ( setids & R_SETUID ) { 674 740 if ( !pwd || setuid(pwd->pw_uid) == -1 ) { … … 678 744 clients_set_uid(g_self_client, getuid()); 679 745 } 746 #endif 680 747 681 748 // start main loop... … … 693 760 694 761 if ( g_listen_socket != -1 ) { 762 #ifdef ROAR_HAVE_IO_POSIX 695 763 close(g_listen_socket); 764 #endif // #else is useless because we are in void context. 696 765 697 766 g_listen_socket = -1; 698 767 768 #ifdef ROAR_HAVE_UNIX 699 769 if ( *server == '/' ) 700 770 unlink(server); 771 #endif 701 772 } 702 773
Note: See TracChangeset
for help on using the changeset viewer.