/mandos/release

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

« back to all changes in this revision

Viewing changes to plugins.d/splashy.c

* Makefile (install-client-nokey): Move "initramfs-tools-script" from
                                   "/scripts/local-top/mandos" to
                                   "/scripts/init-premount/mandos".
  (uninstall-client): - '' -
* debian/mandos-client.dirs: - '' -
* initramfs-tools-script (PREREQ): Added "udev".

Show diffs side-by-side

added added

removed removed

Lines of Context:
36
36
#include <sys/types.h>          /* pid_t, DIR, struct dirent,
37
37
                                   ssize_t */
38
38
#include <dirent.h>             /* opendir(), readdir(), closedir() */
 
39
#include <inttypes.h>           /* intmax_t, SCNdMAX */
39
40
#include <sys/stat.h>           /* struct stat, lstat(), S_ISLNK */
40
41
#include <iso646.h>             /* not, or, and */
41
42
#include <unistd.h>             /* readlink(), fork(), execl(),
98
99
        proc_ent != NULL;
99
100
        proc_ent = readdir(proc_dir)){
100
101
      pid_t pid;
101
 
      /* In the GNU C library, pid_t is always int */
102
 
      ret = sscanf(proc_ent->d_name, "%d", &pid);
103
 
      if(ret != 1){ 
104
 
        /* Not a process */
105
 
        continue;
 
102
      {
 
103
        intmax_t tmpmax;
 
104
        int numchars;
 
105
        ret = sscanf(proc_ent->d_name, "%" SCNdMAX "%n", &tmpmax,
 
106
                     &numchars);
 
107
        if(ret < 1 or tmpmax != (pid_t)tmpmax
 
108
           or proc_ent->d_name[numchars] != '\0'){
 
109
          /* Not a process */
 
110
          continue;
 
111
        }
 
112
        pid = (pid_t)tmpmax;
106
113
      }
107
114
      /* Find the executable name by doing readlink() on the
108
115
         /proc/<pid>/exe link */
269
276
    /* Child; will become new splashy process */
270
277
    
271
278
    /* Make the effective user ID (root) the only user ID instead of
272
 
       the real user ID (mandos) */
 
279
       the real user ID (_mandos) */
273
280
    ret = setuid(geteuid());
274
281
    if(ret == -1){
275
282
      perror("setuid");