/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 plugin-runner.c

  • Committer: Teddy Hogeborn
  • Date: 2009-02-12 18:56:52 UTC
  • Revision ID: teddy@fukt.bsnet.se-20090212185652-ast00yprt2pe2l4p
Overflows are not detected by sscanf(), so stop using it:

* plugin-runner.c (main/parse_opt): Change from using "sscanf()" to
                                    "strtoimax()".
* plugins.d/mandos-client.c (main/parse_opt, main): Change from using
                                                    "sscanf()" to
                                                    "strtoimax()" and
                                                    "strtof()".
* splashy.c (main): Change from using "sscanf()" to "strtoimax()".
* usplash.c (main): - '' -

Show diffs side-by-side

added added

removed removed

Lines of Context:
65
65
                                   SIG_UNBLOCK, kill(), sig_atomic_t
66
66
                                */
67
67
#include <errno.h>              /* errno, EBADF */
68
 
#include <inttypes.h>           /* intmax_t, SCNdMAX, PRIdMAX,  */
 
68
#include <inttypes.h>           /* intmax_t, PRIdMAX, strtoimax() */
69
69
 
70
70
#define BUFFER_SIZE 256
71
71
 
313
313
  struct dirent *dirst;
314
314
  struct stat st;
315
315
  fd_set rfds_all;
316
 
  int ret, numchars, maxfd = 0;
 
316
  int ret, maxfd = 0;
317
317
  ssize_t sret;
318
318
  intmax_t tmpmax;
319
319
  uid_t uid = 65534;
380
380
  
381
381
  error_t parse_opt(int key, char *arg, __attribute__((unused))
382
382
                    struct argp_state *state){
 
383
    char *tmp;
383
384
    switch(key){
384
385
    case 'g':                   /* --global-options */
385
386
      if(arg != NULL){
462
463
      /* This is already done by parse_opt_config_file() */
463
464
      break;
464
465
    case 130:                   /* --userid */
465
 
      ret = sscanf(arg, "%" SCNdMAX "%n", &tmpmax, &numchars);
466
 
      if(ret < 1 or tmpmax != (uid_t)tmpmax
467
 
         or arg[numchars] != '\0'){
 
466
      errno = 0;
 
467
      tmpmax = strtoimax(arg, &tmp, 10);
 
468
      if(errno != 0 or tmp == arg or *tmp != '\0'
 
469
         or tmpmax != (uid_t)tmpmax){
468
470
        fprintf(stderr, "Bad user ID number: \"%s\", using %"
469
471
                PRIdMAX "\n", arg, (intmax_t)uid);
470
472
      } else {
472
474
      }
473
475
      break;
474
476
    case 131:                   /* --groupid */
475
 
      ret = sscanf(arg, "%" SCNdMAX "%n", &tmpmax, &numchars);
476
 
      if(ret < 1 or tmpmax != (gid_t)tmpmax
477
 
         or arg[numchars] != '\0'){
 
477
      errno = 0;
 
478
      tmpmax = strtoimax(arg, &tmp, 10);
 
479
      if(errno != 0 or tmp == arg or *tmp != '\0'
 
480
         or tmpmax != (gid_t)tmpmax){
478
481
        fprintf(stderr, "Bad group ID number: \"%s\", using %"
479
482
                PRIdMAX "\n", arg, (intmax_t)gid);
480
483
      } else {