From: 諏訪子 Date: Wed, 29 Nov 2023 15:27:53 +0000 (+0900) Subject: 初期設定 X-Git-Tag: sp-1.0.0~1 X-Git-Url: http://10.10.0.4:5575/?a=commitdiff_plain;h=f9cf87429df6d6c531af27392a557a27564785d4;p=sp.git 初期設定 --- diff --git a/Makefile b/Makefile index 41e2fc4..88af5a5 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ VERSION=1.0.0 # Linux、Haiku、かIllumos = /usr、FreeBSDかOpenBSD = /usr/local、NetBSD = /usr/pkg PREFIX=/usr CC=cc -FILES=main.c showpass.c yankpass.c addpass.c delpass.c listpass.c genpass.c +FILES=main.c showpass.c yankpass.c addpass.c delpass.c listpass.c genpass.c initpass.c CFLAGS=-Wall -Wextra -g LDFLAGS=-lgpgme diff --git a/addpass.h b/addpass.h index 2fdff4f..8aca69d 100644 --- a/addpass.h +++ b/addpass.h @@ -1,6 +1,9 @@ #ifndef ADDPASS_H #define ADDPASS_H +#include + +int mkdir_r(const char *path, mode_t mode); void addpass(char* file); #endif diff --git a/initpass.c b/initpass.c new file mode 100644 index 0000000..6a5679d --- /dev/null +++ b/initpass.c @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include + +#include "initpass.h" +#include "addpass.h" + +void initpass(char* gpgid) { + char* homedir = getenv("HOME"); + if (homedir == NULL) { + perror("ホームディレクトリを受取に失敗。"); + return; + } + + char* basedir = "/.local/share/sp/"; + char dirpath[256]; + snprintf(dirpath, sizeof(dirpath), "%s%s", homedir, basedir); + + if (mkdir_r(dirpath, 0755) != 0 && errno != EEXIST) { + perror("ディレクトリを作成に失敗。"); + return; + } + + char gpgidpath[512]; + snprintf(gpgidpath, sizeof(gpgidpath), "%s/.gpg-id", dirpath); + + struct stat statbuf; + if (stat(gpgidpath, &statbuf) == 0) { + fprintf(stderr, ".gpg-idファイルは既に存在します。\n"); + return; + } + + FILE* gpgidfile = fopen(gpgidpath, "w"); + if (gpgidfile == NULL) { + perror(".gpg-idファイルを書き込めません。"); + fclose(gpgidfile); + return; + } + + if (fputs(gpgid, gpgidfile) == EOF) { + fprintf(stderr, ".gpg-idファイルへの書き込みに失敗しました。\n"); + fclose(gpgidfile); + return; + } + + fclose(gpgidfile); + printf("初期設定に完了しました。"); +} diff --git a/initpass.h b/initpass.h new file mode 100644 index 0000000..38cd2d5 --- /dev/null +++ b/initpass.h @@ -0,0 +1,6 @@ +#ifndef INITPASS_H +#define INITPASS_H + +void initpass(char* gpgid); + +#endif diff --git a/main.c b/main.c index d2f8682..719a0ee 100644 --- a/main.c +++ b/main.c @@ -5,7 +5,7 @@ #include -void initpass(char* gpgid); +#include "initpass.h" #include "showpass.h" #include "yankpass.h" #include "listpass.h" @@ -20,7 +20,7 @@ const char* version = "1.0.0"; void helpme() { printf("使い方:\n"); - /* printf("%s -i :GPGと使ってパスワードストレージを初期設定\n", sofname); */ + printf("%s -i :GPGと使ってパスワードストレージを初期設定\n", sofname); printf("%s -s <パスワード名> :パスワードを表示\n", sofname); printf("%s -y <パスワード名> :パスワードを表示せずクリップボードにコピーする\n", sofname); printf("%s -l :パスワード一覧を表示\n", sofname); @@ -38,7 +38,7 @@ int main (int argc, char* argv[]) { return 0; } - if (argc == 3 && strcmp(argv[1], "-i") == 0) printf("TODO: 初期設定\n"); + if (argc == 3 && strcmp(argv[1], "-i") == 0) initpass(argv[2]); 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) { diff --git a/showpass.c b/showpass.c index e9a01d4..9cebc97 100644 --- a/showpass.c +++ b/showpass.c @@ -87,7 +87,6 @@ void showpass(char* file) { buffer[read_bytes] = '\0'; printf("%s", buffer); } - puts(""); // 掃除 clean_up(ctx, in, out, gpgfile, gpgpath);