diff options
-rw-r--r-- | libpam/Makefile.am | 4 | ||||
-rw-r--r-- | libpam/pam_handlers.c | 8 | ||||
-rw-r--r-- | libpam_internal/Makefile.am | 8 | ||||
-rw-r--r-- | libpam_internal/include/pam_line.h | 26 | ||||
-rw-r--r-- | libpam_internal/pam_line.c (renamed from libpam/include/pam_assemble_line.h) | 62 | ||||
-rw-r--r-- | modules/pam_env/Makefile.am | 3 | ||||
-rw-r--r-- | modules/pam_env/pam_env.c | 14 |
7 files changed, 71 insertions, 54 deletions
diff --git a/libpam/Makefile.am b/libpam/Makefile.am index e3f4a3bc..505900b5 100644 --- a/libpam/Makefile.am +++ b/libpam/Makefile.am @@ -3,7 +3,7 @@ # AM_CFLAGS = -DDEFAULT_MODULE_PATH=\"$(SECUREDIR)/\" -DLIBPAM_COMPILE \ - -DLOCALEDIR=\"$(localedir)\" \ + -DLOCALEDIR=\"$(localedir)\" -I$(top_srcdir)/libpam_internal/include \ -I$(srcdir)/include $(LIBPRELUDE_CFLAGS) $(ECONF_CFLAGS) \ -DPAM_VERSION=\"$(VERSION)\" -DSYSCONFDIR=\"$(sysconfdir)\" \ $(WARN_CFLAGS) @@ -18,7 +18,7 @@ include_HEADERS = include/security/_pam_compat.h \ include/security/pam_ext.h include/security/pam_modutil.h noinst_HEADERS = pam_prelude.h pam_private.h pam_tokens.h \ - pam_modutil_private.h include/pam_assemble_line.h \ + pam_modutil_private.h \ include/pam_cc_compat.h include/pam_inline.h \ include/test_assert.h diff --git a/libpam/pam_handlers.c b/libpam/pam_handlers.c index 55d5b2fa..7fd6ce84 100644 --- a/libpam/pam_handlers.c +++ b/libpam/pam_handlers.c @@ -18,7 +18,7 @@ #include <fcntl.h> #include <unistd.h> -#include "pam_assemble_line.h" +#include "pam_line.h" #define MODULE_CHUNK 4 #define UNKNOWN_MODULE "<*unknown module*>" @@ -61,14 +61,14 @@ static int _pam_parse_conf_file(pam_handle_t *pamh, FILE *f #endif /* PAM_READ_BOTH_CONFS */ ) { - struct line_buffer buffer; + struct pam_line_buffer buffer; int x; /* read a line from the FILE *f ? */ - _pam_buffer_init(&buffer); + _pam_line_buffer_init(&buffer); /* * read a line from the configuration (FILE *) f */ - while ((x = _pam_assemble_line(f, &buffer, ' ')) > 0) { + while ((x = _pam_line_assemble(f, &buffer, ' ')) > 0) { char *buf = buffer.assembled; char *tok, *nexttok=NULL; const char *this_service; diff --git a/libpam_internal/Makefile.am b/libpam_internal/Makefile.am index 354b63aa..1078cf0f 100644 --- a/libpam_internal/Makefile.am +++ b/libpam_internal/Makefile.am @@ -1,6 +1,10 @@ noinst_LTLIBRARIES = libpam_internal.la -AM_CFLAGS = -I$(top_srcdir)/libpam/include $(WARN_CFLAGS) +noinst_HEADERS = include/pam_line.h + +AM_CFLAGS = -I$(top_srcdir)/libpam_internal/include \ + -I$(top_srcdir)/libpam/include $(WARN_CFLAGS) libpam_internal_la_SOURCES = \ - pam_debug.c + pam_debug.c \ + pam_line.c diff --git a/libpam_internal/include/pam_line.h b/libpam_internal/include/pam_line.h new file mode 100644 index 00000000..70a5c483 --- /dev/null +++ b/libpam_internal/include/pam_line.h @@ -0,0 +1,26 @@ +/* pam_line.h -- routine to parse configuration lines */ + +#ifndef PAM_LINE_H +#define PAM_LINE_H + +#include "pam_inline.h" + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +struct pam_line_buffer { + char *assembled; + char *chunk; + size_t chunk_size; + size_t len; + size_t size; +}; + +void _pam_line_buffer_clear(struct pam_line_buffer *buffer); + +void _pam_line_buffer_init(struct pam_line_buffer *buffer); + +int _pam_line_assemble(FILE *f, struct pam_line_buffer *buffer, char repl); + +#endif /* PAM_LINE_H */ diff --git a/libpam/include/pam_assemble_line.h b/libpam_internal/pam_line.c index 651776e9..044b4d73 100644 --- a/libpam/include/pam_assemble_line.h +++ b/libpam_internal/pam_line.c @@ -1,23 +1,12 @@ -/* pam_assemble_line.h -- routine to parse configuration lines */ +/* pam_line.c -- routine to parse configuration lines */ -#ifndef PAM_ASSEMBLE_LINE_H -#define PAM_ASSEMBLE_LINE_H +#include "config.h" -#include "pam_inline.h" +#include "security/_pam_macros.h" +#include "pam_line.h" -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -struct line_buffer { - char *assembled; - char *chunk; - size_t chunk_size; - size_t len; - size_t size; -}; - -static int _pam_buffer_add(struct line_buffer *buffer, char *start, char *end) +static int _pam_line_buffer_add(struct pam_line_buffer *buffer, char *start, + char *end) { size_t len = end - start; @@ -61,15 +50,15 @@ static int _pam_buffer_add(struct line_buffer *buffer, char *start, char *end) return 0; } -static inline int _pam_buffer_add_eol(struct line_buffer *buffer, - char *start, char *end) +static inline int _pam_line_buffer_add_eol(struct pam_line_buffer *buffer, + char *start, char *end) { if (buffer->assembled != NULL || (*start != '\0' && *start != '\n')) - return _pam_buffer_add(buffer, start, end); + return _pam_line_buffer_add(buffer, start, end); return 0; } -static void _pam_buffer_clear(struct line_buffer *buffer) +void _pam_line_buffer_clear(struct pam_line_buffer *buffer) { pam_overwrite_n(buffer->assembled, buffer->size); _pam_drop(buffer->assembled); @@ -80,26 +69,26 @@ static void _pam_buffer_clear(struct line_buffer *buffer) buffer->size = 0; } -static void _pam_buffer_init(struct line_buffer *buffer) +void _pam_line_buffer_init(struct pam_line_buffer *buffer) { buffer->assembled = NULL; buffer->chunk = NULL; - _pam_buffer_clear(buffer); + _pam_line_buffer_clear(buffer); } -static void _pam_buffer_purge(struct line_buffer *buffer) +static void _pam_line_buffer_purge(struct pam_line_buffer *buffer) { pam_overwrite_n(buffer->chunk, buffer->chunk_size); _pam_drop(buffer->chunk); buffer->chunk_size = 0; } -static void _pam_buffer_shift(struct line_buffer *buffer) +static void _pam_line_buffer_shift(struct pam_line_buffer *buffer) { if (buffer->assembled == NULL) return; - _pam_buffer_purge(buffer); + _pam_line_buffer_purge(buffer); buffer->chunk = buffer->assembled; buffer->chunk_size = buffer->size; @@ -108,7 +97,7 @@ static void _pam_buffer_shift(struct line_buffer *buffer) buffer->len = 0; } -static inline int _pam_buffer_valid(struct line_buffer *buffer) +static inline int _pam_line_buffer_valid(struct pam_line_buffer *buffer) { return buffer->assembled != NULL && *buffer->assembled != '\0'; } @@ -203,8 +192,7 @@ static inline int _pam_str_prepare(char *line, ssize_t len, * * Returns 0 on EOF, 1 on successful line parsing, or -1 on error. */ - -static int _pam_assemble_line(FILE *f, struct line_buffer *buffer, char repl) +int _pam_line_assemble(FILE *f, struct pam_line_buffer *buffer, char repl) { int ret = 0; @@ -212,7 +200,7 @@ static int _pam_assemble_line(FILE *f, struct line_buffer *buffer, char repl) D(("called.")); - _pam_buffer_shift(buffer); + _pam_line_buffer_shift(buffer); for (;;) { char *start, *end; @@ -233,21 +221,21 @@ static int _pam_assemble_line(FILE *f, struct line_buffer *buffer, char repl) eol = _pam_str_prepare(buffer->chunk, n, &start, &end, repl); if (eol) { - if (_pam_buffer_add_eol(buffer, start, end)) { + if (_pam_line_buffer_add_eol(buffer, start, end)) { ret = -1; break; } - if (_pam_buffer_valid(buffer)) { + if (_pam_line_buffer_valid(buffer)) { /* Successfully parsed a line */ ret = 1; break; } /* Start parsing next line */ - _pam_buffer_shift(buffer); + _pam_line_buffer_shift(buffer); ret = 0; } else { /* Configuration line spans across multiple lines in file */ - if (_pam_buffer_add(buffer, start, end)) { + if (_pam_line_buffer_add(buffer, start, end)) { ret = -1; break; } @@ -257,11 +245,9 @@ static int _pam_assemble_line(FILE *f, struct line_buffer *buffer, char repl) } if (ret == 1) - _pam_buffer_purge(buffer); + _pam_line_buffer_purge(buffer); else - _pam_buffer_clear(buffer); + _pam_line_buffer_clear(buffer); return ret; } - -#endif /* PAM_ASSEMBLE_LINE_H */ diff --git a/modules/pam_env/Makefile.am b/modules/pam_env/Makefile.am index cf22e9b5..885c9aa3 100644 --- a/modules/pam_env/Makefile.am +++ b/modules/pam_env/Makefile.am @@ -21,7 +21,8 @@ else secureconfdir = $(SCONFIGDIR) endif -AM_CFLAGS = -I$(top_srcdir)/libpam/include $(WARN_CFLAGS) \ +AM_CFLAGS = -I$(top_srcdir)/libpam_internal/include \ + -I$(top_srcdir)/libpam/include $(WARN_CFLAGS) \ -DSYSCONFDIR=\"$(sysconfdir)\" $(ECONF_CFLAGS) AM_LDFLAGS = -no-undefined -avoid-version -module if HAVE_VERSIONING diff --git a/modules/pam_env/pam_env.c b/modules/pam_env/pam_env.c index 6bece0f8..b0f0b453 100644 --- a/modules/pam_env/pam_env.c +++ b/modules/pam_env/pam_env.c @@ -31,7 +31,7 @@ #include "pam_inline.h" #ifndef USE_ECONF -#include "pam_assemble_line.h" +#include "pam_line.h" #endif /* This little structure makes it easier to keep variables together */ @@ -316,9 +316,9 @@ econf_read_file(const pam_handle_t *pamh, const char *filename, const char *deli static int read_file(const pam_handle_t *pamh, const char*filename, char ***lines) { FILE *conf; - struct line_buffer buffer; + struct pam_line_buffer buffer; - _pam_buffer_init(&buffer); + _pam_line_buffer_init(&buffer); D(("Parsed file name is: %s", filename)); @@ -335,7 +335,7 @@ static int read_file(const pam_handle_t *pamh, const char*filename, char ***line return PAM_BUF_ERR; } (*lines)[i] = 0; - while (_pam_assemble_line(conf, &buffer, '\0') > 0) { + while (_pam_line_assemble(conf, &buffer, '\0') > 0) { char *p = buffer.assembled; char **tmp = NULL; D(("Read line: %s", p)); @@ -344,7 +344,7 @@ static int read_file(const pam_handle_t *pamh, const char*filename, char ***line pam_syslog(pamh, LOG_ERR, "Cannot allocate memory."); (void) fclose(conf); free_string_array(*lines); - _pam_buffer_clear(&buffer); + _pam_line_buffer_clear(&buffer); return PAM_BUF_ERR; } *lines = tmp; @@ -353,14 +353,14 @@ static int read_file(const pam_handle_t *pamh, const char*filename, char ***line pam_syslog(pamh, LOG_ERR, "Cannot allocate memory."); (void) fclose(conf); free_string_array(*lines); - _pam_buffer_clear(&buffer); + _pam_line_buffer_clear(&buffer); return PAM_BUF_ERR; } (*lines)[i] = 0; } (void) fclose(conf); - _pam_buffer_clear(&buffer); + _pam_line_buffer_clear(&buffer); return PAM_SUCCESS; } #endif |