00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "internal.h"
00024
00046 int
00047 gsasl_simple_getpass (const char *filename, const char *username, char **key)
00048 {
00049 size_t userlen = strlen (username);
00050 char *line = NULL;
00051 size_t n = 0;
00052 FILE *fh;
00053
00054 fh = fopen (filename, "r");
00055 if (fh)
00056 {
00057 while (!feof (fh))
00058 {
00059 if (getline (&line, &n, fh) < 0)
00060 break;
00061
00062 if (line[0] == '#')
00063 continue;
00064
00065 if (line[strlen (line) - 1] == '\r')
00066 line[strlen (line) - 1] = '\0';
00067 if (line[strlen (line) - 1] == '\n')
00068 line[strlen (line) - 1] = '\0';
00069
00070 if (strncmp (line, username, userlen) == 0 && line[userlen] == '\t')
00071 {
00072 *key = malloc (strlen (line) - userlen);
00073 if (!*key)
00074 {
00075 free (line);
00076 return GSASL_MALLOC_ERROR;
00077 }
00078
00079 strcpy (*key, line + userlen + 1);
00080
00081 free (line);
00082
00083 fclose (fh);
00084
00085 return GSASL_OK;
00086 }
00087 }
00088
00089 fclose (fh);
00090 }
00091
00092 if (line)
00093 free (line);
00094
00095 return GSASL_AUTHENTICATION_ERROR;
00096 }