From 7f54aeea04518240219b8c8c4b3a36903a842dad Mon Sep 17 00:00:00 2001 From: Harvie Date: Mon, 21 Feb 2011 04:39:34 +0100 Subject: [PATCH] Added list_vars.sh to easily enumerate exported variables from source --- README.md | 16 +++++++++++++--- answerscripts.c | 32 ++++++++++++++++---------------- list_vars.sh | 11 +++++++++++ 3 files changed, 40 insertions(+), 19 deletions(-) create mode 100755 list_vars.sh diff --git a/README.md b/README.md index 7394257..5d5856b 100644 --- a/README.md +++ b/README.md @@ -27,11 +27,21 @@ There are lot of hacks that you can do with this simple framework if you know so * Every line that is outputed by this script to it's **STDOUT is sent** as response to message that executed it * Following **environment values are passed** to the script: * ANSW\_MSG (text of the message) - * ANSW\_FROM (who sent you message) - * ANSW\_FROM_GROUP (group which contains that buddy) - * ANSW\_PROTOCOL (protocol used to deliver the message. eg.: jabber, irc,...) + * ANSW\_FROM (who sent you the message) + * ANSW\_FROM\_GROUP (group which contains that buddy - buggy) + * ANSW\_PROTOCOL (protocol used to deliver the message. eg.: xmpp, irc,...) * ANSW\_STATUS (unique ID of status. eg.: available, away,...) * ANSW\_STATUS\_MSG (status message set by user) + * ANSW\_AGENT (ID of IM client used with answerscripts) + * ANSW\_AGENT\_VERSION (Version of client) + * ANSW\_LOCAL\_NAME (Name of local user - untested) + * ANSW\_LOCAL\_ALIAS (Alias of local user - untested) + * ANSW\_REMOTE\_NAME (???) + * ANSW\_REMOTE\_ALIAS\_ONLY (buggy) + * ANSW\_REMOTE\_SERVER\_ALIAS (buggy) + * ANSW\_REMOTE\_CONTACT\_ALIAS (buggy) + * ANSW\_REMOTE\_LOCAL\_ALIAS (???) + * ANSW\_REMOTE\_ALIAS (???) * **WARNING: You should mind security (don't let attackers to execute their messages/nicks!)** * I guess that you will want to use more than one answerscript, so i made such answerscript which will execute all answerscripts in **~/.purple/answerscripts.d** * It's quite smart and all you need to do is set the filenames and permissions of answerscripts in that directory properly... diff --git a/answerscripts.c b/answerscripts.c index d561c37..071ef97 100755 --- a/answerscripts.c +++ b/answerscripts.c @@ -71,8 +71,8 @@ static void received_im_msg_cb(PurpleAccount *account, char *who, char *buffer, //LOCAL USER: const char* local_alias = purple_account_get_alias(account); const char* local_name = (char *) purple_account_get_name_for_display(account); - setenv(ENV_PREFIX "LOCAL_NAME", local_name, 1); - setenv(ENV_PREFIX "LOCAL_ALIAS", local_alias, 1); + setenv(ENV_PREFIX "LOCAL_NAME", local_name, 1); //Name of local user - untested + setenv(ENV_PREFIX "LOCAL_ALIAS", local_alias, 1); //Alias of local user - untested //REMOTE USER (Buddy): //const char * purple_contact_get_alias (PurpleContact *contact) @@ -82,12 +82,12 @@ static void received_im_msg_cb(PurpleAccount *account, char *who, char *buffer, const char* remote_contact_alias = purple_buddy_get_contact_alias(buddy); const char* remote_local_alias = purple_buddy_get_local_alias(buddy); const char* remote_alias = purple_buddy_get_alias(buddy); - setenv(ENV_PREFIX "REMOTE_NAME", remote_name, 1); - setenv(ENV_PREFIX "REMOTE_ALIAS_ONLY", remote_alias_only, 1); - setenv(ENV_PREFIX "REMOTE_SERVER_ALIAS", remote_server_alias, 1); - setenv(ENV_PREFIX "REMOTE_CONTACT_ALIAS", remote_contact_alias, 1); - setenv(ENV_PREFIX "REMOTE_LOCAL_ALIAS", remote_local_alias, 1); - setenv(ENV_PREFIX "REMOTE_ALIAS", remote_alias, 1); + setenv(ENV_PREFIX "REMOTE_NAME", remote_name, 1); //??? + setenv(ENV_PREFIX "REMOTE_ALIAS_ONLY", remote_alias_only, 1); //buggy + setenv(ENV_PREFIX "REMOTE_SERVER_ALIAS", remote_server_alias, 1); //buggy + setenv(ENV_PREFIX "REMOTE_CONTACT_ALIAS", remote_contact_alias, 1); //buggy + setenv(ENV_PREFIX "REMOTE_LOCAL_ALIAS", remote_local_alias, 1); //??? + setenv(ENV_PREFIX "REMOTE_ALIAS", remote_alias, 1); //??? //Get buddy group const char *from_group = purple_group_get_name(purple_buddy_get_group(buddy)); //FIXME: purple_group_get_name() returns "\x18" (or random data!) when user does not belong to some group @@ -113,12 +113,12 @@ static void received_im_msg_cb(PurpleAccount *account, char *who, char *buffer, } //Export variables to environment - setenv(ENV_PREFIX "MSG", message, 1); - setenv(ENV_PREFIX "FROM", who, 1); - setenv(ENV_PREFIX "FROM_GROUP", from_group, 1); - setenv(ENV_PREFIX "PROTOCOL", protocol_id, 1); - setenv(ENV_PREFIX "STATUS", status_id, 1); - setenv(ENV_PREFIX "STATUS_MSG", status_msg, 1); + setenv(ENV_PREFIX "MSG", message, 1); //text of the message + setenv(ENV_PREFIX "FROM", who, 1); //who sent you the message + setenv(ENV_PREFIX "FROM_GROUP", from_group, 1); //group which contains that buddy - buggy + setenv(ENV_PREFIX "PROTOCOL", protocol_id, 1); //protocol used to deliver the message. eg.: xmpp, irc,... + setenv(ENV_PREFIX "STATUS", status_id, 1); //unique ID of status. eg.: available, away,... + setenv(ENV_PREFIX "STATUS_MSG", status_msg, 1); //status message set by user //Launch job on background answerscripts_job *job = (answerscripts_job*) malloc(sizeof(answerscripts_job)); @@ -195,8 +195,8 @@ static PurplePluginInfo info = { static void init_plugin(PurplePlugin * plugin) { //Export static environment variables - setenv(ENV_PREFIX "AGENT", (char *) purple_core_get_ui(), 1); - setenv(ENV_PREFIX "AGENT_VERSION", (char *) purple_core_get_version(), 1); + setenv(ENV_PREFIX "AGENT", (char *) purple_core_get_ui(), 1); //ID of IM client used with answerscripts + setenv(ENV_PREFIX "AGENT_VERSION", (char *) purple_core_get_version(), 1); //Version of client } PURPLE_INIT_PLUGIN(autoanswer, init_plugin, info) diff --git a/list_vars.sh b/list_vars.sh new file mode 100755 index 0000000..41e633c --- /dev/null +++ b/list_vars.sh @@ -0,0 +1,11 @@ +#!/bin/bash +file='answerscripts.c' +pipe=cat +[ -n "$1" ] && pipe='sed -e s/_/\\_/g' +pre="$(grep ENV_PREFIX "$file" | head -n 1 | cut -d '"' -f 2)" +grep setenv "$file" | while read line; do + var="$(echo "$line" | cut -d '"' -f 2)"; + wtf="$(echo "$line" | cut -d ';' -f 2 | cut -d '/' -f 3-)"; + echo -n "$1* $pre$var"; + [ -n "$wtf" ] && echo -e "\t($wtf)" || echo +done | $pipe -- 2.30.2