On 12/05/2014 04:22 PM, Tyler Hicks wrote: > This patch creates a private API in libapparmor in which upstream > provides no guarantees in regards to ABI stability. > > A new header file, <sys/apparmor_private.h>, is created. The "_aa" > prefix will be used for symbols belonging to the private API. > > To kick things off, a library friendly version of is_blacklisted() is > moved into libapparmor. > > The purpose of a private libapparmor API is to prevent duplicated code > between the parser and libapparmor. This becomes an issue as we prepare > to move chunks of the parser into libapparmor. > > Signed-off-by: Tyler Hicks <[email protected]> Acked-by: John Johansen <[email protected]>
though I agree with Christian that we are going to want a public version of the is_blacklisted() api. But that can come in another patch > --- > libraries/libapparmor/include/sys/Makefile.am | 2 +- > .../libapparmor/include/sys/apparmor_private.h | 26 +++++++++ > libraries/libapparmor/src/Makefile.am | 2 +- > libraries/libapparmor/src/libapparmor.map | 7 +++ > libraries/libapparmor/src/private.c | 66 > ++++++++++++++++++++++ > parser/parser_misc.c | 50 ++-------------- > 6 files changed, 107 insertions(+), 46 deletions(-) > create mode 100644 libraries/libapparmor/include/sys/apparmor_private.h > create mode 100644 libraries/libapparmor/src/private.c > > diff --git a/libraries/libapparmor/include/sys/Makefile.am > b/libraries/libapparmor/include/sys/Makefile.am > index 38efc3e..2c12780 100644 > --- a/libraries/libapparmor/include/sys/Makefile.am > +++ b/libraries/libapparmor/include/sys/Makefile.am > @@ -1,3 +1,3 @@ > > apparmor_hdrdir = $(includedir)/sys > -apparmor_hdr_HEADERS = apparmor.h > +apparmor_hdr_HEADERS = apparmor.h apparmor_private.h > diff --git a/libraries/libapparmor/include/sys/apparmor_private.h > b/libraries/libapparmor/include/sys/apparmor_private.h > new file mode 100644 > index 0000000..6138b2c > --- /dev/null > +++ b/libraries/libapparmor/include/sys/apparmor_private.h > @@ -0,0 +1,26 @@ > +/* > + * Copyright 2014 Canonical Ltd. > + * > + * The libapparmor library is licensed under the terms of the GNU > + * Lesser General Public License, version 2.1. Please see the file > + * COPYING.LGPL. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#ifndef _SYS_APPARMOR_PRIVATE_H > +#define _SYS_APPARMOR_PRIVATE_H 1 > + > +__BEGIN_DECLS > + > +int _aa_is_blacklisted(const char *name, const char *path); > + > +__END_DECLS > + > +#endif /* sys/apparmor_private.h */ > diff --git a/libraries/libapparmor/src/Makefile.am > b/libraries/libapparmor/src/Makefile.am > index a234264..2a7f600 100644 > --- a/libraries/libapparmor/src/Makefile.am > +++ b/libraries/libapparmor/src/Makefile.am > @@ -48,7 +48,7 @@ af_protos.h: /usr/include/netinet/in.h > lib_LTLIBRARIES = libapparmor.la > noinst_HEADERS = grammar.h parser.h scanner.h af_protos.h > > -libapparmor_la_SOURCES = grammar.y libaalogparse.c kernel_interface.c > scanner.c > +libapparmor_la_SOURCES = grammar.y libaalogparse.c kernel_interface.c > scanner.c private.c > libapparmor_la_LDFLAGS = -version-info > $(AA_LIB_CURRENT):$(AA_LIB_REVISION):$(AA_LIB_AGE) -XCClinker -dynamic > -pthread \ > -Wl,--version-script=$(top_srcdir)/src/libapparmor.map > > diff --git a/libraries/libapparmor/src/libapparmor.map > b/libraries/libapparmor/src/libapparmor.map > index 67175d0..c7bc606 100644 > --- a/libraries/libapparmor/src/libapparmor.map > +++ b/libraries/libapparmor/src/libapparmor.map > @@ -51,3 +51,10 @@ APPARMOR_2.9 { > local: > *; > } APPARMOR_1.1; > + > +PRIVATE { > + global: > + _aa_is_blacklisted; > + local: > + *; > +}; > diff --git a/libraries/libapparmor/src/private.c > b/libraries/libapparmor/src/private.c > new file mode 100644 > index 0000000..f6f40b5 > --- /dev/null > +++ b/libraries/libapparmor/src/private.c > @@ -0,0 +1,66 @@ > +/* > + * Copyright 2014 Canonical Ltd. > + * > + * The libapparmor library is licensed under the terms of the GNU > + * Lesser General Public License, version 2.1. Please see the file > + * COPYING.LGPL. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#include <string.h> > + > +struct ignored_suffix_t { > + const char * text; > + int len; > + int silent; > +}; > + > +static struct ignored_suffix_t ignored_suffixes[] = { > + /* Debian packging files, which are in flux during install > + should be silently ignored. */ > + { ".dpkg-new", 9, 1 }, > + { ".dpkg-old", 9, 1 }, > + { ".dpkg-dist", 10, 1 }, > + { ".dpkg-bak", 9, 1 }, > + /* RPM packaging files have traditionally not been silently > + ignored */ > + { ".rpmnew", 7, 0 }, > + { ".rpmsave", 8, 0 }, > + /* patch file backups/conflicts */ > + { ".orig", 5, 0 }, > + { ".rej", 4, 0 }, > + /* Backup files should be mentioned */ > + { "~", 1, 0 }, > + { NULL, 0, 0 } > +}; > + > +int _aa_is_blacklisted(const char *name, const char *path) > +{ > + int name_len; > + struct ignored_suffix_t *suffix; > + > + /* skip dot files and files with no name */ > + if (*name == '.' || !strlen(name)) > + return 1; > + > + name_len = strlen(name); > + /* skip blacklisted suffixes */ > + for (suffix = ignored_suffixes; suffix->text; suffix++) { > + char *found; > + if ( (found = strstr((char *) name, suffix->text)) && > + found - name + suffix->len == name_len ) { > + if (!suffix->silent) > + return -1; > + return 1; > + } > + } > + > + return 0; > +} > diff --git a/parser/parser_misc.c b/parser/parser_misc.c > index 97a2103..cb46d84 100644 > --- a/parser/parser_misc.c > +++ b/parser/parser_misc.c > @@ -32,6 +32,7 @@ > #include <fcntl.h> > #include <unistd.h> > #include <sys/apparmor.h> > +#include <sys/apparmor_private.h> > > #include "lib.h" > #include "parser.h" > @@ -50,53 +51,14 @@ > #endif > #define NPDEBUG(fmt, args...) /* Do nothing */ > > -struct ignored_suffix_t { > - const char * text; > - int len; > - int silent; > -}; > - > -static struct ignored_suffix_t ignored_suffixes[] = { > - /* Debian packging files, which are in flux during install > - should be silently ignored. */ > - { ".dpkg-new", 9, 1 }, > - { ".dpkg-old", 9, 1 }, > - { ".dpkg-dist", 10, 1 }, > - { ".dpkg-bak", 9, 1 }, > - /* RPM packaging files have traditionally not been silently > - ignored */ > - { ".rpmnew", 7, 0 }, > - { ".rpmsave", 8, 0 }, > - /* patch file backups/conflicts */ > - { ".orig", 5, 0 }, > - { ".rej", 4, 0 }, > - /* Backup files should be mentioned */ > - { "~", 1, 0 }, > - { NULL, 0, 0 } > -}; > - > int is_blacklisted(const char *name, const char *path) > { > - int name_len; > - struct ignored_suffix_t *suffix; > - > - /* skip dot files and files with no name */ > - if (*name == '.' || !strlen(name)) > - return 1; > - > - name_len = strlen(name); > - /* skip blacklisted suffixes */ > - for (suffix = ignored_suffixes; suffix->text; suffix++) { > - char *found; > - if ( (found = strstr((char *) name, suffix->text)) && > - found - name + suffix->len == name_len ) { > - if (!suffix->silent) > - PERROR("Ignoring: '%s'\n", path ? path : name); > - return 1; > - } > - } > + int retval = _aa_is_blacklisted(name, path); > + > + if (retval == -1) > + PERROR("Ignoring: '%s'\n", path ? path : name); > > - return 0; > + return !retval ? 0 : 1; > } > > struct keyword_table { > -- AppArmor mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
