summaryrefslogtreecommitdiff
blob: f6c3517f68a7b96824009a959bb5fa12ade3b135 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
diff -ur libcap-1.10.orig/libcap/Makefile libcap-1.10/libcap/Makefile
--- libcap-1.10.orig/libcap/Makefile	2003-09-29 22:26:56.856116136 -0400
+++ libcap-1.10/libcap/Makefile	2003-09-29 22:31:06.204209464 -0400
@@ -33,6 +33,7 @@
 # Library version
 #
 LIBNAME=libcap
+PYTHONMODNAME=libcapmodule.so
 #
 
 FILES=cap_alloc cap_proc cap_extint cap_flag cap_text cap_sys
@@ -46,7 +47,11 @@
 MAJLIBNAME=$(LIBNAME).so.$(VERSION)
 MINLIBNAME=$(MAJLIBNAME).$(MINOR)
 
+ifdef PYTHON
+all: $(MINLIBNAME) $(LIBNAME).a $(PYTHONMODNAME)
+else
 all: $(MINLIBNAME) $(LIBNAME).a
+endif
 
 _makenames: _makenames.c cap_names.sed
 	$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
@@ -66,6 +71,15 @@
 	ln -sf $(MINLIBNAME) $(MAJLIBNAME)
 	ln -sf $(MAJLIBNAME) $(LIBNAME).so
 
+libcap_wrap.c: include/sys/capability.h
+	swig -python -o libcap_wrap.c include/sys/capability.h
+
+libcap_wrap.o: libcap_wrap.c
+	$(CC) $(CFLAGS) -fPIC -c $< -o $@
+
+$(PYTHONMODNAME): $(LOBJS) libcap_wrap.o
+	$(LD) -x -shared -o $@ libcap_wrap.o $(LOBJS)
+
 %.o: %.c $(INCLS)
 	$(CC) $(CFLAGS) -c $< -o $@
 
@@ -82,10 +93,14 @@
 	ln -sf $(MINLIBNAME) $(LIBDIR)/$(MAJLIBNAME)
 	ln -sf $(MAJLIBNAME) $(LIBDIR)/$(LIBNAME).so
 	-/sbin/ldconfig
+ifdef PYTHON
+	mkdir -p $(PYTHONMODDIR)
+	install -m 0644 $(PYTHONMODNAME) $(PYTHONMODDIR)/$(PYTHONMODNAME)
+endif
 
 clean:
 	$(LOCALCLEAN)
 	rm -f $(OBJS) $(LOBJS) $(LIBNAME).a $(LIBNAME).so*
-	rm -f cap_names.h cap_names.sed _makenames
+	rm -f cap_names.h cap_names.sed _makenames libcap_wrap.c
 	cd include/sys && $(LOCALCLEAN)
 
diff -ur libcap-1.10.orig/libcap/include/sys/capability.h libcap-1.10/libcap/include/sys/capability.h
--- libcap-1.10.orig/libcap/include/sys/capability.h	2003-09-29 22:26:56.856116136 -0400
+++ libcap-1.10/libcap/include/sys/capability.h	2003-09-29 22:29:07.457261744 -0400
@@ -15,12 +15,23 @@
 extern "C" {
 #endif
 
+#ifdef SWIG
+%module libcap
+#endif
+
 /*
  * This file complements the kernel file by providing prototype
  * information for the user library.
  */
 
+#ifdef SWIG
+%{
+#include <sys/types.h>
+#include "libcap.h"
+%}
+#else
 #include <sys/types.h>
+#endif
 /*
  * This is <linux/capability.h>
  *
@@ -354,10 +365,12 @@
 int     cap_clear(cap_t);
 
 /* libcap/cap_file.c */
+#ifndef SWIG
 cap_t   cap_get_fd(int);
 cap_t   cap_get_file(const char *);
 int     cap_set_fd(int, cap_t);
 int     cap_set_file(const char *, cap_t);
+#endif
 
 /* libcap/cap_proc.c */
 cap_t   cap_get_proc(void);
@@ -377,6 +390,7 @@
  * if the following _POSIX_SOURCE is _undefined_
  */
 
+#ifndef SWIG
 #if !defined(_POSIX_SOURCE)
 
 extern int capset(cap_user_header_t header, cap_user_data_t data);
@@ -386,6 +400,7 @@
 extern char const *_cap_names[];
 
 #endif /* !defined(_POSIX_SOURCE) */
+#endif
 
 #ifdef __cplusplus
 }