# 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
#ifndef ADDPASS_H
#define ADDPASS_H
+#include <sys/stat.h>
+
+int mkdir_r(const char *path, mode_t mode);
void addpass(char* file);
#endif
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <string.h>
+#include <errno.h>
+
+#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("初期設定に完了しました。");
+}
--- /dev/null
+#ifndef INITPASS_H
+#define INITPASS_H
+
+void initpass(char* gpgid);
+
+#endif
#include <gpgme.h>
-void initpass(char* gpgid);
+#include "initpass.h"
#include "showpass.h"
#include "yankpass.h"
#include "listpass.h"
void helpme() {
printf("使い方:\n");
- /* printf("%s -i <gpg-id> :GPGと使ってパスワードストレージを初期設定\n", sofname); */
+ printf("%s -i <gpg-id> :GPGと使ってパスワードストレージを初期設定\n", sofname);
printf("%s -s <パスワード名> :パスワードを表示\n", sofname);
printf("%s -y <パスワード名> :パスワードを表示せずクリップボードにコピーする\n", sofname);
printf("%s -l :パスワード一覧を表示\n", sofname);
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) {
buffer[read_bytes] = '\0';
printf("%s", buffer);
}
- puts("");
// 掃除
clean_up(ctx, in, out, gpgfile, gpgpath);