]> Nishi Git Mirror - sp.git/commitdiff
パスワード追加機能性で、パスワードが既に存在するかどうか確認
author諏訪子 <suwako@076.moe>
Thu, 1 Feb 2024 07:45:52 +0000 (16:45 +0900)
committer諏訪子 <suwako@076.moe>
Thu, 1 Feb 2024 07:45:52 +0000 (16:45 +0900)
CHANGELOG.md
addpass.c

index 204b0a7703f03e1884aeefcf7c3eb65cc8dcdbb3..aa4087303ae61d340de8cc0f0e6f1a07e8c14d18 100644 (file)
@@ -2,6 +2,7 @@
 * やっとTOTP機能性を修正した
 * makeを実行したら、バイナリがもっと小さくなる
 * パスワードの長さの延長
+* パスワード追加機能性で、パスワードが既に存在するかどうか確認
 
 # 1.1.2
 * OpenBSDでのコンパイラーが発生された問題を修正した
index c30072d5fcdae55358da7f8df52979d7a112b5a1..b25f1ee266a5d8df95f98088e61b23726543f181 100644 (file)
--- 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);