削除の機能性

このコミットが含まれているのは:
守矢諏訪子 2023-11-29 23:25:41 +09:00
コミット a4b3777169
4個のファイルの変更57行の追加7行の削除

ファイルの表示

@ -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

ファイルの表示

@ -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;
}

ファイルの表示

@ -1,6 +1,6 @@
#ifndef DELPASS_H
#define DELPASS_H
void delpass(char* file);
int delpass(char* file);
#endif

17
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");