/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

* Makefile (run-client): Add "--network-hook-dir" option.
* plugin-runner.c (main): Only try to work around Debian bug #633582
                          if started as root.
* plugins.d/mandos-client.c (run_network_hooks): Bug fix: Run all
                                                 network hooks, not
                                                 just the first one.
                                                 Also add debug output.
  (main): Only try to work around Debian bug #633582 or run network
          hooks as root if started as root.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1388
1388
  } else {
1389
1389
    int devnull = open("/dev/null", O_RDONLY);
1390
1390
    for(int i = 0; i < numhooks; i++){
1391
 
      direntry = direntries[0];
 
1391
      direntry = direntries[i];
1392
1392
      char *fullname = NULL;
1393
1393
      ret = asprintf(&fullname, "%s/%s", hookdir, direntry->d_name);
1394
1394
      if(ret < 0){
1395
1395
        perror_plus("asprintf");
1396
1396
        continue;
1397
1397
      }
 
1398
      if(debug){
 
1399
        fprintf_plus(stderr, "Running network hook \"%s\"\n",
 
1400
                     direntry->d_name);
 
1401
      }
1398
1402
      pid_t hook_pid = fork();
1399
1403
      if(hook_pid == 0){
1400
1404
        /* Child */
1669
1673
    }
1670
1674
  }
1671
1675
    
1672
 
  {
 
1676
  if(getuid() == 0){
1673
1677
    /* Work around Debian bug #633582:
1674
1678
       <http://bugs.debian.org/633582> */
1675
1679
    struct stat st;
1733
1737
  
1734
1738
  /* Run network hooks */
1735
1739
  {
1736
 
    /* Re-raise priviliges */
1737
 
    errno = 0;
1738
 
    ret = seteuid(0);
1739
 
    if(ret == -1){
1740
 
      perror_plus("seteuid");
 
1740
    if(getuid() == 0){
 
1741
      /* Re-raise priviliges */
 
1742
      errno = 0;
 
1743
      ret = seteuid(0);
 
1744
      if(ret == -1){
 
1745
        perror_plus("seteuid");
 
1746
      }
1741
1747
    }
1742
1748
    if(not run_network_hooks("start", interface, delay)){
1743
1749
      goto end;
1744
1750
    }
1745
 
    /* Lower privileges */
1746
 
    errno = 0;
1747
 
    ret = seteuid(uid);
1748
 
    if(ret == -1){
1749
 
      perror_plus("seteuid");
 
1751
    if(getuid() == 0){
 
1752
      /* Lower privileges */
 
1753
      errno = 0;
 
1754
      ret = seteuid(uid);
 
1755
      if(ret == -1){
 
1756
        perror_plus("seteuid");
 
1757
      }
1750
1758
    }
1751
1759
  }
1752
1760
  
2206
2214
  
2207
2215
  /* Re-raise priviliges */
2208
2216
  {
2209
 
    errno = 0;
2210
 
    ret = seteuid(0);
2211
 
    if(ret == -1){
2212
 
      perror_plus("seteuid");
 
2217
    if(getuid() == 0){
 
2218
      errno = 0;
 
2219
      ret = seteuid(0);
 
2220
      if(ret == -1){
 
2221
        perror_plus("seteuid");
 
2222
      }
2213
2223
    }
2214
2224
    /* Run network hooks */
2215
2225
    if(not run_network_hooks("stop", interface, delay)){
2234
2244
      }
2235
2245
    }
2236
2246
  }
2237
 
  /* Lower privileges permanently */
2238
 
  errno = 0;
2239
 
  ret = setuid(uid);
2240
 
  if(ret == -1){
2241
 
    perror_plus("setuid");
 
2247
  if(getuid() == 0){
 
2248
    /* Lower privileges permanently */
 
2249
    errno = 0;
 
2250
    ret = setuid(uid);
 
2251
    if(ret == -1){
 
2252
      perror_plus("setuid");
 
2253
    }
2242
2254
  }
2243
2255
  
2244
2256
  /* Removes the GPGME temp directory and all files inside */