/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-14 14:20:17 UTC
  • Revision ID: teddy@fukt.bsnet.se-20090114142017-84t4kfw56bsftjlo
Fixes for sscanf usage:

* plugin-runner.c (main): Parse numbers correctly and portably using
                          an intermediate "intmax_t".  Cast "pid_t" to
                          "intmax_t" before passing it to "printf()".
* plugins.d/mandos-client.c (main): Parse numbers correctly and
                                    portably using an intermediate
                                    "intmax_t".  Bug fix: cast
                                    "AvahiIfIndex" to "intmax_t" and
                                    use "PRIdMAX" instead of using
                                    "PRIu16", and use "PRIu16" to
                                    format port number.
* plugins.d/splashy.c (main): Parse numbers correctly and portably
                              using an intermediate "intmax_t".
* plugins.d/usplash.c (main): - '' -

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 */