Merge branch 'dbreslau-lib-upgrades'
authorDan Breslau <dbreslau@painless-security.com>
Thu, 28 Apr 2016 20:22:20 +0000 (16:22 -0400)
committerDan Breslau <dbreslau@painless-security.com>
Thu, 28 Apr 2016 20:22:20 +0000 (16:22 -0400)
https://bugs.launchpad.net/moonshot-ui/+bug/1351342 (We need to support GTK 3.0)
and
https://bugs.launchpad.net/moonshot-ui/+bug/1351342 (Need to support gee-0.8)

Moonshot now builds with Gtk+-3.0 if it's available, and gee-0.8 if it's available. Otherwise, it falls back to the older Gtk+-2.0 and/or gee-0.8.

.gitignore
Makefile.am
src/moonshot-id.vala
src/moonshot-identity-manager-app.vala
src/moonshot-provisioning-common.vala
src/moonshot-server.vala
src/moonshot-webp-parser.vala

index 58f849f..99486a0 100755 (executable)
@@ -33,9 +33,17 @@ src/moonshot-add-dialog.c
 src/moonshot-custom-vbox.c
 src/moonshot-id.c
 src/moonshot-idcard-widget.c
+src/moonshot-idcard-store.c
 src/moonshot-identity-request.c
+src/moonshot-identity-management-view.c
+src/moonshot-identity-manager-app.c
 src/moonshot-identities-manager.c
+src/moonshot-keyring-store.c
+src/moonshot-local-flat-file-store.c
+src/moonshot-logger.c
 src/moonshot-password-dialog.c
+src/moonshot-provisioning-common-new.vala
+src/moonshot-provisioning-common.c
 src/moonshot-server.c
 src/moonshot-utils.c
 src/moonshot-webp-parser.c
@@ -44,6 +52,7 @@ src/msrpc-client.c
 src/dbus-client
 src/dbus-client.c
 src/moonshot
+src/moonshot-webp
 m4/codeset.m4
 m4/gettext.m4
 m4/glibc2.m4
@@ -97,3 +106,15 @@ libmoonshot/libmoonshot.lib
 
 *.tar.bz2
 *.stackdump
+
+*.sav
+*.save
+*.patch
+*.tar.xz
+
+examples/client
+examples/service-selection
+
+po/moonshot-ui.pot
+
+tests/basic
\ No newline at end of file
index 6bf2e8d..7345b96 100644 (file)
@@ -74,7 +74,9 @@ src_moonshot_SOURCES = \
 src_moonshot_webp_SOURCES = \
         src/moonshot-webp-parser.vala \
         src/moonshot-provisioning-common.vala \
-        src/moonshot-id.vala
+        src/moonshot-id.vala \
+        src/moonshot-logger.vala
+
 
 src_moonshot_VALAFLAGS = --pkg $(GTK_VERSION) --pkg $(GEE_VERSION)   $(AM_VALAFLAGS)
 src_moonshot_CPPFLAGS = $(moonshot_CFLAGS) $(AM_CPPFLAGS)  
@@ -84,7 +86,7 @@ src_moonshot_LDFLAGS = -g -O0 $(MOONSHOT_LOG_LIBS)
 src_moonshot_webp_VALAFLAGS = --vapidir=$(top_srcdir)/libmoonshot --pkg libmoonshot $(AM_VALAFLAGS)
 src_moonshot_webp_CPPFLAGS = $(moonshot_CFLAGS) $(AM_CPPFLAGS)
 src_moonshot_webp_LDADD = $(moonshot_LIBS) ${top_builddir}/libmoonshot/libmoonshot.la
-src_moonshot_webp_LDFLAGS =
+src_moonshot_webp_LDFLAGS = $(MOONSHOT_LOG_LIBS)
 
 if OS_WIN32
 
index e578257..2dc9ac2 100644 (file)
@@ -92,8 +92,18 @@ public class IdCard : Object
 
     public string issuer { get; set; default = ""; }
   
-    public Rule[] rules {get; set; default = {};}
-    public string[] services { get; set; default = {}; }
+    private Rule[] _rules = {};
+    public Rule[] rules {
+        get {return _rules;}
+        internal set {_rules = value ?? {};}
+    }
+
+    private string[] _services = {};
+    public string[] services {
+        get {return _services;}
+        internal set {_services = value ?? {};}
+    }
+
     public bool temporary {get; set; default = false; }
 
     public TrustAnchor trust_anchor  { get; set; default = new TrustAnchor (); }
@@ -141,7 +151,7 @@ public class IdCard : Object
         if (this.trust_anchor.Compare(other.trust_anchor)!=0)
             diff |= 1 << DiffFlags.TRUST_ANCHOR;
 
-        stdout.printf("Diff Flags: %x\n", diff);
+        // stdout.printf("Diff Flags: %x\n", diff);
         return diff;
     }
 
@@ -155,6 +165,14 @@ public class IdCard : Object
     ~IdCard() {
         password = null;
     }
