/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: Björn Påhlsson
  • Date: 2011-11-27 19:51:00 UTC
  • mto: (518.2.5 persistent-state-gpgme)
  • mto: This revision was merged to the branch mainline in revision 524.
  • Revision ID: belorn@recompile.se-20111127195100-fx0mpeia9xihvpmd
renamed variables

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
 * along with this program.  If not, see
27
27
 * <http://www.gnu.org/licenses/>.
28
28
 * 
29
 
 * Contact the authors at <mandos@fukt.bsnet.se>.
 
29
 * Contact the authors at <mandos@recompile.se>.
30
30
 */
31
31
 
32
32
/* Needed by GPGME, specifically gpgme_data_seek() */
127
127
bool debug = false;
128
128
static const char mandos_protocol_version[] = "1";
129
129
const char *argp_program_version = "mandos-client " VERSION;
130
 
const char *argp_program_bug_address = "<mandos@fukt.bsnet.se>";
 
130
const char *argp_program_bug_address = "<mandos@recompile.se>";
131
131
static const char sys_class_net[] = "/sys/class/net";
132
132
char *connect_to = NULL;
133
133
 
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
 
    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");
 
1473
    if(strcmp(seckey, PATHDIR "/" SECKEY) == 0){
 
1474
      int seckey_fd = open(seckey, O_RDONLY);
 
1475
      if(seckey_fd == -1){
 
1476
        perror_plus("open");
1480
1477
      } else {
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");
 
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
            }
1485
1487
          }
1486
1488
        }
 
1489
        TEMP_FAILURE_RETRY(close(seckey_fd));
1487
1490
      }
1488
 
      TEMP_FAILURE_RETRY(close(seckey_fd));
1489
1491
    }
1490
1492
    
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");
 
1493
    if(strcmp(pubkey, PATHDIR "/" PUBKEY) == 0){
 
1494
      int pubkey_fd = open(pubkey, O_RDONLY);
 
1495
      if(pubkey_fd == -1){
 
1496
        perror_plus("open");
1498
1497
      } else {
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");
 
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
            }
1503
1507
          }
1504
1508
        }
 
1509
        TEMP_FAILURE_RETRY(close(pubkey_fd));
1505
1510
      }
1506
 
      TEMP_FAILURE_RETRY(close(pubkey_fd));
1507
1511
    }
1508
1512
    
1509
1513
    /* Lower privileges */
1860
1864
                (int)retry_interval);
1861
1865
      }
1862
1866
      sleep((int)retry_interval);
1863
 
    };
1864
 
 
 
1867
    }
 
1868
    
1865
1869
    if (not quit_now){
1866
1870
      exitcode = EXIT_SUCCESS;
1867
1871
    }
2004
2008
  if(tempdir_created){
2005
2009
    struct dirent **direntries = NULL;
2006
2010
    struct dirent *direntry = NULL;
2007
 
    ret = scandir(tempdir, &direntries, notdotentries, alphasort);
2008
 
    if (ret > 0){
2009
 
      for(int i = 0; i < ret; i++){
 
2011
    int numentries = scandir(tempdir, &direntries, notdotentries,
 
2012
                             alphasort);
 
2013
    if (numentries > 0){
 
2014
      for(int i = 0; i < numentries; i++){
2010
2015
        direntry = direntries[i];
2011
2016
        char *fullname = NULL;
2012
2017
        ret = asprintf(&fullname, "%s/%s", tempdir,
2024
2029
      }
2025
2030
    }
2026
2031
 
2027
 
    /* need to be cleaned even if ret == 0 because man page doesn't
2028
 
       specify */
 
2032
    /* need to clean even if 0 because man page doesn't specify */
2029
2033
    free(direntries);
2030
 
    if (ret == -1){
 
2034
    if (numentries == -1){
2031
2035
      perror_plus("scandir");
2032
2036
    }
2033
2037
    ret = rmdir(tempdir);