Changeset 5754:b23d79c13370 in roaraudio


Ignore:
Timestamp:
11/16/12 16:49:56 (11 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

avoid getenv() and use more portable roar_env_get(). Also improved security as we enfore const now on bufferes obtained from the env.

Files:
18 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/pinentry.h

    r5381 r5754  
    4949}; 
    5050 
    51 int roar_pinentry_open (struct roar_pinentry * pe, int flags, char * display, char * tty, char * term); 
     51int roar_pinentry_open (struct roar_pinentry * pe, int flags, const char * display, const char * tty, const char * term); 
    5252int roar_pinentry_simple_open(struct roar_pinentry * pe); 
    5353int roar_pinentry_close(struct roar_pinentry * pe); 
  • libroar/basic.c

    r5745 r5754  
    6969 // we keep this step to be compatible with older versions. 
    7070 if ( daemonimage == NULL || *daemonimage == 0 ) { 
    71   daemonimage = getenv("ROAR_DAEMONIMAGE"); 
     71  daemonimage = roar_env_get("ROAR_DAEMONIMAGE"); 
    7272  if ( daemonimage != NULL ) { 
    7373   ROAR_WARN("_start_server(*): Usage of $ROAR_DAEMONIMAGE is obsolete. Use ROAR_OPTIONS=daemonimage:..."); 
     
    275275#if defined(ROAR_HAVE_UNIX) 
    276276 char user_sock[128]; 
    277  char * roar_server; 
     277 const char * roar_server; 
    278278#endif 
    279279#if defined(ROAR_HAVE_LIBSLP) || !defined(ROAR_TARGET_MICROCONTROLLER) 
     
    309309 
    310310 if ( server == NULL || *server == 0 ) 
    311   server = getenv("ROAR_SERVER"); 
     311  server = roar_env_get("ROAR_SERVER"); 
    312312 
    313313#ifdef ROAR_HAVE_LIBX11 
     
    344344#ifdef ROAR_HAVE_UNIX 
    345345#ifndef ROAR_TARGET_MICROCONTROLLER 
    346   roar_server = getenv("HOME"); 
     346  roar_server = roar_env_get("HOME"); 
    347347#else 
    348348  roar_server = NULL; 
  • libroar/config.c

    r5747 r5754  
    7676 struct roar_libroar_config * config = roar_libroar_get_config_ptr(); 
    7777 static int inited = 0; 
    78  char * next; 
     78 const char * next; 
     79 char * buf; 
    7980 
    8081 if ( !inited ) { 
    8182  inited++; // we do this early so we can use ROAR_{DBG,INFO,WARN,ERR}() in roar_libroar_config_parse(). 
    8283 
    83   next = getenv("ROAR_OPTIONS"); 
     84  next = roar_env_get("ROAR_OPTIONS"); 
    8485 
    8586  if ( next != NULL ) { 
    86    roar_libroar_config_parse(next, " "); 
     87   if ( (buf = roar_mm_strdup(next)) != NULL ) { 
     88    roar_libroar_config_parse(buf, " "); 
     89    roar_mm_free(buf); 
     90   } 
    8791  } 
    8892 } 
  • libroar/enumdev.c

    r5381 r5754  
    115115  _add(new); 
    116116 
    117   new = getenv("ROAR_SERVER"); 
     117  new = roar_env_get("ROAR_SERVER"); 
    118118  _add(new); 
    119119 
     
    126126#endif 
    127127 
    128   new = getenv("SSH_CLIENT"); 
     128  new = roar_env_get("SSH_CLIENT"); 
    129129  if ( new == NULL ) 
    130    new = getenv("SSH_CONNECTION"); 
     130   new = roar_env_get("SSH_CONNECTION"); 
    131131 
    132132  if ( new != NULL ) { 
  • libroar/env.c

    r5752 r5754  
    8686 
    8787const char * roar_env_get_home(int level) { 
    88  const char * home = getenv("HOME"); 
     88 const char * home = roar_env_get("HOME"); 
    8989 
    9090 (void)level; 
  • libroar/file.c

    r5381 r5754  
    8686 const char * k; 
    8787 
    88  if ( (k = getenv("CDDA_DEVICE")) != NULL ) 
     88 if ( (k = roar_env_get("CDDA_DEVICE")) != NULL ) 
    8989  return k; 
    9090 
  • libroar/pinentry.c

    r5619 r5754  
    4545#endif 
    4646 
    47 int roar_pinentry_open (struct roar_pinentry * pe, int flags, char * display, char * tty, char * term) { 
     47int roar_pinentry_open (struct roar_pinentry * pe, int flags, const char * display, const char * tty, const char * term) { 
    4848#ifdef _CAN_OPERATE 
    4949 int in[2], out[2]; 
     
    5757 
    5858 if ( display == NULL ) 
    59   display = getenv("DISPLAY"); 
     59  display = roar_env_get("DISPLAY"); 
    6060 
    6161 if ( display == NULL ) 
     
    7373 
    7474 if ( term == NULL ) 
    75   term = getenv("TERM"); 
     75  term = roar_env_get("TERM"); 
    7676 
    7777 if ( term == NULL ) 
  • libroar/socket.c

    r5745 r5754  
    401401 
    402402int roar_socket_connect (int type, const char * host, int port) { 
    403  char * proxy_type = getenv("ROAR_PROXY"); 
     403 const char * proxy_type = roar_env_get("ROAR_PROXY"); 
    404404 
    405405 ROAR_DBG("roar_socket_connect(host='%s', port=%i) = ?", host, port); 
     
    874874 int    proxy_port = -1; 
    875875 char   proxy_host[ROAR_SOCKET_MAX_HOSTNAMELEN]; 
    876  char * proxy_addr = NULL; 
     876 const char * proxy_addr = NULL; 
    877877 int    i; 
    878878 int    fh = -1; 
    879  char * user = NULL, * pw = NULL, * opts = NULL; 
     879 const char * user = NULL, * pw = NULL, * opts = NULL; 
    880880 char * sep; 
    881881 int    no_fh = 0; 
     
    895895 
    896896 if ( user == NULL ) 
    897   user = getenv("USER"); 
     897  user = roar_env_get("USER"); 
    898898 
    899899 // TODO: change this so we support listen() proxys (ssh -R) 
     
    902902 
    903903 if ( !strncmp(proxy_type, "socks", 5) ) { 
    904   proxy_addr = getenv("socks_proxy"); 
     904  proxy_addr = roar_env_get("socks_proxy"); 
    905905 
    906906  proxy_port = 9050; // TOR's default port 
     
    908908  proxy_port = 8080; 
    909909 
    910   if ( (proxy_addr = getenv("http_proxy")) == NULL ) 
    911    proxy_addr = getenv("https_proxy"); 
     910  if ( (proxy_addr = roar_env_get("http_proxy")) == NULL ) 
     911   proxy_addr = roar_env_get("https_proxy"); 
    912912 
    913913  if ( proxy_addr == NULL ) 
     
    918918 } else if ( !strncmp(proxy_type, "ssh", 3) ) { 
    919919  proxy_port = 22; 
    920   proxy_addr = getenv("ssh_proxy"); 
     920  proxy_addr = roar_env_get("ssh_proxy"); 
    921921  no_fh      = 1; 
    922922 } 
     
    11051105#ifdef ROAR_HAVE_BIN_SSH 
    11061106static int roar_socket_open_ssh    (int mode, int fh, const char * host, int port, const char * user, const char * pw, const char * opts) { 
    1107  char * proxy_addr = getenv("ssh_proxy"); 
     1107 const char * proxy_addr = roar_env_get("ssh_proxy"); 
    11081108 char * sep; 
    11091109 char   cmd[1024] = {0}, rcmd[1024] = {0}; 
  • libroaresd/esdbasic.c

    r5381 r5754  
    4949 
    5050 if ( host == NULL ) 
    51   host = getenv("ESPEAKER"); 
     51  host = roar_env_get("ESPEAKER"); 
    5252 
    5353 if ( roar_simple_connect(&con, (char*) host, NULL) == -1 ) { 
  • libroaross/libroaross.c

    r5543 r5754  
    382382} 
    383383 
    384 static struct session * _open_session (char * server, char * name) { 
     384static struct session * _open_session (const char * server, const char * name) { 
    385385 struct session * ses = &_session; 
    386  int new_session = getenv("ROAR_OSS_NEW_SESSION") == NULL ? 0 : 1; 
     386 int new_session = roar_env_get("ROAR_OSS_NEW_SESSION") == NULL ? 0 : 1; 
    387387 
    388388 ROAR_DBG("_open_session(server='%s', name='%s') = ?", server, name); 
     
    400400 
    401401  if ( name == NULL ) 
    402    name = getenv("ROAR_OSS_CLIENT_NAME"); 
     402   name = roar_env_get("ROAR_OSS_CLIENT_NAME"); 
    403403 
    404404  if ( name == NULL ) 
     
    415415 
    416416  if ( !new_session ) { 
    417    if ( getenv("ROAR_OSS_KEEP_SESSION") != NULL ) 
     417   if ( roar_env_get("ROAR_OSS_KEEP_SESSION") != NULL ) 
    418418    ses->refc++; 
    419419  } 
  • libroarpulse/libroarpulse.c

    r5381 r5754  
    124124 
    125125 if ( server == NULL ) 
    126   server = getenv("PULSE_SERVER"); 
     126  server = roar_env_get("PULSE_SERVER"); 
    127127 
    128128 if ( server == NULL ) { 
  • libroarpulse/util.c

    r5381 r5754  
    7373/** Return the current username in the specified string buffer. */ 
    7474char *pa_get_user_name(char *s, size_t l) { 
    75  char * user = NULL; 
     75 const char * user = NULL; 
    7676 
    7777 if ( s == NULL ) { 
     
    8282 
    8383 if ( user == NULL ) 
    84   user = getenv("USER"); 
     84  user = roar_env_get("USER"); 
    8585 if ( user == NULL ) 
    86   user = getenv("LOGNAME"); 
     86  user = roar_env_get("LOGNAME"); 
    8787 if ( user == NULL ) 
    88   user = getenv("USERNAME"); 
     88  user = roar_env_get("USERNAME"); 
    8989 
    9090#ifdef ROAR_HAVE_GETUID 
     
    126126/** Return the home directory of the current user */ 
    127127char *pa_get_home_dir(char *s, size_t l) { 
    128  char * home = getenv("HOME"); 
    129  
    130  if ( home == NULL ) 
     128 if ( roar_env_render_path_r(s, l, "~/") == -1 ) 
    131129  return NULL; 
    132  
    133  strncpy(s, home, l); 
    134  
    135  s[l-1] = 0; 
    136130 
    137131 return s; 
  • libroarrsound/libroarrsound.c

    r5381 r5754  
    244244 
    245245static int libroarrsound_connect (struct libroarrsound * self) { 
    246  char * host; 
     246 const char * host; 
    247247 
    248248 if ( self->flags & LIBROARRSOUND_FLAGS_CONNECTED ) 
     
    252252 
    253253 if ( host == NULL ) 
    254   host = getenv("RSD_SERVER"); 
     254  host = roar_env_get("RSD_SERVER"); 
    255255 
    256256 // FIXME: we currently ignore the port. :( 
  • libroarsndio/libroarsndio.c

    r5381 r5754  
    142142 if ( name == NULL ) { 
    143143  if ( is_midi ) { 
    144    name = getenv("MIDIDEVICE"); 
     144   name = roar_env_get("MIDIDEVICE"); 
    145145  } else { 
    146    name = getenv("AUDIODEVICE"); 
     146   name = roar_env_get("AUDIODEVICE"); 
    147147  } 
    148148 } 
  • roarclients/roarmonhttp.c

    r5536 r5754  
    239239 int    i; 
    240240 const char * k, * v; 
     241 const char * qs; 
     242 char * qs_buf; 
    241243 char * c; 
    242244 char * sp0 = NULL, * sp1 = NULL; 
     
    292294 } 
    293295 
    294  c = getenv("QUERY_STRING"); 
     296 qs = roar_env_get("QUERY_STRING"); 
     297 if ( qs == NULL ) 
     298  qs = ""; 
     299 c = qs_buf = roar_mm_strdup(qs); 
    295300 if ( c == NULL ) 
    296   c = ""; 
     301  return 1; 
    297302 
    298303 c = roar_mm_strtok_r(c, "&", &sp0); 
     
    336341 } 
    337342 
     343 roar_mm_free(qs_buf); 
     344 
    338345 if ( roar_simple_connect(&con, server, "roarmonhttp") == -1 ) { 
    339346  return 10; 
  • roard/driver_dmx.c

    r5708 r5754  
    3232 struct roar_vio_calls * vio; 
    3333 int err; 
     34 const char * dev = device; 
    3435 
    3536 if ( roar_vio_dstr_init_defaults(&def, ROAR_VIO_DEF_TYPE_NONE, O_WRONLY, 0644) == -1 ) 
     
    4243 
    4344 if ( fh == -1 ) { 
    44   if ( device == NULL ) 
    45    device = getenv("DMX"); 
     45  if ( dev == NULL ) 
     46   dev = roar_env_get("DMX"); 
    4647 
    47   if ( device == NULL ) 
    48    device = "/dev/dmx"; 
     48  if ( dev == NULL ) 
     49   dev = "/dev/dmx"; 
    4950 
    50   if ( roar_vio_open_dstr(vio, device, &def, 1) == -1 ) { 
     51  if ( roar_vio_open_dstr(vio, dev, &def, 1) == -1 ) { 
    5152   err = roar_error; 
    5253   roar_mm_free(vio); 
  • roard/include/roard.h

    r5740 r5754  
    162162 
    163163#ifdef ROAR_SUPPORT_LISTEN 
    164 int get_listen(struct roard_listen ** sock, char *** sockname); 
    165 int add_listen (char * addr, int port, int sock_type, char * user, char * group, int proto, int dir, struct roar_audio_info * info); 
     164int get_listen(struct roard_listen ** sock, const char *** sockname); 
     165int add_listen (const char * addr, int port, int sock_type, char * user, char * group, int proto, int dir, struct roar_audio_info * info); 
    166166#endif 
    167167 
  • roard/roard.c

    r5662 r5754  
    8888 
    8989#ifdef ROAR_SUPPORT_LISTEN 
    90 static char * server[ROAR_MAX_LISTEN_SOCKETS]; 
     90static const char * server[ROAR_MAX_LISTEN_SOCKETS]; 
    9191#endif 
    9292 
     
    561561} 
    562562 
    563 int get_listen(struct roard_listen ** sock, char *** sockname) { 
     563int get_listen(struct roard_listen ** sock, const char *** sockname) { 
    564564 int i; 
    565565 
     
    786786 
    787787int get_listen_profile (const char * name, 
    788                         int * port, char ** sockaddr, int * type, 
     788                        int * port, const char ** sockaddr, int * type, 
    789789                        int * proto, 
    790790                        int * dir, struct roar_audio_info * info) { 
     
    798798 
    799799   if ( p->type == ROAR_SOCKET_TYPE_UNIX && p->sockaddr[0] != '+' ) { 
    800     roar_env_render_path_r(buf, sizeof(buf), p->sockaddr); 
     800    if ( roar_env_render_path_r(buf, sizeof(buf), p->sockaddr) == -1 ) 
     801     continue; 
    801802   } else { 
    802803    strncpy(buf, p->sockaddr, sizeof(buf)); 
     
    822823#endif 
    823824 
    824 int add_listen (char * addr, int port, int sock_type, char * user, char * group, int proto, int dir, struct roar_audio_info * info) { 
     825int add_listen (const char * addr, int port, int sock_type, char * user, char * group, int proto, int dir, struct roar_audio_info * info) { 
    825826#if defined(ROAR_HAVE_SETGID) && defined(ROAR_HAVE_IO_POSIX) 
    826827 struct group   * grp  = NULL; 
     
    861862#ifdef ROAR_HAVE_UNIX 
    862863   if ( *addr == '/' ) { 
    863     if ( (env_roar_proxy_backup = getenv("ROAR_PROXY")) != NULL ) { 
     864    if ( (env_roar_proxy_backup = (char*)roar_env_get("ROAR_PROXY")) != NULL ) { 
    864865     env_roar_proxy_backup = roar_mm_strdup(env_roar_proxy_backup); 
    865866     unsetenv("ROAR_PROXY"); 
     
    12141215// X11: 
    12151216#ifdef ROAR_HAVE_LIBX11 
    1216 int register_x11 (int unreg, char * sockname) { 
     1217int register_x11 (int unreg, const char * sockname) { 
    12171218 struct roar_x11_connection * x11con = NULL; 
    12181219 int ret = 0; 
     
    12521253} 
    12531254 
    1254 int register_slp (int unreg, char * sockname) { 
     1255int register_slp (int unreg, const char * sockname) { 
    12551256#ifdef ROAR_HAVE_LIBSLP 
    12561257 static int regged = 0; 
    1257  static char * sn = NULL; 
     1258 static const char * sn = NULL; 
    12581259 SLPError err; 
    12591260 SLPError callbackerr; 
     
    14371438#ifdef ROAR_SUPPORT_LISTEN 
    14381439 int    port       = ROAR_DEFAULT_PORT; 
    1439  char * sock_addr  = NULL; 
     1440 const char * sock_addr  = NULL; 
    14401441 int    sock_proto = ROAR_PROTO_ROARAUDIO; 
    14411442 int    sock_dir   = -1; 
     
    14491450 int    s_prim    = 0; 
    14501451#endif 
    1451  char * o_drv     = getenv("ROAR_DRIVER"); 
    1452  char * o_dev     = getenv("ROAR_DEVICE"); 
     1452 char * o_drv     = NULL; 
     1453 char * o_dev     = NULL; 
    14531454 char * o_opts    = NULL; 
    14541455 int    o_prim    = 0; 
     
    15081509 ROAR_DBG("main(*): starting roard..."); 
    15091510 
     1511// NOTE: those to lions can generate a memory leak. The OS will clean that up on exit. 
     1512 if ( roar_env_get("ROAR_DRIVER") != NULL ) 
     1513  o_drv = roar_mm_strdup(roar_env_get("ROAR_DRIVER")); 
     1514 if ( roar_env_get("ROAR_DEVICE") != NULL ) 
     1515  o_dev = roar_mm_strdup(roar_env_get("ROAR_DEVICE")); 
     1516 
    15101517 g_standby       =  0; 
    15111518 g_autostandby   =  0; 
     
    16031610 
    16041611#ifdef ROAR_HAVE_GETUID 
    1605  if ( getuid() != 0 && getenv("HOME") != NULL ) { 
     1612 if ( getuid() != 0 && roar_env_get("HOME") != NULL ) { 
    16061613/* 
    16071614  snprintf(user_sock, 79, "%s/%s", (char*)getenv("HOME"), ROAR_DEFAULT_SOCK_USER); 
    16081615*/ 
    1609   roar_env_render_path_r(user_sock, sizeof(user_sock), "~/" ROAR_DEFAULT_SOCK_USER); 
     1616  if ( roar_env_render_path_r(user_sock, sizeof(user_sock), "~/" ROAR_DEFAULT_SOCK_USER) == -1 ) { 
     1617   strncpy(user_sock, "/NX-SOCK", sizeof(user_sock)); 
     1618  } 
    16101619  sock_addr = user_sock; 
    16111620  ROAR_DBG("main(*): setting sock_addr='%s'", sock_addr); 
     
    16131622#endif 
    16141623 
    1615  if ( getenv("ROAR_SERVER") != NULL ) 
    1616   sock_addr = getenv("ROAR_SERVER"); 
     1624 if ( roar_env_get("ROAR_SERVER") != NULL ) 
     1625  sock_addr = roar_env_get("ROAR_SERVER"); 
    16171626#endif 
    16181627 
Note: See TracChangeset for help on using the changeset viewer.