/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to plugins.d/mandos-client.c

  • Committer: teddy at bsnet
  • Date: 2011-07-31 13:05:34 UTC
  • Revision ID: teddy@fukt.bsnet.se-20110731130534-v4d9hsvek80ms9uo
* plugins.d/mandos-client.c (avahi_loop_with_timeout): Fix warning.
  (main): Disallow "--retry" arguments < 0.  Allow brackets [] around
          IPv6 addresses, as recommended by RFC 5952.  Bug fix: When
          using --connect, really use retry_interval, not 1 second.
* plugins.d/mandos-client.xml (DESCRIPTION): Add retry info.
  (--retry): Remove repeated word.

Show diffs side-by-side

added added

removed removed

Lines of Context:
187
187
  return buffer_capacity;
188
188
}
189
189
 
 
190
/* Add server to set of servers to retry periodically */
190
191
int add_server(const char *ip, uint16_t port,
191
192
                 AvahiIfIndex if_index,
192
193
                 int af){
204
205
    perror_plus("strdup");
205
206
    return -1;
206
207
  }
207
 
  /* unique case of first server */
 
208
  /* Special case of first server */
208
209
  if (mc.current_server == NULL){
209
210
    new_server->next = new_server;
210
211
    new_server->prev = new_server;
211
212
    mc.current_server = new_server;
212
 
  /* Placing the new server last in the list */
 
213
  /* Place the new server last in the list */
213
214
  } else {
214
215
    new_server->next = mc.current_server;
215
216
    new_server->prev = mc.current_server->prev;
1205
1206
  struct timespec now;
1206
1207
  struct timespec waited_time;
1207
1208
  intmax_t block_time;
1208
 
 
 
1209
  
1209
1210
  while(true){
1210
1211
    if(mc.current_server == NULL){
1211
1212
      if (debug){
1236
1237
      block_time = ((retry_interval
1237
1238
                     - ((intmax_t)waited_time.tv_sec * 1000))
1238
1239
                    - ((intmax_t)waited_time.tv_nsec / 1000000));
1239
 
 
 
1240
      
1240
1241
      if (debug){
1241
 
        fprintf(stderr, "Blocking for %ld ms\n", block_time);
 
1242
        fprintf(stderr, "Blocking for %" PRIdMAX " ms\n", block_time);
1242
1243
      }
1243
 
 
 
1244
      
1244
1245
      if(block_time <= 0){
1245
1246
        ret = start_mandos_communication(mc.current_server->ip,
1246
1247
                                         mc.current_server->port,
1411
1412
        errno = 0;
1412
1413
        retry_interval = strtod(arg, &tmp);
1413
1414
        if(errno != 0 or tmp == arg or *tmp != '\0'
1414
 
           or (retry_interval * 1000) > INT_MAX){
 
1415
           or (retry_interval * 1000) > INT_MAX
 
1416
           or retry_interval < 0){
1415
1417
          argp_error(state, "Bad retry interval");
1416
1418
        }
1417
1419
        break;
1829
1831
    
1830
1832
    port = (uint16_t)tmpmax;
1831
1833
    *address = '\0';
1832
 
    address = connect_to;
1833
1834
    /* Colon in address indicates IPv6 */
1834
1835
    int af;
1835
 
    if(strchr(address, ':') != NULL){
 
1836
    if(strchr(connect_to, ':') != NULL){
1836
1837
      af = AF_INET6;
 
1838
      /* Accept [] around IPv6 address - see RFC 5952 */
 
1839
      if(connect_to[0] == '[' and address[-1] == ']')
 
1840
        {
 
1841
          connect_to++;
 
1842
          address[-1] = '\0';
 
1843
        }
1837
1844
    } else {
1838
1845
      af = AF_INET;
1839
1846
    }
 
1847
    address = connect_to;
1840
1848
    
1841
1849
    if(quit_now){
1842
1850
      goto end;
1843
1851
    }
1844
 
 
 
1852
    
1845
1853
    while(not quit_now){
1846
1854
      ret = start_mandos_communication(address, port, if_index, af);
1847
1855
      if(quit_now or ret == 0){
1848
1856
        break;
1849
1857
      }
1850
 
      sleep((int)retry_interval or 1);
 
1858
      if(debug){
 
1859
        fprintf(stderr, "Retrying in %d seconds\n",
 
1860
                (int)retry_interval);
 
1861
      }
 
1862
      sleep((int)retry_interval);
1851
1863
    };
1852
1864
 
1853
1865
    if (not quit_now){