+/* SWIG interface for libitkacl */
+%module itkacl
+
+%perlcode %{
+_itkacl_init();
+END {
+ _itkacl_deinit();
+}
+
+%}
+
+/* Convert errors to Perl exceptions and keep the interface clean. */
+%inline %{
+ #include "itkacl.h"
+
+ struct itkacl_ctx *_ctx = NULL;
+
+ void _itkacl_init()
+ {
+ char errmsg[1024];
+ _ctx = itkacl_create_ctx(errmsg, sizeof(errmsg));
+ if (_ctx == NULL)
+ die(errmsg);
+ }
+
+ void _itkacl_deinit()
+ {
+ itkacl_free_ctx(_ctx);
+ }
+
+ int check(char *realm, char *user)
+ {
+ char errmsg[1024];
+ int ret = itkacl_check_with_ctx(_ctx, realm, user, errmsg, 1024);
+
+ /* printf("check '%s' vs. '%s' gave %d\n", user, realm, ret); */
+ if (ret == -1)
+ die(errmsg);
+ else
+ return (ret == 0);
+ }
+
+%}
+