From e0d792f5c34b16664c3dfd63d3e0292845a94ad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AB=8F=E8=A8=AA=E5=AD=90?= Date: Thu, 1 Feb 2024 16:45:52 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=91=E3=82=B9=E3=83=AF=E3=83=BC=E3=83=89?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E6=A9=9F=E8=83=BD=E6=80=A7=E3=81=A7=E3=80=81?= =?UTF-8?q?=E3=83=91=E3=82=B9=E3=83=AF=E3=83=BC=E3=83=89=E3=81=8C=E6=97=A2?= =?UTF-8?q?=E3=81=AB=E5=AD=98=E5=9C=A8=E3=81=99=E3=82=8B=E3=81=8B=E3=81=A9?= =?UTF-8?q?=E3=81=86=E3=81=8B=E7=A2=BA=E8=AA=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + addpass.c | 37 ++++++++++++++++++++++++++----------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 204b0a7..aa40873 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ * やっとTOTP機能性を修正した * makeを実行したら、バイナリがもっと小さくなる * パスワードの長さの延長 +* パスワード追加機能性で、パスワードが既に存在するかどうか確認 # 1.1.2 * OpenBSDでのコンパイラーが発生された問題を修正した diff --git a/addpass.c b/addpass.c index c30072d..b25f1ee 100644 --- a/addpass.c +++ b/addpass.c @@ -74,9 +74,35 @@ void getpasswd(char* prompt, char*pw, size_t pwlen) { } void addpass(char* file) { + // パスを準備 + char* homedir = getenv("HOME"); + if (homedir == NULL) { + perror("ホームディレクトリを受取に失敗。"); + return; + } + + char* basedir = "/.local/share/sp/"; + char* ext = ".gpg"; + char pass[256]; char knin[256]; + int alllen = snprintf(NULL, 0, "%s%s%s%s", homedir, basedir, file, ext) + 1; + char* gpgpathchk = malloc(alllen); + if (gpgpathchk == NULL) { + perror("メモリを割当に失敗。"); + return; + } + + // ファイルが既に存在するかどうか確認 + snprintf(gpgpathchk, alllen, "%s%s%s%s", homedir, basedir, file, ext); + if (access(gpgpathchk, F_OK) != -1) { + fprintf(stderr, "パスワードが既に存在しています。\n変更するには、「 sp -e %s 」を実行して下さい。\n", file); + free(gpgpathchk); + return; + } + free(gpgpathchk); + // パスワードを受け取る getpasswd("パスワード: ", pass, sizeof(pass)); puts(""); @@ -126,16 +152,6 @@ void addpass(char* file) { gpgme_data_new(&out); - // パスを準備 - char* homedir = getenv("HOME"); - if (homedir == NULL) { - perror("ホームディレクトリを受取に失敗。"); - return; - } - - char* basedir = "/.local/share/sp/"; - char* ext = ".gpg"; - // 鍵を受け取る char keypath[256]; snprintf(keypath, sizeof(keypath), "%s%s%s", homedir, basedir, ".gpg-id"); @@ -183,7 +199,6 @@ void addpass(char* file) { } // 暗号化したタイルを開く - int alllen = snprintf(NULL, 0, "%s%s%s%s", homedir, basedir, file, ext) + 1; char* gpgpath = malloc(alllen); if (gpgpath == NULL) { cleanup(ctx, key[0], in, out);