/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/splashy.c

  • Committer: Teddy Hogeborn
  • Date: 2009-01-13 04:29:35 UTC
  • Revision ID: teddy@fukt.bsnet.se-20090113042935-ztxe47n42q5z767b
* plugin-runner.c (main): Bug fix; do not accept a "d" character after
                          user ID or group ID numbers.  Bug fix: use
                          "%u" when printing PID of coredumped plugin,
                          not "%d".
* plugins.d/password-prompt.c (main): Remove comment which was copied
                                      from another program by mistake.
* plugins.d/splashy.c: Only comment changes.
* plugins.d/usplash.c: - '' -

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
                                   SIG_IGN, kill(), SIGKILL */
31
31
#include <stddef.h>             /* NULL */
32
32
#include <stdlib.h>             /* getenv() */
33
 
#include <stdio.h>              /* asprintf(), perror() */
 
33
#include <stdio.h>              /* asprintf(), perror(), sscanf() */
34
34
#include <stdlib.h>             /* EXIT_FAILURE, free(),
35
35
                                   EXIT_SUCCESS */
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, strtoimax() */
40
39
#include <sys/stat.h>           /* struct stat, lstat(), S_ISLNK */
41
40
#include <iso646.h>             /* not, or, and */
42
41
#include <unistd.h>             /* readlink(), fork(), execl(),
99
98
        proc_ent != NULL;
100
99
        proc_ent = readdir(proc_dir)){
101
100
      pid_t pid;
102
 
      {
103
 
        intmax_t tmpmax;
104
 
        char *tmp;
105
 
        errno = 0;
106
 
        tmpmax = strtoimax(proc_ent->d_name, &tmp, 10);
107
 
        if(errno != 0 or tmp == proc_ent->d_name or *tmp != '\0'
108
 
           or tmpmax != (pid_t)tmpmax){
109
 
          /* Not a process */
110
 
          continue;
111
 
        }
112
 
        pid = (pid_t)tmpmax;
 
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;
113
106
      }
114
107
      /* Find the executable name by doing readlink() on the
115
108
         /proc/<pid>/exe link */