diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dbf7071 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/libcap-2.48.tar.gz diff --git a/.libcap.metadata b/.libcap.metadata new file mode 100644 index 0000000..eb616eb --- /dev/null +++ b/.libcap.metadata @@ -0,0 +1 @@ +c81102815c481257e53168e83b8849bc9f154d54 SOURCES/libcap-2.48.tar.gz diff --git a/SOURCES/libcap-static-analysis-fix-2.patch b/SOURCES/libcap-static-analysis-fix-2.patch new file mode 100644 index 0000000..0eff3b4 --- /dev/null +++ b/SOURCES/libcap-static-analysis-fix-2.patch @@ -0,0 +1,210 @@ +diff --color -ru a/libcap/cap_proc.c b/libcap/cap_proc.c +--- a/libcap/cap_proc.c 2021-02-05 06:52:17.000000000 +0100 ++++ b/libcap/cap_proc.c 2021-08-27 10:07:37.627519433 +0200 +@@ -689,6 +689,10 @@ + cap_value_t c; + int raising = 0; + ++ if (temp == NULL) { ++ return -1; ++ } ++ + for (i = 0; i < _LIBCAP_CAPABILITY_U32S; i++) { + __u32 newI = iab->i[i]; + __u32 oldIP = temp->u[i].flat[CAP_INHERITABLE] | +diff --color -ru a/libcap/cap_text.c b/libcap/cap_text.c +--- a/libcap/cap_text.c 2021-02-05 06:52:17.000000000 +0100 ++++ b/libcap/cap_text.c 2021-08-27 10:14:45.180389737 +0200 +@@ -160,6 +160,7 @@ + cap_blks = _LINUX_CAPABILITY_U32S_3; + break; + default: ++ cap_free(res); + errno = EINVAL; + return NULL; + } +@@ -398,6 +399,9 @@ + for (n = 0; n < cmb; n++) { + if (getstateflags(caps, n) == t) { + char *this_cap_name = cap_to_name(n); ++ if (this_cap_name == NULL) { ++ return NULL; ++ } + if ((strlen(this_cap_name) + (p - buf)) > CAP_TEXT_SIZE) { + cap_free(this_cap_name); + errno = ERANGE; +@@ -450,6 +454,9 @@ + for (n = cmb; n < __CAP_MAXBITS; n++) { + if (getstateflags(caps, n) == t) { + char *this_cap_name = cap_to_name(n); ++ if (this_cap_name == NULL) { ++ return NULL; ++ } + if ((strlen(this_cap_name) + (p - buf)) > CAP_TEXT_SIZE) { + cap_free(this_cap_name); + errno = ERANGE; +@@ -549,6 +556,9 @@ + cap_iab_t cap_iab_from_text(const char *text) + { + cap_iab_t iab = cap_iab_init(); ++ if (iab == NULL) { ++ return iab; ++ } + if (text != NULL) { + unsigned flags; + for (flags = 0; *text; text++) { +diff --color -ru a/libcap/_makenames.c b/libcap/_makenames.c +--- a/libcap/_makenames.c 2021-02-05 06:52:17.000000000 +0100 ++++ b/libcap/_makenames.c 2021-08-27 10:02:53.263979868 +0200 +@@ -49,6 +49,10 @@ + int was = pointers_avail * sizeof(char *); + pointers_avail = 2 * list[i].index + 1; + pointers = recalloc(pointers, was, pointers_avail * sizeof(char *)); ++ if (pointers == NULL) { ++ perror("unable to continue"); ++ exit(1); ++ } + } + pointers[list[i].index] = list[i].name; + int n = strlen(list[i].name); +diff --color -ru a/pam_cap/pam_cap.c b/pam_cap/pam_cap.c +--- a/pam_cap/pam_cap.c 2021-08-26 09:23:55.560021048 +0200 ++++ b/pam_cap/pam_cap.c 2021-08-27 10:17:00.406562672 +0200 +@@ -60,6 +60,9 @@ + } + + *groups = calloc(ngrps, sizeof(char *)); ++ if (*groups == NULL) { ++ return -1; ++ } + int g_n = 0, i; + for (i = 0; i < ngrps; i++) { + const struct group *g = getgrgid(grps[i]); +diff --color -ru a/progs/capsh.c b/progs/capsh.c +--- a/progs/capsh.c 2021-08-26 09:23:55.561021064 +0200 ++++ b/progs/capsh.c 2021-08-27 10:43:32.973136965 +0200 +@@ -100,7 +100,16 @@ + display_prctl_set("Bounding", cap_get_bound); + display_prctl_set("Ambient", cap_get_ambient); + iab = cap_iab_get_proc(); ++ if (iab == NULL) { ++ perror("failed to get IAB for process"); ++ exit(1); ++ } + text = cap_iab_to_text(iab); ++ if (text == NULL) { ++ perror("failed to obtain text for IAB"); ++ cap_free(iab); ++ exit(1); ++ } + printf("Current IAB: %s\n", text); + cap_free(text); + cap_free(iab); +@@ -402,6 +411,10 @@ + child = 0; + + char *temp_name = cap_to_name(cap_max_bits() - 1); ++ if (temp_name == NULL) { ++ perror("obtaining highest capability name"); ++ exit(1); ++ } + if (temp_name[0] != 'c') { + printf("WARNING: libcap needs an update (cap=%d should have a name).\n", + cap_max_bits() - 1); +diff --color -ru a/progs/getcap.c b/progs/getcap.c +--- a/progs/getcap.c 2021-02-05 06:52:17.000000000 +0100 ++++ b/progs/getcap.c 2021-08-27 10:21:36.547999961 +0200 +@@ -110,11 +110,11 @@ + + for (i=optind; argv[i] != NULL; i++) { + struct stat stbuf; +- +- if (lstat(argv[i], &stbuf) != 0) { +- fprintf(stderr, "%s (%s)\n", argv[i], strerror(errno)); ++ char *arg = argv[i]; ++ if (lstat(arg, &stbuf) != 0) { ++ fprintf(stderr, "%s (%s)\n", arg, strerror(errno)); + } else if (recursive) { +- nftw(argv[i], do_getcap, 20, FTW_PHYS); ++ nftw(arg, do_getcap, 20, FTW_PHYS); + } else { + int tflag = S_ISREG(stbuf.st_mode) ? FTW_F : + (S_ISLNK(stbuf.st_mode) ? FTW_SL : FTW_NS); +diff --color -ru a/progs/setcap.c b/progs/setcap.c +--- a/progs/setcap.c 2021-02-05 06:52:17.000000000 +0100 ++++ b/progs/setcap.c 2021-08-27 10:23:30.764835298 +0200 +@@ -166,9 +166,12 @@ + } + + cap_on_file = cap_get_file(*++argv); +- + if (cap_on_file == NULL) { + cap_on_file = cap_from_text("="); ++ if (cap_on_file == NULL) { ++ perror("unable to use missing capability"); ++ exit(1); ++ } + } + + cmp = cap_compare(cap_on_file, cap_d); +diff --color -ru a/psx/psx.c b/psx/psx.c +--- a/psx/psx.c 2021-08-26 09:23:55.562021081 +0200 ++++ b/psx/psx.c 2021-08-27 10:24:49.997107969 +0200 +@@ -107,6 +107,10 @@ + */ + static void *psx_do_registration(void) { + registered_thread_t *node = calloc(1, sizeof(registered_thread_t)); ++ if (node == NULL) { ++ perror("unable to register psx handler"); ++ exit(1); ++ } + pthread_mutex_init(&node->mu, NULL); + node->thread = pthread_self(); + pthread_setspecific(psx_action_key, node); +diff --color -ru a/tests/libcap_launch_test.c b/tests/libcap_launch_test.c +--- a/tests/libcap_launch_test.c 2021-02-05 06:52:17.000000000 +0100 ++++ b/tests/libcap_launch_test.c 2021-08-27 10:31:31.662559385 +0200 +@@ -93,6 +93,10 @@ + printf("[%d] test should %s\n", i, + v->result ? "generate error" : "work"); + cap_launch_t attr = cap_new_launcher(v->args[0], v->args, v->envp); ++ if (attr == NULL) { ++ perror("failed to obtain launcher"); ++ exit(1); ++ } + if (v->chroot) { + cap_launcher_set_chroot(attr, v->chroot); + } +diff --color -ru a/tests/libcap_psx_test.c b/tests/libcap_psx_test.c +--- a/tests/libcap_psx_test.c 2021-02-05 06:52:17.000000000 +0100 ++++ b/tests/libcap_psx_test.c 2021-08-27 10:29:57.157041470 +0200 +@@ -16,6 +16,10 @@ + usleep(1234); + pid_t pid = fork(); + cap_t start = cap_get_proc(); ++ if (start == NULL) { ++ perror("FAILED: unable to start"); ++ exit(1); ++ } + if (pid == 0) { + cap_set_proc(start); + exit(0); +@@ -27,6 +31,7 @@ + exit(1); + } + cap_set_proc(start); ++ cap_free(start); + return NULL; + } + +@@ -35,6 +40,10 @@ + printf("hello libcap and libpsx "); + fflush(stdout); + cap_t start = cap_get_proc(); ++ if (start == NULL) { ++ perror("FAILED: to actually start"); ++ exit(1); ++ } + pthread_t ignored[10]; + for (i = 0; i < 10; i++) { + pthread_create(&ignored[i], NULL, thread_fork_exit, NULL); diff --git a/SOURCES/libcap-static-analysis-fix.patch b/SOURCES/libcap-static-analysis-fix.patch new file mode 100644 index 0000000..5e2732a --- /dev/null +++ b/SOURCES/libcap-static-analysis-fix.patch @@ -0,0 +1,152 @@ +diff --color -ru a/pam_cap/pam_cap.c b/pam_cap/pam_cap.c +--- a/pam_cap/pam_cap.c 2021-02-05 06:52:17.000000000 +0100 ++++ b/pam_cap/pam_cap.c 2021-04-23 09:48:00.091122637 +0200 +@@ -218,7 +218,7 @@ + if (!cap_set_proc(cap_s)) { + ok = 1; + } +- goto cleanup_cap_s; ++ goto cleanup_conf; + } + + iab = cap_iab_from_text(conf_caps); +@@ -238,10 +238,9 @@ + _pam_drop(conf_caps); + + cleanup_cap_s: +- if (cap_s) { +- cap_free(cap_s); +- cap_s = NULL; +- } ++ cap_free(cap_s); ++ cap_s = NULL; ++ + return ok; + } + +diff --color -ru a/progs/capsh.c b/progs/capsh.c +--- a/progs/capsh.c 2021-02-05 06:52:17.000000000 +0100 ++++ b/progs/capsh.c 2021-04-23 09:48:00.095122691 +0200 +@@ -336,8 +336,8 @@ + */ + static char *find_self(const char *arg0) + { +- int i; +- char *parts, *dir, *scratch; ++ int i, status=1; ++ char *p = NULL, *parts, *dir, *scratch; + const char *path; + + for (i = strlen(arg0)-1; i >= 0 && arg0[i] != '/'; i--); +@@ -352,21 +352,45 @@ + } + + parts = strdup(path); ++ if (parts == NULL) { ++ fprintf(stderr, "insufficient memory for parts of path\n"); ++ exit(1); ++ } ++ + scratch = malloc(2+strlen(path)+strlen(arg0)); +- if (parts == NULL || scratch == NULL) { ++ if (scratch == NULL) { + fprintf(stderr, "insufficient memory for path building\n"); +- exit(1); ++ goto free_parts; + } + +- for (i=0; (dir = strtok(parts, ":")); parts = NULL) { ++ for (p = parts; (dir = strtok(p, ":")); p = NULL) { + sprintf(scratch, "%s/%s", dir, arg0); + if (access(scratch, X_OK) == 0) { +- return scratch; ++ status = 0; ++ break; + } + } ++ if (status) { ++ fprintf(stderr, "unable to find executable '%s' in PATH\n", arg0); ++ free(scratch); ++ } ++ ++free_parts: ++ free(parts); ++ if (status) { ++ exit(status); ++ } ++ return scratch; ++} + +- fprintf(stderr, "unable to find executable '%s' in PATH\n", arg0); +- exit(1); ++static long safe_sysconf(int name) ++{ ++ long ans = sysconf(name); ++ if (ans <= 0) { ++ fprintf(stderr, "sysconf(%d) returned a non-positive number: %ld\n", name, ans); ++ exit(1); ++ } ++ return ans; + } + + int main(int argc, char *argv[], char *envp[]) +@@ -617,7 +641,9 @@ + * Given we are now in a new directory tree, its good practice + * to start off in a sane location + */ +- status = chdir("/"); ++ if (status == 0) { ++ status = chdir("/"); ++ } + + cap_free(orig); + +@@ -718,14 +744,14 @@ + gid_t *group_list; + int g_count; + +- length = sysconf(_SC_GETGR_R_SIZE_MAX); ++ length = safe_sysconf(_SC_GETGR_R_SIZE_MAX); + buf = calloc(1, length); + if (NULL == buf) { + fprintf(stderr, "No memory for [%s] operation\n", argv[i]); + exit(1); + } + +- max_groups = sysconf(_SC_NGROUPS_MAX); ++ max_groups = safe_sysconf(_SC_NGROUPS_MAX); + group_list = calloc(max_groups, sizeof(gid_t)); + if (NULL == group_list) { + fprintf(stderr, "No memory for gid list\n"); +@@ -741,8 +767,7 @@ + } + if (!isdigit(*ptr)) { + struct group *g, grp; +- getgrnam_r(ptr, &grp, buf, length, &g); +- if (NULL == g) { ++ if (getgrnam_r(ptr, &grp, buf, length, &g) || NULL == g) { + fprintf(stderr, "Failed to identify gid for group [%s]\n", ptr); + exit(1); + } +@@ -835,6 +860,7 @@ + argv[argc] = NULL; + execve(argv[i], argv+i, envp); + fprintf(stderr, "execve '%s' failed!\n", argv[i]); ++ free(argv[i]); + exit(1); + } else if (!strncmp("--shell=", argv[i], 8)) { + shell = argv[i]+8; +diff --color -ru a/psx/psx.c b/psx/psx.c +--- a/psx/psx.c 2021-02-05 06:52:17.000000000 +0100 ++++ b/psx/psx.c 2021-04-23 09:48:00.095122691 +0200 +@@ -454,6 +454,10 @@ + int __wrap_pthread_create(pthread_t *thread, const pthread_attr_t *attr, + void *(*start_routine) (void *), void *arg) { + psx_starter_t *starter = calloc(1, sizeof(psx_starter_t)); ++ if (starter == NULL) { ++ perror("failed at thread creation"); ++ exit(1); ++ } + starter->fn = start_routine; + starter->arg = arg; + /* diff --git a/SOURCES/libcap-use-compiler-flag-options.patch b/SOURCES/libcap-use-compiler-flag-options.patch new file mode 100644 index 0000000..9728330 --- /dev/null +++ b/SOURCES/libcap-use-compiler-flag-options.patch @@ -0,0 +1,37 @@ +From 7c13fa4e4c044941afd3b3766de71821cdc04397 Mon Sep 17 00:00:00 2001 +From: "H.J. Lu" +Date: Sun, 14 Feb 2021 14:06:49 -0800 +Subject: [PATCH] Update Make.Rules for Fedora RPM build + +--- + Make.Rules | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/Make.Rules b/Make.Rules +index ded9014..537cb6c 100644 +--- a/Make.Rules ++++ b/Make.Rules +@@ -56,10 +56,10 @@ IPATH += -fPIC -I$(KERNEL_HEADERS) -I$(topdir)/libcap/include + + CC := $(CROSS_COMPILE)gcc + DEFINES := -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 +-COPTS ?= -O2 ++COPTS ?= $(RPM_OPT_FLAGS) + CFLAGS ?= $(COPTS) $(DEFINES) + BUILD_CC ?= $(CC) +-BUILD_COPTS ?= -O2 ++BUILD_COPTS ?= $(RPM_OPT_FLAGS) + BUILD_CFLAGS ?= $(BUILD_COPTS) $(DEFINES) $(IPATH) + AR := $(CROSS_COMPILE)ar + RANLIB := $(CROSS_COMPILE)ranlib +@@ -69,7 +69,7 @@ WARNINGS=-Wall -Wwrite-strings \ + -Wstrict-prototypes -Wmissing-prototypes \ + -Wnested-externs -Winline -Wshadow + LD=$(CC) -Wl,-x -shared +-LDFLAGS ?= #-g ++LDFLAGS ?= $(RPM_LD_FLAGS) + LIBCAPLIB := -L$(topdir)/libcap -lcap + PSXLINKFLAGS := -lpthread -Wl,-wrap,pthread_create + LIBPSXLIB := -L$(topdir)/libcap -lpsx $(PSXLINKFLAGS) +-- +2.29.2 diff --git a/SPECS/libcap.spec b/SPECS/libcap.spec new file mode 100644 index 0000000..29b79d8 --- /dev/null +++ b/SPECS/libcap.spec @@ -0,0 +1,393 @@ +Name: libcap +Version: 2.48 +Release: 7%{?dist} +Summary: Library for getting and setting POSIX.1e capabilities +URL: https://sites.google.com/site/fullycapable/ +License: BSD or GPLv2 + +Source: https://git.kernel.org/pub/scm/libs/libcap/libcap.git/snapshot/%{name}-%{version}.tar.gz +Patch0: libcap-use-compiler-flag-options.patch +Patch1: libcap-static-analysis-fix.patch +Patch2: libcap-static-analysis-fix-2.patch + +BuildRequires: libattr-devel pam-devel perl-interpreter gcc +BuildRequires: make + +%description +libcap is a library for getting and setting POSIX.1e (formerly POSIX 6) +draft 15 capabilities. + +%package static +Summary: Static libraries for libcap development +Requires: %{name} = %{version}-%{release} + +%description static +The libcap-static package contains static libraries needed to develop programs +that use libcap and need to be statically linked. + +libcap is a library for getting and setting POSIX.1e (formerly POSIX 6) +draft 15 capabilities. + +%package devel +Summary: Development files for libcap +Requires: %{name} = %{version}-%{release} + +%description devel +Development files (Headers, etc) for libcap. + +libcap is a library for getting and setting POSIX.1e (formerly POSIX 6) +draft 15 capabilities. + +Install libcap-devel if you want to develop or compile applications using +libcap. + +%prep +%autosetup -p1 + +%build +# libcap can not be build with _smp_mflags: +make prefix=%{_prefix} lib=%{_lib} LIBDIR=%{_libdir} SBINDIR=%{_sbindir} \ + INCDIR=%{_includedir} MANDIR=%{_mandir} PKGCONFIGDIR=%{_libdir}/pkgconfig/ + +%install +make install RAISE_SETFCAP=no \ + DESTDIR=%{buildroot} \ + LIBDIR=%{_libdir} \ + SBINDIR=%{_sbindir} \ + PKGCONFIGDIR=%{_libdir}/pkgconfig/ + +mkdir -p %{buildroot}/%{_mandir}/man{2,3,8} +mv -f doc/*.3 %{buildroot}/%{_mandir}/man3/ + +chmod +x %{buildroot}/%{_libdir}/*.so.* + +%ldconfig_scriptlets + +%files +%license License +%doc doc/capability.notes +%{_libdir}/*.so.* +%{_sbindir}/* +%{_mandir}/man1/* +%{_mandir}/man8/* +%{_libdir}/security/pam_cap.so + +%files static +%{_libdir}/libcap.a +%{_libdir}/libpsx.a + +%files devel +%{_includedir}/* +%{_libdir}/*.so +%{_mandir}/man3/* +%{_libdir}/pkgconfig/libcap.pc +%{_libdir}/pkgconfig/libpsx.pc + + +%changelog +* Fri Aug 27 2021 Zoltan Fridrich - 2.48-7 +- Fix issues detected by static analyzers + Related: rhbz#1985346 + +* Mon Aug 09 2021 Mohan Boddu - 2.48-6 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Fri Jun 18 2021 Zoltan Fridrich - 2.48-5 +- Remove deprecated tests + Resolves: rhbz#1938758 + +* Tue Jun 15 2021 Zoltan Fridrich - 2.48-4 +- Fix issues detected by static analyzers (rhbz#1938758) + +* Fri Apr 16 2021 Mohan Boddu - 2.48-3 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Sun Feb 14 2021 Peter Robinson - 2.48-2 +- Rebase distro flags patch + +* Wed Feb 10 2021 Giuseppe Scrivano - 2.48-1 +- Update to 0.2.48 + +* Tue Jan 26 2021 Fedora Release Engineering - 2.46-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Sun Jan 17 2021 Peter Robinson - 2.46-1 +- Update to 0.2.46 + +* Wed Oct 21 2020 Karsten Hopp - 2.44-1 +- update to 2.44 +- remove additional getpcaps manpage as it now included in the sources + +* Tue Jul 28 2020 Fedora Release Engineering - 2.26-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jan 29 2020 Fedora Release Engineering - 2.26-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jul 25 2019 Fedora Release Engineering - 2.26-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Mon Feb 04 2019 Karsten Hopp - 2.26-5 +- enable gating + +* Mon Feb 04 2019 Karsten Hopp - 2.26-4 +- bump release + +* Fri Feb 01 2019 Fedora Release Engineering - 2.26-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Jan 28 2019 Karsten Hopp - 2.26-2 +- add CI tests using the standard test interface (astepano) + +* Fri Jul 13 2018 Fedora Release Engineering - 2.25-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Mon Jul 02 2018 Karsten Hopp - 2.25-11 +- rebuild + +* Wed Feb 21 2018 Karsten Hopp - 2.25-10 +- buildrequire gcc + +* Wed Feb 07 2018 Fedora Release Engineering - 2.25-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Feb 03 2018 Igor Gnatenko - 2.25-8 +- Switch to %%ldconfig_scriptlets + +* Thu Aug 03 2017 Fedora Release Engineering - 2.25-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 2.25-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 2.25-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Dec 15 2016 Karsten Hopp - 2.25-4 +- add -static subpackage (rhbz#1380251) + +* Sun Nov 27 2016 Lubomir Rintel - 2.25-3 +- Add perl BR to fix FTBFS + +* Mon Apr 25 2016 Peter Robinson 2.25-2 +- Fix pkgconfig install location on aarch64 +- Spec file cleanups + +* Mon Apr 11 2016 Karsten Hopp - 2.25-1 +- libcap-2.25 + +* Thu Feb 04 2016 Fedora Release Engineering - 2.24-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Jun 17 2015 Fedora Release Engineering - 2.24-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sun Aug 17 2014 Fedora Release Engineering - 2.24-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Thu Jul 17 2014 Tom Callaway - 2.24-6 +- fix license handling + +* Sat Jun 07 2014 Fedora Release Engineering - 2.24-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Fri Apr 25 2014 Karsten Hopp 2.24-4 +- fix libdir in libcap.pc + +* Wed Apr 23 2014 Marcin Juszkiewicz - 2.24-3 +- set pkg-config dir to proper value to get it built on AArch64 + +* Wed Apr 16 2014 Karsten Hopp 2.24-2 +- fix URL and license + +* Wed Apr 16 2014 Karsten Hopp 2.24-1 +- update to 2.24 +- dropped patch for rhbz#911878, it is upstream now + +* Sat Aug 03 2013 Fedora Release Engineering - 2.22-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Tue May 14 2013 Karsten Hopp 2.22-6 +- mv libraries to /usr/lib* +- add getpcaps man page +- spec file cleanup +- fix URL of tarball + +* Tue May 14 2013 Karsten Hopp 2.22-5 +- add patch from Mark Wielaard to fix use of uninitialized memory in _fcaps_load + rhbz #911878 + +* Sun Feb 24 2013 Ville Skyttä - 2.22-5 +- Build with $RPM_OPT_FLAGS and $RPM_LD_FLAGS. + +* Thu Feb 14 2013 Fedora Release Engineering - 2.22-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Thu Jul 19 2012 Fedora Release Engineering - 2.22-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Fri Jan 13 2012 Fedora Release Engineering - 2.22-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Wed Jul 27 2011 Karsten Hopp 2.22-1 +- update to 2.22 (#689752) + +* Mon Feb 07 2011 Fedora Release Engineering - 2.17-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Dec 10 2009 Karsten Hopp 2.17-1 +- update to 2.17 + +* Fri Jul 24 2009 Fedora Release Engineering - 2.16-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue Jun 16 2009 Karsten Hopp 2.16-4 +- fix build problems with p.e. cdrkit + +* Sun Mar 22 2009 Karsten Hopp 2.16-1 +- update, with a fix for rebuild problems + +* Wed Feb 25 2009 Fedora Release Engineering - 2.10-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Fri Jun 06 2008 Karsten Hopp 2.10-2 +- drop libcap.so.1 +- fix buildrequires and path to pam security module + +* Thu Jun 05 2008 Karsten Hopp 2.10-1 +- libcap-2.10 + +* Thu Feb 21 2008 Karsten Hopp 2.06-4 +- don't build static binaries (#433808) + +* Wed Feb 20 2008 Karsten Hopp 2.06-3 +- temporarily add libcap-1 libraries to bootstrap some packages + +* Tue Feb 19 2008 Fedora Release Engineering - 2.06-2 +- Autorebuild for GCC 4.3 + +* Fri Feb 15 2008 Karsten Hopp 2.06-1 +- upate to 2.06 (#432983) + +* Wed Jan 16 2008 Karsten Hopp 1.10-33 +- drop post,postun requirements on ldconfig as find-requires can handle this + +* Tue Jan 15 2008 Karsten Hopp 1.10-32 +- add disttag +- fix changelog +- fix defattr + +* Mon Jan 14 2008 Karsten Hopp 1.10-31 +- use cp -p in spec file to preserve file attributes (#225992) +- add license file + +* Fri Aug 24 2007 Karsten Hopp 1.10-30 +- rebuild + +* Fri Feb 23 2007 Karsten Hopp 1.10-29 +- add CAP_AUDIT_WRITE and CAP_AUDIT_CONTROL (#229833) + +* Wed Feb 21 2007 Karsten Hopp 1.10-28 +- drop obsolete ia64 patch +- rpmlint fixes + +* Wed Feb 21 2007 Karsten Hopp 1.10-27 +- misc. review fixes +- add debian patch to make it build with a recent glibc +- remove static lib + +* Wed Jul 19 2006 Karsten Hopp 1.10-25 +- add patch to support COPTFLAG (#199365) + +* Wed Jul 12 2006 Jesse Keating - 1.10-24.2.1 +- rebuild + +* Fri Feb 10 2006 Jesse Keating - 1.10-24.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 1.10-24.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Mon Dec 19 2005 Karsten Hopp 1.10-24 +- added development manpages +- as there are no manpages for the executables available, added at least + a FAQ (#172324) + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Mon Oct 31 2005 Steve Grubb 1.10-23 +- rebuild to pick up audit capabilities + +* Wed Mar 02 2005 Karsten Hopp 1.10-22 +- build with gcc-4 + +* Wed Feb 09 2005 Karsten Hopp 1.10-21 +- rebuilt + +* Tue Aug 31 2004 Phil Knirsch 1.10-20 +- Fix wrong typedef in userland patch (#98801) + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Jan 27 2004 Karsten Hopp 1.10-17 +- use _manpath + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Sat Jan 4 2003 Jeff Johnson 1.10-14 +- set execute bits on library so that requires are generated. + +* Thu Nov 21 2002 Mike A. Harris 1.10-13 +- Removed %%name macro sillyness from package Summary, description text, etc. +- Removed archaic Prefix: tag +- lib64 fixes everywhere to use _lib, _libdir, etc +- Removed deletion of RPM_BUILD_DIR from %%clean section +- Added -q flag to setup macro +- Severely cleaned up spec file, and removed usage of perl + +* Fri Jul 19 2002 Jakub Jelinek 1.10-12 +- CFLAGS was using COPTFLAG variable, not COPTFLAGS +- build with -fpic +- apply the IA-64 patch everywhere, use capget/capset from glibc, + not directly as _syscall (as it is broken on IA-32 with -fpic) +- reenable alpha + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Wed May 29 2002 Bernhard Rosenkraenzer 1.10-10 +- Exclude alpha for now, apparent gcc bug. + +* Fri Nov 9 2001 Bernhard Rosenkraenzer 1.10-6 +- Fix sys/capabilities.h header (#55727) +- Move to /lib, some applications seem to be using this rather early + (#55733) + +* Mon Jul 16 2001 Trond Eivind Glomsrød +- Add post,postun scripts + +* Tue Jul 10 2001 Jakub Jelinek +- don't build libcap.so.1 with ld -shared, but gcc -shared + +* Wed Jun 20 2001 Trond Eivind Glomsrød +- Rebuild - it was missing for alpha + +* Wed Jun 06 2001 Florian La Roche +- add s390/s390x support + +* Thu May 17 2001 Bernhard Rosenkraenzer 1.10-1 +- initial RPM +- fix build on ia64