aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libpam/Makefile.am4
-rw-r--r--libpam/pam_handlers.c8
-rw-r--r--libpam_internal/Makefile.am8
-rw-r--r--libpam_internal/include/pam_line.h26
-rw-r--r--libpam_internal/pam_line.c (renamed from libpam/include/pam_assemble_line.h)62
-rw-r--r--modules/pam_env/Makefile.am3
-rw-r--r--modules/pam_env/pam_env.c14
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