mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-18 22:54:00 +00:00
1484 lines
50 KiB
Diff
1484 lines
50 KiB
Diff
Description: Reimplement using libgnome-keyring
|
|
GNOME Keyring daemon in 2.30 no longer exports the socket interface which
|
|
gnome-keyring-sharp used. This makes gnome-keyring-sharp totally useless.
|
|
.
|
|
This patch reimplements the gnome-keyring-sharp functions as a p/invoke
|
|
wrapper around libgnome-keyring. API and ABI is unchanged.
|
|
Author: Christopher Halse Rogers <christopher.halse.rogers@canonical.com>
|
|
Bug-Launchpad: https://bugs.edge.launchpad.net/ubuntu/lucid/+source/gnome-keyring-sharp/+bug/536925
|
|
Bug: https://bugzilla.novell.com/show_bug.cgi?id=589166
|
|
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/Makefile.am gnome-keyring-sharp-1.0.0/Makefile.am
|
|
--- gnome-keyring-sharp-1.0.0~/Makefile.am 2008-08-09 03:36:12.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/Makefile.am 2010-03-30 17:32:02.733918042 +1100
|
|
@@ -1,3 +1,2 @@
|
|
-SUBDIRS=src docs sample
|
|
+SUBDIRS=src gnome-keyring-sharp-glue docs sample
|
|
EXTRA_DIST=Gnome.Keyring.snk
|
|
-
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/autogen.sh gnome-keyring-sharp-1.0.0/autogen.sh
|
|
--- gnome-keyring-sharp-1.0.0~/autogen.sh 1970-01-01 10:00:00.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/autogen.sh 2010-03-30 17:32:02.733918042 +1100
|
|
@@ -0,0 +1,4 @@
|
|
+#! /bin/sh
|
|
+
|
|
+autoreconf -v -i -s
|
|
+./configure $*
|
|
\ No newline at end of file
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/configure.ac gnome-keyring-sharp-1.0.0/configure.ac
|
|
--- gnome-keyring-sharp-1.0.0~/configure.ac 2008-08-09 03:36:12.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/configure.ac 2010-03-30 17:32:02.733918042 +1100
|
|
@@ -3,6 +3,9 @@
|
|
AC_INIT(src/Gnome.Keyring/Ring.cs)
|
|
AC_CANONICAL_SYSTEM
|
|
|
|
+AC_PROG_CC
|
|
+AC_PROG_LIBTOOL
|
|
+
|
|
API_VERSION=1.0
|
|
VERSION=$API_VERSION.0
|
|
|
|
@@ -47,28 +50,13 @@
|
|
GACUTIL_FLAGS='/gacdir $(DESTDIR)$(prefix)'
|
|
AC_SUBST(GACUTIL_FLAGS)
|
|
|
|
-#
|
|
-# Use D-Bus as a fallback to get the keyring socket address
|
|
-#
|
|
-AC_ARG_ENABLE(dbus,
|
|
- [ --enable-dbus[[=no/yes]] compile with D-Bus support [[default: yes]]],
|
|
- ENABLE_DBUS="$enableval")
|
|
-AM_CONDITIONAL(ENABLE_DBUS, test "x$ENABLE_DBUS" != "xno")
|
|
-
|
|
-CSFLAGS=
|
|
-DBUS_LIBS=
|
|
-if test "x$ENABLE_DBUS" != "xno" ; then
|
|
- PKG_CHECK_MODULES(DBUS, ndesk-dbus-1.0 >= 0.4, HAVE_DBUS="yes", HAVE_DBUS="no")
|
|
-
|
|
- if test "x$HAVE_DBUS" = "xno"; then
|
|
- AC_MSG_ERROR($DBUS_PKG_ERRORS: consider passing --enable-dbus=no to configure)
|
|
- fi
|
|
+PKG_CHECK_MODULES(GLIB_SHARP, [glib-sharp-2.0])
|
|
+PKG_CHECK_MODULES(GNOME_KEYRING, [gnome-keyring-1])
|
|
|
|
- CSFLAGS=" -d:WITH_DBUS "
|
|
-fi
|
|
AC_SUBST(CSFLAGS)
|
|
-AC_SUBST(DBUS_LIBS)
|
|
-
|
|
+AC_SUBST(GLIB_SHARP_LIBS)
|
|
+AC_SUBST(GNOME_KEYRING_CFLAGS)
|
|
+AC_SUBST(GNOME_KEYRING_LIBS)
|
|
|
|
AC_PATH_PROG(MDASSEMBLER, mdassembler, no)
|
|
AC_PATH_PROG(MONODOCER, monodocer, no)
|
|
@@ -91,6 +79,7 @@
|
|
src/gnome-keyring-sharp-1.0.pc
|
|
src/Gnome.Keyring/Makefile
|
|
src/Gnome.Keyring/AssemblyInfo.cs
|
|
+ gnome-keyring-sharp-glue/Makefile
|
|
docs/Makefile
|
|
sample/Makefile
|
|
])
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/gnome-keyring-sharp-glue/Makefile.am gnome-keyring-sharp-1.0.0/gnome-keyring-sharp-glue/Makefile.am
|
|
--- gnome-keyring-sharp-1.0.0~/gnome-keyring-sharp-glue/Makefile.am 1970-01-01 10:00:00.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/gnome-keyring-sharp-glue/Makefile.am 2010-03-30 17:32:02.733918042 +1100
|
|
@@ -0,0 +1,6 @@
|
|
+lib_LTLIBRARIES = libgnome-keyring-sharp-glue.la
|
|
+
|
|
+libgnome_keyring_sharp_glue_la_SOURCES = glue.c
|
|
+libgnome_keyring_sharp_glue_la_LDFLAGS = -module -avoid-version -no-undefined
|
|
+libgnome_keyring_sharp_glue_la_LIBADD = $(GNOME_KEYRING_LIBS)
|
|
+libgnome_keyring_sharp_glue_la_CFLAGS = $(GNOME_KEYRING_CFLAGS)
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/gnome-keyring-sharp-glue/glue.c gnome-keyring-sharp-1.0.0/gnome-keyring-sharp-glue/glue.c
|
|
--- gnome-keyring-sharp-1.0.0~/gnome-keyring-sharp-glue/glue.c 1970-01-01 10:00:00.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/gnome-keyring-sharp-glue/glue.c 2010-03-30 17:32:02.733918042 +1100
|
|
@@ -0,0 +1,36 @@
|
|
+#include <gnome-keyring.h>
|
|
+
|
|
+gpointer gks_attribute_list_new ()
|
|
+{
|
|
+ return gnome_keyring_attribute_list_new ();
|
|
+}
|
|
+
|
|
+gint32 gks_item_attribute_list_get_length (GnomeKeyringAttributeList *attrs)
|
|
+{
|
|
+ return (*attrs).len;
|
|
+}
|
|
+
|
|
+gboolean gks_item_attribute_list_index_is_string (GnomeKeyringAttributeList *attrs, gint32 index)
|
|
+{
|
|
+ return gnome_keyring_attribute_list_index (attrs, index).type == GNOME_KEYRING_ATTRIBUTE_TYPE_STRING;
|
|
+}
|
|
+
|
|
+gboolean gks_item_attribute_list_index_is_uint32 (GnomeKeyringAttributeList *attrs, gint32 index)
|
|
+{
|
|
+ return gnome_keyring_attribute_list_index (attrs, index).type == GNOME_KEYRING_ATTRIBUTE_TYPE_UINT32;
|
|
+}
|
|
+
|
|
+char * gks_item_attribute_list_get_index_string (GnomeKeyringAttributeList *attrs, gint32 index)
|
|
+{
|
|
+ return gnome_keyring_attribute_list_index (attrs, index).value.string;
|
|
+}
|
|
+
|
|
+guint32 gks_item_attribute_list_get_index_uint32 (GnomeKeyringAttributeList *attrs, gint32 index)
|
|
+{
|
|
+ return gnome_keyring_attribute_list_index (attrs, index).value.integer;
|
|
+}
|
|
+
|
|
+char * gks_item_attribute_list_get_index_key (GnomeKeyringAttributeList *attrs, gint32 index)
|
|
+{
|
|
+ return gnome_keyring_attribute_list_index (attrs, index).name;
|
|
+}
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring/Makefile.am gnome-keyring-sharp-1.0.0/src/Gnome.Keyring/Makefile.am
|
|
--- gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring/Makefile.am 2008-08-09 03:36:12.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/src/Gnome.Keyring/Makefile.am 2010-03-30 17:32:02.733918042 +1100
|
|
@@ -10,8 +10,5 @@
|
|
KeyringInfo.cs \
|
|
NetItemData.cs \
|
|
NoteItemData.cs \
|
|
- Operation.cs \
|
|
- RequestMessage.cs \
|
|
- ResponseMessage.cs \
|
|
ResultCode.cs \
|
|
Ring.cs
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring/Operation.cs gnome-keyring-sharp-1.0.0/src/Gnome.Keyring/Operation.cs
|
|
--- gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring/Operation.cs 2008-08-09 03:36:12.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/src/Gnome.Keyring/Operation.cs 1970-01-01 10:00:00.000000000 +1000
|
|
@@ -1,54 +0,0 @@
|
|
-//
|
|
-// Gnome.Keyring.Operation.cs
|
|
-//
|
|
-// Authors:
|
|
-// Gonzalo Paniagua Javier (gonzalo@ximian.com)
|
|
-//
|
|
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
|
|
-//
|
|
-
|
|
-// Permission is hereby granted, free of charge, to any person obtaining
|
|
-// a copy of this software and associated documentation files (the
|
|
-// "Software"), to deal in the Software without restriction, including
|
|
-// without limitation the rights to use, copy, modify, merge, publish,
|
|
-// distribute, sublicense, and/or sell copies of the Software, and to
|
|
-// permit persons to whom the Software is furnished to do so, subject to
|
|
-// the following conditions:
|
|
-//
|
|
-// The above copyright notice and this permission notice shall be
|
|
-// included in all copies or substantial portions of the Software.
|
|
-//
|
|
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
-//
|
|
-
|
|
-namespace Gnome.Keyring {
|
|
- enum Operation {
|
|
- LockAll,
|
|
- SetDefaultKeyring,
|
|
- GetDefaultKeyring,
|
|
- ListKeyrings,
|
|
- CreateKeyring,
|
|
- LockKeyring,
|
|
- UnlockKeyring,
|
|
- DeleteKeyring,
|
|
- GetKeyringInfo,
|
|
- SetKeyringInfo,
|
|
- ListItems,
|
|
- Find,
|
|
- CreateItem,
|
|
- DeleteItem,
|
|
- GetItemInfo,
|
|
- SetItemInfo,
|
|
- GetItemAttributes,
|
|
- SetItemAttributes,
|
|
- GetItemACL,
|
|
- SetItemACL
|
|
- }
|
|
-}
|
|
-
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring/RequestMessage.cs gnome-keyring-sharp-1.0.0/src/Gnome.Keyring/RequestMessage.cs
|
|
--- gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring/RequestMessage.cs 2008-08-09 03:36:12.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/src/Gnome.Keyring/RequestMessage.cs 1970-01-01 10:00:00.000000000 +1000
|
|
@@ -1,173 +0,0 @@
|
|
-//
|
|
-// Gnome.Keyring.RequestMessage.cs
|
|
-//
|
|
-// Authors:
|
|
-// Gonzalo Paniagua Javier (gonzalo@ximian.com)
|
|
-//
|
|
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
|
|
-//
|
|
-
|
|
-// Permission is hereby granted, free of charge, to any person obtaining
|
|
-// a copy of this software and associated documentation files (the
|
|
-// "Software"), to deal in the Software without restriction, including
|
|
-// without limitation the rights to use, copy, modify, merge, publish,
|
|
-// distribute, sublicense, and/or sell copies of the Software, and to
|
|
-// permit persons to whom the Software is furnished to do so, subject to
|
|
-// the following conditions:
|
|
-//
|
|
-// The above copyright notice and this permission notice shall be
|
|
-// included in all copies or substantial portions of the Software.
|
|
-//
|
|
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
-//
|
|
-
|
|
-using System;
|
|
-using System.Collections;
|
|
-using System.IO;
|
|
-using System.Text;
|
|
-
|
|
-namespace Gnome.Keyring {
|
|
- class RequestMessage {
|
|
- MemoryStream stream = new MemoryStream ();
|
|
- int op_start = -1;
|
|
-
|
|
- public MemoryStream Stream {
|
|
- get { return stream; }
|
|
- }
|
|
-
|
|
- public void CreateSimpleOperation (Operation op)
|
|
- {
|
|
- StartOperation (op);
|
|
- EndOperation ();
|
|
- }
|
|
-
|
|
- public void CreateSimpleOperation (Operation op, string str1)
|
|
- {
|
|
- StartOperation (op);
|
|
- Write (str1);
|
|
- EndOperation ();
|
|
- }
|
|
-
|
|
- public void CreateSimpleOperation (Operation op, string str1, string str2)
|
|
- {
|
|
- StartOperation (op);
|
|
- Write (str1);
|
|
- Write (str2);
|
|
- EndOperation ();
|
|
- }
|
|
-
|
|
- public void CreateSimpleOperation (Operation op, string str1, int i1)
|
|
- {
|
|
- StartOperation (op);
|
|
- Write (str1);
|
|
- Write (i1);
|
|
- EndOperation ();
|
|
- }
|
|
-
|
|
- public void StartOperation (Operation op)
|
|
- {
|
|
- string appname = Ring.ApplicationName;
|
|
- BinaryWriter writer = new BinaryWriter (stream);
|
|
- writer.Write (0);
|
|
-
|
|
- Write (appname);
|
|
- int curpos = (int) stream.Position;
|
|
- stream.Position = 0;
|
|
- writer = new BinaryWriter (stream);
|
|
- writer.Write (SwapBytes (curpos));
|
|
- stream.Position = curpos;
|
|
-
|
|
- op_start = (int) stream.Length;
|
|
- writer.Write (0);
|
|
- writer.Write (SwapBytes ((int) op));
|
|
- }
|
|
-
|
|
- public void EndOperation ()
|
|
- {
|
|
- int current = (int) stream.Length;
|
|
- int size = SwapBytes (current - op_start);
|
|
- stream.Position = op_start;
|
|
- BinaryWriter writer = new BinaryWriter (stream);
|
|
- writer.Write (size);
|
|
- }
|
|
-
|
|
- public void Write (string str)
|
|
- {
|
|
- WriteString (new BinaryWriter (stream), str);
|
|
- }
|
|
-
|
|
- static void WriteString (BinaryWriter writer, string str)
|
|
- {
|
|
- if (str == null) {
|
|
- writer.Write ((int) -1);
|
|
- return;
|
|
- }
|
|
- byte [] bytes = Encoding.UTF8.GetBytes (str);
|
|
- writer.Write (SwapBytes (bytes.Length));
|
|
- writer.Write (bytes);
|
|
- }
|
|
-
|
|
- public void Write (int i)
|
|
- {
|
|
- BinaryWriter writer = new BinaryWriter (stream);
|
|
- writer.Write (SwapBytes (i));
|
|
- }
|
|
-
|
|
- public void WriteAttributes (Hashtable atts)
|
|
- {
|
|
- Hashtable copy = new Hashtable ();
|
|
- foreach (string key in atts.Keys) {
|
|
- object o = atts [key];
|
|
- if (o != null)
|
|
- copy [key] = o;
|
|
-
|
|
- }
|
|
- BinaryWriter writer = new BinaryWriter (stream);
|
|
- writer.Write (SwapBytes (copy.Count));
|
|
- foreach (string key in copy.Keys) {
|
|
- object o = atts [key];
|
|
- if (o is string) {
|
|
- EncodeAttribute (writer, key, (string) o);
|
|
- } else if (o is int) {
|
|
- int i = (int) o;
|
|
- if (key == "port" && i == 0)
|
|
- continue;
|
|
- EncodeAttribute (writer, key, i);
|
|
- } else {
|
|
- throw new Exception ("Should not happen.");
|
|
- }
|
|
- }
|
|
- }
|
|
-
|
|
- static void EncodeAttribute (BinaryWriter writer, string name, string val)
|
|
- {
|
|
- WriteString (writer, name);
|
|
- writer.Write (SwapBytes ((int) AttributeType.String));
|
|
- WriteString (writer, val);
|
|
- }
|
|
-
|
|
- static void EncodeAttribute (BinaryWriter writer, string name, int val)
|
|
- {
|
|
- WriteString (writer, name);
|
|
- writer.Write (SwapBytes ((int) AttributeType.UInt32));
|
|
- writer.Write (SwapBytes (val));
|
|
- }
|
|
-
|
|
- static int SwapBytes (int i)
|
|
- {
|
|
- byte b0 = (byte) ((i >> 24) & 0xFF);
|
|
- byte b1 = (byte) ((i >> 16) & 0xFF);
|
|
- byte b2 = (byte) ((i >> 8) & 0xFF);
|
|
- byte b3 = (byte) (i & 0xFF);
|
|
- return b0 + (b1 << 8) + (b2 << 16) + (b3 << 24);
|
|
- }
|
|
-
|
|
- }
|
|
-}
|
|
-
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring/ResponseMessage.cs gnome-keyring-sharp-1.0.0/src/Gnome.Keyring/ResponseMessage.cs
|
|
--- gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring/ResponseMessage.cs 2008-08-09 03:36:12.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/src/Gnome.Keyring/ResponseMessage.cs 1970-01-01 10:00:00.000000000 +1000
|
|
@@ -1,108 +0,0 @@
|
|
-//
|
|
-// Gnome.Keyring.ResponseMessage.cs
|
|
-//
|
|
-// Authors:
|
|
-// Gonzalo Paniagua Javier (gonzalo@ximian.com)
|
|
-//
|
|
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
|
|
-//
|
|
-
|
|
-// Permission is hereby granted, free of charge, to any person obtaining
|
|
-// a copy of this software and associated documentation files (the
|
|
-// "Software"), to deal in the Software without restriction, including
|
|
-// without limitation the rights to use, copy, modify, merge, publish,
|
|
-// distribute, sublicense, and/or sell copies of the Software, and to
|
|
-// permit persons to whom the Software is furnished to do so, subject to
|
|
-// the following conditions:
|
|
-//
|
|
-// The above copyright notice and this permission notice shall be
|
|
-// included in all copies or substantial portions of the Software.
|
|
-//
|
|
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
-//
|
|
-
|
|
-using System;
|
|
-using System.Collections;
|
|
-using System.IO;
|
|
-using System.Text;
|
|
-
|
|
-using Mono.Unix.Native;
|
|
-
|
|
-namespace Gnome.Keyring {
|
|
- class ResponseMessage {
|
|
- byte [] buffer;
|
|
- MemoryStream stream;
|
|
-
|
|
- public ResponseMessage (byte [] buffer)
|
|
- {
|
|
- this.buffer = buffer;
|
|
- stream = new MemoryStream (buffer);
|
|
- }
|
|
-
|
|
- public bool DataAvailable {
|
|
- get { return (stream.Position < stream.Length); }
|
|
- }
|
|
-
|
|
- public string [] GetStringList ()
|
|
- {
|
|
- int nstrings = GetInt32 ();
|
|
- string [] list = new string [nstrings];
|
|
- for (int i = 0; i < nstrings; i++) {
|
|
- list [i] = GetString ();
|
|
- }
|
|
-
|
|
- return list;
|
|
- }
|
|
-
|
|
- public string GetString ()
|
|
- {
|
|
- int len = GetInt32 ();
|
|
- if (len == -1) {
|
|
- return null;
|
|
- }
|
|
- int offset = (int) stream.Position;
|
|
- string result = Encoding.UTF8.GetString (buffer, offset, len);
|
|
- stream.Position += len;
|
|
- return result;
|
|
- }
|
|
-
|
|
- public int GetInt32 ()
|
|
- {
|
|
- byte b3 = (byte) stream.ReadByte ();
|
|
- byte b2 = (byte) stream.ReadByte ();
|
|
- byte b1 = (byte) stream.ReadByte ();
|
|
- byte b0 = (byte) stream.ReadByte ();
|
|
- return (b0 + (b1 << 8) + (b2 << 16) + (b3 << 24));
|
|
- }
|
|
-
|
|
- public DateTime GetDateTime ()
|
|
- {
|
|
- return NativeConvert.FromTimeT ((GetInt32 () << 32) + GetInt32 ());
|
|
- }
|
|
-
|
|
- public void ReadAttributes (Hashtable tbl)
|
|
- {
|
|
- int natts = GetInt32 ();
|
|
- for (int i = 0; i < natts; i++) {
|
|
- object val;
|
|
- string name = GetString ();
|
|
- AttributeType type = (AttributeType) GetInt32 ();
|
|
- if (AttributeType.String == type) {
|
|
- val = GetString ();
|
|
- } else if (type == AttributeType.UInt32) {
|
|
- val = GetInt32 ();
|
|
- } else {
|
|
- throw new Exception ("This should not happen: " + type);
|
|
- }
|
|
- tbl [name] = val;
|
|
- }
|
|
- }
|
|
- }
|
|
-}
|
|
-
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring/Ring.cs gnome-keyring-sharp-1.0.0/src/Gnome.Keyring/Ring.cs
|
|
--- gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring/Ring.cs 2008-08-09 03:36:12.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/src/Gnome.Keyring/Ring.cs 2010-03-30 17:32:02.733918042 +1100
|
|
@@ -31,16 +31,16 @@
|
|
|
|
using System;
|
|
using System.Collections;
|
|
+using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Reflection;
|
|
+using System.Runtime.InteropServices;
|
|
|
|
using Mono.Unix;
|
|
|
|
-#if WITH_DBUS
|
|
-using NDesk.DBus;
|
|
-#endif
|
|
+using GLib;
|
|
|
|
namespace Gnome.Keyring {
|
|
public class Ring {
|
|
@@ -70,394 +70,579 @@
|
|
}
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern bool gnome_keyring_is_available ();
|
|
+
|
|
public static bool Available {
|
|
get {
|
|
- Socket sock = Connect ();
|
|
- if (sock != null) {
|
|
- sock.Close ();
|
|
- return true;
|
|
- }
|
|
- return false;
|
|
- }
|
|
- }
|
|
-
|
|
- static Socket Connect ()
|
|
- {
|
|
- string filename;
|
|
- Socket sock;
|
|
-
|
|
- filename = Environment.GetEnvironmentVariable ("GNOME_KEYRING_SOCKET");
|
|
- sock = Connect (filename);
|
|
-
|
|
-#if WITH_DBUS
|
|
- if (sock == null) {
|
|
- try {
|
|
- filename = Bus.Session.GetObject<IDaemon> ("org.gnome.keyring", new ObjectPath ("/org/gnome/keyring/daemon")).GetSocketPath ();
|
|
- } catch (Exception) {
|
|
- filename = null;
|
|
- }
|
|
- sock = Connect (filename);
|
|
- }
|
|
-#endif
|
|
-
|
|
- return sock;
|
|
- }
|
|
-
|
|
- static Socket Connect (string filename)
|
|
- {
|
|
- if (filename == null || filename == "")
|
|
- return null;
|
|
-
|
|
- EndPoint ep = new UnixEndPoint (filename);
|
|
- Socket sock = new Socket (AddressFamily.Unix, SocketType.Stream, ProtocolType.IP);
|
|
- try {
|
|
- sock.Connect (ep);
|
|
- } catch (Exception) {
|
|
- sock.Close ();
|
|
- return null;
|
|
- }
|
|
- return sock;
|
|
- }
|
|
-
|
|
- static int GetInt32 (Socket sock)
|
|
- {
|
|
- byte [] cuatro = new byte [4];
|
|
- if (sock.Receive (cuatro) != 4)
|
|
- throw new KeyringException (ResultCode.IOError);
|
|
- return (cuatro [3] + (cuatro [2] << 8) + (cuatro [1] << 16) + (cuatro [0] << 24));
|
|
- }
|
|
-
|
|
- static byte [] one = new byte [1];
|
|
- static ResponseMessage SendRequest (MemoryStream stream)
|
|
- {
|
|
- Socket sock = Connect ();
|
|
- if (sock == null)
|
|
- throw new KeyringException (ResultCode.NoKeyringDaemon);
|
|
-
|
|
- try {
|
|
- sock.Send (one); // Credentials byte
|
|
- byte [] buffer = stream.ToArray ();
|
|
- sock.Send (buffer);
|
|
- int packet_size = GetInt32 (sock) - 4;
|
|
- if (packet_size < 0)
|
|
- throw new KeyringException (ResultCode.IOError);
|
|
- byte [] response = new byte [packet_size];
|
|
- int nbytes = sock.Receive (response);
|
|
- if (nbytes != response.Length)
|
|
- throw new KeyringException (ResultCode.IOError);
|
|
- ResponseMessage resp = new ResponseMessage (response);
|
|
- ResultCode result = (ResultCode) resp.GetInt32 ();
|
|
- if (result != 0)
|
|
- throw new KeyringException (result);
|
|
-
|
|
- return resp;
|
|
- } finally {
|
|
- sock.Close ();
|
|
+ return gnome_keyring_is_available ();
|
|
}
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_lock_all_sync ();
|
|
+
|
|
public static void LockAll ()
|
|
{
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.LockAll);
|
|
- SendRequest (req.Stream);
|
|
+ ResultCode result = gnome_keyring_lock_all_sync ();
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_set_default_keyring_sync (string keyring);
|
|
+
|
|
public static void SetDefaultKeyring (string newKeyring)
|
|
{
|
|
if (newKeyring == null)
|
|
throw new ArgumentNullException ("newKeyring");
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.SetDefaultKeyring, newKeyring);
|
|
- SendRequest (req.Stream);
|
|
+ ResultCode result = gnome_keyring_set_default_keyring_sync (newKeyring);
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_get_default_keyring_sync (out IntPtr keyring);
|
|
+
|
|
public static string GetDefaultKeyring ()
|
|
{
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.GetDefaultKeyring);
|
|
- ResponseMessage resp = SendRequest (req.Stream);
|
|
- return resp.GetString ();
|
|
+ IntPtr keyring_name;
|
|
+ ResultCode result = gnome_keyring_get_default_keyring_sync (out keyring_name);
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
+ return GLib.Marshaller.PtrToStringGFree (keyring_name);
|
|
}
|
|
|
|
- public static string [] GetKeyrings ()
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_list_keyring_names_sync (out IntPtr keyringList);
|
|
+
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_string_list_free (IntPtr stringList);
|
|
+
|
|
+ public static string[] GetKeyrings ()
|
|
{
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.ListKeyrings);
|
|
- ResponseMessage resp = SendRequest (req.Stream);
|
|
- return resp.GetStringList ();
|
|
+ IntPtr keyring_list;
|
|
+ ResultCode result = gnome_keyring_list_keyring_names_sync (out keyring_list);
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
+ var retval = (string[])GLib.Marshaller.ListPtrToArray (keyring_list, typeof(GLib.List), false, false, typeof(string));
|
|
+ gnome_keyring_string_list_free (keyring_list);
|
|
+ return retval;
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_create_sync (string keyringName, string password);
|
|
+
|
|
public static void CreateKeyring (string name, string password)
|
|
{
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.CreateKeyring, name, password);
|
|
- SendRequest (req.Stream);
|
|
+ ResultCode result = gnome_keyring_create_sync (name, password);
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
}
|
|
-
|
|
+
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_lock_sync (string keyring);
|
|
+
|
|
public static void Lock (string keyring)
|
|
{
|
|
if (keyring == null)
|
|
throw new ArgumentNullException ("keyring");
|
|
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.LockKeyring, keyring);
|
|
- SendRequest (req.Stream);
|
|
+ ResultCode result = gnome_keyring_lock_sync (keyring);
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
}
|
|
+
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_unlock_sync (string keyring, string password);
|
|
|
|
public static void Unlock (string keyring, string password)
|
|
{
|
|
- if (keyring == null)
|
|
- throw new ArgumentNullException ("keyring");
|
|
-
|
|
- if (password == null)
|
|
- throw new ArgumentNullException ("password");
|
|
-
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.UnlockKeyring, keyring, password);
|
|
- try {
|
|
- SendRequest (req.Stream);
|
|
- } catch (KeyringException ke) {
|
|
- if (ke.ResultCode != ResultCode.AlreadyUnlocked)
|
|
- throw;
|
|
+ ResultCode result = gnome_keyring_unlock_sync (keyring, password);
|
|
+
|
|
+ if (!(result == ResultCode.Ok || result == ResultCode.AlreadyUnlocked)) {
|
|
+ throw new KeyringException (result);
|
|
}
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_delete_sync (string keyring);
|
|
+
|
|
public static void DeleteKeyring (string keyring)
|
|
{
|
|
if (keyring == null)
|
|
throw new ArgumentNullException ("keyring");
|
|
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.DeleteKeyring, keyring);
|
|
- SendRequest (req.Stream);
|
|
+ ResultCode result = gnome_keyring_delete_sync (keyring);
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
}
|
|
|
|
- public static int [] ListItemIDs (string keyring)
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_list_item_ids_sync (string keyring, out IntPtr ids);
|
|
+
|
|
+ public static int[] ListItemIDs (string keyring)
|
|
{
|
|
if (keyring == null)
|
|
throw new ArgumentNullException ("keyring");
|
|
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.ListItems, keyring);
|
|
- ResponseMessage resp = SendRequest (req.Stream);
|
|
- int len = resp.GetInt32 ();
|
|
- int [] result = new int [len];
|
|
- for (int i = 0; i < len; i++) {
|
|
- result [i] = resp.GetInt32 ();
|
|
+ IntPtr idlist;
|
|
+ ResultCode result = gnome_keyring_list_item_ids_sync (keyring, out idlist);
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
}
|
|
-
|
|
- return result;
|
|
+
|
|
+ IntPtr[] ptrArray = (IntPtr[])GLib.Marshaller.ListPtrToArray (idlist, typeof(GLib.List), true, false, typeof(IntPtr));
|
|
+ int[] ids = new int[ptrArray.Length];
|
|
+ for (int i = 0; i < ptrArray.Length; i++) {
|
|
+ ids[i] = ptrArray[i].ToInt32 ();
|
|
+ }
|
|
+
|
|
+ return ids;
|
|
}
|
|
|
|
+
|
|
+ static void NativeListFromAttributes (IntPtr attrList, Hashtable attributes)
|
|
+ {
|
|
+ foreach (string key in attributes.Keys) {
|
|
+ if (attributes[key] is string) {
|
|
+ gnome_keyring_attribute_list_append_string (attrList, key, (string)attributes[key]);
|
|
+ } else if (attributes[key] is int) {
|
|
+ gnome_keyring_attribute_list_append_uint32 (attrList, key, (uint)((int)attributes[key]));
|
|
+ } else {
|
|
+ throw new ArgumentException (String.Format ("Attribute \"{0}\" has invalid parameter type: {1}", key, attributes[key].GetType ()));
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ static void AttributesFromNativeList (IntPtr attrList, Hashtable attributes)
|
|
+ {
|
|
+ int listLength = gks_item_attribute_list_get_length (attrList);
|
|
+ for (int i = 0; i < listLength; i++) {
|
|
+ string key = Marshal.PtrToStringAnsi (gks_item_attribute_list_get_index_key (attrList, i));
|
|
+ if (gks_item_attribute_list_index_is_string (attrList, i)) {
|
|
+ attributes[key] = Marshal.PtrToStringAnsi (gks_item_attribute_list_get_index_string (attrList, i));
|
|
+ } else if (gks_item_attribute_list_index_is_uint32 (attrList, i)) {
|
|
+ attributes[key] = (int)gks_item_attribute_list_get_index_uint32 (attrList, i);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ [StructLayout(LayoutKind.Sequential)]
|
|
+ struct GnomeKeyringFound
|
|
+ {
|
|
+ public IntPtr keyring;
|
|
+ public UInt32 item_id;
|
|
+ public IntPtr attrList;
|
|
+ public IntPtr secret;
|
|
+ }
|
|
+
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_find_items_sync (ItemType type, IntPtr attrList, out IntPtr foundList);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_found_list_free (IntPtr foundList);
|
|
+
|
|
static ItemData [] empty_item_data = new ItemData [0];
|
|
- public static ItemData [] Find (ItemType type, Hashtable atts)
|
|
+ public static ItemData[] Find (ItemType type, Hashtable atts)
|
|
{
|
|
if (atts == null)
|
|
throw new ArgumentNullException ("atts");
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.StartOperation (Operation.Find);
|
|
- req.Write ((int) type);
|
|
- req.WriteAttributes (atts);
|
|
- req.EndOperation ();
|
|
-
|
|
- ResponseMessage resp = null;
|
|
- try {
|
|
- resp = SendRequest (req.Stream);
|
|
- } catch (KeyringException ke) {
|
|
- if (ke.ResultCode == ResultCode.Denied)
|
|
- return empty_item_data;
|
|
- throw;
|
|
+
|
|
+ IntPtr passwordList;
|
|
+ IntPtr attrList = gks_attribute_list_new ();
|
|
+
|
|
+ NativeListFromAttributes (attrList, atts);
|
|
+
|
|
+ ResultCode result = gnome_keyring_find_items_sync (type, attrList, out passwordList);
|
|
+
|
|
+ if (result == ResultCode.Denied) {
|
|
+ return empty_item_data;
|
|
+ }
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
+
|
|
+ IntPtr[] passwordStructs = (IntPtr[])GLib.Marshaller.ListPtrToArray (passwordList, typeof(GLib.List), false, false, typeof(IntPtr));
|
|
+ List<GnomeKeyringFound> passwords = new List<GnomeKeyringFound> ();
|
|
+
|
|
+ foreach (IntPtr ptr in passwordStructs) {
|
|
+ passwords.Add ((GnomeKeyringFound)Marshal.PtrToStructure (ptr, typeof(GnomeKeyringFound)));
|
|
}
|
|
|
|
ArrayList list = new ArrayList ();
|
|
- while (resp.DataAvailable) {
|
|
+ foreach (var password in passwords) {
|
|
ItemData found = ItemData.GetInstanceFromItemType (type);
|
|
- found.Keyring = resp.GetString ();
|
|
- found.ItemID = resp.GetInt32 ();
|
|
- found.Secret = resp.GetString ();
|
|
+ found.ItemID = (int)password.item_id;
|
|
+ found.Secret = Marshal.PtrToStringAnsi (password.secret);
|
|
+ found.Keyring = Marshal.PtrToStringAnsi (password.keyring);
|
|
found.Attributes = new Hashtable ();
|
|
- resp.ReadAttributes (found.Attributes);
|
|
+ AttributesFromNativeList (password.attrList, found.Attributes);
|
|
found.SetValuesFromAttributes ();
|
|
list.Add (found);
|
|
}
|
|
|
|
+ gnome_keyring_found_list_free (passwordList);
|
|
+ gnome_keyring_attribute_list_free (attrList);
|
|
+
|
|
return (ItemData []) list.ToArray (typeof (ItemData));
|
|
}
|
|
|
|
+ [StructLayout (LayoutKind.Sequential)]
|
|
+ struct GnomeKeyringNetworkPasswordData
|
|
+ {
|
|
+ public IntPtr keyring;
|
|
+ public UInt32 item_id;
|
|
+
|
|
+ public IntPtr protocol;
|
|
+ public IntPtr server;
|
|
+ public IntPtr @object;
|
|
+ public IntPtr authtype;
|
|
+ public UInt32 port;
|
|
+
|
|
+ public IntPtr user;
|
|
+ public IntPtr domain;
|
|
+ public IntPtr password;
|
|
+ }
|
|
+
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_find_network_password_sync (string user, string domain, string server,
|
|
+ string @object, string protocol, string authtype, UInt32 port, out IntPtr passwordList);
|
|
+
|
|
static NetItemData [] empty_net_item_data = new NetItemData [0];
|
|
- public static NetItemData [] FindNetworkPassword (string user, string domain, string server, string obj,
|
|
+ public static NetItemData[] FindNetworkPassword (string user, string domain, string server, string obj,
|
|
string protocol, string authtype, int port)
|
|
{
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.StartOperation (Operation.Find);
|
|
- req.Write ((int) ItemType.NetworkPassword);
|
|
- Hashtable tbl = new Hashtable ();
|
|
- tbl ["user"] = user;
|
|
- tbl ["domain"] = domain;
|
|
- tbl ["server"] = server;
|
|
- tbl ["object"] = obj;
|
|
- tbl ["protocol"] = protocol;
|
|
- tbl ["authtype"] = authtype;
|
|
- if (port != 0)
|
|
- tbl ["port"] = port;
|
|
- req.WriteAttributes (tbl);
|
|
- req.EndOperation ();
|
|
-
|
|
- ResponseMessage resp = null;
|
|
- try {
|
|
- resp = SendRequest (req.Stream);
|
|
- } catch (KeyringException ke) {
|
|
- if (ke.ResultCode == ResultCode.Denied)
|
|
- return empty_net_item_data;
|
|
- throw;
|
|
+ IntPtr passwordList;
|
|
+
|
|
+ ResultCode result = gnome_keyring_find_network_password_sync (user, domain, server, obj, protocol, authtype, (uint)port, out passwordList);
|
|
+
|
|
+ if (result == ResultCode.Denied) {
|
|
+ return empty_net_item_data;
|
|
+ }
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
}
|
|
+
|
|
+ IntPtr[] passwordStructs = (IntPtr[])GLib.Marshaller.ListPtrToArray (passwordList, typeof(GLib.List), false, false, typeof(IntPtr));
|
|
+ List<GnomeKeyringNetworkPasswordData> passwords = new List<GnomeKeyringNetworkPasswordData> ();
|
|
+
|
|
+ foreach (IntPtr ptr in passwordStructs) {
|
|
+ passwords.Add ((GnomeKeyringNetworkPasswordData)Marshal.PtrToStructure (ptr, typeof(GnomeKeyringNetworkPasswordData)));
|
|
+ }
|
|
+
|
|
ArrayList list = new ArrayList ();
|
|
- while (resp.DataAvailable) {
|
|
+ foreach (var password in passwords) {
|
|
NetItemData found = new NetItemData ();
|
|
- found.Keyring = resp.GetString ();
|
|
- found.ItemID = resp.GetInt32 ();
|
|
- found.Secret = resp.GetString ();
|
|
+ found.Keyring = Marshal.PtrToStringAnsi (password.keyring);
|
|
+ found.ItemID = (int)password.item_id;
|
|
+ found.Secret = Marshal.PtrToStringAnsi (password.password);
|
|
found.Attributes = new Hashtable ();
|
|
- resp.ReadAttributes (found.Attributes);
|
|
+
|
|
+ SetAttributeIfNonNull (found.Attributes, "protocol", password.protocol);
|
|
+ SetAttributeIfNonNull (found.Attributes, "server", password.server);
|
|
+ SetAttributeIfNonNull (found.Attributes, "object", password.@object);
|
|
+ SetAttributeIfNonNull (found.Attributes, "authtype", password.authtype);
|
|
+ SetAttributeIfNonNull (found.Attributes, "user", password.user);
|
|
+ SetAttributeIfNonNull (found.Attributes, "domain", password.domain);
|
|
+
|
|
+ if (password.port != 0) {
|
|
+ found.Attributes["port"] = (int)password.port;
|
|
+ }
|
|
+
|
|
found.SetValuesFromAttributes ();
|
|
list.Add (found);
|
|
}
|
|
|
|
return (NetItemData []) list.ToArray (typeof (NetItemData));
|
|
}
|
|
+
|
|
+ static void SetAttributeIfNonNull (Hashtable attrs, string key, IntPtr maybeString)
|
|
+ {
|
|
+ if (maybeString != IntPtr.Zero) {
|
|
+ attrs[key] = Marshal.PtrToStringAnsi (maybeString);
|
|
+ }
|
|
+ }
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_item_create_sync (string keyring,
|
|
+ ItemType type,
|
|
+ string displayName,
|
|
+ IntPtr attributes,
|
|
+ IntPtr secret,
|
|
+ bool updateIfExists,
|
|
+ out UInt32 itemId);
|
|
+
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern IntPtr gnome_keyring_memory_strdup (string str);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_memory_free (IntPtr str);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_attribute_list_append_string (IntPtr attributes, string name, string val);
|
|
+ [DllImport("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_attribute_list_append_uint32 (IntPtr attributes, string name, UInt32 val);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_attribute_list_free (IntPtr attributes);
|
|
+ [DllImport ("gnome-keyring-sharp-glue.dll")]
|
|
+ static extern IntPtr gks_attribute_list_new ();
|
|
+
|
|
public static int CreateItem (string keyring, ItemType type, string displayName, Hashtable attributes,
|
|
string secret, bool updateIfExists)
|
|
{
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.StartOperation (Operation.CreateItem);
|
|
- req.Write (keyring);
|
|
- req.Write (displayName);
|
|
- req.Write (secret);
|
|
- req.WriteAttributes (attributes);
|
|
- req.Write ((int) type);
|
|
- req.Write (updateIfExists ? 1 : 0);
|
|
- req.EndOperation ();
|
|
- ResponseMessage resp = SendRequest (req.Stream);
|
|
- return resp.GetInt32 ();
|
|
+ uint id;
|
|
+ IntPtr secure_secret = gnome_keyring_memory_strdup (secret);
|
|
+ IntPtr attrs = gks_attribute_list_new ();
|
|
+
|
|
+ NativeListFromAttributes (attrs, attributes);
|
|
+
|
|
+ ResultCode result = gnome_keyring_item_create_sync (keyring, type, displayName, attrs, secure_secret, updateIfExists, out id);
|
|
+
|
|
+ gnome_keyring_attribute_list_free (attrs);
|
|
+ gnome_keyring_memory_free (secure_secret);
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
+
|
|
+ return (int)id;
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_item_delete_sync (string keyring, UInt32 id);
|
|
+
|
|
public static void DeleteItem (string keyring, int id)
|
|
{
|
|
if (keyring == null)
|
|
throw new ArgumentNullException ("keyring");
|
|
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.DeleteItem, keyring, id);
|
|
- SendRequest (req.Stream);
|
|
+ ResultCode result = gnome_keyring_item_delete_sync (keyring, (uint)id);
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_set_network_password_sync (string keyring,
|
|
+ string user,
|
|
+ string domain,
|
|
+ string server,
|
|
+ string @object,
|
|
+ string protocol,
|
|
+ string authType,
|
|
+ UInt32 port,
|
|
+ string password,
|
|
+ out UInt32 id);
|
|
+
|
|
public static int CreateOrModifyNetworkPassword (string keyring, string user, string domain, string server, string obj,
|
|
string protocol, string authtype, int port, string password)
|
|
{
|
|
- Hashtable tbl = new Hashtable ();
|
|
- tbl ["user"] = user;
|
|
- tbl ["domain"] = domain;
|
|
- tbl ["server"] = server;
|
|
- tbl ["object"] = obj;
|
|
- tbl ["protocol"] = protocol;
|
|
- tbl ["authtype"] = authtype;
|
|
- if (port != 0)
|
|
- tbl ["port"] = port;
|
|
-
|
|
- string display_name;
|
|
- if (port != 0)
|
|
- display_name = String.Format ("{0}@{1}:{3}/{2}", user, server, obj, port);
|
|
- else
|
|
- display_name = String.Format ("{0}@{1}/{2}", user, server, obj);
|
|
-
|
|
- return CreateItem (keyring, ItemType.NetworkPassword, display_name, tbl, password, true);
|
|
+ uint id;
|
|
+ ResultCode result = gnome_keyring_set_network_password_sync (keyring, user, domain, server, obj, protocol, authtype, (uint)port, password, out id);
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
+
|
|
+ return (int)id;
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_item_get_info_sync (string keyring, UInt32 id, out IntPtr itemInfo);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ItemType gnome_keyring_item_info_get_type (IntPtr itemInfo);
|
|
+ [DllImport("libgnome-keyring.dll")]
|
|
+ static extern IntPtr gnome_keyring_item_info_get_ctime (IntPtr itemInfo);
|
|
+ [DllImport("libgnome-keyring.dll")]
|
|
+ static extern IntPtr gnome_keyring_item_info_get_mtime (IntPtr itemInfo);
|
|
+ [DllImport("libgnome-keyring.dll")]
|
|
+ static extern IntPtr gnome_keyring_item_info_get_display_name (IntPtr itemInfo);
|
|
+ [DllImport("libgnome-keyring.dll")]
|
|
+ static extern IntPtr gnome_keyring_item_info_get_secret (IntPtr itemInfo);
|
|
+ [DllImport("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_item_info_free (IntPtr itemInfo);
|
|
+
|
|
public static ItemData GetItemInfo (string keyring, int id)
|
|
{
|
|
if (keyring == null)
|
|
throw new ArgumentNullException ("keyring");
|
|
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.GetItemInfo, keyring, id);
|
|
- ResponseMessage resp = SendRequest (req.Stream);
|
|
- ItemType itype = (ItemType) resp.GetInt32 ();
|
|
- ItemData item = ItemData.GetInstanceFromItemType (itype);
|
|
- string name = resp.GetString ();
|
|
- string secret = resp.GetString ();
|
|
- DateTime mtime = resp.GetDateTime ();
|
|
- DateTime ctime = resp.GetDateTime ();
|
|
+ IntPtr itemInfo;
|
|
+
|
|
+ ResultCode result = gnome_keyring_item_get_info_sync (keyring, (uint)id, out itemInfo);
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
+
|
|
+ ItemData item = ItemData.GetInstanceFromItemType (gnome_keyring_item_info_get_type (itemInfo));
|
|
+ item.Attributes = new Hashtable ();
|
|
+ item.Attributes["keyring_ctime"] = GLib.Marshaller.time_tToDateTime (gnome_keyring_item_info_get_ctime (itemInfo));
|
|
+ item.Attributes["keyring_mtime"] = GLib.Marshaller.time_tToDateTime (gnome_keyring_item_info_get_mtime (itemInfo));
|
|
+ item.Attributes["name"] = Marshal.PtrToStringAnsi (gnome_keyring_item_info_get_display_name (itemInfo));
|
|
+
|
|
item.Keyring = keyring;
|
|
item.ItemID = id;
|
|
- item.Secret = secret;
|
|
- Hashtable tbl = new Hashtable ();
|
|
- tbl ["name"] = name;
|
|
- tbl ["keyring_ctime"] = ctime;
|
|
- tbl ["keyring_mtime"] = mtime;
|
|
- item.Attributes = tbl;
|
|
+ item.Secret = Marshal.PtrToStringAnsi (gnome_keyring_item_info_get_secret (itemInfo));
|
|
+
|
|
item.SetValuesFromAttributes ();
|
|
+
|
|
+ gnome_keyring_item_info_free (itemInfo);
|
|
+
|
|
return item;
|
|
}
|
|
+
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_item_set_info_sync (string keyring, UInt32 id, IntPtr itemInfo);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern IntPtr gnome_keyring_item_info_new ();
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_item_info_set_display_name (IntPtr itemInfo, string displayName);
|
|
+ [DllImport("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_item_info_set_type (IntPtr itemInfo, ItemType type);
|
|
+ [DllImport("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_item_info_set_secret (IntPtr itemInfo, string secret);
|
|
|
|
public static void SetItemInfo (string keyring, int id, ItemType type, string displayName, string secret)
|
|
{
|
|
if (keyring == null)
|
|
throw new ArgumentNullException ("keyring");
|
|
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.StartOperation (Operation.SetItemInfo);
|
|
- req.Write (keyring);
|
|
- req.Write (id);
|
|
- req.Write ((int) type);
|
|
- req.Write (displayName);
|
|
- req.Write (secret);
|
|
- req.EndOperation ();
|
|
- SendRequest (req.Stream);
|
|
+ IntPtr itemInfo = gnome_keyring_item_info_new ();
|
|
+ gnome_keyring_item_info_set_display_name (itemInfo, displayName);
|
|
+ gnome_keyring_item_info_set_type (itemInfo, type);
|
|
+ gnome_keyring_item_info_set_secret (itemInfo, secret);
|
|
+
|
|
+ ResultCode result = gnome_keyring_item_set_info_sync (keyring, (uint)id, itemInfo);
|
|
+
|
|
+ gnome_keyring_item_info_free (itemInfo);
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_item_get_attributes_sync (string keyring, UInt32 id, out IntPtr attributes);
|
|
+ [DllImport ("gnome-keyring-sharp-glue.dll")]
|
|
+ static extern int gks_item_attribute_list_get_length (IntPtr attrList);
|
|
+ [DllImport ("gnome-keyring-sharp-glue.dll")]
|
|
+ static extern bool gks_item_attribute_list_index_is_string (IntPtr attrList, int index);
|
|
+ [DllImport("gnome-keyring-sharp-glue.dll")]
|
|
+ static extern bool gks_item_attribute_list_index_is_uint32 (IntPtr attrList, int index);
|
|
+ [DllImport ("gnome-keyring-sharp-glue.dll")]
|
|
+ static extern IntPtr gks_item_attribute_list_get_index_string (IntPtr attrList, int index);
|
|
+ [DllImport ("gnome-keyring-sharp-glue.dll")]
|
|
+ static extern UInt32 gks_item_attribute_list_get_index_uint32 (IntPtr attrList, int index);
|
|
+ [DllImport ("gnome-keyring-sharp-glue.dll")]
|
|
+ static extern IntPtr gks_item_attribute_list_get_index_key (IntPtr attrList, int index);
|
|
+
|
|
public static Hashtable GetItemAttributes (string keyring, int id)
|
|
{
|
|
if (keyring == null)
|
|
throw new ArgumentNullException ("keyring");
|
|
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.GetItemAttributes, keyring, id);
|
|
- ResponseMessage resp = SendRequest (req.Stream);
|
|
- Hashtable tbl = new Hashtable ();
|
|
- resp.ReadAttributes (tbl);
|
|
- return tbl;
|
|
+ IntPtr attributes;
|
|
+ Hashtable retVal = new Hashtable ();
|
|
+
|
|
+ ResultCode result = gnome_keyring_item_get_attributes_sync (keyring, (uint)id, out attributes);
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
+
|
|
+ AttributesFromNativeList (attributes, retVal);
|
|
+
|
|
+ gnome_keyring_attribute_list_free (attributes);
|
|
+
|
|
+ return retVal;
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_item_set_attributes_sync (string keyring, UInt32 id, IntPtr attrList);
|
|
+
|
|
public static void SetItemAttributes (string keyring, int id, Hashtable atts)
|
|
{
|
|
if (keyring == null)
|
|
throw new ArgumentNullException ("keyring");
|
|
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.StartOperation (Operation.SetItemAttributes);
|
|
- req.Write (keyring);
|
|
- req.Write (id);
|
|
- req.WriteAttributes (atts);
|
|
- req.EndOperation ();
|
|
- SendRequest (req.Stream);
|
|
+ IntPtr attrList = gks_attribute_list_new ();
|
|
+ foreach (string key in atts.Keys) {
|
|
+ if (atts[key] is string) {
|
|
+ gnome_keyring_attribute_list_append_string (attrList, key, (string)atts[key]);
|
|
+ } else if (atts[key] is int) {
|
|
+ gnome_keyring_attribute_list_append_uint32 (attrList, key, (uint)((int)atts[key]));
|
|
+ } else {
|
|
+ throw new ArgumentException (String.Format ("Attribute \"{0}\" has invalid parameter type: {1}", key, atts[key].GetType ()));
|
|
+ }
|
|
+ }
|
|
+
|
|
+ ResultCode result = gnome_keyring_item_set_attributes_sync (keyring, (uint)id, attrList);
|
|
+
|
|
+ gnome_keyring_attribute_list_free (attrList);
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
}
|
|
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_get_info_sync (string keyringName, out IntPtr keyringInfo);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_info_free (IntPtr keyringInfo);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern IntPtr gnome_keyring_info_get_ctime (IntPtr keyringInfo);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern IntPtr gnome_keyring_info_get_mtime (IntPtr keyringInfo);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern int gnome_keyring_info_get_lock_timeout (IntPtr keyringInfo);
|
|
+ [DllImport("libgnome-keyring.dll")]
|
|
+ static extern bool gnome_keyring_info_get_is_locked (IntPtr keyringInfo);
|
|
+ [DllImport("libgnome-keyring.dll")]
|
|
+ static extern bool gnome_keyring_info_get_lock_on_idle (IntPtr keyringInfo);
|
|
+
|
|
public static KeyringInfo GetKeyringInfo (string keyring)
|
|
{
|
|
if (keyring == null)
|
|
throw new ArgumentNullException ("keyring");
|
|
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.GetKeyringInfo, keyring);
|
|
- ResponseMessage resp = SendRequest (req.Stream);
|
|
- return new KeyringInfo (keyring, (resp.GetInt32 () != 0),
|
|
- resp.GetInt32 (),
|
|
- resp.GetDateTime (),
|
|
- resp.GetDateTime (),
|
|
- (resp.GetInt32 () != 0));
|
|
+ IntPtr keyring_info = IntPtr.Zero;
|
|
+ ResultCode result = gnome_keyring_get_info_sync (keyring, out keyring_info);
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
+
|
|
+ DateTime ctime = GLib.Marshaller.time_tToDateTime (gnome_keyring_info_get_ctime (keyring_info));
|
|
+ DateTime mtime = GLib.Marshaller.time_tToDateTime (gnome_keyring_info_get_mtime (keyring_info));
|
|
+ KeyringInfo retval = new KeyringInfo (keyring,
|
|
+ gnome_keyring_info_get_lock_on_idle (keyring_info),
|
|
+ gnome_keyring_info_get_lock_timeout (keyring_info),
|
|
+ mtime,
|
|
+ ctime,
|
|
+ gnome_keyring_info_get_is_locked (keyring_info)
|
|
+ );
|
|
+
|
|
+
|
|
+ gnome_keyring_info_free (keyring_info);
|
|
+ return retval;
|
|
}
|
|
+
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern ResultCode gnome_keyring_set_info_sync (string keyring, IntPtr keyringInfo);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_info_set_lock_timeout (IntPtr keyringInfo, UInt32 timeout);
|
|
+ [DllImport ("libgnome-keyring.dll")]
|
|
+ static extern void gnome_keyring_info_set_lock_on_idle (IntPtr keyringInfo, bool lockOnIdle);
|
|
|
|
public static void SetKeyringInfo (string keyring, KeyringInfo info)
|
|
{
|
|
@@ -467,41 +652,47 @@
|
|
if (info == null)
|
|
throw new ArgumentNullException ("info");
|
|
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.StartOperation (Operation.SetKeyringInfo);
|
|
- req.Write (keyring);
|
|
- req.Write (info.LockOnIdle ? 1 : 0);
|
|
- req.Write (info.LockTimeoutSeconds);
|
|
- req.EndOperation ();
|
|
- SendRequest (req.Stream);
|
|
+
|
|
+ IntPtr keyring_info;
|
|
+ ResultCode result = gnome_keyring_get_info_sync (keyring, out keyring_info);
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
+
|
|
+ gnome_keyring_info_set_lock_timeout (keyring_info, (uint)info.LockTimeoutSeconds);
|
|
+ gnome_keyring_info_set_lock_on_idle (keyring_info, info.LockOnIdle);
|
|
+
|
|
+ result = gnome_keyring_set_info_sync (keyring, keyring_info);
|
|
+
|
|
+ gnome_keyring_info_free (keyring_info);
|
|
+
|
|
+ if (result != ResultCode.Ok) {
|
|
+ throw new KeyringException (result);
|
|
+ }
|
|
}
|
|
|
|
+ [Obsolete ("Item ACLs are deprecated. GetItemACL never returns any ACLs")]
|
|
public static ArrayList GetItemACL (string keyring, int id)
|
|
{
|
|
if (keyring == null)
|
|
throw new ArgumentNullException ("keyring");
|
|
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.CreateSimpleOperation (Operation.GetItemACL, keyring, id);
|
|
- ResponseMessage resp = SendRequest (req.Stream);
|
|
- int count = resp.GetInt32 ();
|
|
- ArrayList list = new ArrayList (count);
|
|
- for (int i = 0; i < count; i++) {
|
|
- list.Add (new ItemACL (resp.GetString (), resp.GetString (), (AccessRights) resp.GetInt32 ()));
|
|
- }
|
|
- return list;
|
|
+ return new ArrayList ();
|
|
}
|
|
|
|
+ [Obsolete("Item ACLs are deprecated. SetItemACL has no effect.")]
|
|
public static void SetItemACL (string keyring, int id, ICollection acls)
|
|
{
|
|
if (acls == null)
|
|
throw new ArgumentNullException ("acls");
|
|
|
|
- ItemACL [] arr = new ItemACL [acls.Count];
|
|
+ ItemACL[] arr = new ItemACL[acls.Count];
|
|
acls.CopyTo (arr, 0);
|
|
SetItemACL (keyring, id, arr);
|
|
}
|
|
-
|
|
+
|
|
+ [Obsolete("Item ACLs are deprecated. SetItemACL has no effect.")]
|
|
public static void SetItemACL (string keyring, int id, ItemACL [] acls)
|
|
{
|
|
if (keyring == null)
|
|
@@ -512,28 +703,6 @@
|
|
|
|
if (acls.Length == 0)
|
|
throw new ArgumentException ("Empty ACL set.", "acls");
|
|
-
|
|
- RequestMessage req = new RequestMessage ();
|
|
- req.StartOperation (Operation.SetItemACL);
|
|
- req.Write (keyring);
|
|
- req.Write (id);
|
|
- req.Write (acls.Length);
|
|
- foreach (ItemACL acl in acls) {
|
|
- req.Write (acl.DisplayName);
|
|
- req.Write (acl.FullPath);
|
|
- req.Write ((int) acl.Access);
|
|
- }
|
|
- req.EndOperation ();
|
|
- SendRequest (req.Stream);
|
|
}
|
|
}
|
|
-
|
|
-#if WITH_DBUS
|
|
- [Interface ("org.gnome.keyring.Daemon")]
|
|
- interface IDaemon
|
|
- {
|
|
- string GetSocketPath ();
|
|
- }
|
|
-#endif
|
|
}
|
|
-
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring.dll.config gnome-keyring-sharp-1.0.0/src/Gnome.Keyring.dll.config
|
|
--- gnome-keyring-sharp-1.0.0~/src/Gnome.Keyring.dll.config 1970-01-01 10:00:00.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/src/Gnome.Keyring.dll.config 2010-03-30 17:34:12.346423305 +1100
|
|
@@ -0,0 +1,4 @@
|
|
+<configuration>
|
|
+ <dllmap dll="libgnome-keyring.dll" target="libgnome-keyring.so.0"/>
|
|
+ <dllmap dll="gnome-keyring-sharp-glue.dll" target="libgnome-keyring-sharp-glue.so"/>
|
|
+</configuration>
|
|
diff -urNad gnome-keyring-sharp-1.0.0~/src/Makefile.am gnome-keyring-sharp-1.0.0/src/Makefile.am
|
|
--- gnome-keyring-sharp-1.0.0~/src/Makefile.am 2008-08-09 03:36:12.000000000 +1000
|
|
+++ gnome-keyring-sharp-1.0.0/src/Makefile.am 2010-03-30 17:32:02.733918042 +1100
|
|
@@ -5,13 +5,13 @@
|
|
SNK=$(ASSEMBLY_NAME).snk
|
|
|
|
pkgconfigdir=$(libdir)/pkgconfig
|
|
-CSFLAGS+= -debug+ -debug:full -nologo -r:Mono.Posix.dll
|
|
+CSFLAGS += -debug+ -debug:full -nologo -r:Mono.Posix.dll
|
|
|
|
pkgconfig_DATA = gnome-keyring-sharp-1.0.pc
|
|
|
|
-CLEANFILES = $(ASSEMBLY_NAME).*
|
|
+CLEANFILES = $(ASSEMBLY_NAME).dll $(ASSEMBLY_NAME).dll.mdb $(ASSEMBLY_NAME).snk
|
|
|
|
-gnomekeyring_references = $(DBUS_LIBS)
|
|
+gnomekeyring_references = $(GLIB_SHARP_LIBS)
|
|
|
|
gnomekeyring_sources = \
|
|
Gnome.Keyring/AccessRights.cs \
|
|
@@ -24,9 +24,6 @@
|
|
Gnome.Keyring/KeyringInfo.cs \
|
|
Gnome.Keyring/NetItemData.cs \
|
|
Gnome.Keyring/NoteItemData.cs \
|
|
- Gnome.Keyring/Operation.cs \
|
|
- Gnome.Keyring/RequestMessage.cs \
|
|
- Gnome.Keyring/ResponseMessage.cs \
|
|
Gnome.Keyring/ResultCode.cs \
|
|
Gnome.Keyring/Ring.cs
|
|
|
|
@@ -50,3 +47,4 @@
|
|
echo "$(GACUTIL) /u $(ASSEMBLY_NAME) $(GACUTIL_FLAGS)"; \
|
|
$(GACUTIL) /u $(ASSEMBLY_NAME) /package $(PACKAGE)-$(API_VERSION) $(GACUTIL_FLAGS) || exit 1;
|
|
|
|
+EXTRA_DIST=Gnome.Keyring.dll.config
|