diff options
author | Joursoir <chat@joursoir.net> | 2020-10-19 15:54:40 +0000 |
---|---|---|
committer | Joursoir <chat@joursoir.net> | 2020-10-19 15:54:40 +0000 |
commit | 8af0737920cceb1d29bbd4ac6cf7b692c1ad1416 (patch) | |
tree | 2939d0e832649126b349e5a0d957712b29820877 /implementation.c | |
parent | 742fe01bf8712b37a0f6cdfe379c1966bcd11c90 (diff) | |
download | lock-password-8af0737920cceb1d29bbd4ac6cf7b692c1ad1416.tar.gz lock-password-8af0737920cceb1d29bbd4ac6cf7b692c1ad1416.tar.bz2 lock-password-8af0737920cceb1d29bbd4ac6cf7b692c1ad1416.zip |
feature: gpg encryption, remove pass
Diffstat (limited to 'implementation.c')
-rw-r--r-- | implementation.c | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/implementation.c b/implementation.c index 0ef17c1..f695b01 100644 --- a/implementation.c +++ b/implementation.c @@ -12,17 +12,22 @@ // == global var == extern char *gPath_rootdir; +extern char *gSecret_gpgkey; char* getPassword(char *path, char *password, int maxlen) { - FILE *filePass; - filePass = fopen(path, "r"); - if(filePass == NULL) { - if(errno == ENOENT) { // file doesn't exist - printError("lpass: No such file exists\n"); - } - callError(110); + // gpg + int pid = fork(); + if(pid == 1) callError(126); + if(pid == 0) { + execlp("gpg", "-d", "--quiet", "-r", gSecret_gpgkey, "-o", "gap", path, NULL); + perror("gpg"); + exit(4); } + wait(&pid); + + FILE *filePass = fopen("gap", "r"); + if(filePass == NULL) callError(127); char sign[maxlen]; if(!fgets(sign, sizeof(sign), filePass)) { @@ -31,6 +36,8 @@ char* getPassword(char *path, char *password, int maxlen) strcpy(password, sign); fclose(filePass); + + remove("gap"); return password; } @@ -91,6 +98,17 @@ void insertPass(char *add_path, char *password) fputs(password, filePass); fclose(filePass); + // gpg + int pid = fork(); + if(pid == 1) callError(225); + if(pid == 0) { + execlp("gpg", "-a", "-r", gSecret_gpgkey, "-e", file_path, NULL); + perror("gpg"); + exit(4); + } + wait(&pid); + remove(file_path); + free(main_path); free(file_path); } |