/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:
283
283
    return false;
284
284
  }
285
285
  
286
 
  /* Set GPGME home directory for the OpenPGP engine only */
 
286
    /* Set GPGME home directory for the OpenPGP engine only */
287
287
  rc = gpgme_get_engine_info(&engine_info);
288
288
  if(rc != GPG_ERR_NO_ERROR){
289
289
    fprintf(stderr, "bad gpgme_get_engine_info: %s: %s\n",
1470
1470
      perror_plus("seteuid");
1471
1471
    }
1472
1472
    
1473
 
    if(strcmp(seckey, PATHDIR "/" SECKEY) == 0){
1474
 
      int seckey_fd = open(seckey, O_RDONLY);
1475
 
      if(seckey_fd == -1){
1476
 
        perror_plus("open");
 
1473
    int seckey_fd = open(PATHDIR "/" SECKEY, O_RDONLY);
 
1474
    if(seckey_fd == -1){
 
1475
      perror_plus("open");
 
1476
    } else {
 
1477
      ret = (int)TEMP_FAILURE_RETRY(fstat(seckey_fd, &st));
 
1478
      if(ret == -1){
 
1479
        perror_plus("fstat");
1477
1480
      } else {
1478
 
        ret = (int)TEMP_FAILURE_RETRY(fstat(seckey_fd, &st));
1479
 
        if(ret == -1){
1480
 
          perror_plus("fstat");
1481
 
        } else {
1482
 
          if(S_ISREG(st.st_mode) and st.st_uid == 0 and st.st_gid == 0){
1483
 
            ret = fchown(seckey_fd, uid, gid);
1484
 
            if(ret == -1){
1485
 
              perror_plus("fchown");
1486
 
            }
 
1481
        if(S_ISREG(st.st_mode) and st.st_uid == 0 and st.st_gid == 0){
 
1482
          ret = fchown(seckey_fd, uid, gid);
 
1483
          if(ret == -1){
 
1484
            perror_plus("fchown");
1487
1485
          }
1488
1486
        }
1489
 
        TEMP_FAILURE_RETRY(close(seckey_fd));
1490
1487
      }
 
1488
      TEMP_FAILURE_RETRY(close(seckey_fd));
1491
1489
    }
1492
1490
    
1493
 
    if(strcmp(pubkey, PATHDIR "/" PUBKEY) == 0){
1494
 
      int pubkey_fd = open(pubkey, O_RDONLY);
1495
 
      if(pubkey_fd == -1){
1496
 
        perror_plus("open");
 
1491
    int pubkey_fd = open(PATHDIR "/" PUBKEY, O_RDONLY);
 
1492
    if(pubkey_fd == -1){
 
1493
      perror_plus("open");
 
1494
    } else {
 
1495
      ret = (int)TEMP_FAILURE_RETRY(fstat(pubkey_fd, &st));
 
1496
      if(ret == -1){
 
1497
        perror_plus("fstat");
1497
1498
      } else {
1498
 
        ret = (int)TEMP_FAILURE_RETRY(fstat(pubkey_fd, &st));
1499
 
        if(ret == -1){
1500
 
          perror_plus("fstat");
1501
 
        } else {
1502
 
          if(S_ISREG(st.st_mode) and st.st_uid == 0 and st.st_gid == 0){
1503
 
            ret = fchown(pubkey_fd, uid, gid);
1504
 
            if(ret == -1){
1505
 
              perror_plus("fchown");
1506
 
            }
 
1499
        if(S_ISREG(st.st_mode) and st.st_uid == 0 and st.st_gid == 0){
 
1500
          ret = fchown(pubkey_fd, uid, gid);
 
1501
          if(ret == -1){
 
1502
            perror_plus("fchown");
1507
1503
          }
1508
1504
        }
1509
 
        TEMP_FAILURE_RETRY(close(pubkey_fd));
1510
1505
      }
 
1506
      TEMP_FAILURE_RETRY(close(pubkey_fd));
1511
1507
    }
1512
1508
    
1513
1509
    /* Lower privileges */
1864
1860
                (int)retry_interval);
1865
1861
      }
1866
1862
      sleep((int)retry_interval);
1867
 
    }
1868
 
    
 
1863
    };
 
1864
 
1869
1865
    if (not quit_now){
1870
1866
      exitcode = EXIT_SUCCESS;
1871
1867
    }
2008
2004
  if(tempdir_created){
2009
2005
    struct dirent **direntries = NULL;
2010
2006
    struct dirent *direntry = NULL;
2011
 
    int numentries = scandir(tempdir, &direntries, notdotentries,
2012
 
                             alphasort);
2013
 
    if (numentries > 0){
2014
 
      for(int i = 0; i < numentries; i++){
 
2007
    ret = scandir(tempdir, &direntries, notdotentries, alphasort);
 
2008
    if (ret > 0){
 
2009
      for(int i = 0; i < ret; i++){
2015
2010
        direntry = direntries[i];
2016
2011
        char *fullname = NULL;
2017
2012
        ret = asprintf(&fullname, "%s/%s", tempdir,
2029
2024
      }
2030
2025
    }
2031
2026
 
2032
 
    /* need to clean even if 0 because man page doesn't specify */
 
2027
    /* need to be cleaned even if ret == 0 because man page doesn't
 
2028
       specify */
2033
2029
    free(direntries);
2034
 
    if (numentries == -1){
 
2030
    if (ret == -1){
2035
2031
      perror_plus("scandir");
2036
2032
    }
2037
2033
    ret = rmdir(tempdir);