+
+    internal void add_rule(Rule rule) {
+        _rules += rule;
+    }
+
+    internal void add_service(string service) {
+        _services += service;
+    }
 }
 
 public int CompareRules(Rule[] a, Rule[] b)
index ecdfba7..9a5e59c 100644 (file)
@@ -361,8 +361,8 @@ public class IdentityManagerApp {
                                        logger.error("init_ipc_server.name_lost_closure: Caught error: ");
                                    }
                                    if (!shown) {
-                                       GLib.error ("Couldn't own name %s on dbus or show previously launched identity manager.", name);
                                        logger.error("init_ipc_server.name_lost_closure: Couldn't own name %s on dbus or show previously launched identity manager".printf(name));
+                                       GLib.error ("Couldn't own name %s on dbus or show previously launched identity manager.", name);
                                    } else {
                                        logger.trace("init_ipc_server.name_lost_closure: Showed previously launched identity manager.");
                                        stdout.printf("Showed previously launched identity manager.\n");
index 48a1fa6..a0c39c3 100644 (file)
  * SUCH DAMAGE.
 */
 
+
+
 namespace WebProvisioning
 { 
-    IdCard card;
-    IdCard[] cards;
-
     bool check_stack(SList<string> stack, string[] reference) {
 
         if (stack.length() < reference.length)
@@ -120,112 +119,116 @@ namespace WebProvisioning
         return check_stack(stack, display_name_path);
     }
   
-    public void start_element_func(MarkupParseContext context,
-                                   string element_name,
-                                   string[] attribute_names,
-                                   string[] attribute_values) throws MarkupError
+    public class Parser : Object
     {
-        if (element_name == "identity")
-        {
-            IdCard[] tmp_cards = cards;
+        private static MoonshotLogger logger = new MoonshotLogger("WebProvisioning");
 
-            cards = new IdCard[tmp_cards.length + 1];
-            for (int i = 0; i < tmp_cards.length; i++)
-            {
-                cards[i] = tmp_cards[i];
-            }
-            card = new IdCard();
-            cards[tmp_cards.length] = card;
-        }
-        else if (element_name == "rule")
-        {
-            Rule[] tmp_rules = card.rules;
-            card.rules = new Rule[tmp_rules.length + 1];
-            for (int i = 0; i < tmp_rules.length; i++)
+        private void start_element_func(MarkupParseContext context,
+                                        string element_name,
+                                        string[] attribute_names,
+                                        string[] attribute_values) throws MarkupError 
             {
-                card.rules[i] = tmp_rules[i];
+                if (element_name == "identity")
+                {
+                    logger.trace("start_element_func (%p): Adding an identity".printf(this));
+                    card = new IdCard();
+                    _cards += card;
+                }
+                else if (element_name == "rule")
+                {
+                    card.add_rule(Rule());
+                }
             }
-      
-            card.rules[tmp_rules.length] = Rule();
-        }
-    }
 
-    public void
-    text_element_func(MarkupParseContext context,
-                      string             text,
-                      size_t             text_len) throws MarkupError
-    {
-        unowned SList<string> stack = context.get_element_stack();
+            private void
+            text_element_func(MarkupParseContext context,
+                              string             text,
+                              size_t             text_len) throws MarkupError {
+                unowned SList<string> stack = context.get_element_stack();
     
-        if (text_len < 1)
-            return;
+                if (text_len < 1)
+                    return;
     
-        if (stack.nth_data(0) == "display-name" && display_name_handler(stack))
-        {
-            card.display_name = text;
-        }
-        else if (stack.nth_data(0) == "user" && user_handler(stack))
-        {
-            card.username = text;
-        }
-        else if (stack.nth_data(0) == "password" && password_handler(stack))
-        {
-            card.password = text;
-        }
-        else if (stack.nth_data(0) == "realm" && realm_handler(stack))
-        {
-            card.issuer = text;
-        }
-        else if (stack.nth_data(0) == "service")
-        {
-            string[] services = card.services;
-            card.services = new string[services.length + 1];
-            for (int i = 0; i < services.length; i++)
-            {
-                card.services[i] = services[i];
-            }
-            card.services[services.length] = text;
-        }
-        /* Rules */
-        else if (stack.nth_data(0) == "pattern" && pattern_handler(stack))
-        {
-            /* use temp array to workaround valac 0.10 bug accessing array property length */ 
-            var temp = card.rules;
-            card.rules[temp.length - 1].pattern = text;
-        }
-        else if (stack.nth_data(0) == "always-confirm" && always_confirm_handler(stack))
-        {
-            if (text == "true" || text == "false") {
-                /* use temp array to workaround valac 0.10 bug accessing array property length*/
-                var temp = card.rules;
-                card.rules[temp.length - 1].always_confirm = text;
+                logger.trace("text_element_func (%p): text='%s'".printf(this, stack.nth_data(0)));
+
+                if (stack.nth_data(0) == "display-name" && display_name_handler(stack))
+                {
+                    card.display_name = text;
+                }
+                else if (stack.nth_data(0) == "user" && user_handler(stack))
+                {
+                    card.username = text;
+                }
+                else if (stack.nth_data(0) == "password" && password_handler(stack))
+                {
+                    card.password = text;
+                }
+                else if (stack.nth_data(0) == "realm" && realm_handler(stack))
+                {
+                    card.issuer = text;
+                }
+                else if (stack.nth_data(0) == "service")
+                {
+                    card.add_service(text);
+                }
+
+                /* Rules */
+                else if (stack.nth_data(0) == "pattern" && pattern_handler(stack))
+                {
+                    /* use temp array to workaround valac 0.10 bug accessing array property length */ 
+                    var temp = card.rules;
+                    card.rules[temp.length - 1].pattern = text;
+                }
+                else if (stack.nth_data(0) == "always-confirm" && always_confirm_handler(stack))
+                {
+                    if (text == "true" || text == "false") {
+                        /* use temp array to workaround valac 0.10 bug accessing array property length*/
+                        var temp = card.rules;
+                        card.rules[temp.length - 1].always_confirm = text;
+                    }
+                }
+                /*Trust anchor*/
+                else if (stack.nth_data(0) == "ca-cert" && ca_cert_handler(stack))
+                {
+                    card.trust_anchor.ca_cert = text;
+                }
+                else if (stack.nth_data(0) == "subject" && subject_handler(stack))
+                {
+                    card.trust_anchor.subject = text;
+                }
+                else if (stack.nth_data(0) == "subject-alt" && subject_alt_handler(stack))
+                {
+                    card.trust_anchor.subject_alt = text;
+                }
+                else if (stack.nth_data(0) == "server-cert" && server_cert_handler(stack))
+                {
+                    card.trust_anchor.server_cert = text;
+                }
             }
-        }
-        /*Trust anchor*/
-        else if (stack.nth_data(0) == "ca-cert" && ca_cert_handler(stack))
-        {
-            card.trust_anchor.ca_cert = text;
-        }
-        else if (stack.nth_data(0) == "subject" && subject_handler(stack))
-        {
-            card.trust_anchor.subject = text;
-        }
-        else if (stack.nth_data(0) == "subject-alt" && subject_alt_handler(stack))
-        {
-            card.trust_anchor.subject_alt = text;
-        }
-        else if (stack.nth_data(0) == "server-cert" && server_cert_handler(stack))
-        {
-            card.trust_anchor.server_cert = text;
-        }
-    }
 
-    class Parser
-    {
-        private MarkupParser parser;
+
+
+        private const MarkupParser parser = {
+            start_element_func, null, text_element_func, null, null
+        };
+
+        private MarkupParseContext ctx;
+
         private string       text;
         private string       path;
+
+        private IdCard card;
+        private IdCard[] _cards = {};
+
+        public IdCard[] cards {
+            get {return _cards;}
+            private set {_cards = value ?? {};}
+        }
+
         public Parser(string path) {
+
+            ctx = new MarkupParseContext(parser, 0, this, null);
+
             text = "";
             this.path = path;
 
@@ -243,12 +246,10 @@ namespace WebProvisioning
                 error("Could not retreive file size");
             }
       
-            parser = {start_element_func, null, text_element_func, null, null};
+            logger.trace(@"Parser(): read text to parse; length=$(text.length)");
         }
-    
+
         public void parse() {
-            var ctx = new MarkupParseContext(parser, 0, null, null);
-      
             try
             {
                 ctx.parse(text, text.length);
index bb26dc0..b1cc9ba 100644 (file)
@@ -227,7 +227,7 @@ public class MoonshotServer : Object {
         webp.parse();
         bool result = false;
         int installed_cards = 0;
-        foreach (IdCard card in WebProvisioning.cards)
+        foreach (IdCard card in webp.cards)
         {
             string[] rules_patterns = {};
             string[] rules_always_confirm = {};
index efe53b5..90b5452 100644 (file)
@@ -33,10 +33,12 @@ using Moonshot;
 
 namespace WebProvisioning
 { 
-
+    private MoonshotLogger logger;
 
     public static int main(string[] args)
     {
+        logger = new MoonshotLogger("WebProvisioning");
+
         int arg_index = -1;
         int force_flat_file_store = 0;
         bool bad_switch = false;
@@ -73,9 +75,15 @@ namespace WebProvisioning
     
         var webp = new Parser(webp_file);
         webp.parse();
-    
-        foreach (IdCard card in cards)
+        logger.trace(@"Have $(webp.cards.length) IdCards");
+        foreach (IdCard card in webp.cards)
         {
+
+            if (card == null) {
+                logger.trace(@"Skipping null IdCard");
+                continue;
+            }
+
             Moonshot.Error error;
             string[] rules_patterns = {};
             string[] rules_always_confirm = {};
@@ -96,6 +104,7 @@ namespace WebProvisioning
                 }
             }
 
+            logger.trace(@"Installing IdCard named '$(card.display_name)'");
             Moonshot.install_id_card(card.display_name,
                                      card.username,
                                      card.password,