diff options
Diffstat (limited to '')
-rw-r--r-- | Makefile | 66 | ||||
-rw-r--r-- | src/passphrase.c | 16 | ||||
-rw-r--r-- | src/passphrase.h | 8 |
3 files changed, 14 insertions, 76 deletions
@@ -1,76 +1,24 @@ -USR_PREFIX = /usr -LOCAL_PREFIX = $(USR_PREFIX)/local -BIN = /bin -SBIN = /sbin -DEV = /dev - -EXTRA_CPP_FLAGS = -# see configurable-definitions - -_LB = $(LOCAL_PREFIX)$(BIN) -_UB = $(USR_PREFIX)$(BIN) -_SB = $(BIN) -_LS = $(LOCAL_PREFIX)$(SBIN) -_US = $(USR_PREFIX)$(SBIN) -_SS = $(SBIN) - -AUTH = pam -TTY_GROUP = tty -DEFAULT_HOME = / -DEFAULT_SH = sh -DEFAULT_SHELL = $(BIN)/$(DEFAULT_SH) -DEFAULT_TERM = dumb -VCS = $(DEV)/vcs -VCSA = $(DEV)/vcsa -PATH = $(_LB):$(_UB):$(_SB) -PATH_ROOT = $(_LS):$(_LB):$(_US):$(_UB):$(_SS):$(_SB) - -auth_none = 0 -auth_crypt = 1 -auth_pam = 2 - -H = \# -VCS_LEN = $(shell vcs="$(VCS)" ; echo "$${$(H)vcs}") -VCSA_LEN = $(shell vcsa="$(VCSA)" ; echo "$${$(H)vcsa}") - -STR_DEFS = TTY_GROUP DEFAULT_HOME DEFAULT_SH DEFAULT_SHELL DEFAULT_TERM PATH PATH_ROOT VCS VCSA -VRB_DEFS = VCS_LEN VCSA_LEN - -STR_CPPFLAGS = $(foreach D, $(STR_DEFS), -D'$(D)="$($(D))"') -VRB_CPPFLAGS = $(foreach D, $(VRB_DEFS), -D'$(D)=$($(D))') -DAUTH=$(auth_$(AUTH)) - OPTIMISE = -Os -CPPFLAGS = $(EXTRA_CPP_FLAGS) $(STR_CPPFLAGS) $(VRB_CPPFLAGS) -CFLAGS = -std=gnu99 -Wall -Wextra -LDFLAGS = -ifeq ($(AUTH),crypt) -LDFLAGS += -lcrypt -endif -ifeq ($(AUTH),pam) -LDFLAGS += -lpam -endif +CPPFLAGS = +CFLAGS = -std=c90 -Wall -Wextra -fPIC +LDFLAGS = -shared CC_FLAGS = $(CPPFLAGS) $(CFLAGS) $(OPTIMISE) LD_FLAGS = $(LDFLAGS) $(CFLAGS) $(OPTIMISE) -SRC = cerberus passphrase quit security login -ifneq ($(AUTH),none) -SRC += auth/$(AUTH) -endif +SRC = passphrase OBJ = $(foreach S, $(SRC), obj/$(S).o) .PHONY: all -all: bin/cerberus +all: bin/libpassphrase.so -bin/cerberus: $(OBJ) +bin/libpassphrase.so: $(OBJ) @mkdir -p bin $(CC) $(LD_FLAGS) -o "$@" $^ - -obj/cerberus.o: $(foreach H, $(SRC), src/$(H).h) src/auth.h -obj/%.o: src/%.c src/%.h src/config.h +obj/%.o: src/%.c src/%.h @mkdir -p "$(shell dirname "$@")" $(CC) $(CC_FLAGS) -o "$@" -c "$<" diff --git a/src/passphrase.c b/src/passphrase.c index 93cfd9f..a3ca289 100644 --- a/src/passphrase.c +++ b/src/passphrase.c @@ -21,8 +21,6 @@ #include <termios.h> #include <unistd.h> -#include "config.h" - #include "passphrase.h" @@ -38,7 +36,7 @@ static struct termios saved_stty; /** * Reads the passphrase from stdin * - * @return The passphrase, should be `free`:ed + * @return The passphrase, should be wiped `free`:ed, `NULL` on error */ char* get_passphrase(void) { @@ -52,11 +50,7 @@ char* get_passphrase(void) int c; if (rc == NULL) - { - perror("malloc"); - sleep(ERROR_SLEEP); - _exit(1); - } + return NULL; /* Read password until EOF or Enter, skip all \0 as that is probably not a part of the passphrase (good luck typing @@ -71,11 +65,7 @@ char* get_passphrase(void) *(rc + len++) = c; if (len == size) if ((rc = realloc(rc, (size <<= 1L) * sizeof(char))) == NULL) - { - perror("realloc"); - sleep(ERROR_SLEEP); - _exit(1); - } + return NULL; } } diff --git a/src/passphrase.h b/src/passphrase.h index 8dbc39d..9a1baa5 100644 --- a/src/passphrase.h +++ b/src/passphrase.h @@ -23,19 +23,19 @@ /** * Reads the passphrase from stdin * - * @return The passphrase, should be `free`:ed + * @return The passphrase, should be wiped `free`:ed, `NULL` on error */ -char* get_passphrase(void); +extern char* get_passphrase(void); /** * Disable echoing and do anything else to the terminal settnings `get_passphrase` requires */ -void disable_echo(void); +extern void disable_echo(void); /** * Undo the actions of `disable_echo` */ -void reenable_echo(void); +extern void reenable_echo(void); #endif |