1SHELL = /bin/sh
2
3BASENAME = oslogin
4NAME = google-compute-engine-$(BASENAME)
5MAJOR = 1
6MINOR = 5
7REVISION = 3
8
9LIBNSS_CACHE_OSLOGIN = libnss_cache_$(BASENAME)
10LIBNSS_CACHE_OSLOGIN_NAME = libnss_cache_$(NAME)-$(MAJOR).$(MINOR).$(REVISION).so
11LIBNSS_CACHE_OSLOGIN_SONAME = $(LIBNSS_CACHE_OSLOGIN).so.2
12NSS_LIBRARY_NAME = libnss_$(NAME)-$(MAJOR).$(MINOR).$(REVISION).so
13NSS_LIBRARY_SONAME = libnss_$(BASENAME).so.2
14NSS_INSTALL_PATH = /lib
15PAM_INSTALL_PATH = /lib/security
16AUTHKEYS_INSTALL_PATH = /usr/bin
17
18JSON_INCLUDE_PATH = /usr/include/json-c
19INCLUDE_FLAGS = -I$(JSON_INCLUDE_PATH)
20
21CXX ?= g++
22CXXFLAGS += -fPIC# -Wall
23CC ?= gcc
24PAMFLAGS = $(LDFLAGS) $(INCLUDE_FLAGS) -shared
25NSSFLAGS = $(LDFLAGS) $(INCLUDE_FLAGS) -shared -Wl,-soname,$(NSS_LIBRARY_SONAME)
26LIBNSSFLAGS = $(LDFLAGS) -Wall -Wstrict-prototypes -fPIC -g
27LIBNSS_SO_FLAGS = $(LIBNSSFLAGS) -shared -Wl,-soname,$(LIBNSS_CACHE_OSLOGIN_SONAME)
28
29# UTILS
30UTILS_DIR = utils
31UTILS_SRC = $(UTILS_DIR)/$(BASENAME)_utils.cc
32UTILS = $(UTILS_DIR)/$(BASENAME)_utils.o
33
34# AUTHORIZED KEYS
35AUTHKEYS_DIR = authorized_keys
36AUTHKEYS_SRC = $(AUTHKEYS_DIR)/authorized_keys.cc
37AUTHKEYS_BIN = google_authorized_keys
38
39# NSS
40NSS = nss_$(BASENAME)
41NSS_DIR = nss_module
42NSS_SRC = $(NSS_DIR)/$(NSS).cc
43
44# NSS CACHE
45NSS_CACHE = nss_cache
46NSS_CACHE_DIR = nss_cache
47NSS_CACHE_BIN = google_$(BASENAME)_nss_cache
48NSS_CACHE_SRC = $(NSS_CACHE_DIR)/$(NSS_CACHE).cc
49
50# LIBNSS OSLOGIN CACHE
51LIBNSS_CACHE_OSLOGIN_DIR = $(LIBNSS_CACHE_OSLOGIN)
52LIBNSS_CACHE = nss_cache_$(BASENAME)
53LIBNSS_CACHE_SRC = $(LIBNSS_CACHE_OSLOGIN_DIR)/$(LIBNSS_CACHE).c
54LIBNSS_CACHE_OBJ = $(LIBNSS_CACHE_OSLOGIN_DIR)/$(LIBNSS_CACHE).o
55LIBNSS_COMPAT = compat/getpwent_r
56LIBNSS_COMPAT_SRC = $(LIBNSS_CACHE_OSLOGIN_DIR)/$(LIBNSS_COMPAT).c
57LIBNSS_COMPAT_OBJ = $(LIBNSS_CACHE_OSLOGIN_DIR)/$(LIBNSS_COMPAT).o
58
59# PAM
60PAM = pam_$(BASENAME)
61PAM_DIR = pam_module
62PAM_ADMIN = $(PAM)_admin
63PAM_ADMIN_SRC = $(PAM_DIR)/$(PAM_ADMIN).cc
64PAM_ADMIN_OBJ = $(PAM_DIR)/$(PAM_ADMIN).o
65PAM_ADMIN_MOD = $(PAM_ADMIN).so
66PAM_LOGIN = $(PAM)_login
67PAM_LOGIN_SRC = $(PAM_DIR)/$(PAM_LOGIN).cc
68PAM_LOGIN_OBJ = $(PAM_DIR)/$(PAM_LOGIN).o
69PAM_LOGIN_MOD = $(PAM_LOGIN).so
70
71# HELPER SCRIPTS
72BIN_DIR = bin
73OSLOGIN_HELPER = $(BIN_DIR)/google_oslogin_control
74BIN_INSTALL_PATH = /usr/bin
75
76# SELINUX POLICY
77INSTALL_SELINUX =
78POLICY_DIR = policy
79SELINUX_INSTALL_NAME = oslogin.pp
80SELINUX_MODULE = $(POLICY_DIR)/$(SELINUX_INSTALL_NAME)
81SELINUX_INSTALL_PATH = /usr/share/selinux/packages
82
83LIBS = -lcurl -ljson-c
84PAM_LIBS = -lpam $(LIBS)
85
86ifdef INSTALL_SELINUX
87all: $(NSS) $(NSS_CACHE_BIN) $(LIBNSS_CACHE_OSLOGIN_NAME) $(PAM) $(AUTHKEYS_BIN)
88else
89all: $(NSS) $(NSS_CACHE_BIN) $(LIBNSS_CACHE_OSLOGIN_NAME) $(PAM) $(AUTHKEYS_BIN)
90endif
91
92$(NSS): $(NSS_LIBRARY_SOURCE) $(UTILS)
93	$(CXX) $(CXXFLAGS) $(NSSFLAGS) -o $(NSS_LIBRARY_NAME) \
94	$(NSS_SRC) $(UTILS) $(LIBS)
95
96$(NSS_CACHE_BIN): $(NSS_CACHE_SRC) $(UTILS_SRC)
97	$(CXX) $(CXXFLAGS) $(LDFLAGS) $(INCLUDE_FLAGS) -o $(NSS_CACHE_BIN) $(NSS_CACHE_SRC) $(UTILS_SRC) $(LIBS)
98
99$(LIBNSS_CACHE_OSLOGIN_NAME): $(LIBNSS_CACHE_OBJ) $(LIBNSS_COMPAT_OBJ)
100	$(CXX) $(LIBNSS_SO_FLAGS) -o $(LIBNSS_CACHE_OSLOGIN_NAME) $(LIBNSS_CACHE_OBJ) $(LIBNSS_COMPAT_OBJ)
101
102$(LIBNSS_CACHE_OBJ): $(LIBNSS_CACHE_SRC)
103	$(CC) $(LIBNSSFLAGS) -c -o $(LIBNSS_CACHE_OBJ) $(LIBNSS_CACHE_SRC)
104
105$(LIBNSS_COMPAT_OBJ): $(LIBNSS_COMPAT_SRC)
106	$(CC) $(LIBNSSFLAGS) -c -o $(LIBNSS_COMPAT_OBJ) $(LIBNSS_COMPAT_SRC)
107
108$(PAM): $(PAM_ADMIN_MOD) $(PAM_LOGIN_MOD)
109
110$(PAM_LOGIN_MOD): $(PAM_LOGIN_OBJ) $(UTILS)
111	$(CXX) $(PAMFLAGS) -o $(PAM_LOGIN_MOD) $(PAM_LOGIN_OBJ) $(UTILS) $(PAM_LIBS)
112
113$(PAM_ADMIN_MOD): $(PAM_ADMIN_OBJ) $(UTILS)
114	$(CXX) $(PAMFLAGS) -o $(PAM_ADMIN_MOD) $(PAM_ADMIN_OBJ) $(UTILS) $(PAM_LIBS)
115
116$(PAM_LOGIN_OBJ): $(PAM_LOGIN_SRC)
117	$(CXX) $(CXXFLAGS) -c $(PAM_LOGIN_SRC) -o $(PAM_LOGIN_OBJ)
118
119$(PAM_ADMIN_OBJ): $(PAM_ADMIN_SRC)
120	$(CXX) $(CXXFLAGS) -c $(PAM_ADMIN_SRC) -o $(PAM_ADMIN_OBJ)
121
122$(AUTHKEYS_BIN): $(AUTHKEYS_SRC) $(UTILS_SRC)
123	$(CXX) $(CXXFLAGS) $(LDFLAGS) $(INCLUDE_FLAGS) -o $(AUTHKEYS_BIN) $(AUTHKEYS_SRC) $(UTILS_SRC) $(LIBS)
124
125$(UTILS): $(UTILS_SRC)
126	$(CXX) $(CXXFLAGS) $(INCLUDE_FLAGS) -c $(UTILS_SRC) -o $(UTILS)
127
128install: $(NSS_LIBRARY_NAME) $(LIBNSS_OSLOGIN_CACHE_NAME) $(PAM_ADMIN_MOD) $(PAM_LOGIN_MOD) $(AUTHKEYS_BIN) $(NSS_CACHE_BIN)
129	mkdir -p $(DESTDIR)$(PREFIX)/$(NSS_INSTALL_PATH)
130	mkdir -p $(DESTDIR)$(PREFIX)/$(PAM_INSTALL_PATH)
131	mkdir -p $(DESTDIR)$(PREFIX)/$(AUTHKEYS_INSTALL_PATH)
132	mkdir -p $(DESTDIR)$(PREFIX)/$(BIN_INSTALL_PATH)
133	install -m 0644 $(LIBNSS_CACHE_OSLOGIN_NAME) $(DESTDIR)$(PREFIX)/$(NSS_INSTALL_PATH)
134	install -m 0644 $(NSS_LIBRARY_NAME) $(DESTDIR)$(PREFIX)/$(NSS_INSTALL_PATH)
135	install -m 0644 $(PAM_ADMIN_MOD) $(PAM_LOGIN_MOD) $(DESTDIR)$(PREFIX)/$(PAM_INSTALL_PATH)
136	install -m 0755 $(AUTHKEYS_BIN) $(DESTDIR)$(PREFIX)/$(AUTHKEYS_INSTALL_PATH)
137	install -m 0755 $(OSLOGIN_HELPER) $(DESTDIR)$(PREFIX)/$(BIN_INSTALL_PATH)
138	install -m 0755 $(NSS_CACHE_BIN) $(DESTDIR)$(PREFIX)/$(BIN_INSTALL_PATH)
139ifdef MAKE_LINKS
140	ln -sf $(LIBNSS_CACHE_OSLOGIN_NAME) $(DESTDIR)$(PREFIX)/$(NSS_INSTALL_PATH)/$(LIBNSS_CACHE_OSLOGIN_SONAME)
141	ln -sf $(NSS_LIBRARY_NAME) $(DESTDIR)$(PREFIX)/$(NSS_INSTALL_PATH)/$(NSS_LIBRARY_SONAME)
142endif
143ifdef INSTALL_SELINUX
144	mkdir -p $(DESTDIR)$(PREFIX)/$(SELINUX_INSTALL_PATH)
145	install -T -m 0644 $(SELINUX_MODULE) $(DESTDIR)$(PREFIX)/$(SELINUX_INSTALL_PATH)/$(SELINUX_INSTALL_NAME)
146endif
147
148uninstall:
149	rm -f $(DESTDIR)$(PREFIX)/$(NSS_INSTALL_PATH)/$(LIBNSS_CACHE_OSLOGIN_NAME)
150	rm -f $(DESTDIR)$(PREFIX)/$(NSS_INSTALL_PATH)/$(NSS_LIBRARY_NAME)
151	rm -f $(DESTDIR)$(PREFIX)/$(PAM_INSTALL_PATH)/$(PAM_ADMIN_MOD)
152	rm -f $(DESTDIR)$(PREFIX)/$(PAM_INSTALL_PATH)/$(PAM_LOGIN_MOD)
153	rm -f $(DESTDIR)$(PREFIX)/$(AUTHKEYS_INSTALL_PATH)/$(AUTHKEYS_BIN)
154	rm -f $(DESTDIR)$(PREFIX)/$(BIN_INSTALL_PATH)/$(OSLOGIN_HELPER)
155	rm -f $(DESTDIR)$(PREFIX)/$(BIN_INSTALL_PATH)/$(NSS_CACHE_BIN)
156clean:
157	rm -f $(UTILS) $(NSS_LIBRARY_NAME) $(LIBNSS_CACHE_OSLOGIN_NAME) $(LIBNSS_CACHE_OBJ) $(LIBNSS_COMPAT_OBJ) $(PAM_ADMIN_OBJ) $(PAM_ADMIN_MOD) $(PAM_LOGIN_OBJ) $(PAM_LOGIN_MOD) $(AUTHKEYS_BIN) $(NSS_CACHE_BIN)
158
159