summaryrefslogtreecommitdiff
path: root/accman.c
diff options
context:
space:
mode:
Diffstat (limited to 'accman.c')
-rw-r--r--accman.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/accman.c b/accman.c
index d12ce2a..5b0f2ef 100644
--- a/accman.c
+++ b/accman.c
@@ -12,7 +12,11 @@ char *get_name(void)
char name[32];
char *usr_n;
- scanf("%s", name);
+ int got = scanf("%s", name);
+ if(got != 1) {
+ fprintf(stderr, "failed to read name...\n");
+ exit(EXIT_FAILURE);
+ }
usr_n = (char *) malloc(sizeof(name) + DIM_MDOM + 1);
if (!usr_n) {
printf("No free memory available\n");
@@ -55,19 +59,33 @@ char *get_password(void)
fprintf(stderr,
"Password must be between %d and %d characters\n",
MIN_PASSWD_LEN, MAX_PASSWD_LEN);
+ memset(tmp, 0, len);
exit(EXIT_FAILURE);
}
p = (char*) malloc (len + 1);
strcpy(p, tmp);
+ /* clear password from memory */
+ memset(tmp, 0, len);
+
tmp = getpass("Re-type password: ");
- if (strcmp(p, tmp)) {
+
+ int scmp = strcmp(p, tmp);
+ memset(tmp, 0, len);
+
+ if (scmp) {
fprintf(stderr, "The passwords don't match, operation aborted\n");
+ /* clear passwd */
+ memset(p, 0, len);
exit(EXIT_FAILURE);
}
- return get_crypt_sha256(p);
+ tmp = get_crypt_sha256(p);
+ memset(p, 0, len);
+ free(p);
+
+ return tmp;
}
int main (void)