Text   |  XML   |  ReML   |   Visible Warnings:

Leak  at dovecotpw.c:100

No properties have been set. | edit properties
Jump to warning location ↓ warning details...
Show Events | Options

main

(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/util/dovecotpw.c)expand/collapse
Show more  
 36  int main(int argc, char *argv[])
 37  {
 38          const char *hash = NULL;
 39          const char *user = NULL;
 40          char *scheme = NULL;
 41          char *plaintext = NULL;
 42          int ch, lflag = 0, Vflag = 0;
 43   
 44          lib_init();
 45          random_init();
 46          password_schemes_init();
 47           
 48          while ((ch = getopt(argc, argv, "lp:s:u:V")) != -1) {
 49                  switch (ch) {
 50                  case 'l':
 51                          lflag = 1;
 52                          break;
 53                  case 'p':
 54                          plaintext = i_strdup(optarg);
 55                          safe_memset(optarg, 0, strlen(optarg));
 56                          break;
 57                  case 's':
 58                          scheme = i_strdup(optarg);
 59                          break;
 60                  case 'u':
 61                          user = i_strdup(optarg);
 62                          break;
 63                  case 'V':
 64                          Vflag = 1;
 65                          break;
 66                  case '?':
 67                  default:
 68                          usage(basename(*argv));
 69                  }
 70          }
 71   
 72          if (lflag) {
 73                  const struct password_scheme *const *schemes;
 74                  unsigned int i, count;
 75   
 76                  schemes = array_get(&password_schemes, &count);
 77                  for (i = 0; i < count; i++)
 78                          printf("%s ", schemes[i]->name);
 79                  printf("\n");
 80                  exit(0);
 81          }
 82   
 83          if (argc != optind)
 84                  usage(basename(*argv));
 85   
 86          if (scheme == NULL)
 87                  scheme = i_strdup(DEFAULT_SCHEME);
 88          else {
 89                  char *c;
 90                  for (c = scheme; *c != '\0'; c++)
 91                          *c = i_toupper(*c);
 92          }
 93   
 94   
 95          while (plaintext == NULL) {
 96                  char *check;
 97                  static int lives = 3;
 98   
 99                  plaintext = i_strdup(getpass("Enter new password: "));
 100[+]                 check = i_strdup(getpass("Retype new password: "));
expand/collapse

i_strdup

(/home/sate/Testcases/c/cve/dovecot-1.2.0/src/lib/imem.c)expand/collapse
Show more  
 23  char *i_strdup(const char *str)
 24  {
 25      char *rv = strdup( str );
 26      if( !rv )
 27          abort();
 28      return rv;
Show more  
 101                  if (strcmp(plaintext, check) != 0) {
 102                          fprintf(stderr, "Passwords don't match!\n");
 103                          if (--lives == 0)
 104                                  exit(1);
 105                          safe_memset(plaintext, 0, strlen(plaintext));
 106                          safe_memset(check, 0, strlen(check));
 107                          i_free(plaintext);
 108                          i_free(check);
 109                          plaintext = NULL;
 110                  }
 111          }
 112   
 113          if (!password_generate_encoded(plaintext, user, scheme, &hash)) {
 114                  fprintf(stderr, "Unknown scheme: %s\n", scheme);
 115                  exit(1);
 116          }
 117          if (Vflag == 1) {
 118                  const unsigned char *raw_password;
 119                  size_t size;
 120   
 121                  if (password_decode(hash, scheme, &raw_password, &size) <= 0) {
 122                          fprintf(stderr, "reverse decode check failed\n");
 123                          exit(2);
 124                  }
 125   
 126                  if (password_verify(plaintext, user, scheme,
 127                                      raw_password, size) != 1) {
 128                          fprintf(stderr,
 129                                  "reverse password verification check failed\n");
 130                          exit(2);
 131                  }
 132   
 133                  printf("{%s}%s (verified)\n", scheme, hash);
 134          } else 
 135                  printf("{%s}%s\n", scheme, hash);
 136   
 137          return 0;
Show more  




Change Warning 12133.24662 : Leak

Priority:
State:
Finding:
Owner:
Note: