Sophie

Sophie

distrib > Mandriva > 2007.0 > x86_64 > media > main-updates-src > by-pkgid > 92a06ac9caf718c0c089b13d937f26d1 > files > 6

bluez-utils-3.4-4.1mdv2007.0.src.rpm

diff -ru bluez-utils-3.7.orig/hcid/passkey-agent.c bluez-utils-3.7/hcid/passkey-agent.c
--- bluez-utils-3.7.orig/hcid/passkey-agent.c	2006-04-28 14:30:59.000000000 +0000
+++ bluez-utils-3.7/hcid/passkey-agent.c	2006-10-12 19:23:52.000000000 +0000
@@ -21,6 +21,7 @@
  *
  */
 
+#define DBUS_API_SUBJECT_TO_CHANGE
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
@@ -76,12 +77,17 @@
 {
 	DBusMessage *reply;
 	const char *path, *address;
+	char *buffer;
+	FILE *pin;
+	unsigned int buflen;
+	int status;
+	char *s_passkey;
 
 	if (!passkey)
 		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 
 	if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &path,
-			DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID)) {
+				DBUS_TYPE_STRING, &address, DBUS_TYPE_INVALID)) {
 		fprintf(stderr, "Invalid arguments for passkey Request method");
 		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 	}
@@ -91,8 +97,34 @@
 		fprintf(stderr, "Can't create reply message\n");
 		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 	}
+    buflen=strlen(passkey)+256;
+    if(buflen<=256)
+    {
+        fprintf(stderr, "Invalid pin-helper argument, aborting.");
+        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+    }
+    buffer=malloc(buflen);
+    if(buffer==NULL)
+    {
+        fprintf(stderr, "Error allocating memory (malloc), aborting.");
+        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')
+    {
+      free(buffer);
+      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);
@@ -100,7 +132,7 @@
 	dbus_connection_flush(conn);
 
 	dbus_message_unref(reply);
-
+        free(buffer);
 	return DBUS_HANDLER_RESULT_HANDLED;
 }
 
@@ -263,10 +295,10 @@
 
 static void usage(void)
 {
-	printf("Bluetooth passkey agent ver %s\n\n", VERSION);
+	printf("Bluetooth passkey agent ver %s with \"exec\" patch from Marco Gulino (http://www.kmobiletools.org/node/228)\n\n", VERSION);
 
 	printf("Usage:\n"
-		"\tpasskey-agent [--default] [--path agent-path] <passkey> [address]\n"
+		"\tpasskey-agent [--default] [--path agent-path] <path-to-pin-helper> [address]\n"
 		"\n");
 }