gkdr / lurch

XEP-0384: OMEMO Encryption for libpurple.
GNU General Public License v3.0
282 stars 32 forks source link

Plugin does not show up in list #112

Closed lunarthegrey closed 6 years ago

lunarthegrey commented 6 years ago

Hi there. I built the plugin using the guide. I'm running on Debian 9 (Stretch). When I open Pidgin I don't see the plugin in the list at all. I'm wondering if Pidgin doesn't read the .so from the directory it was placed in. Pasting build logs below.

Running Pidgin 2.12.0-1

user@personal:~/git/lurch$ ls -lah /home/user/.purple/plugins/lurch.so
-rwxr-xr-x 1 user user 956K Jul  6 10:14 /home/user/.purple/plugins/lurch.so

Build logs:

user@personal:~/git/lurch$ make install-home
mkdir -p build
cc -fPIC -std=c11 -Wall -g -Wstrict-overflow -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libpurple -I/usr/include/libxml2 -I./headers/jabber -I./lib/libomemo/src -I./lib/axc/src -I./lib/axc/lib/libsignal-protocol-c/src -D_XOPEN_SOURCE=700 -D_BSD_SOURCE -DPURPLE_PLUGINS -c ./src/lurch.c -o build/lurch.o
In file included from /usr/include/limits.h:25:0,
                 from /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h:168,
                 from /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/syslimits.h:7,
                 from /usr/lib/gcc/x86_64-linux-gnu/6/include-fixed/limits.h:34,
                 from /usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h:11,
                 from /usr/include/glib-2.0/glib/gtypes.h:32,
                 from /usr/include/glib-2.0/glib/galloca.h:32,
                 from /usr/include/glib-2.0/glib.h:30,
                 from ./src/lurch.c:1:
/usr/include/features.h:148:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^~~~~~~
./src/lurch.c:185:13: warning: ‘lurch_axc_log_func’ defined but not used [-Wunused-function]
 static void lurch_axc_log_func(int level, const char * msg, size_t len, void * user_data)
             ^~~~~~~~~~~~~~~~~~
make -C "./lib/libomemo" build/libomemo-conversations.a
make[1]: Entering directory '/home/user/git/lurch/lib/libomemo'
mkdir -p build
cc -c src/libomemo.c -std=c11 -Wall -Wextra -Wpedantic -Wstrict-overflow -fno-strict-aliasing -funsigned-char -fno-builtin-memset -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -D_THREAD_SAFE -D_REENTRANT   -DOMEMO_XMLNS='"eu.siacs.conversations.axolotl"' -DOMEMO_NS_SEPARATOR='"."' -DOMEMO_NS_NOVERSION -fPIC -o build/libomemo-conversations.o
cc -c src/libomemo_crypto.c -std=c11 -Wall -Wextra -Wpedantic -Wstrict-overflow -fno-strict-aliasing -funsigned-char -fno-builtin-memset -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -D_THREAD_SAFE -D_REENTRANT   -D_XOPEN_SOURCE=700 -D_DEFAULT_SOURCE -fPIC -o build/libomemo_crypto.o
cc -c src/libomemo_storage.c -std=c11 -Wall -Wextra -Wpedantic -Wstrict-overflow -fno-strict-aliasing -funsigned-char -fno-builtin-memset -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -D_THREAD_SAFE -D_REENTRANT   -D_XOPEN_SOURCE=700 -D_DEFAULT_SOURCE -fPIC -o build/libomemo_storage.o
ar rcs build/libomemo-conversations.a build/libomemo-conversations.o build/libomemo_crypto.o build/libomemo_storage.o
make[1]: Leaving directory '/home/user/git/lurch/lib/libomemo'
make -C "./lib/axc" build/libaxc-nt.a
make[1]: Entering directory '/home/user/git/lurch/lib/axc'
mkdir -p build
cc -fPIC -I./lib/libsignal-protocol-c/src -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include   -std=c11 -g -Wall -Wextra -Wpedantic -Wstrict-overflow -fno-strict-aliasing -funsigned-char -fno-builtin-memset -D_XOPEN_SOURCE=700 -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE -DNO_THREADS -c src/axc.c -o build/axc-nt.o
In file included from /usr/include/inttypes.h:25:0,
                 from src/axc.c:1:
