/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

* network-hooks.d: New directory.
* network-hooks.d/bridge: New example hook.
* network-hooks.d/bridge.conf: Config file for bridge example hook.

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[i];
 
1391
      direntry = direntries[0];
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
 
      }
1402
1398
      pid_t hook_pid = fork();
1403
1399
      if(hook_pid == 0){
1404
1400
        /* Child */
1673
1669
    }
1674
1670
  }
1675
1671
    
1676
 
  if(getuid() == 0){
 
1672
  {
1677
1673
    /* Work around Debian bug #633582:
1678
1674
       <http://bugs.debian.org/633582> */
1679
1675
    struct stat st;
1737
1733
  
1738
1734
  /* Run network hooks */
1739
1735
  {
1740
 
    if(getuid() == 0){
1741
 
      /* Re-raise priviliges */
1742
 
      errno = 0;
1743
 
      ret = seteuid(0);
1744
 
      if(ret == -1){
1745
 
        perror_plus("seteuid");
1746
 
      }
 
1736
    /* Re-raise priviliges */
 
1737
    errno = 0;
 
1738
    ret = seteuid(0);
 
1739
    if(ret == -1){
 
1740
      perror_plus("seteuid");
1747
1741
    }
1748
1742
    if(not run_network_hooks("start", interface, delay)){
1749
1743
      goto end;
1750
1744
    }
1751
 
    if(getuid() == 0){
1752
 
      /* Lower privileges */
1753
 
      errno = 0;
1754
 
      ret = seteuid(uid);
1755
 
      if(ret == -1){
1756
 
        perror_plus("seteuid");
1757
 
      }
 
1745
    /* Lower privileges */
 
1746
    errno = 0;
 
1747
    ret = seteuid(uid);
 
1748
    if(ret == -1){
 
1749
      perror_plus("seteuid");
1758
1750
    }
1759
1751
  }
1760
1752
  
2214
2206
  
2215
2207
  /* Re-raise priviliges */
2216
2208
  {
2217
 
    if(getuid() == 0){
2218
 
      errno = 0;
2219
 
      ret = seteuid(0);
2220
 
      if(ret == -1){
2221
 
        perror_plus("seteuid");
2222
 
      }
 
2209
    errno = 0;
 
2210
    ret = seteuid(0);
 
2211
    if(ret == -1){
 
2212
      perror_plus("seteuid");
2223
2213
    }
2224
2214
    /* Run network hooks */
2225
2215
    if(not run_network_hooks("stop", interface, delay)){
2244
2234
      }
2245
2235
    }
2246
2236
  }
2247
 
  if(getuid() == 0){
2248
 
    /* Lower privileges permanently */
2249
 
    errno = 0;
2250
 
    ret = setuid(uid);
2251
 
    if(ret == -1){
2252
 
      perror_plus("setuid");
2253
 
    }
 
2237
  /* Lower privileges permanently */
 
2238
  errno = 0;
 
2239
  ret = setuid(uid);
 
2240
  if(ret == -1){
 
2241
    perror_plus("setuid");
2254
2242
  }
2255
2243
  
2256
2244
  /* Removes the GPGME temp directory and all files inside */