diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/exec-cmd.h | 14 | ||||
| -rw-r--r-- | src/handerror.c | 2 | ||||
| -rw-r--r-- | src/handerror.h | 2 | ||||
| -rw-r--r-- | src/implementation.c | 11 | ||||
| -rw-r--r-- | src/implementation.h | 1 | ||||
| -rw-r--r-- | src/main.c | 193 | 
6 files changed, 112 insertions, 111 deletions
| diff --git a/src/exec-cmd.h b/src/exec-cmd.h new file mode 100644 index 0000000..2bd8000 --- /dev/null +++ b/src/exec-cmd.h @@ -0,0 +1,14 @@ +#ifndef LPASS_EXECCMD_H +#define LPASS_EXECCMD_H + +void cmd_showtree(int argc, char *argv[]); +void cmd_init(int argc, char *argv[]); +void cmd_insert(int argc, char *argv[]); +void cmd_edit(int argc, char *argv[]); +void cmd_generate(int argc, char *argv[]); +void cmd_remove(int argc, char *argv[]); +void cmd_move(int argc, char *argv[]); +void cmd_help(int argc, char *argv[]); +void cmd_version(int argc, char *argv[]); + +#endif /* LPASS_EXECCMD_H */ diff --git a/src/handerror.c b/src/handerror.c index 35e8f28..218619d 100644 --- a/src/handerror.c +++ b/src/handerror.c @@ -9,7 +9,7 @@ void callError(int num)  	exit(3);  } -void printError(char *text) +void printError(const char *text)  {  	fprintf(stderr, "%s", text);  	exit(4); diff --git a/src/handerror.h b/src/handerror.h index 6f75c7b..09c5106 100644 --- a/src/handerror.h +++ b/src/handerror.h @@ -3,6 +3,6 @@  void easyFork(char *name, char *arguments[]);  void callError(int num); -void printError(char *text); +void printError(const char *text);  #endif
\ No newline at end of file diff --git a/src/implementation.c b/src/implementation.c index 863b755..9b93704 100644 --- a/src/implementation.c +++ b/src/implementation.c @@ -216,17 +216,6 @@ char *generatePassword(char *dest, int amount)  	return dest;  } -unsigned long hash(char *str) -{ -    unsigned long hash = 5381; -    char c; - -    while( (c = *str++) ) -        hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ - -    return hash; -} -  static void clearStdinBuff()  {  	char garbage; diff --git a/src/implementation.h b/src/implementation.h index ba436a7..52f4dc7 100644 --- a/src/implementation.h +++ b/src/implementation.h @@ -11,7 +11,6 @@ void insertPass(char *add_path, char *password, int flag_copy);  char *typePass(char *text, char *dest, int minlen, int maxlen);  int userEnterPassword(int minlen, int maxlen, char *path_insert, int flag_echo, int flag_copy);  char *generatePassword(char *dest, int amount); -unsigned long hash(char *str);  int getOverwriteAnswer(char *path);  #endif
\ No newline at end of file @@ -16,6 +16,7 @@  #include "easydir.h"  #include "handerror.h"  #include "implementation.h" +#include "exec-cmd.h"  #define VERSION "1.0c"  #define DATE_RELEASE "14 January, 2021" @@ -30,26 +31,22 @@  #define TREE_OUTPUT_FILE ".tree"  #define TEXTEDITOR_FILE ".text-editor" -#define HASH_INIT 6385337657 -#define HASH_HELP 6385292014 -#define HASH_VERSION 229486327000139 -#define HASH_EDIT 6385183019 -#define HASH_MV 5863624 -#define HASH_MOVE 249844339311324255 -#define HASH_GENERATE 7572409341523952 -#define HASH_INSERT 6953633055386 -#define HASH_RM 5863780 -#define HASH_REMOVE 6953974396019 -#define HASH_DELETE 6953426453624 -#define WITHOUT_ARGUMENTS 1 - -#define STR_SHOWTREEUSE "Use: lpass [-c] [passname]\n" -#define STR_INITUSE "Use: lpass init gpg-key\n" -#define STR_INSERTUSE "Use: lpass insert [-ecf] passname\n" -#define STR_EDITUSE "Use: lpass edit [-t=text-editor] passname\n" -#define STR_GENERATEUSE "Use: lpass generate [-l=pass-length] [-f] passname\n" -#define STR_REMOVEUSE "Use: lpass remove/rm/delete passname\n" -#define STR_MOVEUSE "Use: lpass move/mv [-f] old-path new-path\n" +struct cmd_struct { +	const char *cmd; +	void (*func)(int, char **); +}; + +static struct cmd_struct commands[] = { +	{ "init", cmd_init }, +	{ "insert", cmd_insert }, +	{ "edit", cmd_edit }, +	{ "generate", cmd_generate }, +	{ "rm", cmd_remove }, +	{ "mv", cmd_move }, +	{ "help", cmd_help }, +	{ "version", cmd_version }, +	{ NULL, NULL } +};  // == global var ==   char *gPath_rootdir = NULL; // /home/[username]/.lockpassword/ @@ -74,10 +71,11 @@ static void globalSplitPath(char *source)  	#endif  } -static void cmd_init(int argc, char *argv[]) +void cmd_init(int argc, char *argv[])  { +	const char description[] = "Use: lpass init gpg-key\n";  	char *gpg_key = argv[2]; -	if(gpg_key == NULL) printError(STR_INITUSE); +	if(gpg_key == NULL) printError(description);  	// create main directory:  	int len_init_storage = strlen(gPath_rootdir) + strlen(GPGKEY_FILE) + 1; // +1 for '\0' @@ -102,8 +100,9 @@ static void cmd_init(int argc, char *argv[])  	printf("LockPassword initialized for %s\n", gpg_key);  } -static void cmd_edit(int argc, char *argv[]) +void cmd_edit(int argc, char *argv[])  { +	const char description[] = "Use: lpass edit [-t=text-editor] passname\n";  	const struct option long_options[] = {          {"text-editor", required_argument, NULL, 't'},          {NULL, 0, NULL, 0} @@ -122,7 +121,7 @@ static void cmd_edit(int argc, char *argv[])  				printf("You changed text editor to %s\n", optarg);      			break;      		} -    		default: printError(STR_EDITUSE); +    		default: printError(description);      	}      } @@ -133,7 +132,7 @@ static void cmd_edit(int argc, char *argv[])      #endif      char *path_to_password; -    if(argv[optind] == NULL) printError(STR_EDITUSE); +    if(argv[optind] == NULL) printError(description);      else path_to_password = argv[optind];  	checkForbiddenPaths(path_to_password); @@ -191,12 +190,13 @@ static void cmd_edit(int argc, char *argv[])  	free(public_gpgkey);  } -static void cmd_move(int argc, char *argv[]) +void cmd_move(int argc, char *argv[])  {  	/* we have a two situation:  	1) mv file file  	2) mv file directory */ +	const char description[] = "Use: lpass mv [-f] old-path new-path\n";  	const struct option long_options[] = {          {"force", no_argument, NULL, 'f'},          {NULL, 0, NULL, 0} @@ -206,7 +206,7 @@ static void cmd_move(int argc, char *argv[])      while((result = getopt_long(argc, argv, "f", long_options, NULL)) != -1) {      	switch(result) {      		case 'f': { flag_force = 1; break; } -    		default: printError(STR_MOVEUSE); +    		default: printError(description);      	}      } @@ -217,8 +217,8 @@ static void cmd_move(int argc, char *argv[])      	if(argv[optind] != NULL) printf("new-path: %s\n", argv[optind+1]);      #endif -    if(argv[optind] == NULL) printError(STR_MOVEUSE); -    if(argv[optind+1] == NULL) printError(STR_MOVEUSE); +    if(argv[optind] == NULL) printError(description); +    if(argv[optind+1] == NULL) printError(description);  	char *old_path = argv[optind];  	checkForbiddenPaths(old_path); globalSplitPath(old_path); @@ -248,9 +248,11 @@ static void cmd_move(int argc, char *argv[])  	free(old_path_subdir); free(old_path_gpg);  } -static void cmd_generate(int argc, char *argv[]) +void cmd_generate(int argc, char *argv[])  { -	int pass_length = STANDARD_AMOUNT_GENERATE_SYMBOLS, flag_force = 0, flag_copy = 0, result; +	const char description[] = "Use: lpass generate [-l=pass-length] [-f] passname\n"; +	int pass_length = STANDARD_AMOUNT_GENERATE_SYMBOLS; +	int flag_force = 0, flag_copy = 0, result;  	const struct option long_options[] = {          {"length", required_argument, NULL, 'l'},          {"force", no_argument, NULL, 'f'}, @@ -264,7 +266,7 @@ static void cmd_generate(int argc, char *argv[])      		case 'l': { pass_length = atoi(optarg); break; }      		case 'f': { flag_force = 1; break; }      		case 'c': { flag_copy = 1; break; } -    		default: printError(STR_GENERATEUSE); +    		default: printError(description);      	}      } @@ -275,7 +277,7 @@ static void cmd_generate(int argc, char *argv[])      #endif      char *path_to_password; -    if(argv[optind] == NULL) printError(STR_GENERATEUSE); +    if(argv[optind] == NULL) printError(description);      else path_to_password = argv[optind];      if(pass_length < MINLEN_PASSWORD || pass_length > MAXLEN_PASSWORD) @@ -300,8 +302,9 @@ static void cmd_generate(int argc, char *argv[])  	printf("Password added successfully for %s\n", path_to_password);  } -static void cmd_insert(int argc, char *argv[]) +void cmd_insert(int argc, char *argv[])  { +	const char description[] = "Use: lpass insert [-ecf] passname\n";  	int flag_echo = 0, flag_force = 0, flag_copy = 0, result;  	const struct option long_options[] = {          {"echo", no_argument, NULL, 'e'}, @@ -315,7 +318,7 @@ static void cmd_insert(int argc, char *argv[])      		case 'e': { flag_echo = 1; break; }      		case 'f': { flag_force = 1; break; }      		case 'c': { flag_copy = 1; break; } -    		default: printError(STR_INSERTUSE); +    		default: printError(description);      	}      } @@ -326,7 +329,7 @@ static void cmd_insert(int argc, char *argv[])      #endif      char *path_to_password; -    if(argv[optind] == NULL) printError(STR_INSERTUSE); +    if(argv[optind] == NULL) printError(description);      else path_to_password = argv[optind];  	checkForbiddenPaths(path_to_password); @@ -346,11 +349,12 @@ static void cmd_insert(int argc, char *argv[])  		printf("Passwords do not match\n");  } -static void cmd_remove(int argc, char *argv[]) +void cmd_remove(int argc, char *argv[])  { +	const char description[] = "Use: lpass rm passname\n";  	char *path_to_password = argv[2];  	if(path_to_password == NULL) -		printError(STR_REMOVEUSE); +		printError(description);  	checkForbiddenPaths(path_to_password);  	globalSplitPath(path_to_password); @@ -362,8 +366,9 @@ static void cmd_remove(int argc, char *argv[])  		deleteEmptyDir(gPath_subdir);  } -static void cmd_showtree(int argc, char *argv[]) +void cmd_showtree(int argc, char *argv[])  { +	const char description[] = "Use: lpass [-c] [passname]\n";  	int flag_copy = 0, result;  	char *path;  	const struct option long_options[] = { @@ -374,7 +379,7 @@ static void cmd_showtree(int argc, char *argv[])      while((result = getopt_long(argc, argv, "c", long_options, NULL)) != -1) {      	switch(result) {      		case 'c': { flag_copy = 1; break; } -    		default: printError(STR_SHOWTREEUSE); +    		default: printError(description);      	}      } @@ -384,7 +389,7 @@ static void cmd_showtree(int argc, char *argv[])      #endif      if(argv[optind] == NULL) { -    	if(flag_copy) printError(STR_SHOWTREEUSE); +    	if(flag_copy) printError(description);      	else {      		path = (char *) malloc(sizeof(char) * 2);      		strcpy(path, "."); @@ -427,50 +432,55 @@ static void cmd_showtree(int argc, char *argv[])  	if(argv[1] == NULL) free(path);  } -static void cmd_help() +void cmd_help(int argc, char *argv[])  { -	printf("Synopsis:\n\tlpass [command] [arguments] ...\n"); - -	printf("Commands:\n\tinit gpg-key\n"); -	printf("\t\tInitialize the password manager using the passed gpg-key.\n"); - -	printf("\tinsert [-e, --echo] [-c, --copy] [-f, --force] passname\n"); -	printf("\t\tAdd the specified passname to the password manager.\n"); - -	printf("\tedit [-t, --text-editor=text-editor] passname\n"); -	printf("\t\tOpen the specified passname in a text editor, waiting for changes.\n"); - -	printf("\tgenerate [-l, --length=pass-length] [-c, --copy] [-f, --force] passname\n"); -	printf("\t\tGenerate a random password and write it in passname.\n"); - -	printf("\tmv/move [-f, --force] old-path new-path\n"); -	printf("\t\tMove/rename old-path to new-path.\n"); - -	printf("\trm/remove/delete passname\n"); -	printf("\t\tRemove the passname you specified from the password manager.\n"); - -	printf("\thelp\n"); -	printf("\t\tPrint help information about commands and the application itself.\n"); - -	printf("\tversion\n"); -	printf("\t\tPrint version information.\n"); +	printf("Synopsis:\n" +		"\tlpass [command] [arguments] ...\n" + +		"Commands:\n" +		"\tinit gpg-key\n" +		"\t\tInitialize the password manager using the passed gpg-key.\n" +		"\tinsert [-e, --echo] [-c, --copy] [-f, --force] passname\n" +		"\t\tAdd the specified passname to the password manager.\n" +		"\tedit [-t, --text-editor=text-editor] passname\n" +		"\t\tOpen the specified passname in a text editor, waiting for changes.\n" +		"\tgenerate [-l, --length=pass-length] [-c, --copy] [-f, --force] passname\n" +		"\t\tGenerate a random password and write it in passname.\n" +		"\tmv [-f, --force] old-path new-path\n" +		"\t\tMove/rename old-path to new-path.\n" +		"\trm passname\n" +		"\t\tRemove the passname you specified from the password manager.\n" +		"\thelp\n" +		"\t\tPrint help information about commands and the application itself.\n" +		"\tversion\n" +		"\t\tPrint version information.\n" + +		"\nMore information may be found in the lpass(1) man page.\n"); +} -	printf("\nMore information may be found in the lpass(1) man page.\n"); +void cmd_version(int argc, char *argv[]) +{ +	printf("LockPassword v%s\n" +		"Release date: %s\n\n" +		"Code was written by Joursoir\n" +		"This is free and unencumbered software released into the public domain.\n\n", +		VERSION, DATE_RELEASE);  } -static void cmd_version() +struct cmd_struct *get_cmd(const char *name)  { -	printf("LockPassword v%s\n", VERSION); -	printf("Release date: %s\n\n", DATE_RELEASE); -	printf("Code was written by Joursoir\n"); -	printf("This is free and unencumbered software released into the public domain.\n\n"); +	struct cmd_struct *ptr; +	for(ptr = commands; ptr->cmd; ptr++) { +		if(strcmp(name, ptr->cmd) == 0) +			return ptr; +	} +	return NULL;  }  int main(int argc, char *argv[])  { -	if(!isatty(0)) { // stdin +	if(!isatty(STDIN_FILENO))  		printError("lpass: Please, use a terminal to run this application\n"); -	}  	/* init global path to root directory */  	int len_rootdir = strlen(getenv("HOME")) + strlen(LOCKPASS_DIR) + 1; // +1 for '\0' @@ -480,30 +490,19 @@ int main(int argc, char *argv[])  	strcat(gPath_rootdir, LOCKPASS_DIR);  	/* end init */ -	unsigned long ihash = WITHOUT_ARGUMENTS; -	if(argv[1] != NULL) { -		ihash = hash(argv[1]); -	} +	char *cmd = (argv[1] != NULL) ? argv[1] : ""; +	struct cmd_struct *ptr; -	if(chdir(gPath_rootdir) != 0 && ihash != HASH_INIT) { -		printf("Before starting work, you must initialize LockPassword\n"); -		printError(STR_INITUSE); -	} +	int dir = chdir(gPath_rootdir); -	switch(ihash) -	{ -		case HASH_INIT: { cmd_init(argc, argv); break; } -		case HASH_EDIT: { cmd_edit(argc, argv); break; } -		case HASH_MV: -		case HASH_MOVE: { cmd_move(argc, argv); break; } -		case HASH_GENERATE: { cmd_generate(argc, argv); break; } -		case HASH_INSERT: { cmd_insert(argc, argv); break; } -		case HASH_RM: -		case HASH_REMOVE: -		case HASH_DELETE: { cmd_remove(argc, argv); break; } -		case HASH_HELP: { cmd_help(); break; } -		case HASH_VERSION: { cmd_version(); break; } -		default: { cmd_showtree(argc, argv); break; } +	if((ptr = get_cmd(cmd))) +		ptr->func(argc, argv); +	else { +		if(dir != 0) { +			printf("Before starting work, you must initialize LockPassword\n"); +			return 1; +		} +		cmd_showtree(argc, argv);  	}  	if(gPath_subdir != NULL) { | 