/usr/include/features.h:148:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^~~~~~~
src/axc.c:28:16: warning: struct has no members [-Wpedantic]
 typedef struct axc_mutexes {
                ^~~~~~~~~~~
cc -fPIC -I./lib/libsignal-protocol-c/src -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include   -std=c11 -g -Wall -Wextra -Wpedantic -Wstrict-overflow -fno-strict-aliasing -funsigned-char -fno-builtin-memset -D_XOPEN_SOURCE=700 -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE -c src/axc_crypto.c -o build/axc_crypto.o
In file included from /usr/include/stdint.h:25:0,
                 from /usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h:9,
                 from src/axc_crypto.c:1:
/usr/include/features.h:148:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^~~~~~~
cc -fPIC -I./lib/libsignal-protocol-c/src -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include   -std=c11 -g -Wall -Wextra -Wpedantic -Wstrict-overflow -fno-strict-aliasing -funsigned-char -fno-builtin-memset -D_XOPEN_SOURCE=700 -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE -c src/axc_store.c -o build/axc_store.o
In file included from /usr/include/stdint.h:25:0,
                 from /usr/lib/gcc/x86_64-linux-gnu/6/include/stdint.h:9,
                 from src/axc_store.c:1:
/usr/include/features.h:148:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
 # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^~~~~~~
ar rcs build/libaxc-nt.a build/axc-nt.o build/axc_crypto.o build/axc_store.o
make[1]: Leaving directory '/home/user/git/lurch/lib/axc'
cd ./lib/axc/lib/libsignal-protocol-c/ && \
   mkdir -p build && \
   cd build && \
   cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-fPIC .. \
   && make
-- The C compiler identification is GNU 6.3.0
-- The CXX compiler identification is GNU 6.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for memset_s
-- Looking for memset_s - not found
-- Performing Test GCC_WARN_SIGN_CONVERSION
-- Performing Test GCC_WARN_SIGN_CONVERSION - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build
make[1]: Entering directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
make[2]: Entering directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
make[3]: Entering directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
Scanning dependencies of target protobuf-c
make[3]: Leaving directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
make[3]: Entering directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
[  1%] Building C object src/protobuf-c/CMakeFiles/protobuf-c.dir/protobuf-c.c.o
make[3]: Leaving directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
[  1%] Built target protobuf-c
make[3]: Entering directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
Scanning dependencies of target curve25519
make[3]: Leaving directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
make[3]: Entering directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
[  2%] Building C object src/curve25519/CMakeFiles/curve25519.dir/curve25519-donna.c.o
[  3%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_0.c.o
[  4%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_1.c.o
[  5%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_add.c.o
[  6%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_cmov.c.o
[  7%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_copy.c.o
[  8%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_frombytes.c.o
[  9%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_invert.c.o
[ 10%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_isnegative.c.o
[ 11%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_isnonzero.c.o
[ 12%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_mul.c.o
[ 13%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_neg.c.o
[ 14%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_pow22523.c.o
[ 15%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_sq.c.o
[ 17%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_sq2.c.o
[ 18%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_sub.c.o
[ 19%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/fe_tobytes.c.o
[ 20%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_add.c.o
[ 21%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_double_scalarmult.c.o
[ 22%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_frombytes.c.o
[ 23%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_madd.c.o
[ 24%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_msub.c.o
[ 25%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_p1p1_to_p2.c.o
[ 26%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_p1p1_to_p3.c.o
[ 27%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_p2_0.c.o
[ 28%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_p2_dbl.c.o
[ 29%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_p3_0.c.o
[ 30%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_p3_dbl.c.o
[ 31%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_p3_to_cached.c.o
[ 32%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_p3_to_p2.c.o
[ 34%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_p3_tobytes.c.o
[ 35%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_precomp_0.c.o
[ 36%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_scalarmult_base.c.o
[ 37%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_sub.c.o
[ 38%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/ge_tobytes.c.o
[ 39%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/open.c.o
[ 40%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/sc_muladd.c.o
[ 41%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/sc_reduce.c.o
[ 42%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/sign.c.o
[ 43%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/compare.c.o
[ 44%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/curve_sigs.c.o
[ 45%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/elligator.c.o
[ 46%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/fe_isequal.c.o
[ 47%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/fe_mont_rhs.c.o
[ 48%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/fe_montx_to_edy.c.o
[ 50%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/fe_sqrt.c.o
[ 51%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/ge_is_small_order.c.o
[ 52%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/ge_isneutral.c.o
[ 53%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/ge_montx_to_p2.c.o
[ 54%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/ge_montx_to_p3.c.o
[ 55%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/ge_neg.c.o
[ 56%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/ge_p3_to_montx.c.o
[ 57%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/ge_scalarmult.c.o
[ 58%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/ge_scalarmult_cofactor.c.o
[ 59%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/keygen.c.o
[ 60%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/open_modified.c.o
[ 61%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/sc_clamp.c.o
[ 62%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/sc_cmov.c.o
[ 63%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/sc_neg.c.o
[ 64%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/sign_modified.c.o
[ 65%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/uopen_modified.c.o
[ 67%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/usign_modified.c.o
[ 68%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/utility.c.o
[ 69%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/vopen_modified.c.o
[ 70%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/vsign_modified.c.o
[ 71%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/vxeddsa.c.o
[ 72%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/xeddsa.c.o
[ 73%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/additions/zeroize.c.o
[ 74%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/nacl_sha512/blocks.c.o
[ 75%] Building C object src/curve25519/CMakeFiles/curve25519.dir/ed25519/nacl_sha512/hash.c.o
make[3]: Leaving directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
[ 75%] Built target curve25519
make[3]: Entering directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
Scanning dependencies of target signal-protocol-c
make[3]: Leaving directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
make[3]: Entering directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
[ 76%] Building C object src/CMakeFiles/signal-protocol-c.dir/LocalStorageProtocol.pb-c.c.o
[ 77%] Building C object src/CMakeFiles/signal-protocol-c.dir/WhisperTextProtocol.pb-c.c.o
[ 78%] Building C object src/CMakeFiles/signal-protocol-c.dir/FingerprintProtocol.pb-c.c.o
[ 79%] Building C object src/CMakeFiles/signal-protocol-c.dir/vpool.c.o
[ 80%] Building C object src/CMakeFiles/signal-protocol-c.dir/signal_protocol.c.o
[ 81%] Building C object src/CMakeFiles/signal-protocol-c.dir/curve.c.o
[ 82%] Building C object src/CMakeFiles/signal-protocol-c.dir/hkdf.c.o
[ 84%] Building C object src/CMakeFiles/signal-protocol-c.dir/ratchet.c.o
[ 85%] Building C object src/CMakeFiles/signal-protocol-c.dir/protocol.c.o
[ 86%] Building C object src/CMakeFiles/signal-protocol-c.dir/session_state.c.o
[ 87%] Building C object src/CMakeFiles/signal-protocol-c.dir/session_record.c.o
[ 88%] Building C object src/CMakeFiles/signal-protocol-c.dir/session_pre_key.c.o
[ 89%] Building C object src/CMakeFiles/signal-protocol-c.dir/session_builder.c.o
[ 90%] Building C object src/CMakeFiles/signal-protocol-c.dir/session_cipher.c.o
[ 91%] Building C object src/CMakeFiles/signal-protocol-c.dir/key_helper.c.o
[ 92%] Building C object src/CMakeFiles/signal-protocol-c.dir/sender_key.c.o
[ 93%] Building C object src/CMakeFiles/signal-protocol-c.dir/sender_key_state.c.o
[ 94%] Building C object src/CMakeFiles/signal-protocol-c.dir/sender_key_record.c.o
[ 95%] Building C object src/CMakeFiles/signal-protocol-c.dir/group_session_builder.c.o
[ 96%] Building C object src/CMakeFiles/signal-protocol-c.dir/group_cipher.c.o
[ 97%] Building C object src/CMakeFiles/signal-protocol-c.dir/fingerprint.c.o
[ 98%] Building C object src/CMakeFiles/signal-protocol-c.dir/device_consistency.c.o
[100%] Linking C static library libsignal-protocol-c.a
make[3]: Leaving directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
[100%] Built target signal-protocol-c
make[2]: Leaving directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
make[1]: Leaving directory '/home/user/git/lurch/lib/axc/lib/libsignal-protocol-c/build'
cc -fPIC -shared -std=c11 -Wall -g -Wstrict-overflow -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libpurple -I/usr/include/libxml2 -I./headers/jabber -I./lib/libomemo/src -I./lib/axc/src -I./lib/axc/lib/libsignal-protocol-c/src -D_XOPEN_SOURCE=700 -D_BSD_SOURCE -DPURPLE_PLUGINS \
    "./build/lurch.o" ./lib/libomemo/build/libomemo-conversations.a ./lib/axc/build/libaxc-nt.a ./lib/axc/lib/libsignal-protocol-c/build/src/libsignal-protocol-c.a \
    -o build/lurch.so -ldl -lm -lsqlite3 -lmxml -lpthread -lglib-2.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libpurple -L/usr/lib/purple-2 -lxml2 -lgcrypt -ljabber
[ -e "/home/user/.purple/plugins" ] || \
    install -d -m 755 "/home/user/.purple/plugins"
install -m 755 "./build/lurch.so" "/home/user/.purple/plugins/lurch.so"
EionRobb commented 6 years ago

Can you get a debug log of pidgin loading the plugins?

To do this, open Help->Debug Window, then leave that window open and open Tools->Plugins. Close the plugins window then copy-paste the output of the debug window.

lunarthegrey commented 6 years ago

@EionRobb Thanks for the troubleshooting details, had no idea that debug window existed. Looks like this is the cause. Not sure what the fix is though.

(16:45:46) plugins: probing /home/user/.purple/plugins/lurch.so
(16:45:46) plugins: /home/user/.purple/plugins/lurch.so is not loadable: failed to map segment from shared object
EionRobb commented 6 years ago

I've never seen "failed to map segment from shared object" as an error when loading any plugin in Pidgin before. A quick googling says something to do with /tmp not being exec (sudo mount /tmp -o remount,exec to fix, not sure what the implications of that are), something to do with the .so not being marked as executable (chmod +x ~/.purple/plugins/lurch.so) or something to do with selinux not being permissive (might need to do a system-wide install, rather than just a user install)

lunarthegrey commented 6 years ago

I saw that when I Google'd too but I didn't think it was relevant. I found the cause though. The is due to the https://packages.debian.org/stretch/apparmor-profiles-extra package which contains /etc/apparmor.d/usr.bin.pidgin

When setting this to enforce mode like this.

sudo aa-enforce /usr/bin/pidgin

It messes with something and doesn't allow it to execute lurch.so maybe?

When setting it to complain mode the issue goes away and the plugin loads.

sudo aa-complain /usr/bin/pidgin

This is what the AppArmor config for Pidgin looks like.

user@personal:~$ cat /etc/apparmor.d/usr.bin.pidgin
# vim:syntax=apparmor

#include <tunables/global>

/usr/bin/pidgin flags=(complain) {
  #include <abstractions/audio>
  #include <abstractions/base>
  #include <abstractions/bash>
  #include <abstractions/dbus-session>
  #include <abstractions/dbus-strict>
  #include <abstractions/dconf>
  #include <abstractions/enchant>
  #include <abstractions/gnome>
  #include <abstractions/gstreamer>
  #include <abstractions/ibus>
  #include <abstractions/launchpad-integration>
  #include <abstractions/nameservice>
  #include <abstractions/private-files-strict>
  #include <abstractions/ssl_certs>
  #include <abstractions/ubuntu-browsers>
  #include <abstractions/ubuntu-helpers>
  #include <abstractions/user-download>

  dbus receive
       bus=system
       path=/org/freedesktop/NetworkManager
       interface=org.freedesktop.NetworkManager
       member={CheckPermissions,DeviceAdded,DeviceRemoved,StateChanged,PropertiesChanged}
       peer=(label=unconfined),

  dbus send
       bus=system
       path=/org/freedesktop/NetworkManager
       interface=org.freedesktop.NetworkManager
       member=state
       peer=(label=unconfined),

  deny ptrace,
  deny capability sys_ptrace,
  deny @{HOME}/.local/share/applications/wine/ r,

  owner @{HOME}/.gstreamer*/ rw,
  owner @{HOME}/.gstreamer*/** rw,
  owner @{HOME}/.cache/gstreamer-[0-9]*.[0-9]*/ rw,
  owner @{HOME}/.cache/gstreamer-[0-9]*.[0-9]*/registry.*.bin rw,
  owner @{HOME}/.cache/gstreamer-[0-9]*.[0-9]*/registry.*.bin.tmp* rw,
  /usr/lib/@{multiarch}/gstreamer[0-9]*.[0-9]*/gstreamer-[0-9]*.[0-9]*/gst-plugin-scanner Pix -> gst_plugin_scanner,
  owner @{HOME}/.purple/ rw,
  owner @{HOME}/.purple/** rwk,
  owner @{HOME}/.config/indicators/ rw,
  owner @{HOME}/.config/indicators/** rw,
  owner @{HOME}/.local/share/applications/ r,

  # Uncomment the two following lines if you want to allow Pidgin to update
  # any DConf setting:
  # owner @{HOME}/.{cache,config}/dconf/user rw,
  # owner /{,var/}run/user/[0-9]*/dconf/user rwk,

  /{usr/,}bin/dash rix,
  /{usr/,}bin/which rix,

  # NB: the preferred browser and proxy settings must be configured
  # in the GNOME preferences: this profile does not allow running
  # the corresponding external configuration applications.
  /usr/bin/gconftool-2 rPix,
  /usr/bin/gnome-open rmix,
  /usr/bin/gsettings rix,
  /usr/bin/gvfs-open rmix,
  /usr/bin/pidgin r,
  /usr/bin/xdg-open rmix,

  /etc/purple/prefs.xml r,

  /usr/share/glib-2.0/schemas/gschemas.compiled r,

  /usr/lib/frei0r-1/*.so rm,
  /usr/lib/@{multiarch}/libvisual-*/**.so rm,
  /usr/lib/pidgin/*.so rm,
  /usr/lib/purple*/*.so rm,

  # pidgin-blinklight plugin
  /usr/lib/pidgin-blinklight/blinklight-fixperm rPix,
  @{PROC}/acpi/ibm/light rwk,

  /usr/share/purple/ca-certs/ r,
  /usr/share/purple/ca-certs/** r,
  /usr/share/tcltk/** r,
  /usr/share/themes/ r,

  owner @{PROC}/@{pid}/auxv r,
  owner @{PROC}/@{pid}/fd/ r,

  # Site-specific additions and overrides. See local/README for details.
  #include <local/usr.bin.pidgin>
}
EionRobb commented 6 years ago

Ah yep, its a similar answer to the "selinux enforcing" answer. The apparmour profile you've provided doesn't give you permissions to load plugins that were installed into @{HOME}/.purple/plugins. Either install it into the system-wide /usr/lib/purple-2/ folder or add @{HOME}/.purple/plugins/*.so rm, to the apparmour profile.

lunarthegrey commented 6 years ago

Thanks for the assistance. I'll close this out as it's not an issue with your plugin. :)

gkdr commented 6 years ago

Glad this got resolved, and thanks @EionRobb for helping!

Fhiss commented 1 year ago

I have this problem too. In Debug Window: (21:40:55) plugins: /usr/lib64/purple-2/lurch.so is not loadable: undefined symbol: jabber_pep_namespace_only_when_pep_enabled_cb