Changeset 1486:b283d24f34ef in roaraudio


Ignore:
Timestamp:
03/31/09 00:00:16 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

done a lot checks for target capabilities, check for: ROAR_HAVE_UNIX, ROAR_HAVE_IO_POSIX, ROAR_HAVE_SETUID, ROAR_HAVE_SETGID, ROAR_HAVE_CHROOT, ROAR_HAVE_FORK, ROAR_HAVE_NICE, ROAR_HAVE_GETSERVBYNAME; also updated signal interface becasue current one only works on POSIX systems

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/roard.c

    r1227 r1486  
    272272 char user_sock[80]  = {0}; 
    273273 struct roar_audio_info sa; 
     274#ifdef ROAR_HAVE_FORK 
    274275 int    daemon       = 0; 
     276#endif 
    275277 int    realtime     = 0; 
    276278 int    sysclocksync = 0; 
     
    294296 char * sock_user = NULL; 
    295297 int    sock_type = ROAR_SOCKET_TYPE_UNKNOWN; 
     298#ifdef ROAR_HAVE_CHROOT 
    296299 char * chrootdir = NULL; 
     300#endif 
     301#if defined(ROAR_HAVE_SETGID) || defined(ROAR_HAVE_SETUID) 
    297302 int    setids    = 0; 
     303#endif 
     304#ifdef ROAR_HAVE_UNIX 
    298305 char * env_roar_proxy_backup; 
     306#endif 
     307#if defined(ROAR_HAVE_SETGID) && defined(ROAR_HAVE_IO_POSIX) 
    299308 struct group   * grp  = NULL; 
     309#endif 
     310#if defined(ROAR_HAVE_SETUID) && defined(ROAR_HAVE_IO_POSIX) 
    300311 struct passwd  * pwd  = NULL; 
     312#endif 
     313#ifdef ROAR_HAVE_GETSERVBYNAME 
    301314 struct servent * serv = NULL; 
     315#endif 
    302316 DRIVER_USERDATA_T drvinst; 
    303317 struct roar_client * self = NULL; 
     
    320334 
    321335 
    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); 
    324338  server = user_sock; 
    325339 } 
     
    366380 
    367381  } else if ( strcmp(k, "--demon") == 0 || strcmp(k, "--daemon") == 0 ) { 
     382#ifdef ROAR_HAVE_FORK 
    368383   daemon = 1; 
     384#else 
     385   ROAR_ERR("--daemon not supported"); 
     386#endif 
    369387  } else if ( strcmp(k, "--terminate") == 0 ) { 
    370388   g_terminate = 1; 
     
    374392   realtime++; 
    375393  } else if ( strcmp(k, "--chroot") == 0 ) { 
     394#ifdef ROAR_HAVE_CHROOT 
    376395   chrootdir = argv[++i]; 
     396#else 
     397   ROAR_ERR("--chroot not supported"); 
     398   i++; 
     399#endif 
    377400  } else if ( strcmp(k, "--setgid") == 0 ) { 
     401#ifdef ROAR_HAVE_SETGID 
    378402   setids |= R_SETGID; 
     403#else 
     404   ROAR_ERR("--setgid not supported"); 
     405#endif 
    379406  } else if ( strcmp(k, "--setuid") == 0 ) { 
     407#ifdef ROAR_HAVE_SETUID 
    380408   setids |= R_SETUID; 
     409#else 
     410   ROAR_ERR("--setuid not supported"); 
     411#endif 
    381412 
    382413  } else if ( strcmp(k, "--list-cf") == 0 ) { 
     
    446477   errno = 0; 
    447478   if ( (port = atoi(argv[++i])) < 1 ) { 
     479#ifdef ROAR_HAVE_GETSERVBYNAME 
    448480    if ( (serv = getservbyname(argv[i], "tcp")) == NULL ) { 
    449481     ROAR_ERR("Unknown service: %s: %s", argv[i], strerror(errno)); 
     
    454486            serv->s_name, ROAR_NET2HOST16(serv->s_port), serv->s_proto); 
    455487    port = ROAR_NET2HOST16(serv->s_port); 
     488#else 
     489    ROAR_ERR("invalite port number: %s", argv[i]); 
     490    return 1; 
     491#endif 
    456492   } 
    457493  } else if ( strcmp(k, "-b") == 0 || strcmp(k, "--bind") == 0 || strcmp(k, "--sock") == 0 ) { 
     
    509545   } 
    510546  } else if ( strcmp(k, "--close-fh") == 0 ) { 
     547#ifdef ROAR_HAVE_IO_POSIX 
    511548   close(atoi(argv[++i])); 
     549#else 
     550   i++; 
     551   ROAR_WARN("can not close file handle %s (closing not supported)", argv[i]); 
     552#endif 
    512553 
    513554  } else if ( strcmp(k, "--standby") == 0 ) { 
     
    537578 if ( *server != 0 ) { 
    538579  if ( (g_listen_socket = roar_socket_listen(sock_type, server, port)) == -1 ) { 
     580#ifdef ROAR_HAVE_UNIX 
    539581   if ( *server == '/' ) { 
    540582    if ( (env_roar_proxy_backup = getenv("ROAR_PROXY")) != NULL ) { 
     
    557599     free(env_roar_proxy_backup); 
    558600    } 
     601#else 
     602   if (0) { // noop 
     603#endif 
    559604   } else { 
    560605    ROAR_ERR("Can not open listen socket!"); 
     
    563608  } 
    564609 
     610#if defined(ROAR_HAVE_SETGID) && defined(ROAR_HAVE_IO_POSIX) 
    565611  if ( (grp = getgrnam(sock_grp)) == NULL ) { 
    566612   ROAR_ERR("Can not get GID for group %s: %s", sock_grp, strerror(errno)); 
    567613  } 
     614#endif 
     615#if defined(ROAR_HAVE_SETUID) && defined(ROAR_HAVE_IO_POSIX) 
    568616  if ( sock_user || (setids & R_SETUID) ) { 
    569617   if ( (pwd = getpwnam(sock_user)) == NULL ) { 
     
    571619   } 
    572620  } 
    573  
     621#endif 
     622 
     623#ifdef ROAR_HAVE_IO_POSIX 
    574624  if ( *server == '/' ) { 
    575625   if ( grp ) { 
     
    583633   } 
    584634  } 
     635#endif 
    585636 } 
    586637 
     
    607658 
    608659 
     660 // we should handle this on microcontrollers, too. 
     661#if !defined(ROAR_TARGET_MICROCONTROLLER) 
    609662 signal(SIGINT,  on_sig_int); 
    610663 signal(SIGCHLD, on_sig_chld); 
    611664 signal(SIGPIPE, SIG_IGN);  // ignore broken pipes 
     665#endif 
    612666 
    613667 if ( realtime ) { 
     
    616670#endif 
    617671 
     672#ifdef ROAR_HAVE_NICE 
    618673  errno = 0; 
    619674  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 
    622681/* 
    623682#ifdef __linux__ 
     
    628687 } 
    629688 
     689#ifdef ROAR_HAVE_SETGID 
    630690 if ( setids & R_SETGID ) { 
    631691  if ( setgroups(0, (const gid_t *) NULL) == -1 ) { 
     
    636696  } 
    637697 } 
     698#endif 
    638699 
    639700 
     
    650711 strcpy(self->name, "RoarAudio daemon internal"); 
    651712 
     713#ifdef ROAR_HAVE_FORK 
    652714 if ( daemon ) { 
    653715  close(ROAR_STDIN ); 
     
    656718  setsid(); 
    657719  if ( fork() ) 
    658    _exit(0); 
     720   ROAR_U_EXIT(0); 
    659721  clients_set_pid(g_self_client, getpid()); // reset pid as it changed 
    660722 } 
    661  
     723#endif 
     724 
     725#ifdef ROAR_HAVE_CHROOT 
    662726 if (chrootdir) { 
    663727  if ( chroot(chrootdir) == -1 ) { 
     
    670734  } 
    671735 } 
    672  
     736#endif 
     737 
     738#ifdef ROAR_HAVE_SETUID 
    673739 if ( setids & R_SETUID ) { 
    674740  if ( !pwd || setuid(pwd->pw_uid) == -1 ) { 
     
    678744  clients_set_uid(g_self_client, getuid()); 
    679745 } 
     746#endif 
    680747 
    681748 // start main loop... 
     
    693760 
    694761 if ( g_listen_socket != -1 ) { 
     762#ifdef ROAR_HAVE_IO_POSIX 
    695763  close(g_listen_socket); 
     764#endif // #else is useless because we are in void context. 
    696765 
    697766  g_listen_socket = -1; 
    698767 
     768#ifdef ROAR_HAVE_UNIX 
    699769  if ( *server == '/' ) 
    700770   unlink(server); 
     771#endif 
    701772 } 
    702773 
Note: See TracChangeset for help on using the changeset viewer.