Sophie

Sophie

distrib > Mandriva > 2008.0 > x86_64 > media > main-backports-src > by-pkgid > 5e500a66d400c31c815a470523945a53 > files > 5

bluez-utils-3.23-1mdv2008.0.src.rpm

--- bluez-utils-3.9/daemon/passkey-agent.c.auth	2007-01-25 16:09:25.000000000 +0100
+++ bluez-utils-3.9/daemon/passkey-agent.c	2007-02-12 21:35:53.000000000 +0100
@@ -77,6 +77,11 @@
 	DBusMessage *reply;
 	const char *path, *address;
 	dbus_bool_t numeric;
+	char *buffer;
+	FILE *pin;
+	unsigned int buflen;
+	int status;
+	char *s_passkey;
 
 	if (!passkey)
 		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
@@ -96,7 +101,33 @@
 
 	printf("Passkey request for device %s\n", address);
 
-	dbus_message_append_args(reply, DBUS_TYPE_STRING, &passkey,
+    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, &s_passkey ,
 					DBUS_TYPE_INVALID);
 
 	dbus_connection_send(conn, reply, NULL);
@@ -104,7 +135,7 @@
 	dbus_connection_flush(conn);
 
 	dbus_message_unref(reply);
-
+        free(buffer);
 	return DBUS_HANDLER_RESULT_HANDLED;
 }
 
@@ -334,10 +365,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");
 }