From a4b37771691fef10f9d09c4e792cec50d4e563a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AB=8F=E8=A8=AA=E5=AD=90?= Date: Wed, 29 Nov 2023 23:25:41 +0900 Subject: [PATCH] =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=81=AE=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 +++++++++++++++++++++ delpass.c | 24 ++++++++++++++++++++---- delpass.h | 2 +- main.c | 17 +++++++++++++++-- 4 files changed, 57 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index efebab6..6f8f48c 100644 --- 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 diff --git a/delpass.c b/delpass.c index 406bbbc..73e5509 100644 --- 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; } diff --git a/delpass.h b/delpass.h index db43a4e..58f4afc 100644 --- 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 2a24e43..e0d80f5 100644 --- a/main.c +++ b/main.c @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -22,7 +23,7 @@ void helpme() { //printf("%s -i :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");