diff options
Diffstat (limited to 'config.c')
| -rw-r--r-- | config.c | 47 | 
1 files changed, 46 insertions, 1 deletions
@@ -1,6 +1,6 @@  #include "config.h" -// TODO - Multiple functions here (at least readnames() and relayseconds() have the file opening code, rewrite. +// TODO - Multiple functions here (at least readnames(), relayseconds() and checkpassword()) have the file opening code, rewrite.  // TODO - Can isconf() and getconf() just be merged into one function? @@ -136,5 +136,50 @@ int confrelayseconds() {      }    } +  fclose(fp);    return seconds;  } + +// Check the password provided in the string 'str' against what is in +// the config file. +// Return 0 for password mismatch, or 1 for password match. +int checkpassword(char *password) { +  FILE *fp; +  char str[MAXCHAR]; +  char* filename = "blabouncer.conf"; + +  fp = fopen(filename, "r"); + +  if (fp == NULL) { +    printf("error: could not open configuration file '%s'.\n", filename); +    exit(1); +  } + +  while (fgets(str, MAXCHAR, fp) != NULL) { +    long int len; +    if ((len = isconf(str, "password"))) { +      getconf(str, len); +      printf("confpassword is: '%s', length '%ld'.\n", str, strlen(str)); +      // Ensure password are the same length +      if (strlen(str) != strlen(password)) { +        printf("Password length mismatch!\n"); +        fclose(fp); +        return 0; +      } +      // Ensure passwords match +      if (strncmp(str, password, strlen(password)) == 0) { +        printf("confpassword matches password.\n"); +        fclose(fp); +        return 1; +      } else { +        printf("confpassword does NOT match password!\n"); +        fclose(fp); +        return 0; +      } +    } +  } + +  fclose(fp); +  printf("No password read from configuration file, quitting.\n"); +  exit(1); +}  | 
