]> Nishi Git Mirror - sp.git/commitdiff
削除の機能性
author諏訪子 <suwako@076.moe>
Wed, 29 Nov 2023 14:25:41 +0000 (23:25 +0900)
committer諏訪子 <suwako@076.moe>
Wed, 29 Nov 2023 14:25:41 +0000 (23:25 +0900)
README.md
delpass.c
delpass.h
main.c

index efebab653d900104f18380478a9e0052d0e9bc3d..6f8f48cd7b069337e8d8a2cbfd6a3c52194efea6 100644 (file)
--- a/README.md
+++ b/README.md
@@ -2,6 +2,27 @@
 シンプルなパスワードマネージャー
 
 ## インストールする方法
+### CRUX
+```sh
+doas prt-get depinst gpgme gnupg pinentry
+```
+
+### Artix
+```sh
+doas pacman -S base-devel gpgme gnupg pinentry
+```
+
+### OpenBSD
+```sh
+doas pkg_add gmake gpgme gnupg pinentry
+```
+
+### FreeBSD
+```sh
+doas pkg install gmake gpgme gnupg pinentry
+```
+
+### 全部
 ```sh
 mkdir -p ~/.local/share/sp
 gpg --generate-key
index 406bbbce73da63114199c17f12ca6dd418eab3d5..73e5509b7573b7afba8793f7fe8fcba1f1e666d8 100644 (file)
--- a/delpass.c
+++ b/delpass.c
@@ -4,23 +4,39 @@
 
 #include "delpass.h"
 
-void delpass(char* file) {
+int delpass(char* file) {
   // パスを準備
   char pwfile[512];
   char* homedir = getenv("HOME");
   if (homedir == NULL) {
     perror("ホームディレクトリを受取に失敗。");
-    return;
+    return -1;
   }
 
   char* basedir = "/.local/share/sp/";
   char* ext = ".gpg";
-  snprintf(pwfile, sizeof(pwfile), "%s%s%s%s", homedir, basedir, file, ext);
+  int needed = snprintf(pwfile, sizeof(pwfile), "%s%s%s%s", homedir, basedir, file, ext);
+  if (needed >= (int)sizeof(pwfile)) {
+    fprintf(stderr, "エラー:パスが長すぎる。\n");
+    return -1;
+  }
+
+  // 削除を確認する
+  printf("パスワード「%s」を本当に削除する事が宜しいでしょうか? (y/N): ", file);
+  int confirm = getchar();
+  if (confirm != 'y' && confirm != 'Y') {
+    printf("削除しませんでした。\n");
+    return -1;
+  }
+
+  int ch;
+  while ((ch = getchar()) != '\n' && ch != EOF);
 
   if (unlink(pwfile) == -1) {
     perror("パスワードを削除出来ませんですた。");
+    return -1;
   }
 
   printf("パスワードを削除しました。\n");
-  return;
+  return -1;
 }
index db43a4eaf5242315cc14f59fd2ad19343d5bad0d..58f4afc8b3cca37c4aa86b8b87076489e55a66e7 100644 (file)
--- a/delpass.h
+++ b/delpass.h
@@ -1,6 +1,6 @@
 #ifndef DELPASS_H
 #define DELPASS_H
 
-void delpass(char* file);
+int delpass(char* file);
 
 #endif
diff --git a/main.c b/main.c
index 2a24e4312d7b0ffbbc8b48c304da7ad30ffc4acd..e0d80f52b71631d4940340f81e8999055103b705 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,5 +1,6 @@
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
 #include <stdbool.h>
 
 #include <gpgme.h>
@@ -22,7 +23,7 @@ void helpme() {
   //printf("%s -i <gpg-id>                              :GPGと使ってパスワードストレージを初期設定\n", sofname);
   printf("%s -s <パスワード名>                        :パスワードを表示\n", sofname);
   printf("%s -y <パスワード名>                        :パスワードを表示せずクリップボードにコピーする\n", sofname);
-  //printf("%s -l                                       :パスワード一覧を表示\n", sofname);
+  printf("%s -l                                       :パスワード一覧を表示\n", sofname);
   printf("%s -a <パスワード名>                        :パスワードを追加\n", sofname);
   printf("%s -d <パスワード名>                        :パスワードを削除\n", sofname);
   //printf("%s -g <文字数> [risk|secure] <パスワード名> :希望文字数でパスワードをランダムに作成する。risk=英数字のみ(不安)、secure=英数字+特別文字(デフォルト)を使用\n", sofname);
@@ -40,7 +41,19 @@ int main (int argc, char* argv[]) {
   if (argc == 3 && strcmp(argv[1], "-i") == 0) printf("TODO: 初期設定\n");
   else if (argc == 3 && strcmp(argv[1], "-s") == 0) showpass(argv[2]);
   else if (argc == 3 && strcmp(argv[1], "-y") == 0) yankpass(argv[2]);
-  else if (argc == 2 && strcmp(argv[1], "-l") == 0) printf("TODO: 一覧\n");
+  else if (argc == 2 && strcmp(argv[1], "-l") == 0) {
+    char basePath[512];
+    char* homedir = getenv("HOME");
+    if (homedir == NULL) {
+      perror("ホームディレクトリを受取に失敗。");
+      return -1;
+    }
+
+    char* basedir = "/.local/share/sp/";
+    snprintf(basePath, sizeof(basePath), "%s%s", homedir, basedir);
+
+    listpass(basePath, 0);
+  }
   else if (argc == 3 && strcmp(argv[1], "-a") == 0) addpass(argv[2]);
   else if (argc == 3 && strcmp(argv[1], "-d") == 0) delpass(argv[2]);
   else if ((argc == 4 || argc == 5) && strcmp(argv[1], "-g") == 0) printf("TODO: パスワードを創作\n");