diff -ru bluez-utils-3.2.orig/hcid/passkey-agent.c bluez-utils-3.2/hcid/passkey-agent.c --- bluez-utils-3.2.orig/hcid/passkey-agent.c 2006-04-28 16:30:59.000000000 +0200 +++ bluez-utils-3.2/hcid/passkey-agent.c 2006-09-07 00:27:48.000000000 +0200 @@ -21,6 +21,7 @@ * */ +#define DBUS_API_SUBJECT_TO_CHANGE #ifdef HAVE_CONFIG_H #include <config.h> #endif @@ -76,6 +77,10 @@ { DBusMessage *reply; const char *path, *address; + char buffer[256]; + FILE *pin; + int status; + char *s_passkey; if (!passkey) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; @@ -91,8 +96,19 @@ fprintf(stderr, "Can't create reply message\n"); return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } + sprintf(buffer, "%s %s %s", passkey, "in", address); + pin=popen(buffer, "r"); + wait(&status); + fgets(buffer, 256, pin); + if(buffer[1]!='P' && buffer[1]!='I' && buffer[2]!='N') + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + pclose(pin); + s_passkey=&buffer[4]; + if(s_passkey[strlen(s_passkey)-1]=='\n') s_passkey[strlen(s_passkey)-1]='\0'; + fprintf(stderr, "Found passkey: \"%s\"\n", s_passkey); - dbus_message_append_args(reply, DBUS_TYPE_STRING, &passkey, + + dbus_message_append_args(reply, DBUS_TYPE_STRING, &s_passkey , DBUS_TYPE_INVALID); dbus_connection_send(conn, reply, NULL);